Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/photos.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'js/photos-vendors-node_modules_webdav_dist_node_index_js-node_modules_webdav_dist_node_request_js.js.map')
-rw-r--r--js/photos-vendors-node_modules_webdav_dist_node_index_js-node_modules_webdav_dist_node_request_js.js.map2
1 files changed, 1 insertions, 1 deletions
diff --git a/js/photos-vendors-node_modules_webdav_dist_node_index_js-node_modules_webdav_dist_node_request_js.js.map b/js/photos-vendors-node_modules_webdav_dist_node_index_js-node_modules_webdav_dist_node_request_js.js.map
index e3705ddf..d160797f 100644
--- a/js/photos-vendors-node_modules_webdav_dist_node_index_js-node_modules_webdav_dist_node_request_js.js.map
+++ b/js/photos-vendors-node_modules_webdav_dist_node_index_js-node_modules_webdav_dist_node_request_js.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///photos/node_modules/asn1.js/lib/asn1.js","webpack:///photos/node_modules/asn1.js/lib/asn1/api.js","webpack:///photos/node_modules/asn1.js/lib/asn1/base/buffer.js","webpack:///photos/node_modules/asn1.js/lib/asn1/base/index.js","webpack:///photos/node_modules/asn1.js/lib/asn1/base/node.js","webpack:///photos/node_modules/asn1.js/lib/asn1/base/reporter.js","webpack:///photos/node_modules/asn1.js/lib/asn1/constants/der.js","webpack:///photos/node_modules/asn1.js/lib/asn1/constants/index.js","webpack:///photos/node_modules/asn1.js/lib/asn1/decoders/der.js","webpack:///photos/node_modules/asn1.js/lib/asn1/decoders/index.js","webpack:///photos/node_modules/asn1.js/lib/asn1/decoders/pem.js","webpack:///photos/node_modules/asn1.js/lib/asn1/encoders/der.js","webpack:///photos/node_modules/asn1.js/lib/asn1/encoders/index.js","webpack:///photos/node_modules/asn1.js/lib/asn1/encoders/pem.js","webpack:///photos/node_modules/asn1.js/node_modules/bn.js/lib/bn.js","webpack:///photos/node_modules/hot-patcher/source/functions.js","webpack:///photos/node_modules/hot-patcher/source/index.js","webpack:///photos/node_modules/webdav/dist/node/auth.js","webpack:///photos/node_modules/webdav/dist/node/crypto.js","webpack:///photos/node_modules/webdav/dist/node/encode.js","webpack:///photos/node_modules/webdav/dist/node/factory.js","webpack:///photos/node_modules/webdav/dist/node/fetch.js","webpack:///photos/node_modules/webdav/dist/node/index.js","webpack:///photos/node_modules/webdav/dist/node/interface/copyFile.js","webpack:///photos/node_modules/webdav/dist/node/interface/createDirectory.js","webpack:///photos/node_modules/webdav/dist/node/interface/createStream.js","webpack:///photos/node_modules/webdav/dist/node/interface/custom.js","webpack:///photos/node_modules/webdav/dist/node/interface/dav.js","webpack:///photos/node_modules/webdav/dist/node/interface/delete.js","webpack:///photos/node_modules/webdav/dist/node/interface/directoryContents.js","webpack:///photos/node_modules/webdav/dist/node/interface/exists.js","webpack:///photos/node_modules/webdav/dist/node/interface/getFile.js","webpack:///photos/node_modules/webdav/dist/node/interface/moveFile.js","webpack:///photos/node_modules/webdav/dist/node/interface/putFile.js","webpack:///photos/node_modules/webdav/dist/node/interface/quota.js","webpack:///photos/node_modules/webdav/dist/node/interface/stat.js","webpack:///photos/node_modules/webdav/dist/node/merge.js","webpack:///photos/node_modules/webdav/dist/node/patcher.js","webpack:///photos/node_modules/webdav/dist/node/request.js","webpack:///photos/node_modules/webdav/dist/node/response.js","webpack:///photos/node_modules/webdav/dist/node/url.js","webpack:///photos/node_modules/balanced-match/index.js","webpack:///photos/node_modules/base-64/base64.js","webpack:///photos/node_modules/base64-js/index.js","webpack:///photos/node_modules/bn.js/lib/bn.js","webpack:///photos/node_modules/brace-expansion/index.js","webpack:///photos/node_modules/brorand/index.js","webpack:///photos/node_modules/browserify-aes/aes.js","webpack:///photos/node_modules/browserify-aes/authCipher.js","webpack:///photos/node_modules/browserify-aes/browser.js","webpack:///photos/node_modules/browserify-aes/decrypter.js","webpack:///photos/node_modules/browserify-aes/encrypter.js","webpack:///photos/node_modules/browserify-aes/ghash.js","webpack:///photos/node_modules/browserify-aes/incr32.js","webpack:///photos/node_modules/browserify-aes/modes/cbc.js","webpack:///photos/node_modules/browserify-aes/modes/cfb.js","webpack:///photos/node_modules/browserify-aes/modes/cfb1.js","webpack:///photos/node_modules/browserify-aes/modes/cfb8.js","webpack:///photos/node_modules/browserify-aes/modes/ctr.js","webpack:///photos/node_modules/browserify-aes/modes/ecb.js","webpack:///photos/node_modules/browserify-aes/modes/index.js","webpack:///photos/node_modules/browserify-aes/modes/ofb.js","webpack:///photos/node_modules/browserify-aes/streamCipher.js","webpack:///photos/node_modules/browserify-cipher/browser.js","webpack:///photos/node_modules/browserify-des/index.js","webpack:///photos/node_modules/browserify-des/modes.js","webpack:///photos/node_modules/browserify-rsa/index.js","webpack:///photos/node_modules/browserify-sign/algos.js","webpack:///photos/node_modules/browserify-sign/browser/index.js","webpack:///photos/node_modules/browserify-sign/browser/sign.js","webpack:///photos/node_modules/browserify-sign/browser/verify.js","webpack:///photos/node_modules/browserify-sign/node_modules/readable-stream/errors-browser.js","webpack:///photos/node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_duplex.js","webpack:///photos/node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_passthrough.js","webpack:///photos/node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_readable.js","webpack:///photos/node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_transform.js","webpack:///photos/node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_writable.js","webpack:///photos/node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/async_iterator.js","webpack:///photos/node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/buffer_list.js","webpack:///photos/node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/destroy.js","webpack:///photos/node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/end-of-stream.js","webpack:///photos/node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/from-browser.js","webpack:///photos/node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/pipeline.js","webpack:///photos/node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/state.js","webpack:///photos/node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/stream-browser.js","webpack:///photos/node_modules/browserify-sign/node_modules/readable-stream/readable-browser.js","webpack:///photos/node_modules/browserify-sign/node_modules/safe-buffer/index.js","webpack:///photos/node_modules/buffer-xor/index.js","webpack:///photos/node_modules/buffer/index.js","webpack:///photos/node_modules/cipher-base/index.js","webpack:///photos/node_modules/concat-map/index.js","webpack:///photos/node_modules/create-ecdh/browser.js","webpack:///photos/node_modules/create-ecdh/node_modules/bn.js/lib/bn.js","webpack:///photos/node_modules/create-hash/browser.js","webpack:///photos/node_modules/create-hash/md5.js","webpack:///photos/node_modules/create-hmac/browser.js","webpack:///photos/node_modules/create-hmac/legacy.js","webpack:///photos/node_modules/crypto-browserify/index.js","webpack:///photos/node_modules/des.js/lib/des.js","webpack:///photos/node_modules/des.js/lib/des/cbc.js","webpack:///photos/node_modules/des.js/lib/des/cipher.js","webpack:///photos/node_modules/des.js/lib/des/des.js","webpack:///photos/node_modules/des.js/lib/des/ede.js","webpack:///photos/node_modules/des.js/lib/des/utils.js","webpack:///photos/node_modules/diffie-hellman/browser.js","webpack:///photos/node_modules/diffie-hellman/lib/dh.js","webpack:///photos/node_modules/diffie-hellman/lib/generatePrime.js","webpack:///photos/node_modules/diffie-hellman/node_modules/bn.js/lib/bn.js","webpack:///photos/node_modules/elliptic/lib/elliptic.js","webpack:///photos/node_modules/elliptic/lib/elliptic/curve/base.js","webpack:///photos/node_modules/elliptic/lib/elliptic/curve/edwards.js","webpack:///photos/node_modules/elliptic/lib/elliptic/curve/index.js","webpack:///photos/node_modules/elliptic/lib/elliptic/curve/mont.js","webpack:///photos/node_modules/elliptic/lib/elliptic/curve/short.js","webpack:///photos/node_modules/elliptic/lib/elliptic/curves.js","webpack:///photos/node_modules/elliptic/lib/elliptic/ec/index.js","webpack:///photos/node_modules/elliptic/lib/elliptic/ec/key.js","webpack:///photos/node_modules/elliptic/lib/elliptic/ec/signature.js","webpack:///photos/node_modules/elliptic/lib/elliptic/eddsa/index.js","webpack:///photos/node_modules/elliptic/lib/elliptic/eddsa/key.js","webpack:///photos/node_modules/elliptic/lib/elliptic/eddsa/signature.js","webpack:///photos/node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js","webpack:///photos/node_modules/elliptic/lib/elliptic/utils.js","webpack:///photos/node_modules/elliptic/node_modules/bn.js/lib/bn.js","webpack:///photos/node_modules/events/events.js","webpack:///photos/node_modules/evp_bytestokey/index.js","webpack:///photos/node_modules/fast-xml-parser/src/json2xml.js","webpack:///photos/node_modules/fast-xml-parser/src/nimndata.js","webpack:///photos/node_modules/fast-xml-parser/src/node2json.js","webpack:///photos/node_modules/fast-xml-parser/src/node2json_str.js","webpack:///photos/node_modules/fast-xml-parser/src/parser.js","webpack:///photos/node_modules/fast-xml-parser/src/util.js","webpack:///photos/node_modules/fast-xml-parser/src/validator.js","webpack:///photos/node_modules/fast-xml-parser/src/xmlNode.js","webpack:///photos/node_modules/fast-xml-parser/src/xmlstr2xmlnode.js","webpack:///photos/node_modules/hash-base/index.js","webpack:///photos/node_modules/hash-base/node_modules/readable-stream/errors-browser.js","webpack:///photos/node_modules/hash-base/node_modules/readable-stream/lib/_stream_duplex.js","webpack:///photos/node_modules/hash-base/node_modules/readable-stream/lib/_stream_passthrough.js","webpack:///photos/node_modules/hash-base/node_modules/readable-stream/lib/_stream_readable.js","webpack:///photos/node_modules/hash-base/node_modules/readable-stream/lib/_stream_transform.js","webpack:///photos/node_modules/hash-base/node_modules/readable-stream/lib/_stream_writable.js","webpack:///photos/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/async_iterator.js","webpack:///photos/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/buffer_list.js","webpack:///photos/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/destroy.js","webpack:///photos/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/end-of-stream.js","webpack:///photos/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/from-browser.js","webpack:///photos/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/pipeline.js","webpack:///photos/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/state.js","webpack:///photos/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/stream-browser.js","webpack:///photos/node_modules/hash-base/node_modules/readable-stream/readable-browser.js","webpack:///photos/node_modules/hash-base/node_modules/safe-buffer/index.js","webpack:///photos/node_modules/hash.js/lib/hash.js","webpack:///photos/node_modules/hash.js/lib/hash/common.js","webpack:///photos/node_modules/hash.js/lib/hash/hmac.js","webpack:///photos/node_modules/hash.js/lib/hash/ripemd.js","webpack:///photos/node_modules/hash.js/lib/hash/sha.js","webpack:///photos/node_modules/hash.js/lib/hash/sha/1.js","webpack:///photos/node_modules/hash.js/lib/hash/sha/224.js","webpack:///photos/node_modules/hash.js/lib/hash/sha/256.js","webpack:///photos/node_modules/hash.js/lib/hash/sha/384.js","webpack:///photos/node_modules/hash.js/lib/hash/sha/512.js","webpack:///photos/node_modules/hash.js/lib/hash/sha/common.js","webpack:///photos/node_modules/hash.js/lib/hash/utils.js","webpack:///photos/node_modules/he/he.js","webpack:///photos/node_modules/hmac-drbg/lib/hmac-drbg.js","webpack:///photos/node_modules/ieee754/index.js","webpack:///photos/node_modules/md5.js/index.js","webpack:///photos/node_modules/miller-rabin/lib/mr.js","webpack:///photos/node_modules/miller-rabin/node_modules/bn.js/lib/bn.js","webpack:///photos/node_modules/minimalistic-assert/index.js","webpack:///photos/node_modules/minimalistic-crypto-utils/lib/utils.js","webpack:///photos/node_modules/minimatch/minimatch.js","webpack:///photos/node_modules/nested-property/dist/nested-property.js","webpack:///photos/node_modules/parse-asn1/asn1.js","webpack:///photos/node_modules/parse-asn1/certificate.js","webpack:///photos/node_modules/parse-asn1/fixProc.js","webpack:///photos/node_modules/parse-asn1/index.js","webpack:///photos/node_modules/path-browserify/index.js","webpack:///photos/node_modules/path-posix/index.js","webpack:///photos/node_modules/pbkdf2/browser.js","webpack:///photos/node_modules/pbkdf2/lib/async.js","webpack:///photos/node_modules/pbkdf2/lib/default-encoding.js","webpack:///photos/node_modules/pbkdf2/lib/precondition.js","webpack:///photos/node_modules/pbkdf2/lib/sync-browser.js","webpack:///photos/node_modules/pbkdf2/lib/to-buffer.js","webpack:///photos/node_modules/public-encrypt/browser.js","webpack:///photos/node_modules/public-encrypt/mgf.js","webpack:///photos/node_modules/public-encrypt/node_modules/bn.js/lib/bn.js","webpack:///photos/node_modules/public-encrypt/privateDecrypt.js","webpack:///photos/node_modules/public-encrypt/publicEncrypt.js","webpack:///photos/node_modules/public-encrypt/withPublic.js","webpack:///photos/node_modules/public-encrypt/xor.js","webpack:///photos/node_modules/querystringify/index.js","webpack:///photos/node_modules/randombytes/browser.js","webpack:///photos/node_modules/randomfill/browser.js","webpack:///photos/node_modules/requires-port/index.js","webpack:///photos/node_modules/ripemd160/index.js","webpack:///photos/node_modules/safe-buffer/index.js","webpack:///photos/node_modules/safer-buffer/safer.js","webpack:///photos/node_modules/sha.js/hash.js","webpack:///photos/node_modules/sha.js/index.js","webpack:///photos/node_modules/sha.js/sha.js","webpack:///photos/node_modules/sha.js/sha1.js","webpack:///photos/node_modules/sha.js/sha224.js","webpack:///photos/node_modules/sha.js/sha256.js","webpack:///photos/node_modules/sha.js/sha384.js","webpack:///photos/node_modules/sha.js/sha512.js","webpack:///photos/node_modules/stream-browserify/index.js","webpack:///photos/node_modules/stream-browserify/node_modules/readable-stream/errors-browser.js","webpack:///photos/node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_duplex.js","webpack:///photos/node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_passthrough.js","webpack:///photos/node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_readable.js","webpack:///photos/node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_transform.js","webpack:///photos/node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_writable.js","webpack:///photos/node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/async_iterator.js","webpack:///photos/node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/buffer_list.js","webpack:///photos/node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/destroy.js","webpack:///photos/node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/end-of-stream.js","webpack:///photos/node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/from-browser.js","webpack:///photos/node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/pipeline.js","webpack:///photos/node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/state.js","webpack:///photos/node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/stream-browser.js","webpack:///photos/node_modules/string_decoder/lib/string_decoder.js","webpack:///photos/node_modules/url-join/lib/url-join.js","webpack:///photos/node_modules/url-parse/index.js","webpack:///photos/node_modules/util-deprecate/browser.js"],"names":["asn1","exports","bignum","define","base","constants","decoders","encoders","inherits","Entity","name","body","this","prototype","_createNamed","Base","Generated","entity","_initNamed","call","_getDecoder","enc","hasOwnProperty","decode","data","options","_getEncoder","encode","reporter","Reporter","Buffer","DecoderBuffer","isBuffer","offset","length","error","EncoderBuffer","value","Array","isArray","map","item","isEncoderBuffer","byteLength","isDecoderBuffer","constructor","save","restore","isEmpty","readUInt8","skip","raw","res","fail","bytes","_reporterState","slice","join","out","alloc","forEach","write","copy","Node","assert","tags","methods","concat","parent","state","_baseState","children","tag","args","reverseArgs","choice","optional","any","obj","use","useDecoder","key","explicit","implicit","contains","_wrap","module","stateProps","clone","cstate","prop","method","push","apply","arguments","_init","filter","child","equal","_useArgs","arg","Object","keys","Error","def","val","num","newKey","_decode","input","wrapResult","prevObj","result","present","prevKey","enterKey","_peekTag","isError","_decodeGeneric","_decodeChoice","e","enterObject","_decodeTag","start","track","path","_getUse","leaveObject","exitKey","leaveKey","_decodeList","test","_decodeStr","_decodeObjid","_decodeTime","_decodeNull","_decodeBool","_decodeInt","_use","match","some","node","type","_createEncoderBuffer","_encode","_encodeValue","undefined","_skipDefault","content","primitive","_encodeChoice","_encodePrimitive","cls","_encodeComposite","JSON","stringify","_encodeStr","_encodeObjid","_encodeTime","_encodeNull","_encodeInt","_encodeBool","_isNumstr","str","_isPrintstr","errors","ReporterError","msg","rethrow","pathLen","index","prev","now","err","inherited","elem","message","stack","partial","captureStackTrace","reverse","tagClass","0","1","2","3","tagClassByName","tagByName","_reverse","der","DERDecoder","tree","DERNode","derDecodeTag","buf","oct","tagStr","derDecodeLen","len","i","j","buffer","decodedTag","_skipUntilEnd","decoder","possibleEnd","unused","String","fromCharCode","readUInt16BE","numstr","toString","printstr","values","relative","identifiers","ident","subident","first","second","tmp","year","mon","day","hour","min","sec","Date","UTC","pem","PEMDecoder","lines","split","label","toUpperCase","re","end","base64","replace","from","DEREncoder","two","encodedTag","encodeTag","header","lenOctets","writeUInt16BE","charCodeAt","id","splice","size","objid","time","date","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","numArray","toArray","sign","unshift","dataBuffer","defaultBuffer","PEMEncoder","p","ctor","superCtor","super_","TempCtor","BN","number","endian","isBN","negative","words","red","wordSize","window","parseHex4Bits","string","c","parseHexByte","lowerBound","r","parseBase","mul","Math","max","left","right","cmp","_initNumber","_initArray","_parseHex","_parseBase","ceil","w","off","strip","limbLen","limbPow","total","mod","word","imuln","_iaddn","pow","dest","_expand","_normSign","inspect","zeros","groupSizes","groupBases","smallMulTo","self","a","b","lo","carry","k","ncarry","rword","maxJ","padding","groupSize","groupBase","isZero","modn","idivn","toNumber","ret","toJSON","toBuffer","toArrayLike","ArrayType","reqLength","littleEndian","q","andln","iushrn","clz32","_countBits","t","_zeroBits","bitLength","hi","zeroBits","toTwos","width","abs","inotn","iaddn","fromTwos","testn","notn","ineg","isNeg","neg","iuor","ior","or","uor","iuand","iand","and","uand","iuxor","ixor","xor","uxor","bytesNeeded","bitsLeft","setn","bit","wbit","iadd","isub","add","sub","comb10MulTo","mid","o","a0","al0","ah0","a1","al1","ah1","a2","al2","ah2","a3","al3","ah3","a4","al4","ah4","a5","al5","ah5","a6","al6","ah6","a7","al7","ah7","a8","al8","ah8","a9","al9","ah9","b0","bl0","bh0","b1","bl1","bh1","b2","bl2","bh2","b3","bl3","bh3","b4","bl4","bh4","b5","bl5","bh5","b6","bl6","bh6","b7","bl7","bh7","b8","bl8","bh8","b9","bl9","bh9","w0","imul","w1","w2","w3","w4","w5","w6","w7","w8","w9","w10","w11","w12","w13","w14","w15","w16","w17","w18","jumboMulTo","FFTM","mulp","x","y","mulTo","hncarry","bigMulTo","makeRBT","N","l","revBin","rb","permute","rbt","rws","iws","rtws","itws","transform","s","rtwdf","cos","PI","itwdf","sin","rtwdf_","itwdf_","ie","ro","io","rx","guessLen13b","n","m","odd","conjugate","normalize13b","ws","round","convert13b","stub","ph","_","rwst","iwst","nrws","nrwst","niwst","rmws","mulf","muln","sqr","isqr","toBitArray","iushln","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","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","primes","k256","p224","p192","p25519","MPrime","_tmp","K256","P224","P192","P25519","prime","_prime","Mont","imod","rinv","minv","ireduce","rlen","imulK","_strip","output","outLen","next","mod3","one","nOne","lpow","z","inv","wnd","current","currentLen","mont","u","sequence","_this","require","HOT_PATCHER_TYPE","NOOP","createNewItem","original","final","_configuration","registry","getEmptyAction","__type__","configuration","newAction","control","target","allowTargetOverrides","foreignKey","assign","execute","get","isPatched","patch","chain","patchInline","plugin","setFinal","toBase64","md5","ha1Compute","generateBasicAuthHeader","username","password","encoded","generateTokenAuthHeader","tokenInfo","token_type","access_token","generateDigestAuthHeader","digest","url","uri","indexOf","qop","ncString","nc","ha1","cnonce","algorithm","realm","nonce","ha2","digestResponse","authValues","response","opaque","authHeader","createHash","update","user","pass","toLowerCase","decodeHTMLEntities","WEB","txt","document","createElement","innerHTML","fromBase64","authTools","urlTools","merge","directoryContents","createDir","custom","deletion","pathsExist","getFile","quota","move","putFile","stats","createClient","remoteURL","opts","httpAgent","httpsAgent","token","runtimeOptions","headers","remotePath","extractURLPath","_digest","hasDigestAuth","Authorization","copyFile","targetRemotePath","copyOptions","createDirectory","dirPath","createOptions","createReadStream","remoteFilename","createStream","createWriteStream","callback","customRequest","requestOptions","customOptions","deleteFile","deleteOptions","exists","existsOptions","pathExists","getDirectoryContents","getOptions","getFileContents","format","getFileContentsString","getFileContentsBuffer","getFileDownloadLink","getFileLink","getFileUploadLink","putOptions","getQuota","moveFile","moveOptions","putFileContents","stat","getStat","axios","getPatcher","parseAuth","exec","nonceRaw","uid","floor","random","makeNonce","request","then","status","response2","responseHandlers","encodePath","joinURL","prepareRequestOptions","filename","destination","Destination","handleResponseCode","filePath","outStream","PassThroughStream","PassThrough","rangeHeader","range","Range","responseType","getFileStream","stream","pipe","catch","emit","writeStream","overwrite","maxRedirects","setTimeout","xmlParser","nestedProp","getPropertyOfType","normaliseResult","multistatus","set","normaliseResponse","parseXML","xml","Promise","resolve","parse","arrayMode","ignoreNameSpace","prepareFileFromProps","props","rawFilename","isDetailed","getlastmodified","lastMod","getcontentlength","rawSize","resourcetype","resourceType","getcontenttype","mimeType","getetag","etag","collection","basename","lastmod","parseInt","mime","translateDiskSpace","pathPosix","processGlobFilter","processResponsePayload","normaliseHREF","normalisePath","Accept","Depth","deep","serverBasePath","requestPath","serverBase","responseItems","href","propstat","decodeURIComponent","getDirectoryFiles","details","files","glob","protocol","authPart","trim","authContents","Readable","parseQuota","responseItem","quotaUsed","quotaAvail","used","available","parseStat","getPrototypeOf","proto","isPlainObject","setPrototypeOf","mergeObjects","obj1","obj2","items","nextItem","HotPatcher","__patcher","joinURLParts","fetch","SEP_PATH_POSIX","SEP_PATH_WINDOWS","replaced","encodeURIComponent","parts","reduce","nextPart","partIndex","methodOptions","withCredentials","maxContentLength","maxBodyLength","onUploadProgress","validateStatus","minimatch","statusText","file","matchBase","URL","pathStr","normalisedPath","substr","fullURL","urlPath","pathname","balanced","RegExp","maybeMatch","pre","post","reg","begs","beg","ai","bi","pop","root","freeExports","freeGlobal","global","InvalidCharacterError","TABLE","REGEX_SPACE_CHARACTERS","position","charAt","bitStorage","bitCounter","b64","lens","getLens","validLen","placeHoldersLen","toByteArray","arr","Arr","_byteLength","curByte","revLookup","fromByteArray","uint8","extraBytes","maxChunkLength","len2","encodeChunk","lookup","Uint8Array","code","src","_move","Symbol","for","modrn","allocUnsafe","allocate","_toArrayLikeLE","_toArrayLikeBE","isNegNum","concatMap","expand","escSlash","escOpen","escClose","escComma","escPeriod","escapeBraces","unescapeBraces","numeric","parseCommaParts","postParts","embrace","isPadded","el","isTop","expansions","isNumericSequence","isAlphaSequence","isSequence","isOptions","incr","pad","need","expansion","Rand","rand","generate","_rand","getBytes","getByte","crypto","getRandomValues","msCrypto","randomBytes","asUInt32Array","readUInt32BE","scrubVec","v","cryptBlock","M","keySchedule","SUB_MIX","SBOX","nRounds","t0","t1","t2","t3","SUB_MIX0","SUB_MIX1","SUB_MIX2","SUB_MIX3","s0","s1","s2","s3","ksRow","RCON","G","d","INV_SBOX","INV_SUB_MIX","xi","sx","x4","x8","AES","_key","_reset","blockSize","keySize","keyWords","ksRows","invKeySchedule","ik","ksR","tt","_nRounds","_keySchedule","_invKeySchedule","encryptBlockRaw","encryptBlock","writeUInt32BE","decryptBlock","m1","scrub","aes","Transform","GHASH","incr32","StreamCipher","iv","decrypt","_cipher","ck","_ghash","_finID","ghash","toPad","ivBits","tail","writeUIntBE","calcIv","_prev","_cache","_secCache","_decrypt","_alen","_len","_mode","_authTag","_called","_update","chunk","rump","encrypt","_final","xorTest","getAuthTag","setAuthTag","setAAD","ciphers","deciphers","modes","createCipher","Cipher","createCipheriv","Cipheriv","createDecipher","Decipher","createDecipheriv","Decipheriv","listCiphers","getCiphers","AuthCipher","MODES","ebtk","Splitter","_last","_autopadding","cache","suite","config","TypeError","thing","flush","last","padded","unpad","setAutoPadding","setTo","autoPadding","PADDING","equals","padBuff","writeUInt8","ZEROES","fromArray","block","_multiply","lsbVi","Vi","Zi","abl","bl","encryptStart","encryptByte","byteParam","shiftIn","getBlock","chunkNum","modeModules","ECB","CBC","CFB","CFB8","CFB1","OFB","CTR","GCM","DES","aesModes","desModes","keyLen","ivLen","CipherBase","des","instantiate","EDE","modeName","_des","create","des3","getr","priv","modulus","prime1","prime2","crt","blinds","blinder","publicExponent","unblinder","blind","blinded","c1","c2","qinv","coefficient","exponent1","m2","exponent2","verify","algorithms","Sign","Writable","_hashType","hash","_hash","_tag","_signType","Verify","createSign","createVerify","_write","done","sig","createHmac","EC","parseKeys","curves","getKey","algo","hlen","hbits","bits2int","bits2octets","fill","obits","makeKey","kv","makeR","hashType","signType","curve","curveId","keyFromPrivate","privateKey","toDER","ecSign","params","priv_key","H","dsaSign","checkValue","pub","pubkey","subjectPrivateKey","ecVerify","pub_key","unpacked","signature","montp","dsaVerify","padNum","codes","createErrorType","NodeError","_Base","subClass","superClass","arg1","arg2","arg3","getMessage","__proto__","oneOf","expected","actual","determiner","search","pos","this_len","substring","endsWith","includes","objectKeys","Duplex","allowHalfOpen","readable","writable","once","onend","_writableState","ended","process","nextTick","onEndNT","defineProperty","enumerable","highWaterMark","getBuffer","_readableState","destroyed","_transform","encoding","cb","ReadableState","EElistenerCount","emitter","listeners","Stream","OurUint8Array","debug","debugUtil","debuglog","StringDecoder","createReadableStreamAsyncIterator","BufferList","destroyImpl","getHighWaterMark","_require$codes","ERR_INVALID_ARG_TYPE","ERR_STREAM_PUSH_AFTER_EOF","ERR_METHOD_NOT_IMPLEMENTED","ERR_STREAM_UNSHIFT_AFTER_END_EVENT","errorOrDestroy","kProxyEvents","isDuplex","objectMode","readableObjectMode","pipes","pipesCount","flowing","endEmitted","reading","sync","needReadable","emittedReadable","readableListening","resumeScheduled","paused","emitClose","autoDestroy","defaultEncoding","awaitDrain","readingMore","read","_read","destroy","_destroy","readableAddChunk","addToFront","skipChunkCheck","er","emitReadable","emitReadable_","onEofChunk","chunkInvalid","_uint8ArrayToBuffer","addChunk","maybeReadMore","_undestroy","undestroy","isPaused","setEncoding","head","clear","MAX_HWM","howMuchToRead","computeNewHighWaterMark","flow","maybeReadMore_","updateReadableListening","listenerCount","resume","nReadingNextTick","resume_","fromList","consume","endReadable","endReadableNT","wState","finished","xs","nOrig","doRead","pipeOpts","endFn","stdout","stderr","unpipe","onunpipe","unpipeInfo","hasUnpiped","removeListener","onclose","onfinish","ondrain","onerror","ondata","cleanedUp","needDrain","on","pipeOnDrain","pause","event","fn","prependListener","_events","dests","ev","addListener","removeAllListeners","wrap","bind","asyncIterator","_fromList","iterable","ERR_MULTIPLE_CALLBACK","ERR_TRANSFORM_ALREADY_TRANSFORMING","ERR_TRANSFORM_WITH_LENGTH_0","afterTransform","ts","_transformState","transforming","writecb","writechunk","rs","needTransform","writeencoding","_flush","prefinish","err2","CorkedRequest","entry","finish","corkReq","pendingcb","corkedRequestsFree","onCorkedFinish","WritableState","internalUtil","deprecate","realHasInstance","ERR_STREAM_CANNOT_PIPE","ERR_STREAM_DESTROYED","ERR_STREAM_NULL_VALUES","ERR_STREAM_WRITE_AFTER_END","ERR_UNKNOWN_ENCODING","nop","writableObjectMode","finalCalled","ending","noDecode","decodeStrings","writing","corked","bufferProcessing","onwrite","writelen","onwriteStateUpdate","finishMaybe","errorEmitted","onwriteError","needFinish","bufferedRequest","clearBuffer","afterWrite","lastBufferedRequest","prefinished","bufferedRequestCount","writev","_writev","doWrite","onwriteDrain","holder","count","allBuffers","isBuf","callFinal","rState","hasInstance","Function","object","writeAfterEnd","validChunk","newChunk","decodeChunk","writeOrBuffer","cork","uncork","setDefaultEncoding","endWritable","_Object$setPrototypeO","_defineProperty","configurable","kLastResolve","kLastReject","kError","kEnded","kLastPromise","kHandlePromise","kStream","createIterResult","readAndResolve","iter","onReadable","AsyncIteratorPrototype","ReadableStreamAsyncIteratorPrototype","reject","promise","lastPromise","wrapForNext","_this2","_Object$create","iterator","ownKeys","enumerableOnly","getOwnPropertySymbols","symbols","sym","getOwnPropertyDescriptor","_defineProperties","descriptor","instance","Constructor","_classCallCheck","protoProps","staticProps","hasStrings","_getString","_getBuffer","nb","source","getOwnPropertyDescriptors","defineProperties","_objectSpread","depth","customInspect","emitErrorAndCloseNT","emitErrorNT","emitCloseNT","readableDestroyed","writableDestroyed","ERR_STREAM_PREMATURE_CLOSE","noop","eos","called","onlegacyfinish","writableEnded","readableEnded","onrequest","req","setHeader","abort","isRequest","ERR_MISSING_ARGS","destroyer","closed","to","popCallback","streams","destroys","ERR_INVALID_OPT_VALUE","duplexKey","hwm","highWaterMarkFrom","isFinite","pipeline","copyProps","dst","SafeBuffer","encodingOrOffset","allocUnsafeSlow","SlowBuffer","ieee754","customInspectSymbol","INSPECT_MAX_BYTES","K_MAX_LENGTH","createBuffer","RangeError","isEncoding","fromString","ArrayBuffer","isView","arrayView","isInstance","fromArrayBuffer","byteOffset","fromArrayLike","fromArrayView","SharedArrayBuffer","valueOf","checked","numberIsNaN","fromObject","toPrimitive","assertSize","array","mustMatch","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","bidirectionalIndexOf","dir","arrayIndexOf","lastIndexOf","indexSize","arrLength","valLength","foundIndex","found","hexWrite","Number","remaining","strLen","parsed","utf8Write","blitBuffer","asciiWrite","byteArray","asciiToBytes","base64Write","ucs2Write","units","utf16leToBytes","firstByte","codePoint","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","codePoints","MAX_ARGUMENTS_LENGTH","decodeCodePointsArray","kMaxLength","TYPED_ARRAY_SUPPORT","foo","typedArraySupport","console","poolSize","_isBuffer","compare","list","swap16","swap32","swap64","toLocaleString","thisStart","thisEnd","thisCopy","targetCopy","_arr","hexSliceLookupTable","checkOffset","ext","checkInt","wrtBigUInt64LE","checkIntBI","BigInt","wrtBigUInt64BE","checkIEEE754","writeFloat","noAssert","writeDouble","newBuf","subarray","readUintLE","readUIntLE","readUintBE","readUIntBE","readUint8","readUint16LE","readUInt16LE","readUint16BE","readUint32LE","readUInt32LE","readUint32BE","readBigUInt64LE","defineBigIntMethod","validateNumber","boundsError","readBigUInt64BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readBigInt64LE","readBigInt64BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUintLE","writeUIntLE","writeUintBE","writeUint8","writeUint16LE","writeUInt16LE","writeUint16BE","writeUint32LE","writeUInt32LE","writeUint32BE","writeBigUInt64LE","writeBigUInt64BE","writeIntLE","limit","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeBigInt64LE","writeBigInt64BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","copyWithin","E","super","addNumericalSeparator","ERR_OUT_OF_RANGE","checkBounds","ERR_BUFFER_OUT_OF_BOUNDS","received","isInteger","INVALID_BASE64_RE","Infinity","leadSurrogate","base64clean","alphabet","table","i16","BufferBigIntNotDefined","hashMode","_finalOrDigest","__final","_decoder","_encoding","inputEnc","outputEnc","outData","_toString","fin","elliptic","ECDH","aliases","secp256k1","secp224r1","prime256v1","prime192v1","ed25519","secp384r1","secp521r1","curveType","ec","formatReturnValue","bn","p256","secp256r1","secp192r1","p384","p521","generateKeys","genKeyPair","getPublicKey","computeSecret","other","inenc","keyFromPublic","getPublic","getPrivate","getX","getPrivateKey","setPublicKey","_importPublic","setPrivateKey","_priv","_importPrivate","MD5","RIPEMD160","sha","Hash","alg","Legacy","ZEROS","Hmac","blocksize","_alg","ipad","_ipad","opad","_opad","rng","pseudoRandomBytes","prng","algos","algoKeys","hashes","getHashes","pbkdf2","pbkdf2Sync","dh","DiffieHellmanGroup","createDiffieHellmanGroup","getDiffieHellman","createDiffieHellman","DiffieHellman","createECDH","publicEncrypt","privateEncrypt","publicDecrypt","privateDecrypt","rf","randomFill","randomFillSync","createCredentials","utils","CBCState","_cbcInit","_cbcState","inp","inOff","outOff","superProto","bufferOff","_updateDecrypt","_updateEncrypt","_buffer","_flushBuffer","inputOff","outputOff","_finalEncrypt","_finalDecrypt","_pad","_unpad","DESState","_desState","deriveKeys","shiftTable","kL","kR","pc1","r28shl","pc2","ip","_encrypt","lStart","rStart","keyL","keyR","substitute","rip","EDEState","k1","k2","k3","_edeState","inL","inR","outL","outR","pc2table","sTable","permuteTable","padSplit","group","generatePrime","DH","ENCODINGS","gen","generator","genc","millerRabin","TWENTYFOUR","ELEVEN","TEN","THREE","SEVEN","_pub","primeCache","malleable","setGenerator","__prime","_primeLen","_primeCode","hex","rem","simpleSieve","fermatTest","checkPrime","__gen","_gen","secret","getPrime","front","getGenerator","findPrime","ONE","TWO","FIVE","FOUR","_getPrimes","n2","version","eddsa","getNAF","getJSF","BaseCurve","conf","zero","pointFromJSON","gRed","_wnafT1","_wnafT2","_wnafT3","_wnafT4","_bitLength","adjustCount","redN","_maxwellTrick","BasePoint","precomputed","point","validate","_fixedNafMul","doubles","_getDoubles","naf","I","step","nafW","repr","jpoint","mixedAdd","points","toP","_wnafMul","nafPoints","_getNAFPoints","dblp","_wnafMulAdd","defW","coeffs","jacobianResult","wndWidth","comb","toJ","jsf","ja","jb","decodePoint","pointFromX","encodeCompressed","compact","getY","precompute","power","beta","_getBeta","_hasDoubles","dbl","EdwardsCurve","twisted","mOneA","dd","oneC","Point","zOne","_mulA","_mulC","rhs","lhs","y2","pointFromY","isInfinity","normalize","fromJSON","_extDbl","f","nx","ny","nt","nz","_projDbl","_extAdd","_projAdd","mulAdd","jmulAdd","zi","eqXToP","xc","short","edwards","MontCurve","i4","a24","aa","bb","diffAdd","da","jumlAdd","ShortCurve","tinv","zeroA","threeA","endo","_getEndomorphism","_endoWnafT1","_endoWnafT2","isRed","inf","JPoint","lambda","betas","_getEndoRoots","lambdas","basis","vec","_getEndoBasis","ntinv","prevR","aprxSqrt","y1","len1","_endoSplit","v1","v2","p1","p2","q1","q2","ax","_endoWnafMulAdd","npoints","ncoeffs","endoMul","obj2point","ys1","dyinv","_precompute","negate","zinv","zinv2","ay","pz2","z2","u1","u2","h2","h3","jx","jy","jz","jz4","jyd","jx2","jyd2","jyd4","dny","_zeroDbl","_threeDbl","_dbl","xx","yy","yyyy","yyyy8","c8","gamma","alpha","beta4","beta8","ggamma8","jy2","jxd4","jyd8","trpl","zz","mm","ee","yyu4","kbase","z3","pz3","zs","PresetCurve","defineCurve","sha256","sha384","sha512","HmacDRBG","KeyPair","Signature","nh","keyPair","fromPrivate","fromPublic","drbg","pers","persEnc","entropy","hmacStrength","entropyEnc","ns2","_truncateToN","truncOnly","bkey","ns1","kp","kpX","recoveryParam","canonical","sinv","recoverPubKey","isYOdd","isSecondKey","rInv","getKeyRecoveryParam","Q","Qprime","privEnc","pubEnc","reason","derive","_importDER","Position","place","getLength","initial","octetLen","rmPadding","constructLength","octets","log","LN2","slen","backHalf","parseBytes","EDDSA","pointClass","encodingLength","keyFromSecret","hashInt","messagePrefix","R","Rencoded","encodePoint","s_","pubBytes","S","makeSignature","SG","intFromLE","fromSecret","lastIx","normed","xIsOdd","encodeInt","decodeInt","isPoint","cachedProperty","_secret","_pubBytes","privBytes","getSecret","_R","_S","_Rencoded","_Sencoded","Sencoded","toBytes","toHex","minAssert","minUtils","zero2","m8","d1","d2","m14","m24","computer","ReflectOwnKeys","Reflect","ReflectApply","receiver","getOwnPropertyNames","NumberIsNaN","isNaN","EventEmitter","init","errorListener","resolver","eventTargetAgnosticAddListener","handler","flags","addErrorHandlerIfEventEmitter","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","listener","_getMaxListeners","that","_addListener","prepend","events","existing","warning","newListener","warned","warn","onceWrapper","fired","wrapFn","_onceWrap","wrapped","_listeners","unwrap","evlistener","unwrapListeners","arrayClone","addEventListener","wrapListener","removeEventListener","setMaxListeners","getMaxListeners","doError","context","prependOnceListener","originalListener","spliceOne","rawListeners","eventNames","salt","keyBits","keyStart","ivStart","buildOptions","defaultOptions","attributeNamePrefix","attrNodeName","textNodeName","ignoreAttributes","cdataTagName","cdataPositionChar","indentBy","supressEmptyNode","tagValueProcessor","attrValueProcessor","Parser","isAttribute","attrPrefixLen","isCDATA","replaceCDATAstr","replaceCDATAarr","indentate","tagEndChar","newLine","buildTextNode","buildEmptyTextNode","buildObjNode","buildEmptyObjNode","buildTextValNode","buildObjectNode","cdata","attrStr","level","repeat","startsWith","jObj","j2x","attr","arrLen","Ks","L","char","chars","nilChar","missingChar","nilPremitive","missingPremitive","emptyChar","emptyValue","boundryChar","objStart","arrStart","arrayEnd","charsArr","_e","e_schema","getValue","hasValidData","attrsMap","itemSchema","arr_len","arr_i","processValue","isAppChar","ch","x2j","convert2nimn","util","convertToJson","isEmptyObject","isExist","tagname","_cToJsonStr","convertToJsonString","nodeToJson","xmlToNodeobj","x2xmlnode","validator","xmlData","validationOption","traversableObj","getTraversalObj","convertTonimn","j2xParser","parseToNimn","schema","nameStartChar","nameRegexp","regexName","newOptions","isName","getAllMatches","regex","matches","allmatches","allowBooleanAttributes","readPI","getErrorObject","getLineNumberForPosition","readCommentAndCDATA","angleBracketsCount","tagFound","reachedRoot","closingTag","tagName","readAttributeStr","isValid","validateAttributeString","line","tagClosed","otg","afterAmp","validateAmpersand","startChar","validAttrStrRegxp","attrNames","getPositionFromMatch","attrName","validateAttrName","validateNumberAmpersand","lineNumber","addChild","xmlNode","parseFloat","parseNodeValue","parseAttributeValue","trimValues","stopNodes","processTagValue","parseValue","parseTrueNumberOnly","resolveNameSpace","prefix","shouldParse","attrsRegx","buildAttributesMap","attrs","attrCollection","closingIndexForOpeningTag","attrBoundary","tagExp","findClosingIndex","errMsg","closingIndex","xmlObj","currentNode","textData","closeIndex","colonIndex","startIndex","childNode","separatorIndex","trimRight","HashBase","_block","_blockSize","_blockOffset","_length","_finalized","throwIfNotStringOrBuffer","common","ripemd","hmac","sha1","sha224","ripemd160","BlockHash","pending","pendingTotal","outSize","padLength","_delta8","_delta32","join32","inner","outer","rotl32","sum32","sum32_3","sum32_4","K","Kh","Ah","Bh","Ch","Dh","Eh","T","rh","sh","toHex32","split32","shaCommon","sum32_5","ft_1","sha1_K","SHA1","W","SHA256","SHA224","ch32","maj32","s0_256","s1_256","g0_256","g1_256","sha256_K","T1","T2","SHA512","SHA384","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","xh","xl","yh","yl","zh","ch64_lo","zl","maj64_hi","maj64_lo","s0_512_hi","s0_512_lo","s1_512_hi","s1_512_lo","g0_512_hi","g0_512_lo","g1_512_hi","g1_512_lo","_prepareBlock","c0_hi","c0_lo","c1_hi","c1_lo","c2_hi","c2_lo","c3_hi","c3_lo","ah","al","bh","cl","dl","eh","fh","fl","gh","gl","hh","hl","c4_hi","c4_lo","T1_hi","T1_lo","T2_hi","T2_lo","rotr32","p32","isSurrogatePair","htonl","zero8","regexAstralSymbols","regexAsciiWhitelist","regexBmpWhitelist","regexEncodeNonAscii","encodeMap","'","regexEscape","escapeMap","regexInvalidEntity","regexInvalidRawCodePoint","regexDecode","decodeMap","decodeMapLegacy","decodeMapNumeric","invalidReferenceCodePoints","stringFromCharCode","has","propertyName","defaults","codePointToSymbol","strict","parseError","hexEscape","decEscape","encodeEverything","useNamedReferences","allowUnsafeSymbols","escapeCodePoint","decimal","escapeBmpSymbol","symbol","$0","high","low","html","$1","$2","$3","$4","$5","$6","$7","$8","semicolon","decDigits","hexDigits","reference","isAttributeValue","he","predResist","minEntropy","_reseed","reseedInterval","V","nonceEnc","seed","_hmac","kmac","reseed","addEnc","temp","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","NaN","rt","ARRAY16","_a","_b","_c","_d","rotl","fnF","fnG","fnH","fnI","brorand","MillerRabin","_randbelow","min_bytes","_randrange","stop","rone","n1","rn1","getDivisor","Minimatch","sep","GLOBSTAR","plTypes","open","close","qmark","star","reSpecials","slashSplit","pattern","nocomment","regexp","comment","empty","make","braceExpand","nobrace","orig","_made","parseNegate","globSet","globParts","si","negateOffset","nonegate","isSub","noglobstar","stateChar","hasMagic","nocase","escaping","patternListStack","negativeLists","inClass","reClassStart","classStart","patternStart","dot","clearStateChar","noext","reStart","pl","reEnd","cs","sp","SUBPARSE","addPatternStart","nl","nlBefore","nlFirst","nlLast","nlAfter","openParensBefore","cleanAfter","dollar","globUnescape","regExp","_glob","_src","makeRe","twoStar","regExpEscape","ex","nonull","matchOne","flipNegate","fi","pi","hit","fr","pr","swallowee","_typeof","_possibleConstructorReturn","ReferenceError","_assertThisInitialized","_wrapNativeSuper","Class","Map","Wrapper","_construct","_getPrototypeOf","_setPrototypeOf","Parent","_isNativeReflectConstruct","construct","sham","Proxy","PATH_DELIMITER","ObjectPrototypeMutationError","_Error","_inherits","traverse","segments","_loop","idx","currentSegment","remainingSegments","pathToHere","_ret","isLastSegment","property","currentObject","currentProperty","nextPropIsNumber","nextPropIsArrayWildcard","own","hasOwn","isIn","objectInPath","validPath","certificate","RSAPrivateKey","seq","int","RSAPublicKey","PublicKey","AlgorithmIdentifier","bitstr","null_","PrivateKeyInfo","octstr","PrivateKey","EncryptedPrivateKeyInfo","EncryptedPrivateKey","DSAPrivateKey","DSAparam","ECPrivateKey","ECParameters","namedCurve","asn","Time","utcTime","utctime","generalTime","gentime","AttributeTypeValue","SubjectPublicKeyInfo","RelativeDistinguishedName","setof","RDNSequence","seqof","Name","rdnSequence","Validity","Extension","bool","TBSCertificate","X509Certificate","findProc","startRegex","fullRegex","evp","okey","decrypted","cipherText","cipherKey","cipher","match2","aesid","fixProc","compat","passphrase","subtype","ndata","stripped","tbsCertificate","subjectPublicKeyInfo","subjectPublicKey","kde","kdeparams","iters","keylen","parameters","assertPath","normalizeStringPosix","allowAboveRoot","lastSegmentLength","lastSlash","dots","lastSlashIndex","posix","cwd","resolvedPath","resolvedAbsolute","isAbsolute","trailingSeparator","joined","fromStart","fromEnd","fromLen","toStart","toLen","lastCommonSep","fromCode","_makeLong","dirname","hasRoot","matchedSlash","extIdx","firstNonSlashEnd","extname","startDot","startPart","preDotState","pathObject","_format","delimiter","win32","isString","normalizeArray","splitPathRe","posixSplitPath","trailingSlash","segment","fromParts","toParts","samePartsLength","outputParts","isObject","pathString","allParts","ZERO_BUF","checkParameters","subtle","toBrowser","checks","getNextTick","queueMicrotask","setImmediate","browserPbkdf2","iterations","importKey","deriveBits","resolvePromise","browser","prom","checkNative","resp","MAX_ALLOC","sizes","rmd160","saltLen","shaFunc","rmd160Func","getDigest","ipad1","ipad2","run","DK","block1","destPos","hLen","U","i2ops","mgf","withPublic","zBuffer","iHash","maskedSeed","maskedDb","db","dif","oaep","ps","pkcs1","publicKey","paddedMsg","hLen2","dblen","cur","nonZero","pairs","query","part","parser","MAX_BYTES","MAX_UINT32","generated","oldBrowser","safeBuffer","randombytes","kBufferMaxLength","kMaxUint32","assertOffset","actualFill","ourBuf","uint","port","zr","sl","sr","hr","fn1","fn2","fn3","fn4","fn5","ar","br","cr","dr","tl","tr","safer","Safer","kStringMaxLength","binding","MAX_LENGTH","MAX_STRING_LENGTH","finalSize","_finalSize","accum","assigned","remainder","lowBits","highBits","Algorithm","Sha","_w","rotl30","ft","Sha1","rotl5","Sha256","Sha224","_f","_g","_h","maj","sigma0","sigma1","gamma0","Sha384","_ah","_bh","_ch","_dh","_eh","_fh","_gh","_hh","_al","_bl","_cl","_dl","_el","_fl","_gl","_hl","writeInt64BE","Sha512","Gamma0","Gamma0l","Gamma1","Gamma1l","getCarry","gamma0l","gamma1","gamma1l","Wi7h","Wi7l","Wi16h","Wi16l","Wil","Wih","majh","majl","sigma0h","sigma0l","sigma1h","sigma1l","Kih","Kil","chh","chl","t1l","t1h","t2l","t2h","EE","_isStdio","didOnEnd","cleanup","nenc","retried","_normalizeEncoding","normalizeEncoding","text","utf16Text","utf16End","fillLast","utf8FillLast","base64Text","base64End","simpleWrite","simpleEnd","lastNeed","lastTotal","lastChar","utf8CheckByte","byte","utf8CheckExtraBytes","utf8CheckIncomplete","strArray","resultArray","component","definition","required","qs","slashes","protocolre","windowsDriveLetter","trimLeft","rules","address","isSpecial","ignore","lolcation","loc","location","finaldestination","Url","unescape","scheme","extractProtocol","rest","forwardSlashes","otherSlashes","slashesCount","extracted","instruction","instructions","up","host","hostname","auth","origin","splits","ins","localStorage","trace"],"mappings":"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E,EAAW,YAAY,WACpC,OAAOthE,KAAK21D,MAAMiP,YAAY5kE,KAAK0kE,QAGrCgB,EAAepE,EAAW,YAAY,WACpC,OAAOthE,KAAK21D,MAAM4P,UAAUvlE,KAAK+kE,QAGnCzD,EAAUrhE,UAAUmmE,QAAU,WAC5B,OAAOpmE,KAAK2kE,WAAWphE,OAAOvD,KAAKmmE,aAGrC7E,EAAUrhE,UAAUomE,MAAQ,WAC1B,OAAOlW,EAAMpvD,OAAOf,KAAKomE,UAAW,OAAOt4D,eAG7CpJ,EAAOrF,QAAUiiE,G,UChEjB58D,EAAOrF,QAAU,CACf23D,QAAS,CACPI,KAAM,EACNK,OAAQ,CACN,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,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,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,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,sEAINP,IAAK,CACHzvC,IAAK,EACLgwC,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,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,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,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CA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OAAO,EAAS,MAAM,GAAe,OAAO,EAAS,OAAO,GAAe,MAAM,GAAe,OAAO,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,GAAe,MAAM,GAAe,OAAO,GAAe,OAAO,GAAe,MAAM,GAAe,OAAO,EAAS,OAAO,GAAe,MAAM,GAAe,OAAO,GAAe,OAAO,EAAS,OAAO,GAAe,OAAO,GAAe,MAAM,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAO,SAAS,EAAO,SAAS,EAAS,SAAS,EAAS,SAAS,IAAS,SAAS,EAAS,MAAM,EAAS,MAAM,GAAe,OAAO,GAAe,MAAM,EAAS,OAAO,GAAe,OAAO,GAAe,MAAM,GAAe,OAAO,EAAO,OAAO,EAAO,SAAS,EAAO,SAAS,EAAO,SAAS,EAAO,SAAS,EAAO,QAAQ,EAAO,QAAQ,EAAO,OAAO,EAAO,OAAO,EAAS,SAAS,EAAS,SAAS,EAAO,SAAS,EAAO,SAAS,EAAO,SAAS,EAAO,SAAS,EAAS,QAAQ,EAAS,QAAQ,EAAS,QAAQ,EAAS,QAAQ,GAAe,MAAM,GAAe,OAAO,GAAe,OAAO,EAAS,OAAO,GAAe,MAAM,GAAe,OAAO,GAAe,OAAO,GAAe,MAAM,GAAe,OAAO,GAAe,OAAO,GAAe,MAAM,EAAS,OAAO,EAAS,SAAS,GAAe,MAAM,GAAe,OAAO,GAAe,OAAO,EAAS,OAAO,EAAS,KAAK,EAAS,OAAO,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,GAAe,OAAO,GAAe,OAAO,GAAe,MAAM,GAAe,OAAO,GAAe,MAAM,GAAe,OAAO,IAAS,KAAK,EAAS,SAAS,EAAS,SAAS,EAAS,QAAQ,EAAS,QAAQ,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAO,QAAQ,GAAe,MAAM,GAAe,OAAO,GAAe,OAAO,GAAe,OAAO,GAAe,MAAM,GAAe,OAAO,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,IAAS,QAAQ,EAAS,SAAS,EAAS,SAAS,GAAe,OAAO,GAAe,OAAO,GAAe,MAAM,GAAe,OAAO,GAAe,MAAM,GAAe,OAAO,EAAO,SAAS,EAAO,SAAS,EAAO,SAAS,EAAO,SAAS,EAAS,SAAS,EAAS,SAAS,EAAO,QAAQ,EAAO,QAAQ,EAAS,QAAQ,EAAS,QAAQ,EAAO,OAAO,EAAO,OAAO,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,QAAQ,EAAS,QAAQ,EAAS,QAAQ,EAAS,QAAQ,GAAe,MAAM,GAAe,OAAO,GAAe,OAAO,GAAe,MAAM,GAAe,OAAO,GAAe,OAAO,GAAe,OAAO,GAAe,OAAO,GAAe,MAAM,GAAe,OAAO,GAAe,OAAO,GAAe,MAAM,EAAS,QAAQ,EAAS,QAAQ,GAAe,MAAM,GAAe,OAAO,GAAe,OAAO,GAAe,OAAO,GAAe,MAAM,GAAe,OAAO,GAAe,MAAM,GAAe,OAAO,GAAe,OAAO,GAAe,OAAO,GAAe,MAAM,GAAe,OAAO,EAAO,SAAS,EAAO,SAAS,EAAS,QAAQ,EAAS,QAAQ,EAAO,OAAO,EAAS,OAAO,GAAe,OAAO,GAAe,MAAM,GAAe,OAAO,EAAS,MAAM,EAAS,OAAO,GAAe,OAAO,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,OAAO,EAAS,OAAO,EAAS,QAAQ,EAAO,QAAQ,EAAO,QAAQ,EAAS,QAAQ,EAAS,QAAQ,EAAS,QAAQ,EAAS,OAAO,EAAS,OAAO,EAAS,QAAQ,EAAS,QAAQ,EAAS,QAAQ,EAAS,QAAQ,EAAS,OAAO,EAAS,QAAQ,EAAS,UAAU,EAAS,SAAS,EAAS,SAAS,EAAS,OAAO,EAAS,OAAO,EAAS,MAAM,EAAS,MAAM,EAAS,QAAQ,EAAS,SAAS,EAAS,QAAQ,EAAS,OAAO,EAAS,OAAO,EAAS,QAAQ,EAAS,SAAS,EAAS,QAAQ,EAAS,SAAS,EAAS,SAAS,EAAS,KAAK,EAAO,QAAQ,EAAS,KAAK,EAAS,KAAK,EAAS,KAAK,EAAS,KAAK,EAAS,KAAK,EAAS,UAAU,EAAS,UAAU,EAAS,KAAK,EAAS,MAAM,EAAS,KAAK,EAAS,MAAM,EAAS,OAAO,EAAS,MAAM,EAAS,QAAQ,EAAS,QAAQ,EAAS,SAAS,EAAS,MAAM,EAAS,MAAM,EAAS,OAAO,EAAS,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","file":"photos-vendors-node_modules_webdav_dist_node_index_js-node_modules_webdav_dist_node_request_js.js?v=e6731e9d748e8195a580","sourcesContent":["'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","'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","'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","'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","'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","'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';\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\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\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","'use strict';\n\nconst decoders = exports;\n\ndecoders.der = require('./der');\ndecoders.pem = require('./pem');\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';\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","'use strict';\n\nconst encoders = exports;\n\nencoders.der = require('./der');\nencoders.pem = require('./pem');\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","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n 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 sequence(...methods) {\n if (methods.length === 0) {\n throw new Error(\"Failed creating sequence: No functions provided\");\n }\n return function __executeSequence(...args) {\n let result = args;\n const _this = this;\n while (methods.length > 0) {\n const method = methods.shift();\n result = [method.apply(_this, result)];\n }\n return result[0];\n };\n}\n\nmodule.exports = {\n sequence\n};\n","const { sequence } = require(\"./functions.js\");\n\nconst HOT_PATCHER_TYPE = \"@@HOTPATCHER\";\nconst NOOP = () => {};\n\nfunction createNewItem(method) {\n return {\n original: method,\n methods: [method],\n final: false\n };\n}\n\n/**\n * Hot patching manager class\n */\nclass HotPatcher {\n constructor() {\n this._configuration = {\n registry: {},\n getEmptyAction: \"null\"\n };\n this.__type__ = HOT_PATCHER_TYPE;\n }\n\n /**\n * Configuration object reference\n * @type {Object}\n * @memberof HotPatcher\n * @readonly\n */\n get configuration() {\n return this._configuration;\n }\n\n /**\n * The action to take when a non-set method is requested\n * Possible values: null/throw\n * @type {String}\n * @memberof HotPatcher\n */\n get getEmptyAction() {\n return this.configuration.getEmptyAction;\n }\n\n set getEmptyAction(newAction) {\n this.configuration.getEmptyAction = newAction;\n }\n\n /**\n * Control another hot-patcher instance\n * Force the remote instance to use patched methods from calling instance\n * @param {HotPatcher} target The target instance to control\n * @param {Boolean=} allowTargetOverrides Allow the target to override patched methods on\n * the controller (default is false)\n * @memberof HotPatcher\n * @returns {HotPatcher} Returns self\n * @throws {Error} Throws if the target is invalid\n */\n control(target, allowTargetOverrides = false) {\n if (!target || target.__type__ !== HOT_PATCHER_TYPE) {\n throw new Error(\n \"Failed taking control of target HotPatcher instance: Invalid type or object\"\n );\n }\n Object.keys(target.configuration.registry).forEach(foreignKey => {\n if (this.configuration.registry.hasOwnProperty(foreignKey)) {\n if (allowTargetOverrides) {\n this.configuration.registry[foreignKey] = Object.assign(\n {},\n target.configuration.registry[foreignKey]\n );\n }\n } else {\n this.configuration.registry[foreignKey] = Object.assign(\n {},\n target.configuration.registry[foreignKey]\n );\n }\n });\n target._configuration = this.configuration;\n return this;\n }\n\n /**\n * Execute a patched method\n * @param {String} key The method key\n * @param {...*} args Arguments to pass to the method (optional)\n * @memberof HotPatcher\n * @see HotPatcher#get\n * @returns {*} The output of the called method\n */\n execute(key, ...args) {\n const method = this.get(key) || NOOP;\n return method(...args);\n }\n\n /**\n * Get a method for a key\n * @param {String} key The method key\n * @returns {Function|null} Returns the requested function or null if the function\n * does not exist and the host is configured to return null (and not throw)\n * @memberof HotPatcher\n * @throws {Error} Throws if the configuration specifies to throw and the method\n * does not exist\n * @throws {Error} Throws if the `getEmptyAction` value is invalid\n */\n get(key) {\n const item = this.configuration.registry[key];\n if (!item) {\n switch (this.getEmptyAction) {\n case \"null\":\n return null;\n case \"throw\":\n throw new Error(\n `Failed handling method request: No method provided for override: ${key}`\n );\n default:\n throw new Error(\n `Failed handling request which resulted in an empty method: Invalid empty-action specified: ${\n this.getEmptyAction\n }`\n );\n }\n }\n return sequence(...item.methods);\n }\n\n /**\n * Check if a method has been patched\n * @param {String} key The function key\n * @returns {Boolean} True if already patched\n * @memberof HotPatcher\n */\n isPatched(key) {\n return !!this.configuration.registry[key];\n }\n\n /**\n * @typedef {Object} PatchOptions\n * @property {Boolean=} chain - Whether or not to allow chaining execution. Chained\n * execution allows for attaching multiple callbacks to a key, where the callbacks\n * will be executed in order of when they were patched (oldest to newest), the\n * values being passed from one method to another.\n */\n\n /**\n * Patch a method name\n * @param {String} key The method key to patch\n * @param {Function} method The function to set\n * @param {PatchOptions=} options Patch options\n * @memberof HotPatcher\n * @returns {HotPatcher} Returns self\n */\n patch(key, method, { chain = false } = {}) {\n if (this.configuration.registry[key] && this.configuration.registry[key].final) {\n throw new Error(`Failed patching '${key}': Method marked as being final`);\n }\n if (typeof method !== \"function\") {\n throw new Error(`Failed patching '${key}': Provided method is not a function`);\n }\n if (chain) {\n // Add new method to the chain\n if (!this.configuration.registry[key]) {\n // New key, create item\n this.configuration.registry[key] = createNewItem(method);\n } else {\n // Existing, push the method\n this.configuration.registry[key].methods.push(method);\n }\n } else {\n // Replace the original\n if (this.isPatched(key)) {\n const { original } = this.configuration.registry[key];\n this.configuration.registry[key] = Object.assign(createNewItem(method), {\n original\n });\n } else {\n this.configuration.registry[key] = createNewItem(method);\n }\n }\n return this;\n }\n\n /**\n * Patch a method inline, execute it and return the value\n * Used for patching contents of functions. This method will not apply a patched\n * function if it has already been patched, allowing for external overrides to\n * function. It also means that the function is cached so that it is not\n * instantiated every time the outer function is invoked.\n * @param {String} key The function key to use\n * @param {Function} method The function to patch (once, only if not patched)\n * @param {...*} args Arguments to pass to the function\n * @returns {*} The output of the patched function\n * @memberof HotPatcher\n * @example\n * function mySpecialFunction(a, b) {\n * return hotPatcher.patchInline(\"func\", (a, b) => {\n * return a + b;\n * }, a, b);\n * }\n */\n patchInline(key, method, ...args) {\n if (!this.isPatched(key)) {\n this.patch(key, method);\n }\n return this.execute(key, ...args);\n }\n\n /**\n * Patch a method (or methods) in sequential-mode\n * See `patch()` with the option `chain: true`\n * @see patch\n * @param {String} key The key to patch\n * @param {...Function} methods The methods to patch\n * @returns {HotPatcher} Returns self\n * @memberof HotPatcher\n */\n plugin(key, ...methods) {\n methods.forEach(method => {\n this.patch(key, method, { chain: true });\n });\n return this;\n }\n\n /**\n * Restore a patched method if it has been overridden\n * @param {String} key The method key\n * @memberof HotPatcher\n */\n restore(key) {\n if (!this.isPatched(key)) {\n throw new Error(`Failed restoring method: No method present for key: ${key}`);\n } else if (typeof this.configuration.registry[key].original !== \"function\") {\n throw new Error(\n `Failed restoring method: Original method not found or of invalid type for key: ${key}`\n );\n }\n this.configuration.registry[key].methods = [this.configuration.registry[key].original];\n }\n\n /**\n * Set a method as being final\n * This sets a method as having been finally overridden. Attempts at overriding\n * again will fail with an error.\n * @param {String} key The key to make final\n * @memberof HotPatcher\n * @returns {HotPatcher} Returns self\n */\n setFinal(key) {\n if (!this.configuration.registry.hasOwnProperty(key)) {\n throw new Error(`Failed marking '${key}' as final: No method found for key`);\n }\n this.configuration.registry[key].final = true;\n return this;\n }\n}\n\nmodule.exports = HotPatcher;\n","\"use strict\";\n\nconst {\n toBase64\n} = require(\"./encode.js\");\n\nconst {\n md5,\n ha1Compute\n} = require(\"./crypto.js\");\n\nfunction generateBasicAuthHeader(username, password) {\n const encoded = toBase64(`${username}:${password}`);\n return `Basic ${encoded}`;\n}\n\nfunction generateDigestAuthHeader(options, digest) {\n const url = options.url.replace(\"//\", \"\");\n const uri = url.indexOf(\"/\") == -1 ? \"/\" : url.slice(url.indexOf(\"/\"));\n const method = options.method ? options.method.toUpperCase() : \"GET\";\n const qop = /(^|,)\\s*auth\\s*($|,)/.test(digest.qop) ? \"auth\" : false;\n const ncString = `00000000${digest.nc}`.slice(-8);\n const cnonce = digest.cnonce;\n const ha1 = ha1Compute(digest.algorithm, digest.username, digest.realm, digest.password, digest.nonce, digest.cnonce);\n const ha2 = md5(`${method}:${uri}`);\n const digestResponse = qop ? md5(`${ha1}:${digest.nonce}:${ncString}:${digest.cnonce}:${qop}:${ha2}`) : md5(`${ha1}:${digest.nonce}:${ha2}`);\n const authValues = {\n username: digest.username,\n realm: digest.realm,\n nonce: digest.nonce,\n uri,\n qop,\n response: digestResponse,\n nc: ncString,\n cnonce: digest.cnonce,\n algorithm: digest.algorithm,\n opaque: digest.opaque\n };\n const authHeader = [];\n\n for (var k in authValues) {\n if (authValues[k]) {\n if (k === \"qop\" || k === \"nc\" || k === \"algorithm\") {\n authHeader.push(`${k}=${authValues[k]}`);\n } else {\n authHeader.push(`${k}=\"${authValues[k]}\"`);\n }\n }\n }\n\n return `Digest ${authHeader.join(\", \")}`;\n}\n\nfunction generateTokenAuthHeader(tokenInfo) {\n return `${tokenInfo.token_type} ${tokenInfo.access_token}`;\n}\n\nmodule.exports = {\n generateBasicAuthHeader,\n generateTokenAuthHeader,\n generateDigestAuthHeader\n};","\"use strict\";\n\nconst {\n createHash\n} = require(\"crypto\");\n\nfunction md5(data) {\n return createHash(\"md5\").update(data).digest(\"hex\");\n}\n\nfunction ha1Compute(algorithm, user, realm, pass, nonce, cnonce) {\n const ha1 = md5(`${user}:${realm}:${pass}`);\n\n if (algorithm && algorithm.toLowerCase() === \"md5-sess\") {\n return md5(`${ha1}:${nonce}:${cnonce}`);\n } else {\n return ha1;\n }\n}\n\nmodule.exports = {\n md5,\n ha1Compute\n};","\"use strict\";\n\nconst {\n decode,\n encode\n} = require(\"base-64\");\n\nfunction decodeHTMLEntities(str) {\n if (typeof WEB === \"undefined\") {\n // Node\n const he = require(\"he\");\n\n return he.decode(str);\n } else {\n // Nasty browser way\n const txt = document.createElement(\"textarea\");\n txt.innerHTML = str;\n return txt.value;\n }\n}\n\nfunction fromBase64(str) {\n return decode(str);\n}\n\nfunction toBase64(str) {\n return encode(str);\n}\n\nmodule.exports = {\n decodeHTMLEntities,\n fromBase64,\n toBase64\n};","\"use strict\";\n\nconst authTools = require(\"./auth.js\");\n\nconst urlTools = require(\"./url.js\");\n\nconst {\n merge\n} = require(\"./merge.js\");\n\nconst directoryContents = require(\"./interface/directoryContents.js\");\n\nconst createDir = require(\"./interface/createDirectory.js\");\n\nconst custom = require(\"./interface/custom.js\");\n\nconst deletion = require(\"./interface/delete.js\");\n\nconst pathsExist = require(\"./interface/exists.js\");\n\nconst getFile = require(\"./interface/getFile.js\");\n\nconst quota = require(\"./interface/quota.js\");\n\nconst move = require(\"./interface/moveFile.js\");\n\nconst copy = require(\"./interface/copyFile.js\");\n\nconst putFile = require(\"./interface/putFile.js\");\n\nconst stats = require(\"./interface/stat.js\");\n\nconst NOOP = () => {};\n/**\n * Client adapter\n * @typedef {Object} ClientInterface\n */\n\n/**\n * Options for creating a resource\n * @typedef {UserOptions} PutOptions\n * @property {Boolean=} overwrite - Whether or not to overwrite existing files (default: true)\n * @property {Number=} maxBodyLength - The maximum amount of bytes to upload (default: 10 MiB) (only in nodejs-environments)\n */\n\n/**\n * Options with headers and format\n * @typedef {UserOptions} OptionsWithFormat\n * @property {String} format - The format to use (text/binary)\n * @property {Boolean=} details - Provided detailed response information, such as response\n * headers (defaults to false). Only available on requests that return result data.\n * @property {Number=} maxContentLength - The maximum amount of bytes to download (default: 10 MiB)\n */\n\n/**\n * Options for methods that resturn responses\n * @typedef {UserOptions} OptionsForAdvancedResponses\n * @property {Boolean=} details - Provided detailed response information, such as response\n * headers (defaults to false). Only available on requests that return result data.\n */\n\n/**\n * @typedef {OptionsForAdvancedResponses} GetDirectoryContentsOptions\n * @property {Boolean=} deep - Return deep (infinite) items (default: false)\n * @property {String=} glob - Glob pattern for matching certain files\n */\n\n/**\n * @typedef {Object} AuthToken\n * @property {String} token_type - The type of token (eg \"Bearer\")\n * @property {String} access_token - The token access code\n */\n\n/**\n * @typedef {Object} CreateClientOptions\n * @property {String=} username - The username for authentication\n * @property {String=} password - The password for authentication\n * @property {http.Agent=} httpAgent - Override the HTTP Agent instance for requests\n * @property {https.Agent=} httpsAgent - Override the HTTPS Agent instance for requests\n * @property {AuthToken=} token - Optional OAuth token\n */\n\n/**\n * A stat result\n * @typedef {Object} Stat\n * @property {String} filename The full path and filename of the remote item\n * @property {String} basename The base filename of the remote item, without the path\n * @property {String|null} lastmod The last modification date (eg. \"Sun, 13 Mar 2016 04:23:32 GMT\")\n * @property {Number} size The size of the remote item\n * @property {String} type The type of the item (file/directory)\n * @property {String=} mime The file mimetype (not present on directories)\n * @property {String|null} etag The ETag of the remote item (as supported by the server)\n * @property {Object=} props Additionally returned properties from the server, unprocessed, if\n * `details: true` is specified in the options\n */\n\n/**\n * Create a client adapter\n * @param {String} remoteURL The remote address of the webdav server\n * @param {CreateClientOptions=} opts Client options\n * @returns {ClientInterface} A new client interface instance\n * @memberof module:WebDAV\n * @example\n * const createClient = require(\"webdav\");\n * const client = createClient(url, { username, password });\n * client\n * .getDirectoryContents(\"/\")\n * .then(contents => {\n * console.log(contents);\n * });\n * @example\n * const createClient = require(\"webdav\");\n * const client = createClient(url, {\n * token: { token_type: \"Bearer\", access_token: \"tokenvalue\" }\n * });\n * client\n * .getDirectoryContents(\"/\")\n * .then(contents => {\n * console.log(contents);\n * });\n */\n\n\nfunction createClient(remoteURL, opts = {}) {\n if (!opts || typeof opts !== \"object\") {\n throw new Error(\"Options must be an object, if specified\");\n }\n\n const {\n username,\n password,\n httpAgent,\n httpsAgent,\n token = null,\n digest = false\n } = opts;\n const runtimeOptions = {\n headers: {},\n remotePath: urlTools.extractURLPath(remoteURL),\n remoteURL,\n httpAgent,\n httpsAgent\n }; // Configure auth\n\n if (digest) {\n runtimeOptions._digest = {\n username,\n password,\n nc: 0,\n algorithm: \"md5\",\n hasDigestAuth: false\n };\n } else if (username) {\n runtimeOptions.headers.Authorization = authTools.generateBasicAuthHeader(username, password);\n } else if (token && typeof token === \"object\") {\n runtimeOptions.headers.Authorization = authTools.generateTokenAuthHeader(token);\n }\n\n return {\n /**\n * Copy a remote item to another path\n * @param {String} remotePath The remote item path\n * @param {String} targetRemotePath The path file will be copied to\n * @param {UserOptions=} options Options for the request\n * @memberof ClientInterface\n * @returns {Promise} A promise that resolves once the request has completed\n * @example\n * await client.copyFile(\"/photos/pic1.jpg\", \"/backup/pic1.jpg\");\n */\n copyFile: function copyFile(remotePath, targetRemotePath, options) {\n const copyOptions = merge(runtimeOptions, options || {});\n return copy.copyFile(remotePath, targetRemotePath, copyOptions);\n },\n\n /**\n * Create a directory\n * @param {String} dirPath The path to create\n * @param {UserOptions=} options Options for the request\n * @memberof ClientInterface\n * @returns {Promise} A promise that resolves when the remote path has been created\n * @example\n * await client.createDirectory(\"/my/directory\");\n */\n createDirectory: function createDirectory(dirPath, options) {\n const createOptions = merge(runtimeOptions, options || {});\n return createDir.createDirectory(dirPath, createOptions);\n },\n\n /**\n * Create a readable stream of a remote file\n * @param {String} remoteFilename The file to stream\n * @param {UserOptions=} options Options for the request\n * @memberof ClientInterface\n * @returns {Readable} A readable stream\n * @example\n * const remote = client.createReadStream(\"/data.zip\");\n * remote.pipe(someWriteStream);\n */\n createReadStream: function createReadStream(remoteFilename, options) {\n if (typeof WEB !== \"undefined\" && WEB === true) {\n throw new Error(\"createReadStream not implemented in web environment\");\n } else {\n const createStream = require(\"./interface/createStream.js\");\n\n const createOptions = merge(runtimeOptions, options || {});\n return createStream.createReadStream(remoteFilename, createOptions);\n }\n },\n\n /**\n * Create a writeable stream to a remote file\n * @param {String} remoteFilename The file to write to\n * @param {PutOptions=} options Options for the request\n * @param {Function=} callback Optional callback to fire\n * once the request has finished\n * @memberof ClientInterface\n * @returns {Writeable} A writeable stream\n * @example\n * const remote = client.createWriteStream(\"/data.zip\");\n * fs.createReadStream(\"~/myData.zip\").pipe(remote);\n */\n createWriteStream: function createWriteStream(remoteFilename, options, callback = NOOP) {\n if (typeof WEB !== \"undefined\" && WEB === true) {\n throw new Error(\"createWriteStream not implemented in web environment\");\n } else {\n const createStream = require(\"./interface/createStream.js\");\n\n const createOptions = merge(runtimeOptions, options || {});\n return createStream.createWriteStream(remoteFilename, createOptions, callback);\n }\n },\n\n /**\n * Send a custom request\n * @param {String} remotePath The remote path\n * @param {RequestOptions=} requestOptions the request options\n * @param {Options=} options Options for the request\n * @memberof ClientInterface\n * @returns {Promise<Any>} A promise that resolves with response of the request\n * @example\n * const contents = await client.customRequest(\"/alrighty.jpg\", {\n * method: \"PROPFIND\",\n * headers: {\n * Accept: \"text/plain\",\n * Depth: 0\n * },\n * responseType: \"text\"\n * });\n */\n customRequest: function customRequest(remotePath, requestOptions, options) {\n const customOptions = merge(runtimeOptions, options || {});\n return custom.customRequest(remotePath, requestOptions, customOptions);\n },\n\n /**\n * Delete a remote file\n * @param {String} remotePath The remote path to delete\n * @param {UserOptions=} options The options for the request\n * @memberof ClientInterface\n * @returns {Promise} A promise that resolves when the remote file as been deleted\n * @example\n * await client.deleteFile(\"/some/file.txt\");\n */\n deleteFile: function deleteFile(remotePath, options) {\n const deleteOptions = merge(runtimeOptions, options || {});\n return deletion.deleteFile(remotePath, deleteOptions);\n },\n\n /**\n * Check if a remote file or directory exists\n * @param {String} remotePath The remote path to check\n * @param {UserOptions=} options The options for the request\n * @memberof ClientInterface\n * @returns {Promise.<Boolean>} A promise that resolves with true if the path exists\n * or false if it does not\n * @example\n * if (await client.exists(\"/some-path/file.txt\")) {\n * // Do something\n * }\n */\n exists: function exists(remotePath, options) {\n const existsOptions = merge(runtimeOptions, options || {});\n return pathsExist.pathExists(remotePath, existsOptions);\n },\n\n /**\n * Get the contents of a remote directory\n * @param {String} remotePath The path to fetch the contents of\n * @param {GetDirectoryContentsOptions=} options Options for the remote the request\n * @returns {Promise.<Array.<Stat>>} A promise that resolves with an array of remote item stats\n * @memberof ClientInterface\n * @example\n * const contents = await client.getDirectoryContents(\"/\");\n */\n getDirectoryContents: function getDirectoryContents(remotePath, options) {\n const getOptions = merge(runtimeOptions, options || {});\n return directoryContents.getDirectoryContents(remotePath, getOptions);\n },\n\n /**\n * Get the contents of a remote file\n * @param {String} remoteFilename The file to fetch\n * @param {OptionsWithFormat=} options Options for the request\n * @memberof ClientInterface\n * @returns {Promise.<Buffer|String>} A promise that resolves with the contents of the remote file\n * @example\n * // Fetching data:\n * const buff = await client.getFileContents(\"/image.png\");\n * // Fetching text:\n * const txt = await client.getFileContents(\"/list.txt\", { format: \"text\" });\n */\n getFileContents: function getFileContents(remoteFilename, options) {\n const getOptions = merge(runtimeOptions, options || {});\n getOptions.format = getOptions.format || \"binary\";\n\n if ([\"binary\", \"text\"].indexOf(getOptions.format) < 0) {\n throw new Error(\"Unknown format: \" + getOptions.format);\n }\n\n return getOptions.format === \"text\" ? getFile.getFileContentsString(remoteFilename, getOptions) : getFile.getFileContentsBuffer(remoteFilename, getOptions);\n },\n\n /**\n * Get the download link of a remote file\n * Only supported for Basic authentication or unauthenticated connections.\n * @param {String} remoteFilename The file url to fetch\n * @param {UserOptions=} options Options for the request\n * @memberof ClientInterface\n * @returns {String} A download URL\n */\n getFileDownloadLink: function getFileDownloadLink(remoteFilename, options) {\n const getOptions = merge(runtimeOptions, options || {});\n return getFile.getFileLink(remoteFilename, getOptions);\n },\n\n /**\n * Get a file upload link\n * Only supported for Basic authentication or unauthenticated connections.\n * @param {String} remoteFilename The path of the remote file location\n * @param {PutOptions=} options The options for the request\n * @memberof ClientInterface\n * @returns {String} A upload URL\n */\n getFileUploadLink: function getFileUploadLink(remoteFilename, options) {\n var putOptions = merge(runtimeOptions, options || {});\n return putFile.getFileUploadLink(remoteFilename, putOptions);\n },\n\n /**\n * Get quota information\n * @param {OptionsForAdvancedResponses=} options Options for the request\n * @returns {Promise.<null|Object>} Returns null if failed, or an object with `used` and `available`\n * @memberof ClientInterface\n */\n getQuota: function getQuota(options) {\n const getOptions = merge(runtimeOptions, options || {});\n return quota.getQuota(getOptions);\n },\n\n /**\n * Move a remote item to another path\n * @param {String} remotePath The remote item path\n * @param {String} targetRemotePath The new path after moving\n * @param {UserOptions=} options Options for the request\n * @memberof ClientInterface\n * @returns {Promise} A promise that resolves once the request has completed\n * @example\n * await client.moveFile(\"/sub/file.dat\", \"/another/dir/file.dat\");\n */\n moveFile: function moveFile(remotePath, targetRemotePath, options) {\n const moveOptions = merge(runtimeOptions, options || {});\n return move.moveFile(remotePath, targetRemotePath, moveOptions);\n },\n\n /**\n * Write contents to a remote file path\n * @param {String} remoteFilename The path of the remote file\n * @param {String|Buffer} data The data to write\n * @param {PutOptions=} options The options for the request\n * @returns {Promise} A promise that resolves once the contents have been written\n * @memberof ClientInterface\n * @example\n * await client.putFileContents(\"/dir/image.png\", myImageBuffer);\n * // Put contents without overwriting:\n * await client.putFileContents(\"/dir/image.png\", myImageBuffer, { overwrite: false });\n */\n putFileContents: function putFileContents(remoteFilename, data, options) {\n const putOptions = merge(runtimeOptions, options || {});\n return putFile.putFileContents(remoteFilename, data, putOptions);\n },\n\n /**\n * Stat a remote object\n * @param {String} remotePath The path of the item\n * @param {OptionsForAdvancedResponses=} options Options for the request\n * @memberof ClientInterface\n * @returns {Promise.<Stat>} A promise that resolves with the stat data\n */\n stat: function stat(remotePath, options) {\n const getOptions = merge(runtimeOptions, options || {});\n return stats.getStat(remotePath, getOptions);\n }\n };\n}\n\nmodule.exports = {\n createClient\n};","\"use strict\";\n\nconst axios = require(\"axios\");\n\nconst {\n merge\n} = require(\"./merge.js\");\n\nconst {\n getPatcher\n} = require(\"./patcher.js\");\n\nconst {\n generateDigestAuthHeader\n} = require(\"./auth.js\");\n\nfunction makeNonce() {\n const cnonceSize = 32;\n const nonceRaw = \"abcdef0123456789\";\n let uid = \"\";\n\n for (let i = 0; i < cnonceSize; ++i) {\n uid += nonceRaw[Math.floor(Math.random() * nonceRaw.length)];\n }\n\n return uid;\n}\n\nfunction parseAuth(response, _digest) {\n const authHeader = response.headers[\"www-authenticate\"] || \"\";\n\n if (authHeader.split(/\\s/)[0].toLowerCase() !== \"digest\") {\n return false;\n }\n\n const re = /([a-z0-9_-]+)=(?:\"([^\"]+)\"|([a-z0-9_-]+))/gi;\n\n for (;;) {\n var match = re.exec(authHeader);\n\n if (!match) {\n break;\n }\n\n _digest[match[1]] = match[2] || match[3];\n }\n\n _digest.nc++;\n _digest.cnonce = makeNonce();\n return true;\n}\n\nfunction request(requestOptions) {\n return getPatcher().patchInline(\"request\", options => axios(options), requestOptions);\n}\n\nfunction fetch(requestOptions) {\n // Client not configured for digest authentication\n if (!requestOptions._digest) {\n return request(requestOptions);\n } // Remove client's digest authentication object from request options\n\n\n const _digest = requestOptions._digest;\n delete requestOptions._digest; // If client is already using digest authentication, include the digest authorization header\n\n if (_digest.hasDigestAuth) {\n requestOptions = merge(requestOptions, {\n headers: {\n Authorization: generateDigestAuthHeader(requestOptions, _digest)\n }\n });\n } // Perform the request and handle digest authentication\n\n\n return request(requestOptions).then(function (response) {\n if (response.status == 401) {\n _digest.hasDigestAuth = parseAuth(response, _digest);\n\n if (_digest.hasDigestAuth) {\n requestOptions = merge(requestOptions, {\n headers: {\n Authorization: generateDigestAuthHeader(requestOptions, _digest)\n }\n });\n return request(requestOptions).then(function (response2) {\n if (response2.status == 401) {\n _digest.hasDigestAuth = false;\n } else {\n _digest.nc++;\n }\n\n return response2;\n });\n }\n } else {\n _digest.nc++;\n }\n\n return response;\n });\n}\n\nmodule.exports = fetch;","\"use strict\";\n\nconst {\n axios\n} = require(\"./request.js\");\n\nconst {\n createClient\n} = require(\"./factory.js\");\n\nconst {\n getPatcher\n} = require(\"./patcher.js\");\n/**\n * @module WebDAV\n */\n\n\nmodule.exports = {\n /**\n * Axios request library\n * @type {Function}\n * @memberof module:WebDAV\n */\n axios,\n createClient,\n getPatcher\n};","\"use strict\";\n\nconst responseHandlers = require(\"../response.js\");\n\nconst {\n encodePath,\n joinURL,\n prepareRequestOptions,\n request\n} = require(\"../request.js\");\n\nfunction copyFile(filename, destination, options) {\n const requestOptions = {\n url: joinURL(options.remoteURL, encodePath(filename)),\n method: \"COPY\",\n headers: {\n Destination: joinURL(options.remoteURL, encodePath(destination))\n }\n };\n prepareRequestOptions(requestOptions, options);\n return request(requestOptions).then(responseHandlers.handleResponseCode);\n}\n\nmodule.exports = {\n copyFile\n};","\"use strict\";\n\nconst responseHandlers = require(\"../response.js\");\n\nconst {\n encodePath,\n joinURL,\n prepareRequestOptions,\n request\n} = require(\"../request.js\");\n\nfunction createDirectory(dirPath, options) {\n const requestOptions = {\n url: joinURL(options.remoteURL, encodePath(dirPath)),\n method: \"MKCOL\"\n };\n prepareRequestOptions(requestOptions, options);\n return request(requestOptions).then(responseHandlers.handleResponseCode);\n}\n\nmodule.exports = {\n createDirectory: createDirectory\n};","\"use strict\";\n\nconst responseHandlers = require(\"../response.js\");\n\nconst {\n encodePath,\n joinURL,\n prepareRequestOptions,\n request\n} = require(\"../request.js\");\n\nconst NOOP = () => {};\n\nfunction createReadStream(filePath, options) {\n const Stream = require(\"stream\");\n\n const PassThroughStream = Stream.PassThrough;\n const outStream = new PassThroughStream();\n getFileStream(filePath, options).then(stream => {\n stream.pipe(outStream);\n }).catch(err => {\n outStream.emit(\"error\", err);\n });\n return outStream;\n}\n\nfunction createWriteStream(filePath, options, callback = NOOP) {\n const Stream = require(\"stream\");\n\n const PassThroughStream = Stream.PassThrough;\n const writeStream = new PassThroughStream();\n const headers = {};\n\n if (options.overwrite === false) {\n headers[\"If-None-Match\"] = \"*\";\n }\n\n const requestOptions = {\n url: joinURL(options.remoteURL, encodePath(filePath)),\n method: \"PUT\",\n headers,\n data: writeStream,\n maxRedirects: 0\n };\n prepareRequestOptions(requestOptions, options);\n request(requestOptions).then(response => {\n // Fire callback asynchronously to avoid errors\n setTimeout(callback, 0);\n return response;\n }).then(responseHandlers.handleResponseCode).catch(err => {\n writeStream.emit(\"error\", err);\n });\n return writeStream;\n}\n\nfunction getFileStream(filePath, options) {\n let rangeHeader;\n const headers = {};\n\n if (typeof options.range === \"object\" && typeof options.range.start === \"number\") {\n rangeHeader = \"bytes=\" + options.range.start + \"-\";\n\n if (typeof options.range.end === \"number\") {\n rangeHeader += options.range.end;\n }\n\n headers.Range = rangeHeader;\n }\n\n const requestOptions = {\n url: joinURL(options.remoteURL, encodePath(filePath)),\n method: \"GET\",\n headers,\n responseType: \"stream\"\n };\n prepareRequestOptions(requestOptions, options);\n return request(requestOptions).then(responseHandlers.handleResponseCode).then(res => res.data);\n}\n\nmodule.exports = {\n createReadStream,\n createWriteStream\n};","\"use strict\";\n\nconst {\n handleResponseCode\n} = require(\"../response.js\");\n\nconst {\n encodePath,\n joinURL,\n prepareRequestOptions,\n request\n} = require(\"../request.js\");\n\nfunction customRequest(remotePath, requestOptions, options) {\n if (!requestOptions.url) {\n requestOptions.url = joinURL(options.remoteURL, encodePath(remotePath));\n }\n\n prepareRequestOptions(requestOptions, options);\n return request(requestOptions).then(handleResponseCode);\n}\n\nmodule.exports = {\n customRequest\n};","\"use strict\";\n\nconst xmlParser = require(\"fast-xml-parser\");\n\nconst nestedProp = require(\"nested-property\");\n\nconst {\n decodeHTMLEntities\n} = require(\"../encode.js\");\n\nfunction getPropertyOfType(obj, prop, type) {\n const val = nestedProp.get(obj, prop);\n\n if (type === \"array\" && Array.isArray(val) === false) {\n return [val];\n } else if (type === \"object\" && Array.isArray(val)) {\n return val[0];\n }\n\n return val;\n}\n\nfunction normaliseResponse(response) {\n const output = Object.assign({}, response);\n nestedProp.set(output, \"propstat\", getPropertyOfType(output, \"propstat\", \"object\"));\n nestedProp.set(output, \"propstat.prop\", getPropertyOfType(output, \"propstat.prop\", \"object\"));\n return output;\n}\n\nfunction normaliseResult(result) {\n const {\n multistatus\n } = result;\n\n if (multistatus === \"\") {\n return {\n multistatus: {\n response: []\n }\n };\n }\n\n if (!multistatus) {\n throw new Error(\"Invalid response: No root multistatus found\");\n }\n\n const output = {};\n output.multistatus = Array.isArray(multistatus) ? multistatus[0] : multistatus;\n nestedProp.set(output, \"multistatus.response\", getPropertyOfType(output, \"multistatus.response\", \"array\"));\n nestedProp.set(output, \"multistatus.response\", nestedProp.get(output, \"multistatus.response\").map(response => normaliseResponse(response)));\n return output;\n}\n\nfunction parseXML(xml) {\n return new Promise(resolve => {\n const result = xmlParser.parse(xml, {\n arrayMode: false,\n ignoreNameSpace: true // // We don't use the processors here as decoding is done manually\n // // later on - decoding early would break some path checks.\n // attrValueProcessor: val => decodeHTMLEntities(decodeURIComponent(val)),\n // tagValueProcessor: val => decodeHTMLEntities(decodeURIComponent(val))\n\n });\n resolve(normaliseResult(result));\n });\n}\n\nfunction prepareFileFromProps(props, rawFilename, isDetailed = false) {\n const path = require(\"path-posix\"); // Last modified time, raw size, item type and mime\n\n\n const {\n getlastmodified: lastMod = null,\n getcontentlength: rawSize = \"0\",\n resourcetype: resourceType = null,\n getcontenttype: mimeType = null,\n getetag: etag = null\n } = props;\n const type = resourceType && typeof resourceType === \"object\" && typeof resourceType.collection !== \"undefined\" ? \"directory\" : \"file\";\n const filename = decodeHTMLEntities(rawFilename);\n const stat = {\n filename: filename,\n basename: path.basename(filename),\n lastmod: lastMod,\n size: parseInt(rawSize, 10),\n type: type,\n etag: typeof etag === \"string\" ? etag.replace(/\"/g, \"\") : null\n };\n\n if (type === \"file\") {\n stat.mime = mimeType && typeof mimeType === \"string\" ? mimeType.split(\";\")[0] : \"\";\n }\n\n if (isDetailed) {\n stat.props = props;\n }\n\n return stat;\n}\n\nfunction translateDiskSpace(value) {\n switch (value.toString()) {\n case \"-3\":\n return \"unlimited\";\n\n case \"-2\":\n /* falls-through */\n\n case \"-1\":\n // -1 is non-computed\n return \"unknown\";\n\n default:\n return parseInt(value, 10);\n }\n}\n\nmodule.exports = {\n parseXML,\n prepareFileFromProps,\n translateDiskSpace\n};","\"use strict\";\n\nconst responseHandlers = require(\"../response.js\");\n\nconst {\n encodePath,\n joinURL,\n prepareRequestOptions,\n request\n} = require(\"../request.js\");\n\nfunction deleteFile(filename, options) {\n const requestOptions = {\n url: joinURL(options.remoteURL, encodePath(filename)),\n method: \"DELETE\"\n };\n prepareRequestOptions(requestOptions, options);\n return request(requestOptions).then(responseHandlers.handleResponseCode);\n}\n\nmodule.exports = {\n deleteFile\n};","\"use strict\";\n\nconst pathPosix = require(\"path-posix\");\n\nconst {\n merge\n} = require(\"../merge.js\");\n\nconst {\n handleResponseCode,\n processGlobFilter,\n processResponsePayload\n} = require(\"../response.js\");\n\nconst {\n normaliseHREF,\n normalisePath\n} = require(\"../url.js\");\n\nconst {\n parseXML,\n prepareFileFromProps\n} = require(\"./dav.js\");\n\nconst {\n encodePath,\n joinURL,\n prepareRequestOptions,\n request\n} = require(\"../request.js\");\n\nfunction getDirectoryContents(remotePath, options) {\n const requestOptions = {\n url: joinURL(options.remoteURL, encodePath(remotePath), \"/\"),\n method: \"PROPFIND\",\n headers: {\n Accept: \"text/plain\",\n Depth: options.deep ? \"infinity\" : 1\n },\n responseType: \"text\"\n };\n let response = null;\n prepareRequestOptions(requestOptions, options);\n return request(requestOptions).then(handleResponseCode).then(res => {\n response = res;\n return res.data;\n }).then(parseXML).then(result => getDirectoryFiles(result, options.remotePath, remotePath, options.details)).then(files => processResponsePayload(response, files, options.details)).then(files => options.glob ? processGlobFilter(files, options.glob) : files);\n}\n\nfunction getDirectoryFiles(result, serverBasePath, requestPath, isDetailed = false) {\n const serverBase = pathPosix.join(serverBasePath, \"/\"); // Extract the response items (directory contents)\n\n const {\n multistatus: {\n response: responseItems\n }\n } = result;\n return responseItems // Map all items to a consistent output structure (results)\n .map(item => {\n // HREF is the file path (in full)\n const href = normaliseHREF(item.href); // Each item should contain a stat object\n\n const {\n propstat: {\n prop: props\n }\n } = item; // Process the true full filename (minus the base server path)\n\n const filename = serverBase === \"/\" ? decodeURIComponent(normalisePath(href)) : decodeURIComponent(normalisePath(pathPosix.relative(serverBase, href)));\n return prepareFileFromProps(props, filename, isDetailed);\n }) // Filter out the item pointing to the current directory (not needed)\n .filter(item => item.basename && (item.type === \"file\" || item.filename !== requestPath.replace(/\\/$/, \"\")));\n}\n\nmodule.exports = {\n getDirectoryContents\n};","\"use strict\";\n\nconst {\n getStat\n} = require(\"./stat.js\");\n\nfunction pathExists(remotePath, options) {\n return getStat(remotePath, options).then(() => true).catch(err => {\n if (err.response && err.response.status === 404) {\n return false;\n }\n\n throw err;\n });\n}\n\nmodule.exports = {\n pathExists\n};","\"use strict\";\n\nconst {\n handleResponseCode,\n processResponsePayload\n} = require(\"../response.js\");\n\nconst {\n encodePath,\n joinURL,\n prepareRequestOptions,\n request\n} = require(\"../request.js\");\n\nconst {\n fromBase64\n} = require(\"../encode.js\");\n\nfunction getFileContentsBuffer(filePath, options) {\n const requestOptions = {\n url: joinURL(options.remoteURL, encodePath(filePath)),\n method: \"GET\",\n responseType: \"arraybuffer\"\n };\n prepareRequestOptions(requestOptions, options);\n return request(requestOptions).then(handleResponseCode).then(res => processResponsePayload(res, res.data, options.details));\n}\n\nfunction getFileContentsString(filePath, options) {\n const requestOptions = {\n url: joinURL(options.remoteURL, encodePath(filePath)),\n method: \"GET\",\n responseType: \"text\"\n };\n prepareRequestOptions(requestOptions, options);\n return request(requestOptions).then(handleResponseCode).then(res => processResponsePayload(res, res.data, options.details));\n}\n\nfunction getFileLink(filePath, options) {\n let url = joinURL(options.remoteURL, encodePath(filePath));\n const protocol = /^https:/i.test(url) ? \"https\" : \"http\";\n\n if (options.headers && options.headers.Authorization) {\n if (/^Basic /i.test(options.headers.Authorization) === false) {\n throw new Error(\"Failed retrieving download link: Invalid authorisation method\");\n }\n\n const authPart = options.headers.Authorization.replace(/^Basic /i, \"\").trim();\n const authContents = fromBase64(authPart);\n url = url.replace(/^https?:\\/\\//, `${protocol}://${authContents}@`);\n }\n\n return url;\n}\n\nmodule.exports = {\n getFileContentsBuffer,\n getFileContentsString,\n getFileLink\n};","\"use strict\";\n\nconst responseHandlers = require(\"../response.js\");\n\nconst {\n encodePath,\n joinURL,\n prepareRequestOptions,\n request\n} = require(\"../request.js\");\n\nfunction moveFile(filename, destination, options) {\n const requestOptions = {\n url: joinURL(options.remoteURL, encodePath(filename)),\n method: \"MOVE\",\n headers: {\n Destination: joinURL(options.remoteURL, encodePath(destination))\n }\n };\n prepareRequestOptions(requestOptions, options);\n return request(requestOptions).then(responseHandlers.handleResponseCode);\n}\n\nmodule.exports = {\n moveFile\n};","\"use strict\";\n\nconst {\n merge\n} = require(\"../merge.js\");\n\nconst responseHandlers = require(\"../response.js\");\n\nconst {\n encodePath,\n joinURL,\n prepareRequestOptions,\n request\n} = require(\"../request.js\");\n\nconst {\n fromBase64\n} = require(\"../encode.js\");\n\nfunction getPutContentsDefaults() {\n return {\n headers: {\n \"Content-Type\": \"application/octet-stream\"\n },\n overwrite: true\n };\n}\n\nfunction putFileContents(filePath, data, options) {\n const headers = {\n \"Content-Length\": data.length\n };\n\n if (typeof WEB === \"undefined\") {\n // We're running under NodeJS, so it's safe to check if the\n // input is a stream\n const stream = require(\"stream\");\n\n if (data instanceof stream.Readable) {\n // Input was a stream, remove the content length as this\n // is not known yet\n delete headers[\"Content-Length\"];\n }\n }\n\n const putOptions = merge(getPutContentsDefaults(), {\n headers\n }, options || {});\n\n if (putOptions.overwrite === false) {\n putOptions.headers[\"If-None-Match\"] = \"*\";\n }\n\n const requestOptions = {\n url: joinURL(options.remoteURL, encodePath(filePath)),\n method: \"PUT\",\n headers: putOptions.headers,\n data\n };\n prepareRequestOptions(requestOptions, options);\n return request(requestOptions).then(responseHandlers.handleResponseCode);\n}\n\nfunction getFileUploadLink(filePath, options) {\n let url = joinURL(options.remoteURL, encodePath(filePath));\n url += \"?Content-Type=application/octet-stream\";\n const protocol = /^https:/i.test(url) ? \"https\" : \"http\";\n\n if (options.headers && options.headers.Authorization) {\n if (/^Basic /i.test(options.headers.Authorization) === false) {\n throw new Error(\"Failed retrieving download link: Invalid authorisation method\");\n }\n\n const authPart = options.headers.Authorization.replace(/^Basic /i, \"\").trim();\n const authContents = fromBase64(authPart);\n url = url.replace(/^https?:\\/\\//, `${protocol}://${authContents}@`);\n }\n\n return url;\n}\n\nmodule.exports = {\n getFileUploadLink,\n putFileContents\n};","\"use strict\";\n\nconst {\n handleResponseCode,\n processResponsePayload\n} = require(\"../response.js\");\n\nconst {\n encodePath,\n joinURL,\n prepareRequestOptions,\n request\n} = require(\"../request.js\");\n\nconst {\n parseXML,\n translateDiskSpace\n} = require(\"./dav.js\");\n\nfunction getQuota(options) {\n const requestOptions = {\n url: joinURL(options.remoteURL, \"/\"),\n method: \"PROPFIND\",\n headers: {\n Accept: \"text/plain\",\n Depth: 0\n },\n responseType: \"text\"\n };\n let response = null;\n prepareRequestOptions(requestOptions, options);\n return request(requestOptions).then(handleResponseCode).then(res => {\n response = res;\n return res.data;\n }).then(parseXML).then(parseQuota).then(result => processResponsePayload(response, result, options.details));\n}\n\nfunction parseQuota(result) {\n try {\n const [responseItem] = result.multistatus.response;\n const {\n propstat: {\n prop: {\n \"quota-used-bytes\": quotaUsed,\n \"quota-available-bytes\": quotaAvail\n }\n }\n } = responseItem;\n return typeof quotaUsed !== \"undefined\" && typeof quotaAvail !== \"undefined\" ? {\n used: parseInt(quotaUsed, 10),\n available: translateDiskSpace(quotaAvail)\n } : null;\n } catch (err) {\n /* ignore */\n }\n\n return null;\n}\n\nmodule.exports = {\n getQuota\n};","\"use strict\";\n\nconst {\n merge\n} = require(\"../merge.js\");\n\nconst {\n handleResponseCode,\n processResponsePayload\n} = require(\"../response.js\");\n\nconst {\n parseXML,\n prepareFileFromProps\n} = require(\"./dav.js\");\n\nconst urlTools = require(\"../url.js\");\n\nconst {\n encodePath,\n joinURL,\n prepareRequestOptions,\n request\n} = require(\"../request.js\");\n\nfunction getStat(filename, options) {\n const requestOptions = {\n url: joinURL(options.remoteURL, encodePath(filename)),\n method: \"PROPFIND\",\n headers: {\n Accept: \"text/plain\",\n Depth: 0\n },\n responseType: \"text\"\n };\n let response = null;\n prepareRequestOptions(requestOptions, options);\n return request(requestOptions).then(handleResponseCode).then(res => {\n response = res;\n return res.data;\n }).then(parseXML).then(xml => parseStat(xml, filename, options.details)).then(result => processResponsePayload(response, result, options.details));\n}\n\nfunction parseStat(result, filename, isDetailed = false) {\n let responseItem = null;\n\n try {\n responseItem = result.multistatus.response[0];\n } catch (e) {\n /* ignore */\n }\n\n if (!responseItem) {\n throw new Error(\"Failed getting item stat: bad response\");\n }\n\n const {\n propstat: {\n prop: props\n }\n } = responseItem;\n const filePath = urlTools.normalisePath(filename);\n return prepareFileFromProps(props, filePath, isDetailed);\n}\n\nmodule.exports = {\n getStat,\n parseStat\n};","\"use strict\";\n\nfunction clone(obj) {\n return isPlainObject(obj) ? Object.assign({}, obj) : Object.setPrototypeOf(Object.assign({}, obj), Object.getPrototypeOf(obj));\n}\n\nfunction isPlainObject(obj) {\n if (typeof obj !== \"object\" || obj === null || Object.prototype.toString.call(obj) != \"[object Object]\") {\n // Not an object\n return false;\n }\n\n if (Object.getPrototypeOf(obj) === null) {\n return true;\n }\n\n let proto = obj; // Find the prototype\n\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n\n return Object.getPrototypeOf(obj) === proto;\n}\n\nfunction merge(...args) {\n let output = null,\n items = [...args];\n\n while (items.length > 0) {\n const nextItem = items.shift();\n\n if (!output) {\n output = clone(nextItem);\n } else {\n output = mergeObjects(output, nextItem);\n }\n }\n\n return output;\n}\n\nfunction mergeObjects(obj1, obj2) {\n const output = clone(obj1);\n Object.keys(obj2).forEach(key => {\n if (!output.hasOwnProperty(key)) {\n output[key] = obj2[key];\n return;\n }\n\n if (Array.isArray(obj2[key])) {\n output[key] = Array.isArray(output[key]) ? [...output[key], ...obj2[key]] : [...obj2[key]];\n } else if (typeof obj2[key] === \"object\" && !!obj2[key]) {\n output[key] = typeof output[key] === \"object\" && !!output[key] ? mergeObjects(output[key], obj2[key]) : clone(obj2[key]);\n } else {\n output[key] = obj2[key];\n }\n });\n return output;\n}\n\nmodule.exports = {\n merge\n};","\"use strict\";\n\nconst HotPatcher = require(\"hot-patcher\");\n\nlet __patcher = null;\n/**\n * Get the HotPatcher instance for patching internal methods\n * @returns {HotPatcher} The internal HotPatcher instance\n */\n\nfunction getPatcher() {\n if (!__patcher) {\n __patcher = new HotPatcher();\n }\n\n return __patcher;\n}\n\nmodule.exports = {\n getPatcher\n};","\"use strict\";\n\nconst axios = require(\"axios\");\n\nconst joinURLParts = require(\"url-join\");\n\nconst fetch = require(\"./fetch.js\");\n\nconst {\n merge\n} = require(\"./merge.js\");\n\nconst SEP_PATH_POSIX = \"__PATH_SEPARATOR_POSIX__\";\nconst SEP_PATH_WINDOWS = \"__PATH_SEPARATOR_WINDOWS__\";\n/**\n * Encode a path for use with WebDAV servers\n * @param {String} path The path to encode\n * @returns {String} The encoded path (separators protected)\n */\n\nfunction encodePath(path) {\n const replaced = path.replace(/\\//g, SEP_PATH_POSIX).replace(/\\\\\\\\/g, SEP_PATH_WINDOWS);\n const formatted = encodeURIComponent(replaced);\n return formatted.split(SEP_PATH_WINDOWS).join(\"\\\\\\\\\").split(SEP_PATH_POSIX).join(\"/\");\n}\n/**\n * Join URL segments\n * @param {...String} parts URL segments to join\n * @returns {String} A joined URL string\n */\n\n\nfunction joinURL(...parts) {\n return joinURLParts(parts.reduce((output, nextPart, partIndex) => {\n if (partIndex === 0 || nextPart !== \"/\" || nextPart === \"/\" && output[output.length - 1] !== \"/\") {\n output.push(nextPart);\n }\n\n return output;\n }, []));\n}\n/**\n * @typedef {Object} UserOptions\n * @property {Object=} httpAgent - HTTP agent instance\n * @property {Object=} httpsAgent - HTTPS agent instance\n * @property {Object=} headers - Set additional request headers\n * @property {Boolean=} withCredentials - Set whether or not credentials should\n * @property {Object|String|*=} data - Set additional body\n * be included with the request. Defaults to value used by axios.\n */\n\n/**\n * Process request options before being passed to Axios\n * @param {RequestOptions} requestOptions The request options object\n * @param {UserOptions} methodOptions Provided options (external)\n */\n\n\nfunction prepareRequestOptions(requestOptions, methodOptions) {\n if (methodOptions.httpAgent) {\n requestOptions.httpAgent = methodOptions.httpAgent;\n }\n\n if (methodOptions.httpsAgent) {\n requestOptions.httpsAgent = methodOptions.httpsAgent;\n }\n\n if (methodOptions.data) {\n requestOptions.data = methodOptions.data;\n }\n\n if (methodOptions.headers && typeof methodOptions.headers === \"object\") {\n requestOptions.headers = merge(requestOptions.headers || {}, methodOptions.headers);\n }\n\n if (typeof methodOptions.withCredentials === \"boolean\") {\n requestOptions.withCredentials = methodOptions.withCredentials;\n }\n\n if (methodOptions.maxContentLength) {\n requestOptions.maxContentLength = methodOptions.maxContentLength;\n }\n\n if (methodOptions.maxBodyLength) {\n requestOptions.maxBodyLength = methodOptions.maxBodyLength;\n }\n\n if (methodOptions.onUploadProgress && typeof methodOptions.onUploadProgress === \"function\") {\n requestOptions.onUploadProgress = methodOptions.onUploadProgress;\n }\n\n if (methodOptions._digest) {\n requestOptions._digest = methodOptions._digest;\n\n requestOptions.validateStatus = status => status >= 200 && status < 300 || status == 401;\n }\n}\n/**\n * @typedef {Object} RequestOptions\n * @property {String} url - The URL to request\n * @property {String} method - The method to use (eg. \"POST\")\n * @property {Object=} headers - Headers to set on the request\n * @property {Object=} httpAgent - A HTTP agent instance\n * @property {Object=} httpsAgent - A HTTPS agent interface\n * @property {Object|String|*=} data - Body data for the request\n */\n\n/**\n * Make a request\n * This method can be patched by patching or plugging-in to the \"request\"\n * item using {@link https://github.com/perry-mitchell/hot-patcher HotPatcher}.\n * It uses {@link https://github.com/axios/axios Axios} by default.\n * @param {RequestOptions} requestOptions Options for the request\n * @returns {Promise.<Object>} A promise that resolves with a response object\n */\n\n\nfunction request(requestOptions) {\n return fetch(requestOptions);\n}\n\nmodule.exports = {\n axios,\n encodePath,\n joinURL,\n prepareRequestOptions,\n request\n};","\"use strict\";\n\nconst minimatch = require(\"minimatch\");\n\nfunction handleResponseCode(response) {\n const status = parseInt(response.status, 10);\n let err;\n\n if (status >= 400) {\n err = new Error(\"Invalid response: \" + status + \" \" + response.statusText);\n err.status = status;\n throw err;\n }\n\n return response;\n}\n\nfunction processGlobFilter(files, glob) {\n return files.filter(file => minimatch(file.filename, glob, {\n matchBase: true\n }));\n}\n\nfunction processResponsePayload(response, data, isDetailed = false) {\n return isDetailed ? {\n data,\n headers: response.headers || {}\n } : data;\n}\n\nmodule.exports = {\n handleResponseCode,\n processGlobFilter,\n processResponsePayload\n};","\"use strict\";\n\nconst URL = require(\"url-parse\");\n\nfunction extractURLPath(fullURL) {\n const url = new URL(fullURL);\n let urlPath = url.pathname;\n\n if (urlPath.length <= 0) {\n urlPath = \"/\";\n }\n\n return normalisePath(urlPath);\n}\n\nfunction normaliseHREF(href) {\n const normalisedHref = href.replace(/^https?:\\/\\/[^\\/]+/, \"\");\n return normalisedHref;\n}\n\nfunction normalisePath(pathStr) {\n let normalisedPath = pathStr;\n\n if (normalisedPath[0] !== \"/\") {\n normalisedPath = \"/\" + normalisedPath;\n }\n\n if (/^.+\\/$/.test(normalisedPath)) {\n normalisedPath = normalisedPath.substr(0, normalisedPath.length - 1);\n }\n\n return normalisedPath;\n}\n\nmodule.exports = {\n extractURLPath,\n normaliseHREF,\n normalisePath\n};","'use strict';\nmodule.exports = balanced;\nfunction balanced(a, b, str) {\n if (a instanceof RegExp) a = maybeMatch(a, str);\n if (b instanceof RegExp) b = maybeMatch(b, str);\n\n var r = range(a, b, str);\n\n return r && {\n start: r[0],\n end: r[1],\n pre: str.slice(0, r[0]),\n body: str.slice(r[0] + a.length, r[1]),\n post: str.slice(r[1] + b.length)\n };\n}\n\nfunction maybeMatch(reg, str) {\n var m = str.match(reg);\n return m ? m[0] : null;\n}\n\nbalanced.range = range;\nfunction range(a, b, str) {\n var begs, beg, left, right, result;\n var ai = str.indexOf(a);\n var bi = str.indexOf(b, ai + 1);\n var i = ai;\n\n if (ai >= 0 && bi > 0) {\n begs = [];\n left = str.length;\n\n while (i >= 0 && !result) {\n if (i == ai) {\n begs.push(i);\n ai = str.indexOf(a, i + 1);\n } else if (begs.length == 1) {\n result = [ begs.pop(), bi ];\n } else {\n beg = begs.pop();\n if (beg < left) {\n left = beg;\n right = bi;\n }\n\n bi = str.indexOf(b, i + 1);\n }\n\n i = ai < bi && ai >= 0 ? ai : bi;\n }\n\n if (begs.length) {\n result = [ left, right ];\n }\n }\n\n return result;\n}\n","/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [number & 0x3ffffff];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [0];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this._strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // '0' - '9'\n if (c >= 48 && c <= 57) {\n return c - 48;\n // 'A' - 'F'\n } else if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n } else {\n assert(false, 'Invalid character in ' + string);\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this._strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var b = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n b = c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n b = c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n b = c;\n }\n assert(c >= 0 && b < mul, 'Invalid character');\n r += b;\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [0];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this._strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n function move (dest, src) {\n dest.words = src.words;\n dest.length = src.length;\n dest.negative = src.negative;\n dest.red = src.red;\n }\n\n BN.prototype._move = function _move (dest) {\n move(dest, this);\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype._strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n // Check Symbol.for because not everywhere where Symbol defined\n // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#Browser_compatibility\n if (typeof Symbol !== 'undefined' && typeof Symbol.for === 'function') {\n try {\n BN.prototype[Symbol.for('nodejs.util.inspect.custom')] = inspect;\n } catch (e) {\n BN.prototype.inspect = inspect;\n }\n } else {\n BN.prototype.inspect = inspect;\n }\n\n function inspect () {\n return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n }\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n 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","var concatMap = require('concat-map');\nvar balanced = require('balanced-match');\n\nmodule.exports = expandTop;\n\nvar escSlash = '\\0SLASH'+Math.random()+'\\0';\nvar escOpen = '\\0OPEN'+Math.random()+'\\0';\nvar escClose = '\\0CLOSE'+Math.random()+'\\0';\nvar escComma = '\\0COMMA'+Math.random()+'\\0';\nvar escPeriod = '\\0PERIOD'+Math.random()+'\\0';\n\nfunction numeric(str) {\n return parseInt(str, 10) == str\n ? parseInt(str, 10)\n : str.charCodeAt(0);\n}\n\nfunction escapeBraces(str) {\n return str.split('\\\\\\\\').join(escSlash)\n .split('\\\\{').join(escOpen)\n .split('\\\\}').join(escClose)\n .split('\\\\,').join(escComma)\n .split('\\\\.').join(escPeriod);\n}\n\nfunction unescapeBraces(str) {\n return str.split(escSlash).join('\\\\')\n .split(escOpen).join('{')\n .split(escClose).join('}')\n .split(escComma).join(',')\n .split(escPeriod).join('.');\n}\n\n\n// Basically just str.split(\",\"), but handling cases\n// where we have nested braced sections, which should be\n// treated as individual members, like {a,{b,c},d}\nfunction parseCommaParts(str) {\n if (!str)\n return [''];\n\n var parts = [];\n var m = balanced('{', '}', str);\n\n if (!m)\n return str.split(',');\n\n var pre = m.pre;\n var body = m.body;\n var post = m.post;\n var p = pre.split(',');\n\n p[p.length-1] += '{' + body + '}';\n var postParts = parseCommaParts(post);\n if (post.length) {\n p[p.length-1] += postParts.shift();\n p.push.apply(p, postParts);\n }\n\n parts.push.apply(parts, p);\n\n return parts;\n}\n\nfunction expandTop(str) {\n if (!str)\n return [];\n\n // I don't know why Bash 4.3 does this, but it does.\n // Anything starting with {} will have the first two bytes preserved\n // but *only* at the top level, so {},a}b will not expand to anything,\n // but a{},b}c will be expanded to [a}c,abc].\n // One could argue that this is a bug in Bash, but since the goal of\n // this module is to match Bash's rules, we escape a leading {}\n if (str.substr(0, 2) === '{}') {\n str = '\\\\{\\\\}' + str.substr(2);\n }\n\n return expand(escapeBraces(str), true).map(unescapeBraces);\n}\n\nfunction identity(e) {\n return e;\n}\n\nfunction embrace(str) {\n return '{' + str + '}';\n}\nfunction isPadded(el) {\n return /^-?0\\d/.test(el);\n}\n\nfunction lte(i, y) {\n return i <= y;\n}\nfunction gte(i, y) {\n return i >= y;\n}\n\nfunction expand(str, isTop) {\n var expansions = [];\n\n var m = balanced('{', '}', str);\n if (!m || /\\$$/.test(m.pre)) return [str];\n\n var isNumericSequence = /^-?\\d+\\.\\.-?\\d+(?:\\.\\.-?\\d+)?$/.test(m.body);\n var isAlphaSequence = /^[a-zA-Z]\\.\\.[a-zA-Z](?:\\.\\.-?\\d+)?$/.test(m.body);\n var isSequence = isNumericSequence || isAlphaSequence;\n var isOptions = m.body.indexOf(',') >= 0;\n if (!isSequence && !isOptions) {\n // {a},b}\n if (m.post.match(/,.*\\}/)) {\n str = m.pre + '{' + m.body + escClose + m.post;\n return expand(str);\n }\n return [str];\n }\n\n var n;\n if (isSequence) {\n n = m.body.split(/\\.\\./);\n } else {\n n = parseCommaParts(m.body);\n if (n.length === 1) {\n // x{{a,b}}y ==> x{a}y x{b}y\n n = expand(n[0], false).map(embrace);\n if (n.length === 1) {\n var post = m.post.length\n ? expand(m.post, false)\n : [''];\n return post.map(function(p) {\n return m.pre + n[0] + p;\n });\n }\n }\n }\n\n // at this point, n is the parts, and we know it's not a comma set\n // with a single entry.\n\n // no need to expand pre, since it is guaranteed to be free of brace-sets\n var pre = m.pre;\n var post = m.post.length\n ? expand(m.post, false)\n : [''];\n\n var N;\n\n if (isSequence) {\n var x = numeric(n[0]);\n var y = numeric(n[1]);\n var width = Math.max(n[0].length, n[1].length)\n var incr = n.length == 3\n ? Math.abs(numeric(n[2]))\n : 1;\n var test = lte;\n var reverse = y < x;\n if (reverse) {\n incr *= -1;\n test = gte;\n }\n var pad = n.some(isPadded);\n\n N = [];\n\n for (var i = x; test(i, y); i += incr) {\n var c;\n if (isAlphaSequence) {\n c = String.fromCharCode(i);\n if (c === '\\\\')\n c = '';\n } else {\n c = String(i);\n if (pad) {\n var need = width - c.length;\n if (need > 0) {\n var z = new Array(need + 1).join('0');\n if (i < 0)\n c = '-' + z + c.slice(1);\n else\n c = z + c;\n }\n }\n }\n N.push(c);\n }\n } else {\n N = concatMap(n, function(el) { return expand(el, false) });\n }\n\n for (var j = 0; j < N.length; j++) {\n for (var k = 0; k < post.length; k++) {\n var expansion = pre + N[j] + post[k];\n if (!isTop || isSequence || expansion)\n expansions.push(expansion);\n }\n }\n\n return expansions;\n}\n\n","var r;\n\nmodule.exports = function rand(len) {\n if (!r)\n r = new Rand(null);\n\n return r.generate(len);\n};\n\nfunction Rand(rand) {\n this.rand = rand;\n}\nmodule.exports.Rand = Rand;\n\nRand.prototype.generate = function generate(len) {\n return this._rand(len);\n};\n\n// Emulate crypto API using randy\nRand.prototype._rand = function _rand(n) {\n if (this.rand.getBytes)\n return this.rand.getBytes(n);\n\n var res = new Uint8Array(n);\n for (var i = 0; i < res.length; i++)\n res[i] = this.rand.getByte();\n return res;\n};\n\nif (typeof self === 'object') {\n if (self.crypto && self.crypto.getRandomValues) {\n // Modern browsers\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.crypto.getRandomValues(arr);\n return arr;\n };\n } else if (self.msCrypto && self.msCrypto.getRandomValues) {\n // IE\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.msCrypto.getRandomValues(arr);\n return arr;\n };\n\n // Safari's WebWorkers do not have `crypto`\n } else if (typeof window === 'object') {\n // Old junk\n Rand.prototype._rand = function() {\n throw new Error('Not implemented yet');\n };\n }\n} else {\n // Node.js or Web worker with no crypto support\n try {\n var crypto = require('crypto');\n if (typeof crypto.randomBytes !== 'function')\n throw new Error('Not supported');\n\n Rand.prototype._rand = function _rand(n) {\n return crypto.randomBytes(n);\n };\n } catch (e) {\n }\n}\n","// 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","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","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 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","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","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","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","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","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","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 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 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","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","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","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 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","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","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","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","var BN = require('bn.js')\nvar randomBytes = require('randombytes')\n\nfunction blind (priv) {\n var r = getr(priv)\n var blinder = r.toRed(BN.mont(priv.modulus)).redPow(new BN(priv.publicExponent)).fromRed()\n return { blinder: blinder, unblinder: r.invm(priv.modulus) }\n}\n\nfunction getr (priv) {\n var len = priv.modulus.byteLength()\n var r\n do {\n r = new BN(randomBytes(len))\n } while (r.cmp(priv.modulus) >= 0 || !r.umod(priv.prime1) || !r.umod(priv.prime2))\n return r\n}\n\nfunction crt (msg, priv) {\n var blinds = blind(priv)\n var len = priv.modulus.byteLength()\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).fromRed()\n var m2 = c2.redPow(priv.exponent2).fromRed()\n var h = m1.isub(m2).imul(qinv).umod(p).imul(q)\n return m2.iadd(h).imul(blinds.unblinder).umod(priv.modulus).toArrayLike(Buffer, 'be', len)\n}\ncrt.getr = getr\n\nmodule.exports = crt\n","module.exports = require('./browser/algorithms.json')\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","// 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","// 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';\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","// 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/*<replacement>*/\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/*</replacement>*/\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});","// 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};","// 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/*<replacement>*/\n\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n/*<replacement>*/\n\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\n\n\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\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/*<replacement>*/\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/*</replacement>*/\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}","// 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}","// 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/* <replacement> */\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/* </replacement> */\n\n/*<replacement>*/\n\n\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n/*<replacement>*/\n\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\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';\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\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}();","'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};","// 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;","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;","'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};","module.exports = require('events').EventEmitter;\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","/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\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","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","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <https://feross.org>\n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n const arr = new Uint8Array(1)\n const proto = { foo: function () { return 42 } }\n Object.setPrototypeOf(proto, Uint8Array.prototype)\n Object.setPrototypeOf(arr, proto)\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n const buf = new Uint8Array(length)\n Object.setPrototypeOf(buf, Buffer.prototype)\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value)\n }\n\n if (value == null) {\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' &&\n (isInstance(value, SharedArrayBuffer) ||\n (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n const valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n const b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n const length = byteLength(string, encoding) | 0\n let buf = createBuffer(length)\n\n const actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n const length = array.length < 0 ? 0 : checked(array.length) | 0\n const buf = createBuffer(length)\n for (let i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayView (arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n const copy = new Uint8Array(arrayView)\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n }\n return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n let buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(buf, Buffer.prototype)\n\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n const len = checked(obj.length) | 0\n const buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n let x = a.length\n let y = b.length\n\n for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n let i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n const buffer = Buffer.allocUnsafe(length)\n let pos = 0\n for (i = 0; i < list.length; ++i) {\n let buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n buf.copy(buffer, pos)\n } else {\n Uint8Array.prototype.set.call(\n buffer,\n buf,\n pos\n )\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n } else {\n buf.copy(buffer, pos)\n }\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n const len = string.length\n const mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n let loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n const i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n const len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (let i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n const len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (let i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n const len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (let i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n const length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n let str = ''\n const max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return '<Buffer ' + str + '>'\n}\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n let x = thisEnd - thisStart\n let y = end - start\n const len = Math.min(x, y)\n\n const thisCopy = this.slice(thisStart, thisEnd)\n const targetCopy = target.slice(start, end)\n\n for (let i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n let indexSize = 1\n let arrLength = arr.length\n let valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n let i\n if (dir) {\n let foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n let found = true\n for (let j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n const remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n const strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n let i\n for (i = 0; i < length; ++i) {\n const parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n const remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n case 'latin1':\n case 'binary':\n return asciiWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n const res = []\n\n let i = start\n while (i < end) {\n const firstByte = buf[i]\n let codePoint = null\n let bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n const len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n let res = ''\n let i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n const len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n let out = ''\n for (let i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n const bytes = buf.slice(start, end)\n let res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (let i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n const len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n const newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n let val = this[offset + --byteLength]\n let mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const lo = first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24\n\n const hi = this[++offset] +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n last * 2 ** 24\n\n return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const hi = first * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n const lo = this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last\n\n return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let i = byteLength\n let mul = 1\n let val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = this[offset + 4] +\n this[offset + 5] * 2 ** 8 +\n this[offset + 6] * 2 ** 16 +\n (last << 24) // Overflow\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = (first << 24) + // Overflow\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let mul = 1\n let i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let i = byteLength - 1\n let mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset + 7] = lo\n lo = lo >> 8\n buf[offset + 6] = lo\n lo = lo >> 8\n buf[offset + 5] = lo\n lo = lo >> 8\n buf[offset + 4] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset + 3] = hi\n hi = hi >> 8\n buf[offset + 2] = hi\n hi = hi >> 8\n buf[offset + 1] = hi\n hi = hi >> 8\n buf[offset] = hi\n return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = 0\n let mul = 1\n let sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = byteLength - 1\n let mul = 1\n let sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n const len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n const code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n } else if (typeof val === 'boolean') {\n val = Number(val)\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n let i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n const bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n const len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n errors[sym] = class NodeError extends Base {\n constructor () {\n super()\n\n Object.defineProperty(this, 'message', {\n value: getMessage.apply(this, arguments),\n writable: true,\n configurable: true\n })\n\n // Add the error code to the name to include it in the stack trace.\n this.name = `${this.name} [${sym}]`\n // Access the stack to generate the error message including the error code\n // from the name.\n this.stack // eslint-disable-line no-unused-expressions\n // Reset the name to the actual name.\n delete this.name\n }\n\n get code () {\n return sym\n }\n\n set code (value) {\n Object.defineProperty(this, 'code', {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n })\n }\n\n toString () {\n return `${this.name} [${sym}]: ${this.message}`\n }\n }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n function (name) {\n if (name) {\n return `${name} is outside of buffer bounds`\n }\n\n return 'Attempt to access memory outside buffer bounds'\n }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n function (name, actual) {\n return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n }, TypeError)\nE('ERR_OUT_OF_RANGE',\n function (str, range, input) {\n let msg = `The value of \"${str}\" is out of range.`\n let received = input\n if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n received = addNumericalSeparator(String(input))\n } else if (typeof input === 'bigint') {\n received = String(input)\n if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n received = addNumericalSeparator(received)\n }\n received += 'n'\n }\n msg += ` It must be ${range}. Received ${received}`\n return msg\n }, RangeError)\n\nfunction addNumericalSeparator (val) {\n let res = ''\n let i = val.length\n const start = val[0] === '-' ? 1 : 0\n for (; i >= start + 4; i -= 3) {\n res = `_${val.slice(i - 3, i)}${res}`\n }\n return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n validateNumber(offset, 'offset')\n if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n boundsError(offset, buf.length - (byteLength + 1))\n }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n if (value > max || value < min) {\n const n = typeof min === 'bigint' ? 'n' : ''\n let range\n if (byteLength > 3) {\n if (min === 0 || min === BigInt(0)) {\n range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n } else {\n range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n `${(byteLength + 1) * 8 - 1}${n}`\n }\n } else {\n range = `>= ${min}${n} and <= ${max}${n}`\n }\n throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n }\n checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n if (typeof value !== 'number') {\n throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n }\n}\n\nfunction boundsError (value, length, type) {\n if (Math.floor(value) !== value) {\n validateNumber(value, type)\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n }\n\n if (length < 0) {\n throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n }\n\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n `>= ${type ? 1 : 0} and <= ${length}`,\n value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n let codePoint\n const length = string.length\n let leadSurrogate = null\n const bytes = []\n\n for (let i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n let c, hi, lo\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n let i\n for (i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n const alphabet = '0123456789abcdef'\n const table = new Array(256)\n for (let i = 0; i < 16; ++i) {\n const i16 = i * 16\n for (let j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n throw new Error('BigInt not supported')\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","module.exports = function (xs, fn) {\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n var x = fn(xs[i], i);\n if (isArray(x)) res.push.apply(res, x);\n else res.push(x);\n }\n return res;\n};\n\nvar isArray = Array.isArray || function (xs) {\n return Object.prototype.toString.call(xs) === '[object Array]';\n};\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","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n 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'\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","var MD5 = require('md5.js')\n\nmodule.exports = function (buffer) {\n return new MD5().update(buffer).digest()\n}\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'\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","'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","'use strict';\n\nexports.utils = require('./des/utils');\nexports.Cipher = require('./des/cipher');\nexports.DES = require('./des/des');\nexports.CBC = require('./des/cbc');\nexports.EDE = require('./des/ede');\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar proto = {};\n\nfunction CBCState(iv) {\n assert.equal(iv.length, 8, 'Invalid IV length');\n\n this.iv = new Array(8);\n for (var i = 0; i < this.iv.length; i++)\n this.iv[i] = iv[i];\n}\n\nfunction instantiate(Base) {\n function CBC(options) {\n Base.call(this, options);\n this._cbcInit();\n }\n inherits(CBC, Base);\n\n var keys = Object.keys(proto);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n CBC.prototype[key] = proto[key];\n }\n\n CBC.create = function create(options) {\n return new CBC(options);\n };\n\n return CBC;\n}\n\nexports.instantiate = instantiate;\n\nproto._cbcInit = function _cbcInit() {\n var state = new CBCState(this.options.iv);\n this._cbcState = state;\n};\n\nproto._update = function _update(inp, inOff, out, outOff) {\n var state = this._cbcState;\n var superProto = this.constructor.super_.prototype;\n\n var iv = state.iv;\n if (this.type === 'encrypt') {\n for (var i = 0; i < this.blockSize; i++)\n iv[i] ^= inp[inOff + i];\n\n superProto._update.call(this, iv, 0, out, outOff);\n\n for (var i = 0; i < this.blockSize; i++)\n iv[i] = out[outOff + i];\n } else {\n superProto._update.call(this, inp, inOff, out, outOff);\n\n for (var i = 0; i < this.blockSize; i++)\n out[outOff + i] ^= iv[i];\n\n for (var i = 0; i < this.blockSize; i++)\n iv[i] = inp[inOff + i];\n }\n};\n","'use strict';\n\nvar assert = require('minimalistic-assert');\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\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","'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","'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","var generatePrime = require('./lib/generatePrime')\nvar primes = require('./lib/primes.json')\n\nvar DH = require('./lib/dh')\n\nfunction getDiffieHellman (mod) {\n var prime = new Buffer(primes[mod].prime, 'hex')\n var gen = new Buffer(primes[mod].gen, 'hex')\n\n return new DH(prime, gen)\n}\n\nvar ENCODINGS = {\n 'binary': true, 'hex': true, 'base64': true\n}\n\nfunction createDiffieHellman (prime, enc, generator, genc) {\n if (Buffer.isBuffer(enc) || ENCODINGS[enc] === undefined) {\n return createDiffieHellman(prime, 'binary', enc, generator)\n }\n\n enc = enc || 'binary'\n genc = genc || 'binary'\n generator = generator || new Buffer([2])\n\n if (!Buffer.isBuffer(generator)) {\n generator = new Buffer(generator, genc)\n }\n\n if (typeof prime === 'number') {\n return new DH(generatePrime(prime, generator), generator, true)\n }\n\n if (!Buffer.isBuffer(prime)) {\n prime = new Buffer(prime, enc)\n }\n\n return new DH(prime, generator, true)\n}\n\nexports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffieHellman = getDiffieHellman\nexports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman\n","var BN = require('bn.js');\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar TWENTYFOUR = new BN(24);\nvar ELEVEN = new BN(11);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar primes = require('./generatePrime');\nvar randomBytes = require('randombytes');\nmodule.exports = DH;\n\nfunction setPublicKey(pub, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(pub)) {\n pub = new Buffer(pub, enc);\n }\n this._pub = new BN(pub);\n return this;\n}\n\nfunction setPrivateKey(priv, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(priv)) {\n priv = new Buffer(priv, enc);\n }\n this._priv = new BN(priv);\n return this;\n}\n\nvar primeCache = {};\nfunction checkPrime(prime, generator) {\n var gen = generator.toString('hex');\n var hex = [gen, prime.toString(16)].join('_');\n if (hex in primeCache) {\n return primeCache[hex];\n }\n var error = 0;\n\n if (prime.isEven() ||\n !primes.simpleSieve ||\n !primes.fermatTest(prime) ||\n !millerRabin.test(prime)) {\n //not a prime so +1\n error += 1;\n\n if (gen === '02' || gen === '05') {\n // we'd be able to check the generator\n // it would fail so +8\n error += 8;\n } else {\n //we wouldn't be able to test the generator\n // so +4\n error += 4;\n }\n primeCache[hex] = error;\n return error;\n }\n if (!millerRabin.test(prime.shrn(1))) {\n //not a safe prime\n error += 2;\n }\n var rem;\n switch (gen) {\n case '02':\n if (prime.mod(TWENTYFOUR).cmp(ELEVEN)) {\n // unsuidable generator\n error += 8;\n }\n break;\n case '05':\n rem = prime.mod(TEN);\n if (rem.cmp(THREE) && rem.cmp(SEVEN)) {\n // prime mod 10 needs to equal 3 or 7\n error += 8;\n }\n break;\n default:\n error += 4;\n }\n primeCache[hex] = error;\n return error;\n}\n\nfunction DH(prime, generator, malleable) {\n this.setGenerator(generator);\n this.__prime = new BN(prime);\n this._prime = BN.mont(this.__prime);\n this._primeLen = prime.length;\n this._pub = undefined;\n this._priv = undefined;\n this._primeCode = undefined;\n if (malleable) {\n this.setPublicKey = setPublicKey;\n this.setPrivateKey = setPrivateKey;\n } else {\n this._primeCode = 8;\n }\n}\nObject.defineProperty(DH.prototype, 'verifyError', {\n enumerable: true,\n get: function () {\n if (typeof this._primeCode !== 'number') {\n this._primeCode = checkPrime(this.__prime, this.__gen);\n }\n return this._primeCode;\n }\n});\nDH.prototype.generateKeys = function () {\n if (!this._priv) {\n this._priv = new BN(randomBytes(this._primeLen));\n }\n this._pub = this._gen.toRed(this._prime).redPow(this._priv).fromRed();\n return this.getPublicKey();\n};\n\nDH.prototype.computeSecret = function (other) {\n other = new BN(other);\n other = other.toRed(this._prime);\n var secret = other.redPow(this._priv).fromRed();\n var out = new Buffer(secret.toArray());\n var prime = this.getPrime();\n if (out.length < prime.length) {\n var front = new Buffer(prime.length - out.length);\n front.fill(0);\n out = Buffer.concat([front, out]);\n }\n return out;\n};\n\nDH.prototype.getPublicKey = function getPublicKey(enc) {\n return formatReturnValue(this._pub, enc);\n};\n\nDH.prototype.getPrivateKey = function getPrivateKey(enc) {\n return formatReturnValue(this._priv, enc);\n};\n\nDH.prototype.getPrime = function (enc) {\n return formatReturnValue(this.__prime, enc);\n};\n\nDH.prototype.getGenerator = function (enc) {\n return formatReturnValue(this._gen, enc);\n};\n\nDH.prototype.setGenerator = function (gen, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(gen)) {\n gen = new Buffer(gen, enc);\n }\n this.__gen = gen;\n this._gen = new BN(gen);\n return this;\n};\n\nfunction formatReturnValue(bn, enc) {\n var buf = new Buffer(bn.toArray());\n if (!enc) {\n return buf;\n } else {\n return buf.toString(enc);\n }\n}\n","var randomBytes = require('randombytes');\nmodule.exports = findPrime;\nfindPrime.simpleSieve = simpleSieve;\nfindPrime.fermatTest = fermatTest;\nvar BN = require('bn.js');\nvar TWENTYFOUR = new BN(24);\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar ONE = new BN(1);\nvar TWO = new BN(2);\nvar FIVE = new BN(5);\nvar SIXTEEN = new BN(16);\nvar EIGHT = new BN(8);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar ELEVEN = new BN(11);\nvar FOUR = new BN(4);\nvar TWELVE = new BN(12);\nvar primes = null;\n\nfunction _getPrimes() {\n if (primes !== null)\n return primes;\n\n var limit = 0x100000;\n var res = [];\n res[0] = 2;\n for (var i = 1, k = 3; k < limit; k += 2) {\n var sqrt = Math.ceil(Math.sqrt(k));\n for (var j = 0; j < i && res[j] <= sqrt; j++)\n if (k % res[j] === 0)\n break;\n\n if (i !== j && res[j] <= sqrt)\n continue;\n\n res[i++] = k;\n }\n primes = res;\n return res;\n}\n\nfunction simpleSieve(p) {\n var primes = _getPrimes();\n\n for (var i = 0; i < primes.length; i++)\n if (p.modn(primes[i]) === 0) {\n if (p.cmpn(primes[i]) === 0) {\n return true;\n } else {\n return false;\n }\n }\n\n return true;\n}\n\nfunction fermatTest(p) {\n var red = BN.mont(p);\n return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0;\n}\n\nfunction findPrime(bits, gen) {\n if (bits < 16) {\n // this is what openssl does\n if (gen === 2 || gen === 5) {\n return new BN([0x8c, 0x7b]);\n } else {\n return new BN([0x8c, 0x27]);\n }\n }\n gen = new BN(gen);\n\n var num, n2;\n\n while (true) {\n num = new BN(randomBytes(Math.ceil(bits / 8)));\n while (num.bitLength() > bits) {\n num.ishrn(1);\n }\n if (num.isEven()) {\n num.iadd(ONE);\n }\n if (!num.testn(1)) {\n num.iadd(TWO);\n }\n if (!gen.cmp(TWO)) {\n while (num.mod(TWENTYFOUR).cmp(ELEVEN)) {\n num.iadd(FOUR);\n }\n } else if (!gen.cmp(FIVE)) {\n while (num.mod(TEN).cmp(THREE)) {\n num.iadd(FOUR);\n }\n }\n n2 = num.shrn(1);\n if (simpleSieve(n2) && simpleSieve(num) &&\n fermatTest(n2) && fermatTest(num) &&\n millerRabin.test(n2) && millerRabin.test(num)) {\n return num;\n }\n }\n\n}\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n 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 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","'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 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 '<EC Point Infinity>';\n return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n ' y: ' + this.y.fromRed().toString(16, 2) +\n ' z: ' + this.z.fromRed().toString(16, 2) + '>';\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","'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 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 '<EC Point Infinity>';\n return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n ' z: ' + this.z.fromRed().toString(16, 2) + '>';\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","'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 '<EC Point Infinity>';\n return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n ' y: ' + this.y.fromRed().toString(16, 2) + '>';\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 '<EC JPoint Infinity>';\n return '<EC JPoint x: ' + this.x.toString(16, 2) +\n ' y: ' + this.y.toString(16, 2) +\n ' z: ' + this.z.toString(16, 2) + '>';\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 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 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 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 '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +\n ' pub: ' + (this.pub && this.pub.inspect()) + ' >';\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","'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","'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<Byte>} [params.secret] - secret seed bytes\n* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)\n* @param {Array<Byte>} [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","'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<Bytes>|Object} sig -\n* @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes\n* @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes\n* @param {Array<Bytes>} [sig.Rencoded] - R point encoded\n* @param {Array<Bytes>} [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","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","'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","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n 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","// 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\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\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","'use strict';\n//parse Empty Node as self closing node\nconst buildOptions = require('./util').buildOptions;\n\nconst defaultOptions = {\n attributeNamePrefix: '@_',\n attrNodeName: false,\n textNodeName: '#text',\n ignoreAttributes: true,\n cdataTagName: false,\n cdataPositionChar: '\\\\c',\n format: false,\n indentBy: ' ',\n supressEmptyNode: false,\n tagValueProcessor: function(a) {\n return a;\n },\n attrValueProcessor: function(a) {\n return a;\n },\n};\n\nconst props = [\n 'attributeNamePrefix',\n 'attrNodeName',\n 'textNodeName',\n 'ignoreAttributes',\n 'cdataTagName',\n 'cdataPositionChar',\n 'format',\n 'indentBy',\n 'supressEmptyNode',\n 'tagValueProcessor',\n 'attrValueProcessor',\n];\n\nfunction Parser(options) {\n this.options = buildOptions(options, defaultOptions, props);\n if (this.options.ignoreAttributes || this.options.attrNodeName) {\n this.isAttribute = function(/*a*/) {\n return false;\n };\n } else {\n this.attrPrefixLen = this.options.attributeNamePrefix.length;\n this.isAttribute = isAttribute;\n }\n if (this.options.cdataTagName) {\n this.isCDATA = isCDATA;\n } else {\n this.isCDATA = function(/*a*/) {\n return false;\n };\n }\n this.replaceCDATAstr = replaceCDATAstr;\n this.replaceCDATAarr = replaceCDATAarr;\n\n if (this.options.format) {\n this.indentate = indentate;\n this.tagEndChar = '>\\n';\n this.newLine = '\\n';\n } else {\n this.indentate = function() {\n return '';\n };\n this.tagEndChar = '>';\n this.newLine = '';\n }\n\n if (this.options.supressEmptyNode) {\n this.buildTextNode = buildEmptyTextNode;\n this.buildObjNode = buildEmptyObjNode;\n } else {\n this.buildTextNode = buildTextValNode;\n this.buildObjNode = buildObjectNode;\n }\n\n this.buildTextValNode = buildTextValNode;\n this.buildObjectNode = buildObjectNode;\n}\n\nParser.prototype.parse = function(jObj) {\n return this.j2x(jObj, 0).val;\n};\n\nParser.prototype.j2x = function(jObj, level) {\n let attrStr = '';\n let val = '';\n const keys = Object.keys(jObj);\n const len = keys.length;\n for (let i = 0; i < len; i++) {\n const key = keys[i];\n if (typeof jObj[key] === 'undefined') {\n // supress undefined node\n } else if (jObj[key] === null) {\n val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;\n } else if (jObj[key] instanceof Date) {\n val += this.buildTextNode(jObj[key], key, '', level);\n } else if (typeof jObj[key] !== 'object') {\n //premitive type\n const attr = this.isAttribute(key);\n if (attr) {\n attrStr += ' ' + attr + '=\"' + this.options.attrValueProcessor('' + jObj[key]) + '\"';\n } else if (this.isCDATA(key)) {\n if (jObj[this.options.textNodeName]) {\n val += this.replaceCDATAstr(jObj[this.options.textNodeName], jObj[key]);\n } else {\n val += this.replaceCDATAstr('', jObj[key]);\n }\n } else {\n //tag value\n if (key === this.options.textNodeName) {\n if (jObj[this.options.cdataTagName]) {\n //value will added while processing cdata\n } else {\n val += this.options.tagValueProcessor('' + jObj[key]);\n }\n } else {\n val += this.buildTextNode(jObj[key], key, '', level);\n }\n }\n } else if (Array.isArray(jObj[key])) {\n //repeated nodes\n if (this.isCDATA(key)) {\n val += this.indentate(level);\n if (jObj[this.options.textNodeName]) {\n val += this.replaceCDATAarr(jObj[this.options.textNodeName], jObj[key]);\n } else {\n val += this.replaceCDATAarr('', jObj[key]);\n }\n } else {\n //nested nodes\n const arrLen = jObj[key].length;\n for (let j = 0; j < arrLen; j++) {\n const item = jObj[key][j];\n if (typeof item === 'undefined') {\n // supress undefined node\n } else if (item === null) {\n val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;\n } else if (typeof item === 'object') {\n const result = this.j2x(item, level + 1);\n val += this.buildObjNode(result.val, key, result.attrStr, level);\n } else {\n val += this.buildTextNode(item, key, '', level);\n }\n }\n }\n } else {\n //nested node\n if (this.options.attrNodeName && key === this.options.attrNodeName) {\n const Ks = Object.keys(jObj[key]);\n const L = Ks.length;\n for (let j = 0; j < L; j++) {\n attrStr += ' ' + Ks[j] + '=\"' + this.options.attrValueProcessor('' + jObj[key][Ks[j]]) + '\"';\n }\n } else {\n const result = this.j2x(jObj[key], level + 1);\n val += this.buildObjNode(result.val, key, result.attrStr, level);\n }\n }\n }\n return {attrStr: attrStr, val: val};\n};\n\nfunction replaceCDATAstr(str, cdata) {\n str = this.options.tagValueProcessor('' + str);\n if (this.options.cdataPositionChar === '' || str === '') {\n return str + '<![CDATA[' + cdata + ']]' + this.tagEndChar;\n } else {\n return str.replace(this.options.cdataPositionChar, '<![CDATA[' + cdata + ']]' + this.tagEndChar);\n }\n}\n\nfunction replaceCDATAarr(str, cdata) {\n str = this.options.tagValueProcessor('' + str);\n if (this.options.cdataPositionChar === '' || str === '') {\n return str + '<![CDATA[' + cdata.join(']]><![CDATA[') + ']]' + this.tagEndChar;\n } else {\n for (let v in cdata) {\n str = str.replace(this.options.cdataPositionChar, '<![CDATA[' + cdata[v] + ']]>');\n }\n return str + this.newLine;\n }\n}\n\nfunction buildObjectNode(val, key, attrStr, level) {\n if (attrStr && !val.includes('<')) {\n return (\n this.indentate(level) +\n '<' +\n key +\n attrStr +\n '>' +\n val +\n //+ this.newLine\n // + this.indentate(level)\n '</' +\n key +\n this.tagEndChar\n );\n } else {\n return (\n this.indentate(level) +\n '<' +\n key +\n attrStr +\n this.tagEndChar +\n val +\n //+ this.newLine\n this.indentate(level) +\n '</' +\n key +\n this.tagEndChar\n );\n }\n}\n\nfunction buildEmptyObjNode(val, key, attrStr, level) {\n if (val !== '') {\n return this.buildObjectNode(val, key, attrStr, level);\n } else {\n return this.indentate(level) + '<' + key + attrStr + '/' + this.tagEndChar;\n //+ this.newLine\n }\n}\n\nfunction buildTextValNode(val, key, attrStr, level) {\n return (\n this.indentate(level) +\n '<' +\n key +\n attrStr +\n '>' +\n this.options.tagValueProcessor(val) +\n '</' +\n key +\n this.tagEndChar\n );\n}\n\nfunction buildEmptyTextNode(val, key, attrStr, level) {\n if (val !== '') {\n return this.buildTextValNode(val, key, attrStr, level);\n } else {\n return this.indentate(level) + '<' + key + attrStr + '/' + this.tagEndChar;\n }\n}\n\nfunction indentate(level) {\n return this.options.indentBy.repeat(level);\n}\n\nfunction isAttribute(name /*, options*/) {\n if (name.startsWith(this.options.attributeNamePrefix)) {\n return name.substr(this.attrPrefixLen);\n } else {\n return false;\n }\n}\n\nfunction isCDATA(name) {\n return name === this.options.cdataTagName;\n}\n\n//formatting\n//indentation\n//\\n after each closing or self closing tag\n\nmodule.exports = Parser;\n","'use strict';\nconst char = function(a) {\n return String.fromCharCode(a);\n};\n\nconst chars = {\n nilChar: char(176),\n missingChar: char(201),\n nilPremitive: char(175),\n missingPremitive: char(200),\n\n emptyChar: char(178),\n emptyValue: char(177), //empty Premitive\n\n boundryChar: char(179),\n\n objStart: char(198),\n arrStart: char(204),\n arrayEnd: char(185),\n};\n\nconst charsArr = [\n chars.nilChar,\n chars.nilPremitive,\n chars.missingChar,\n chars.missingPremitive,\n chars.boundryChar,\n chars.emptyChar,\n chars.emptyValue,\n chars.arrayEnd,\n chars.objStart,\n chars.arrStart,\n];\n\nconst _e = function(node, e_schema, options) {\n if (typeof e_schema === 'string') {\n //premitive\n if (node && node[0] && node[0].val !== undefined) {\n return getValue(node[0].val, e_schema);\n } else {\n return getValue(node, e_schema);\n }\n } else {\n const hasValidData = hasData(node);\n if (hasValidData === true) {\n let str = '';\n if (Array.isArray(e_schema)) {\n //attributes can't be repeated. hence check in children tags only\n str += chars.arrStart;\n const itemSchema = e_schema[0];\n //var itemSchemaType = itemSchema;\n const arr_len = node.length;\n\n if (typeof itemSchema === 'string') {\n for (let arr_i = 0; arr_i < arr_len; arr_i++) {\n const r = getValue(node[arr_i].val, itemSchema);\n str = processValue(str, r);\n }\n } else {\n for (let arr_i = 0; arr_i < arr_len; arr_i++) {\n const r = _e(node[arr_i], itemSchema, options);\n str = processValue(str, r);\n }\n }\n str += chars.arrayEnd; //indicates that next item is not array item\n } else {\n //object\n str += chars.objStart;\n const keys = Object.keys(e_schema);\n if (Array.isArray(node)) {\n node = node[0];\n }\n for (let i in keys) {\n const key = keys[i];\n //a property defined in schema can be present either in attrsMap or children tags\n //options.textNodeName will not present in both maps, take it's value from val\n //options.attrNodeName will be present in attrsMap\n let r;\n if (!options.ignoreAttributes && node.attrsMap && node.attrsMap[key]) {\n r = _e(node.attrsMap[key], e_schema[key], options);\n } else if (key === options.textNodeName) {\n r = _e(node.val, e_schema[key], options);\n } else {\n r = _e(node.child[key], e_schema[key], options);\n }\n str = processValue(str, r);\n }\n }\n return str;\n } else {\n return hasValidData;\n }\n }\n};\n\nconst getValue = function(a /*, type*/) {\n switch (a) {\n case undefined:\n return chars.missingPremitive;\n case null:\n return chars.nilPremitive;\n case '':\n return chars.emptyValue;\n default:\n return a;\n }\n};\n\nconst processValue = function(str, r) {\n if (!isAppChar(r[0]) && !isAppChar(str[str.length - 1])) {\n str += chars.boundryChar;\n }\n return str + r;\n};\n\nconst isAppChar = function(ch) {\n return charsArr.indexOf(ch) !== -1;\n};\n\nfunction hasData(jObj) {\n if (jObj === undefined) {\n return chars.missingChar;\n } else if (jObj === null) {\n return chars.nilChar;\n } else if (\n jObj.child &&\n Object.keys(jObj.child).length === 0 &&\n (!jObj.attrsMap || Object.keys(jObj.attrsMap).length === 0)\n ) {\n return chars.emptyChar;\n } else {\n return true;\n }\n}\n\nconst x2j = require('./xmlstr2xmlnode');\nconst buildOptions = require('./util').buildOptions;\n\nconst convert2nimn = function(node, e_schema, options) {\n options = buildOptions(options, x2j.defaultOptions, x2j.props);\n return _e(node, e_schema, options);\n};\n\nexports.convert2nimn = convert2nimn;\n","'use strict';\n\nconst util = require('./util');\n\nconst convertToJson = function(node, options) {\n const jObj = {};\n\n //when no child node or attr is present\n if ((!node.child || util.isEmptyObject(node.child)) && (!node.attrsMap || util.isEmptyObject(node.attrsMap))) {\n return util.isExist(node.val) ? node.val : '';\n } else {\n //otherwise create a textnode if node has some text\n if (util.isExist(node.val)) {\n if (!(typeof node.val === 'string' && (node.val === '' || node.val === options.cdataPositionChar))) {\n if(options.arrayMode === \"strict\"){\n jObj[options.textNodeName] = [ node.val ];\n }else{\n jObj[options.textNodeName] = node.val;\n }\n }\n }\n }\n\n util.merge(jObj, node.attrsMap, options.arrayMode);\n\n const keys = Object.keys(node.child);\n for (let index = 0; index < keys.length; index++) {\n var tagname = keys[index];\n if (node.child[tagname] && node.child[tagname].length > 1) {\n jObj[tagname] = [];\n for (var tag in node.child[tagname]) {\n jObj[tagname].push(convertToJson(node.child[tagname][tag], options));\n }\n } else {\n if(options.arrayMode === true){\n const result = convertToJson(node.child[tagname][0], options)\n if(typeof result === 'object')\n jObj[tagname] = [ result ];\n else\n jObj[tagname] = result;\n }else if(options.arrayMode === \"strict\"){\n jObj[tagname] = [convertToJson(node.child[tagname][0], options) ];\n }else{\n jObj[tagname] = convertToJson(node.child[tagname][0], options);\n }\n }\n }\n\n //add value\n return jObj;\n};\n\nexports.convertToJson = convertToJson;\n","'use strict';\n\nconst util = require('./util');\nconst buildOptions = require('./util').buildOptions;\nconst x2j = require('./xmlstr2xmlnode');\n\n//TODO: do it later\nconst convertToJsonString = function(node, options) {\n options = buildOptions(options, x2j.defaultOptions, x2j.props);\n\n options.indentBy = options.indentBy || '';\n return _cToJsonStr(node, options, 0);\n};\n\nconst _cToJsonStr = function(node, options, level) {\n let jObj = '{';\n\n //traver through all the children\n const keys = Object.keys(node.child);\n\n for (let index = 0; index < keys.length; index++) {\n var tagname = keys[index];\n if (node.child[tagname] && node.child[tagname].length > 1) {\n jObj += '\"' + tagname + '\" : [ ';\n for (var tag in node.child[tagname]) {\n jObj += _cToJsonStr(node.child[tagname][tag], options) + ' , ';\n }\n jObj = jObj.substr(0, jObj.length - 1) + ' ] '; //remove extra comma in last\n } else {\n jObj += '\"' + tagname + '\" : ' + _cToJsonStr(node.child[tagname][0], options) + ' ,';\n }\n }\n util.merge(jObj, node.attrsMap);\n //add attrsMap as new children\n if (util.isEmptyObject(jObj)) {\n return util.isExist(node.val) ? node.val : '';\n } else {\n if (util.isExist(node.val)) {\n if (!(typeof node.val === 'string' && (node.val === '' || node.val === options.cdataPositionChar))) {\n jObj += '\"' + options.textNodeName + '\" : ' + stringval(node.val);\n }\n }\n }\n //add value\n if (jObj[jObj.length - 1] === ',') {\n jObj = jObj.substr(0, jObj.length - 2);\n }\n return jObj + '}';\n};\n\nfunction stringval(v) {\n if (v === true || v === false || !isNaN(v)) {\n return v;\n } else {\n return '\"' + v + '\"';\n }\n}\n\nfunction indentate(options, level) {\n return options.indentBy.repeat(level);\n}\n\nexports.convertToJsonString = convertToJsonString;\n","'use strict';\n\nconst nodeToJson = require('./node2json');\nconst xmlToNodeobj = require('./xmlstr2xmlnode');\nconst x2xmlnode = require('./xmlstr2xmlnode');\nconst buildOptions = require('./util').buildOptions;\nconst validator = require('./validator');\n\nexports.parse = function(xmlData, options, validationOption) {\n if( validationOption){\n if(validationOption === true) validationOption = {}\n \n const result = validator.validate(xmlData, validationOption);\n if (result !== true) {\n throw Error( result.err.msg)\n }\n }\n options = buildOptions(options, x2xmlnode.defaultOptions, x2xmlnode.props);\n const traversableObj = xmlToNodeobj.getTraversalObj(xmlData, options)\n //print(traversableObj, \" \");\n return nodeToJson.convertToJson(traversableObj, options);\n};\nexports.convertTonimn = require('../src/nimndata').convert2nimn;\nexports.getTraversalObj = xmlToNodeobj.getTraversalObj;\nexports.convertToJson = nodeToJson.convertToJson;\nexports.convertToJsonString = require('./node2json_str').convertToJsonString;\nexports.validate = validator.validate;\nexports.j2xParser = require('./json2xml');\nexports.parseToNimn = function(xmlData, schema, options) {\n return exports.convertTonimn(exports.getTraversalObj(xmlData, options), schema, options);\n};\n\n\nfunction print(xmlNode, indentation){\n if(xmlNode){\n console.log(indentation + \"{\")\n console.log(indentation + \" \\\"tagName\\\": \\\"\" + xmlNode.tagname + \"\\\", \");\n if(xmlNode.parent){\n console.log(indentation + \" \\\"parent\\\": \\\"\" + xmlNode.parent.tagname + \"\\\", \");\n }\n console.log(indentation + \" \\\"val\\\": \\\"\" + xmlNode.val + \"\\\", \");\n console.log(indentation + \" \\\"attrs\\\": \" + JSON.stringify(xmlNode.attrsMap,null,4) + \", \");\n\n if(xmlNode.child){\n console.log(indentation + \"\\\"child\\\": {\")\n const indentation2 = indentation + indentation;\n Object.keys(xmlNode.child).forEach( function(key) {\n const node = xmlNode.child[key];\n\n if(Array.isArray(node)){\n console.log(indentation + \"\\\"\"+key+\"\\\" :[\")\n node.forEach( function(item,index) {\n //console.log(indentation + \" \\\"\"+index+\"\\\" : [\")\n print(item, indentation2);\n })\n console.log(indentation + \"],\") \n }else{\n console.log(indentation + \" \\\"\"+key+\"\\\" : {\")\n print(node, indentation2);\n console.log(indentation + \"},\") \n }\n });\n console.log(indentation + \"},\")\n }\n console.log(indentation + \"},\")\n }\n}","'use strict';\n\nconst nameStartChar = ':A-Za-z_\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD';\nconst nameChar = nameStartChar + '\\\\-.\\\\d\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040';\nconst nameRegexp = '[' + nameStartChar + '][' + nameChar + ']*'\nconst regexName = new RegExp('^' + nameRegexp + '$');\n\nconst getAllMatches = function(string, regex) {\n const matches = [];\n let match = regex.exec(string);\n while (match) {\n const allmatches = [];\n const len = match.length;\n for (let index = 0; index < len; index++) {\n allmatches.push(match[index]);\n }\n matches.push(allmatches);\n match = regex.exec(string);\n }\n return matches;\n};\n\nconst isName = function(string) {\n const match = regexName.exec(string);\n return !(match === null || typeof match === 'undefined');\n};\n\nexports.isExist = function(v) {\n return typeof v !== 'undefined';\n};\n\nexports.isEmptyObject = function(obj) {\n return Object.keys(obj).length === 0;\n};\n\n/**\n * Copy all the properties of a into b.\n * @param {*} target\n * @param {*} a\n */\nexports.merge = function(target, a, arrayMode) {\n if (a) {\n const keys = Object.keys(a); // will return an array of own properties\n const len = keys.length; //don't make it inline\n for (let i = 0; i < len; i++) {\n if(arrayMode === 'strict'){\n target[keys[i]] = [ a[keys[i]] ];\n }else{\n target[keys[i]] = a[keys[i]];\n }\n }\n }\n};\n/* exports.merge =function (b,a){\n return Object.assign(b,a);\n} */\n\nexports.getValue = function(v) {\n if (exports.isExist(v)) {\n return v;\n } else {\n return '';\n }\n};\n\n// const fakeCall = function(a) {return a;};\n// const fakeCallNoReturn = function() {};\n\nexports.buildOptions = function(options, defaultOptions, props) {\n var newOptions = {};\n if (!options) {\n return defaultOptions; //if there are not options\n }\n\n for (let i = 0; i < props.length; i++) {\n if (options[props[i]] !== undefined) {\n newOptions[props[i]] = options[props[i]];\n } else {\n newOptions[props[i]] = defaultOptions[props[i]];\n }\n }\n return newOptions;\n};\n\nexports.isName = isName;\nexports.getAllMatches = getAllMatches;\nexports.nameRegexp = nameRegexp;\n","'use strict';\n\nconst util = require('./util');\n\nconst defaultOptions = {\n allowBooleanAttributes: false, //A tag can have attributes without any value\n};\n\nconst props = ['allowBooleanAttributes'];\n\n//const tagsPattern = new RegExp(\"<\\\\/?([\\\\w:\\\\-_\\.]+)\\\\s*\\/?>\",\"g\");\nexports.validate = function (xmlData, options) {\n options = util.buildOptions(options, defaultOptions, props);\n\n //xmlData = xmlData.replace(/(\\r\\n|\\n|\\r)/gm,\"\");//make it single line\n //xmlData = xmlData.replace(/(^\\s*<\\?xml.*?\\?>)/g,\"\");//Remove XML starting tag\n //xmlData = xmlData.replace(/(<!DOCTYPE[\\s\\w\\\"\\.\\/\\-\\:]+(\\[.*\\])*\\s*>)/g,\"\");//Remove DOCTYPE\n const tags = [];\n let tagFound = false;\n\n //indicates that the root tag has been closed (aka. depth 0 has been reached)\n let reachedRoot = false;\n\n if (xmlData[0] === '\\ufeff') {\n // check for byte order mark (BOM)\n xmlData = xmlData.substr(1);\n }\n\n for (let i = 0; i < xmlData.length; i++) {\n if (xmlData[i] === '<') {\n //starting of tag\n //read until you reach to '>' avoiding any '>' in attribute value\n\n i++;\n if (xmlData[i] === '?') {\n i = readPI(xmlData, ++i);\n if (i.err) {\n return i;\n }\n } else if (xmlData[i] === '!') {\n i = readCommentAndCDATA(xmlData, i);\n continue;\n } else {\n let closingTag = false;\n if (xmlData[i] === '/') {\n //closing tag\n closingTag = true;\n i++;\n }\n //read tagname\n let tagName = '';\n for (; i < xmlData.length &&\n xmlData[i] !== '>' &&\n xmlData[i] !== ' ' &&\n xmlData[i] !== '\\t' &&\n xmlData[i] !== '\\n' &&\n xmlData[i] !== '\\r'; i++\n ) {\n tagName += xmlData[i];\n }\n tagName = tagName.trim();\n //console.log(tagName);\n\n if (tagName[tagName.length - 1] === '/') {\n //self closing tag without attributes\n tagName = tagName.substring(0, tagName.length - 1);\n //continue;\n i--;\n }\n if (!validateTagName(tagName)) {\n let msg;\n if (tagName.trim().length === 0) {\n msg = \"There is an unnecessary space between tag name and backward slash '</ ..'.\";\n } else {\n msg = \"Tag '\"+tagName+\"' is an invalid name.\";\n }\n return getErrorObject('InvalidTag', msg, getLineNumberForPosition(xmlData, i));\n }\n\n const result = readAttributeStr(xmlData, i);\n if (result === false) {\n return getErrorObject('InvalidAttr', \"Attributes for '\"+tagName+\"' have open quote.\", getLineNumberForPosition(xmlData, i));\n }\n let attrStr = result.value;\n i = result.index;\n\n if (attrStr[attrStr.length - 1] === '/') {\n //self closing tag\n attrStr = attrStr.substring(0, attrStr.length - 1);\n const isValid = validateAttributeString(attrStr, options);\n if (isValid === true) {\n tagFound = true;\n //continue; //text may presents after self closing tag\n } else {\n //the result from the nested function returns the position of the error within the attribute\n //in order to get the 'true' error line, we need to calculate the position where the attribute begins (i - attrStr.length) and then add the position within the attribute\n //this gives us the absolute index in the entire xml, which we can use to find the line at last\n return getErrorObject(isValid.err.code, isValid.err.msg, getLineNumberForPosition(xmlData, i - attrStr.length + isValid.err.line));\n }\n } else if (closingTag) {\n if (!result.tagClosed) {\n return getErrorObject('InvalidTag', \"Closing tag '\"+tagName+\"' doesn't have proper closing.\", getLineNumberForPosition(xmlData, i));\n } else if (attrStr.trim().length > 0) {\n return getErrorObject('InvalidTag', \"Closing tag '\"+tagName+\"' can't have attributes or invalid starting.\", getLineNumberForPosition(xmlData, i));\n } else {\n const otg = tags.pop();\n if (tagName !== otg) {\n return getErrorObject('InvalidTag', \"Closing tag '\"+otg+\"' is expected inplace of '\"+tagName+\"'.\", getLineNumberForPosition(xmlData, i));\n }\n\n //when there are no more tags, we reached the root level.\n if (tags.length == 0) {\n reachedRoot = true;\n }\n }\n } else {\n const isValid = validateAttributeString(attrStr, options);\n if (isValid !== true) {\n //the result from the nested function returns the position of the error within the attribute\n //in order to get the 'true' error line, we need to calculate the position where the attribute begins (i - attrStr.length) and then add the position within the attribute\n //this gives us the absolute index in the entire xml, which we can use to find the line at last\n return getErrorObject(isValid.err.code, isValid.err.msg, getLineNumberForPosition(xmlData, i - attrStr.length + isValid.err.line));\n }\n\n //if the root level has been reached before ...\n if (reachedRoot === true) {\n return getErrorObject('InvalidXml', 'Multiple possible root nodes found.', getLineNumberForPosition(xmlData, i));\n } else {\n tags.push(tagName);\n }\n tagFound = true;\n }\n\n //skip tag text value\n //It may include comments and CDATA value\n for (i++; i < xmlData.length; i++) {\n if (xmlData[i] === '<') {\n if (xmlData[i + 1] === '!') {\n //comment or CADATA\n i++;\n i = readCommentAndCDATA(xmlData, i);\n continue;\n } else {\n break;\n }\n } else if (xmlData[i] === '&') {\n const afterAmp = validateAmpersand(xmlData, i);\n if (afterAmp == -1)\n return getErrorObject('InvalidChar', \"char '&' is not expected.\", getLineNumberForPosition(xmlData, i));\n i = afterAmp;\n }\n } //end of reading tag text value\n if (xmlData[i] === '<') {\n i--;\n }\n }\n } else {\n if (xmlData[i] === ' ' || xmlData[i] === '\\t' || xmlData[i] === '\\n' || xmlData[i] === '\\r') {\n continue;\n }\n return getErrorObject('InvalidChar', \"char '\"+xmlData[i]+\"' is not expected.\", getLineNumberForPosition(xmlData, i));\n }\n }\n\n if (!tagFound) {\n return getErrorObject('InvalidXml', 'Start tag expected.', 1);\n } else if (tags.length > 0) {\n return getErrorObject('InvalidXml', \"Invalid '\"+JSON.stringify(tags, null, 4).replace(/\\r?\\n/g, '')+\"' found.\", 1);\n }\n\n return true;\n};\n\n/**\n * Read Processing insstructions and skip\n * @param {*} xmlData\n * @param {*} i\n */\nfunction readPI(xmlData, i) {\n var start = i;\n for (; i < xmlData.length; i++) {\n if (xmlData[i] == '?' || xmlData[i] == ' ') {\n //tagname\n var tagname = xmlData.substr(start, i - start);\n if (i > 5 && tagname === 'xml') {\n return getErrorObject('InvalidXml', 'XML declaration allowed only at the start of the document.', getLineNumberForPosition(xmlData, i));\n } else if (xmlData[i] == '?' && xmlData[i + 1] == '>') {\n //check if valid attribut string\n i++;\n break;\n } else {\n continue;\n }\n }\n }\n return i;\n}\n\nfunction readCommentAndCDATA(xmlData, i) {\n if (xmlData.length > i + 5 && xmlData[i + 1] === '-' && xmlData[i + 2] === '-') {\n //comment\n for (i += 3; i < xmlData.length; i++) {\n if (xmlData[i] === '-' && xmlData[i + 1] === '-' && xmlData[i + 2] === '>') {\n i += 2;\n break;\n }\n }\n } else if (\n xmlData.length > i + 8 &&\n xmlData[i + 1] === 'D' &&\n xmlData[i + 2] === 'O' &&\n xmlData[i + 3] === 'C' &&\n xmlData[i + 4] === 'T' &&\n xmlData[i + 5] === 'Y' &&\n xmlData[i + 6] === 'P' &&\n xmlData[i + 7] === 'E'\n ) {\n let angleBracketsCount = 1;\n for (i += 8; i < xmlData.length; i++) {\n if (xmlData[i] === '<') {\n angleBracketsCount++;\n } else if (xmlData[i] === '>') {\n angleBracketsCount--;\n if (angleBracketsCount === 0) {\n break;\n }\n }\n }\n } else if (\n xmlData.length > i + 9 &&\n xmlData[i + 1] === '[' &&\n xmlData[i + 2] === 'C' &&\n xmlData[i + 3] === 'D' &&\n xmlData[i + 4] === 'A' &&\n xmlData[i + 5] === 'T' &&\n xmlData[i + 6] === 'A' &&\n xmlData[i + 7] === '['\n ) {\n for (i += 8; i < xmlData.length; i++) {\n if (xmlData[i] === ']' && xmlData[i + 1] === ']' && xmlData[i + 2] === '>') {\n i += 2;\n break;\n }\n }\n }\n\n return i;\n}\n\nvar doubleQuote = '\"';\nvar singleQuote = \"'\";\n\n/**\n * Keep reading xmlData until '<' is found outside the attribute value.\n * @param {string} xmlData\n * @param {number} i\n */\nfunction readAttributeStr(xmlData, i) {\n let attrStr = '';\n let startChar = '';\n let tagClosed = false;\n for (; i < xmlData.length; i++) {\n if (xmlData[i] === doubleQuote || xmlData[i] === singleQuote) {\n if (startChar === '') {\n startChar = xmlData[i];\n } else if (startChar !== xmlData[i]) {\n //if vaue is enclosed with double quote then single quotes are allowed inside the value and vice versa\n continue;\n } else {\n startChar = '';\n }\n } else if (xmlData[i] === '>') {\n if (startChar === '') {\n tagClosed = true;\n break;\n }\n }\n attrStr += xmlData[i];\n }\n if (startChar !== '') {\n return false;\n }\n\n return {\n value: attrStr,\n index: i,\n tagClosed: tagClosed\n };\n}\n\n/**\n * Select all the attributes whether valid or invalid.\n */\nconst validAttrStrRegxp = new RegExp('(\\\\s*)([^\\\\s=]+)(\\\\s*=)?(\\\\s*([\\'\"])(([\\\\s\\\\S])*?)\\\\5)?', 'g');\n\n//attr, =\"sd\", a=\"amit's\", a=\"sd\"b=\"saf\", ab cd=\"\"\n\nfunction validateAttributeString(attrStr, options) {\n //console.log(\"start:\"+attrStr+\":end\");\n\n //if(attrStr.trim().length === 0) return true; //empty string\n\n const matches = util.getAllMatches(attrStr, validAttrStrRegxp);\n const attrNames = {};\n\n for (let i = 0; i < matches.length; i++) {\n if (matches[i][1].length === 0) {\n //nospace before attribute name: a=\"sd\"b=\"saf\"\n return getErrorObject('InvalidAttr', \"Attribute '\"+matches[i][2]+\"' has no space in starting.\", getPositionFromMatch(attrStr, matches[i][0]))\n } else if (matches[i][3] === undefined && !options.allowBooleanAttributes) {\n //independent attribute: ab\n return getErrorObject('InvalidAttr', \"boolean attribute '\"+matches[i][2]+\"' is not allowed.\", getPositionFromMatch(attrStr, matches[i][0]));\n }\n /* else if(matches[i][6] === undefined){//attribute without value: ab=\n return { err: { code:\"InvalidAttr\",msg:\"attribute \" + matches[i][2] + \" has no value assigned.\"}};\n } */\n const attrName = matches[i][2];\n if (!validateAttrName(attrName)) {\n return getErrorObject('InvalidAttr', \"Attribute '\"+attrName+\"' is an invalid name.\", getPositionFromMatch(attrStr, matches[i][0]));\n }\n if (!attrNames.hasOwnProperty(attrName)) {\n //check for duplicate attribute.\n attrNames[attrName] = 1;\n } else {\n return getErrorObject('InvalidAttr', \"Attribute '\"+attrName+\"' is repeated.\", getPositionFromMatch(attrStr, matches[i][0]));\n }\n }\n\n return true;\n}\n\nfunction validateNumberAmpersand(xmlData, i) {\n let re = /\\d/;\n if (xmlData[i] === 'x') {\n i++;\n re = /[\\da-fA-F]/;\n }\n for (; i < xmlData.length; i++) {\n if (xmlData[i] === ';')\n return i;\n if (!xmlData[i].match(re))\n break;\n }\n return -1;\n}\n\nfunction validateAmpersand(xmlData, i) {\n // https://www.w3.org/TR/xml/#dt-charref\n i++;\n if (xmlData[i] === ';')\n return -1;\n if (xmlData[i] === '#') {\n i++;\n return validateNumberAmpersand(xmlData, i);\n }\n let count = 0;\n for (; i < xmlData.length; i++, count++) {\n if (xmlData[i].match(/\\w/) && count < 20)\n continue;\n if (xmlData[i] === ';')\n break;\n return -1;\n }\n return i;\n}\n\nfunction getErrorObject(code, message, lineNumber) {\n return {\n err: {\n code: code,\n msg: message,\n line: lineNumber,\n },\n };\n}\n\nfunction validateAttrName(attrName) {\n return util.isName(attrName);\n}\n\n// const startsWithXML = /^xml/i;\n\nfunction validateTagName(tagname) {\n return util.isName(tagname) /* && !tagname.match(startsWithXML) */;\n}\n\n//this function returns the line number for the character at the given index\nfunction getLineNumberForPosition(xmlData, index) {\n var lines = xmlData.substring(0, index).split(/\\r?\\n/);\n return lines.length;\n}\n\n//this function returns the position of the last character of match within attrStr\nfunction getPositionFromMatch(attrStr, match) {\n return attrStr.indexOf(match) + match.length;\n}\n","'use strict';\n\nmodule.exports = function(tagname, parent, val) {\n this.tagname = tagname;\n this.parent = parent;\n this.child = {}; //child tags\n this.attrsMap = {}; //attributes map\n this.val = val; //text only\n this.addChild = function(child) {\n if (Array.isArray(this.child[child.tagname])) {\n //already presents\n this.child[child.tagname].push(child);\n } else {\n this.child[child.tagname] = [child];\n }\n };\n};\n","'use strict';\n\nconst util = require('./util');\nconst buildOptions = require('./util').buildOptions;\nconst xmlNode = require('./xmlNode');\nconst regx =\n '<((!\\\\[CDATA\\\\[([\\\\s\\\\S]*?)(]]>))|((NAME:)?(NAME))([^>]*)>|((\\\\/)(NAME)\\\\s*>))([^<]*)'\n .replace(/NAME/g, util.nameRegexp);\n\n//const tagsRegx = new RegExp(\"<(\\\\/?[\\\\w:\\\\-\\._]+)([^>]*)>(\\\\s*\"+cdataRegx+\")*([^<]+)?\",\"g\");\n//const tagsRegx = new RegExp(\"<(\\\\/?)((\\\\w*:)?([\\\\w:\\\\-\\._]+))([^>]*)>([^<]*)(\"+cdataRegx+\"([^<]*))*([^<]+)?\",\"g\");\n\n//polyfill\nif (!Number.parseInt && window.parseInt) {\n Number.parseInt = window.parseInt;\n}\nif (!Number.parseFloat && window.parseFloat) {\n Number.parseFloat = window.parseFloat;\n}\n\nconst defaultOptions = {\n attributeNamePrefix: '@_',\n attrNodeName: false,\n textNodeName: '#text',\n ignoreAttributes: true,\n ignoreNameSpace: false,\n allowBooleanAttributes: false, //a tag can have attributes without any value\n //ignoreRootElement : false,\n parseNodeValue: true,\n parseAttributeValue: false,\n arrayMode: false,\n trimValues: true, //Trim string values of tag and attributes\n cdataTagName: false,\n cdataPositionChar: '\\\\c',\n tagValueProcessor: function(a, tagName) {\n return a;\n },\n attrValueProcessor: function(a, attrName) {\n return a;\n },\n stopNodes: []\n //decodeStrict: false,\n};\n\nexports.defaultOptions = defaultOptions;\n\nconst props = [\n 'attributeNamePrefix',\n 'attrNodeName',\n 'textNodeName',\n 'ignoreAttributes',\n 'ignoreNameSpace',\n 'allowBooleanAttributes',\n 'parseNodeValue',\n 'parseAttributeValue',\n 'arrayMode',\n 'trimValues',\n 'cdataTagName',\n 'cdataPositionChar',\n 'tagValueProcessor',\n 'attrValueProcessor',\n 'parseTrueNumberOnly',\n 'stopNodes'\n];\nexports.props = props;\n\n/**\n * Trim -> valueProcessor -> parse value\n * @param {string} tagName\n * @param {string} val\n * @param {object} options\n */\nfunction processTagValue(tagName, val, options) {\n if (val) {\n if (options.trimValues) {\n val = val.trim();\n }\n val = options.tagValueProcessor(val, tagName);\n val = parseValue(val, options.parseNodeValue, options.parseTrueNumberOnly);\n }\n\n return val;\n}\n\nfunction resolveNameSpace(tagname, options) {\n if (options.ignoreNameSpace) {\n const tags = tagname.split(':');\n const prefix = tagname.charAt(0) === '/' ? '/' : '';\n if (tags[0] === 'xmlns') {\n return '';\n }\n if (tags.length === 2) {\n tagname = prefix + tags[1];\n }\n }\n return tagname;\n}\n\nfunction parseValue(val, shouldParse, parseTrueNumberOnly) {\n if (shouldParse && typeof val === 'string') {\n let parsed;\n if (val.trim() === '' || isNaN(val)) {\n parsed = val === 'true' ? true : val === 'false' ? false : val;\n } else {\n if (val.indexOf('0x') !== -1) {\n //support hexa decimal\n parsed = Number.parseInt(val, 16);\n } else if (val.indexOf('.') !== -1) {\n parsed = Number.parseFloat(val);\n val = val.replace(/\\.?0+$/, \"\");\n } else {\n parsed = Number.parseInt(val, 10);\n }\n if (parseTrueNumberOnly) {\n parsed = String(parsed) === val ? parsed : val;\n }\n }\n return parsed;\n } else {\n if (util.isExist(val)) {\n return val;\n } else {\n return '';\n }\n }\n}\n\n//TODO: change regex to capture NS\n//const attrsRegx = new RegExp(\"([\\\\w\\\\-\\\\.\\\\:]+)\\\\s*=\\\\s*(['\\\"])((.|\\n)*?)\\\\2\",\"gm\");\nconst attrsRegx = new RegExp('([^\\\\s=]+)\\\\s*(=\\\\s*([\\'\"])(.*?)\\\\3)?', 'g');\n\nfunction buildAttributesMap(attrStr, options) {\n if (!options.ignoreAttributes && typeof attrStr === 'string') {\n attrStr = attrStr.replace(/\\r?\\n/g, ' ');\n //attrStr = attrStr || attrStr.trim();\n\n const matches = util.getAllMatches(attrStr, attrsRegx);\n const len = matches.length; //don't make it inline\n const attrs = {};\n for (let i = 0; i < len; i++) {\n const attrName = resolveNameSpace(matches[i][1], options);\n if (attrName.length) {\n if (matches[i][4] !== undefined) {\n if (options.trimValues) {\n matches[i][4] = matches[i][4].trim();\n }\n matches[i][4] = options.attrValueProcessor(matches[i][4], attrName);\n attrs[options.attributeNamePrefix + attrName] = parseValue(\n matches[i][4],\n options.parseAttributeValue,\n options.parseTrueNumberOnly\n );\n } else if (options.allowBooleanAttributes) {\n attrs[options.attributeNamePrefix + attrName] = true;\n }\n }\n }\n if (!Object.keys(attrs).length) {\n return;\n }\n if (options.attrNodeName) {\n const attrCollection = {};\n attrCollection[options.attrNodeName] = attrs;\n return attrCollection;\n }\n return attrs;\n }\n}\n\nconst getTraversalObj = function(xmlData, options) {\n xmlData = xmlData.replace(/(\\r\\n)|\\n/, \" \");\n options = buildOptions(options, defaultOptions, props);\n const xmlObj = new xmlNode('!xml');\n let currentNode = xmlObj;\n let textData = \"\";\n\n//function match(xmlData){\n for(let i=0; i< xmlData.length; i++){\n const ch = xmlData[i];\n if(ch === '<'){\n if( xmlData[i+1] === '/') {//Closing Tag\n const closeIndex = findClosingIndex(xmlData, \">\", i, \"Closing Tag is not closed.\")\n let tagName = xmlData.substring(i+2,closeIndex).trim();\n\n if(options.ignoreNameSpace){\n const colonIndex = tagName.indexOf(\":\");\n if(colonIndex !== -1){\n tagName = tagName.substr(colonIndex+1);\n }\n }\n\n /* if (currentNode.parent) {\n currentNode.parent.val = util.getValue(currentNode.parent.val) + '' + processTagValue2(tagName, textData , options);\n } */\n if(currentNode){\n if(currentNode.val){\n currentNode.val = util.getValue(currentNode.val) + '' + processTagValue(tagName, textData , options);\n }else{\n currentNode.val = processTagValue(tagName, textData , options);\n }\n }\n\n if (options.stopNodes.length && options.stopNodes.includes(currentNode.tagname)) {\n currentNode.child = []\n if (currentNode.attrsMap == undefined) { currentNode.attrsMap = {}}\n currentNode.val = xmlData.substr(currentNode.startIndex + 1, i - currentNode.startIndex - 1)\n }\n currentNode = currentNode.parent;\n textData = \"\";\n i = closeIndex;\n } else if( xmlData[i+1] === '?') {\n i = findClosingIndex(xmlData, \"?>\", i, \"Pi Tag is not closed.\")\n } else if(xmlData.substr(i + 1, 3) === '!--') {\n i = findClosingIndex(xmlData, \"-->\", i, \"Comment is not closed.\")\n } else if( xmlData.substr(i + 1, 2) === '!D') {\n const closeIndex = findClosingIndex(xmlData, \">\", i, \"DOCTYPE is not closed.\")\n const tagExp = xmlData.substring(i, closeIndex);\n if(tagExp.indexOf(\"[\") >= 0){\n i = xmlData.indexOf(\"]>\", i) + 1;\n }else{\n i = closeIndex;\n }\n }else if(xmlData.substr(i + 1, 2) === '![') {\n const closeIndex = findClosingIndex(xmlData, \"]]>\", i, \"CDATA is not closed.\") - 2\n const tagExp = xmlData.substring(i + 9,closeIndex);\n\n //considerations\n //1. CDATA will always have parent node\n //2. A tag with CDATA is not a leaf node so it's value would be string type.\n if(textData){\n currentNode.val = util.getValue(currentNode.val) + '' + processTagValue(currentNode.tagname, textData , options);\n textData = \"\";\n }\n\n if (options.cdataTagName) {\n //add cdata node\n const childNode = new xmlNode(options.cdataTagName, currentNode, tagExp);\n currentNode.addChild(childNode);\n //for backtracking\n currentNode.val = util.getValue(currentNode.val) + options.cdataPositionChar;\n //add rest value to parent node\n if (tagExp) {\n childNode.val = tagExp;\n }\n } else {\n currentNode.val = (currentNode.val || '') + (tagExp || '');\n }\n\n i = closeIndex + 2;\n }else {//Opening tag\n const result = closingIndexForOpeningTag(xmlData, i+1)\n let tagExp = result.data;\n const closeIndex = result.index;\n const separatorIndex = tagExp.indexOf(\" \");\n let tagName = tagExp;\n if(separatorIndex !== -1){\n tagName = tagExp.substr(0, separatorIndex).trimRight();\n tagExp = tagExp.substr(separatorIndex + 1);\n }\n\n if(options.ignoreNameSpace){\n const colonIndex = tagName.indexOf(\":\");\n if(colonIndex !== -1){\n tagName = tagName.substr(colonIndex+1);\n }\n }\n\n //save text to parent node\n if (currentNode && textData) {\n if(currentNode.tagname !== '!xml'){\n currentNode.val = util.getValue(currentNode.val) + '' + processTagValue( currentNode.tagname, textData, options);\n }\n }\n\n if(tagExp.length > 0 && tagExp.lastIndexOf(\"/\") === tagExp.length - 1){//selfClosing tag\n\n if(tagName[tagName.length - 1] === \"/\"){ //remove trailing '/'\n tagName = tagName.substr(0, tagName.length - 1);\n tagExp = tagName;\n }else{\n tagExp = tagExp.substr(0, tagExp.length - 1);\n }\n\n const childNode = new xmlNode(tagName, currentNode, '');\n if(tagName !== tagExp){\n childNode.attrsMap = buildAttributesMap(tagExp, options);\n }\n currentNode.addChild(childNode);\n }else{//opening tag\n\n const childNode = new xmlNode( tagName, currentNode );\n if (options.stopNodes.length && options.stopNodes.includes(childNode.tagname)) {\n childNode.startIndex=closeIndex;\n }\n if(tagName !== tagExp){\n childNode.attrsMap = buildAttributesMap(tagExp, options);\n }\n currentNode.addChild(childNode);\n currentNode = childNode;\n }\n textData = \"\";\n i = closeIndex;\n }\n }else{\n textData += xmlData[i];\n }\n }\n return xmlObj;\n}\n\nfunction closingIndexForOpeningTag(data, i){\n let attrBoundary;\n let tagExp = \"\";\n for (let index = i; index < data.length; index++) {\n let ch = data[index];\n if (attrBoundary) {\n if (ch === attrBoundary) attrBoundary = \"\";//reset\n } else if (ch === '\"' || ch === \"'\") {\n attrBoundary = ch;\n } else if (ch === '>') {\n return {\n data: tagExp,\n index: index\n }\n } else if (ch === '\\t') {\n ch = \" \"\n }\n tagExp += ch;\n }\n}\n\nfunction findClosingIndex(xmlData, str, i, errMsg){\n const closingIndex = xmlData.indexOf(str, i);\n if(closingIndex === -1){\n throw new Error(errMsg)\n }else{\n return closingIndex + str.length - 1;\n }\n}\n\nexports.getTraversalObj = getTraversalObj;\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\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","// 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/*<replacement>*/\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/*</replacement>*/\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});","// 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};","// 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/*<replacement>*/\n\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n/*<replacement>*/\n\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\n\n\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\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/*<replacement>*/\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/*</replacement>*/\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}","// 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}","// 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/* <replacement> */\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/* </replacement> */\n\n/*<replacement>*/\n\n\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n/*<replacement>*/\n\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\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';\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\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}();","'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};","// 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;","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;","'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};","module.exports = require('events').EventEmitter;\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","/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\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","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","'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","'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\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","'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","'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\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","'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","'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","'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';\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","'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","/*! https://mths.be/he v1.2.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\t// All astral symbols.\n\tvar regexAstralSymbols = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n\t// All ASCII symbols (not just printable ASCII) except those listed in the\n\t// first column of the overrides table.\n\t// https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides\n\tvar regexAsciiWhitelist = /[\\x01-\\x7F]/g;\n\t// All BMP symbols that are not ASCII newlines, printable ASCII symbols, or\n\t// code points listed in the first column of the overrides table on\n\t// https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides.\n\tvar regexBmpWhitelist = /[\\x01-\\t\\x0B\\f\\x0E-\\x1F\\x7F\\x81\\x8D\\x8F\\x90\\x9D\\xA0-\\uFFFF]/g;\n\n\tvar regexEncodeNonAscii = /<\\u20D2|=\\u20E5|>\\u20D2|\\u205F\\u200A|\\u219D\\u0338|\\u2202\\u0338|\\u2220\\u20D2|\\u2229\\uFE00|\\u222A\\uFE00|\\u223C\\u20D2|\\u223D\\u0331|\\u223E\\u0333|\\u2242\\u0338|\\u224B\\u0338|\\u224D\\u20D2|\\u224E\\u0338|\\u224F\\u0338|\\u2250\\u0338|\\u2261\\u20E5|\\u2264\\u20D2|\\u2265\\u20D2|\\u2266\\u0338|\\u2267\\u0338|\\u2268\\uFE00|\\u2269\\uFE00|\\u226A\\u0338|\\u226A\\u20D2|\\u226B\\u0338|\\u226B\\u20D2|\\u227F\\u0338|\\u2282\\u20D2|\\u2283\\u20D2|\\u228A\\uFE00|\\u228B\\uFE00|\\u228F\\u0338|\\u2290\\u0338|\\u2293\\uFE00|\\u2294\\uFE00|\\u22B4\\u20D2|\\u22B5\\u20D2|\\u22D8\\u0338|\\u22D9\\u0338|\\u22DA\\uFE00|\\u22DB\\uFE00|\\u22F5\\u0338|\\u22F9\\u0338|\\u2933\\u0338|\\u29CF\\u0338|\\u29D0\\u0338|\\u2A6D\\u0338|\\u2A70\\u0338|\\u2A7D\\u0338|\\u2A7E\\u0338|\\u2AA1\\u0338|\\u2AA2\\u0338|\\u2AAC\\uFE00|\\u2AAD\\uFE00|\\u2AAF\\u0338|\\u2AB0\\u0338|\\u2AC5\\u0338|\\u2AC6\\u0338|\\u2ACB\\uFE00|\\u2ACC\\uFE00|\\u2AFD\\u20E5|[\\xA0-\\u0113\\u0116-\\u0122\\u0124-\\u012B\\u012E-\\u014D\\u0150-\\u017E\\u0192\\u01B5\\u01F5\\u0237\\u02C6\\u02C7\\u02D8-\\u02DD\\u0311\\u0391-\\u03A1\\u03A3-\\u03A9\\u03B1-\\u03C9\\u03D1\\u03D2\\u03D5\\u03D6\\u03DC\\u03DD\\u03F0\\u03F1\\u03F5\\u03F6\\u0401-\\u040C\\u040E-\\u044F\\u0451-\\u045C\\u045E\\u045F\\u2002-\\u2005\\u2007-\\u2010\\u2013-\\u2016\\u2018-\\u201A\\u201C-\\u201E\\u2020-\\u2022\\u2025\\u2026\\u2030-\\u2035\\u2039\\u203A\\u203E\\u2041\\u2043\\u2044\\u204F\\u2057\\u205F-\\u2063\\u20AC\\u20DB\\u20DC\\u2102\\u2105\\u210A-\\u2113\\u2115-\\u211E\\u2122\\u2124\\u2127-\\u2129\\u212C\\u212D\\u212F-\\u2131\\u2133-\\u2138\\u2145-\\u2148\\u2153-\\u215E\\u2190-\\u219B\\u219D-\\u21A7\\u21A9-\\u21AE\\u21B0-\\u21B3\\u21B5-\\u21B7\\u21BA-\\u21DB\\u21DD\\u21E4\\u21E5\\u21F5\\u21FD-\\u2205\\u2207-\\u2209\\u220B\\u220C\\u220F-\\u2214\\u2216-\\u2218\\u221A\\u221D-\\u2238\\u223A-\\u2257\\u2259\\u225A\\u225C\\u225F-\\u2262\\u2264-\\u228B\\u228D-\\u229B\\u229D-\\u22A5\\u22A7-\\u22B0\\u22B2-\\u22BB\\u22BD-\\u22DB\\u22DE-\\u22E3\\u22E6-\\u22F7\\u22F9-\\u22FE\\u2305\\u2306\\u2308-\\u2310\\u2312\\u2313\\u2315\\u2316\\u231C-\\u231F\\u2322\\u2323\\u232D\\u232E\\u2336\\u233D\\u233F\\u237C\\u23B0\\u23B1\\u23B4-\\u23B6\\u23DC-\\u23DF\\u23E2\\u23E7\\u2423\\u24C8\\u2500\\u2502\\u250C\\u2510\\u2514\\u2518\\u251C\\u2524\\u252C\\u2534\\u253C\\u2550-\\u256C\\u2580\\u2584\\u2588\\u2591-\\u2593\\u25A1\\u25AA\\u25AB\\u25AD\\u25AE\\u25B1\\u25B3-\\u25B5\\u25B8\\u25B9\\u25BD-\\u25BF\\u25C2\\u25C3\\u25CA\\u25CB\\u25EC\\u25EF\\u25F8-\\u25FC\\u2605\\u2606\\u260E\\u2640\\u2642\\u2660\\u2663\\u2665\\u2666\\u266A\\u266D-\\u266F\\u2713\\u2717\\u2720\\u2736\\u2758\\u2772\\u2773\\u27C8\\u27C9\\u27E6-\\u27ED\\u27F5-\\u27FA\\u27FC\\u27FF\\u2902-\\u2905\\u290C-\\u2913\\u2916\\u2919-\\u2920\\u2923-\\u292A\\u2933\\u2935-\\u2939\\u293C\\u293D\\u2945\\u2948-\\u294B\\u294E-\\u2976\\u2978\\u2979\\u297B-\\u297F\\u2985\\u2986\\u298B-\\u2996\\u299A\\u299C\\u299D\\u29A4-\\u29B7\\u29B9\\u29BB\\u29BC\\u29BE-\\u29C5\\u29C9\\u29CD-\\u29D0\\u29DC-\\u29DE\\u29E3-\\u29E5\\u29EB\\u29F4\\u29F6\\u2A00-\\u2A02\\u2A04\\u2A06\\u2A0C\\u2A0D\\u2A10-\\u2A17\\u2A22-\\u2A27\\u2A29\\u2A2A\\u2A2D-\\u2A31\\u2A33-\\u2A3C\\u2A3F\\u2A40\\u2A42-\\u2A4D\\u2A50\\u2A53-\\u2A58\\u2A5A-\\u2A5D\\u2A5F\\u2A66\\u2A6A\\u2A6D-\\u2A75\\u2A77-\\u2A9A\\u2A9D-\\u2AA2\\u2AA4-\\u2AB0\\u2AB3-\\u2AC8\\u2ACB\\u2ACC\\u2ACF-\\u2ADB\\u2AE4\\u2AE6-\\u2AE9\\u2AEB-\\u2AF3\\u2AFD\\uFB00-\\uFB04]|\\uD835[\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDCCF\\uDD04\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDD6B]/g;\n\tvar encodeMap = {'\\xAD':'shy','\\u200C':'zwnj','\\u200D':'zwj','\\u200E':'lrm','\\u2063':'ic','\\u2062':'it','\\u2061':'af','\\u200F':'rlm','\\u200B':'ZeroWidthSpace','\\u2060':'NoBreak','\\u0311':'DownBreve','\\u20DB':'tdot','\\u20DC':'DotDot','\\t':'Tab','\\n':'NewLine','\\u2008':'puncsp','\\u205F':'MediumSpace','\\u2009':'thinsp','\\u200A':'hairsp','\\u2004':'emsp13','\\u2002':'ensp','\\u2005':'emsp14','\\u2003':'emsp','\\u2007':'numsp','\\xA0':'nbsp','\\u205F\\u200A':'ThickSpace','\\u203E':'oline','_':'lowbar','\\u2010':'dash','\\u2013':'ndash','\\u2014':'mdash','\\u2015':'horbar',',':'comma',';':'semi','\\u204F':'bsemi',':':'colon','\\u2A74':'Colone','!':'excl','\\xA1':'iexcl','?':'quest','\\xBF':'iquest','.':'period','\\u2025':'nldr','\\u2026':'mldr','\\xB7':'middot','\\'':'apos','\\u2018':'lsquo','\\u2019':'rsquo','\\u201A':'sbquo','\\u2039':'lsaquo','\\u203A':'rsaquo','\"':'quot','\\u201C':'ldquo','\\u201D':'rdquo','\\u201E':'bdquo','\\xAB':'laquo','\\xBB':'raquo','(':'lpar',')':'rpar','[':'lsqb',']':'rsqb','{':'lcub','}':'rcub','\\u2308':'lceil','\\u2309':'rceil','\\u230A':'lfloor','\\u230B':'rfloor','\\u2985':'lopar','\\u2986':'ropar','\\u298B':'lbrke','\\u298C':'rbrke','\\u298D':'lbrkslu','\\u298E':'rbrksld','\\u298F':'lbrksld','\\u2990':'rbrkslu','\\u2991':'langd','\\u2992':'rangd','\\u2993':'lparlt','\\u2994':'rpargt','\\u2995':'gtlPar','\\u2996':'ltrPar','\\u27E6':'lobrk','\\u27E7':'robrk','\\u27E8':'lang','\\u27E9':'rang','\\u27EA':'Lang','\\u27EB':'Rang','\\u27EC':'loang','\\u27ED':'roang','\\u2772':'lbbrk','\\u2773':'rbbrk','\\u2016':'Vert','\\xA7':'sect','\\xB6':'para','@':'commat','*':'ast','/':'sol','undefined':null,'&':'amp','#':'num','%':'percnt','\\u2030':'permil','\\u2031':'pertenk','\\u2020':'dagger','\\u2021':'Dagger','\\u2022':'bull','\\u2043':'hybull','\\u2032':'prime','\\u2033':'Prime','\\u2034':'tprime','\\u2057':'qprime','\\u2035':'bprime','\\u2041':'caret','`':'grave','\\xB4':'acute','\\u02DC':'tilde','^':'Hat','\\xAF':'macr','\\u02D8':'breve','\\u02D9':'dot','\\xA8':'die','\\u02DA':'ring','\\u02DD':'dblac','\\xB8':'cedil','\\u02DB':'ogon','\\u02C6':'circ','\\u02C7':'caron','\\xB0':'deg','\\xA9':'copy','\\xAE':'reg','\\u2117':'copysr','\\u2118':'wp','\\u211E':'rx','\\u2127':'mho','\\u2129':'iiota','\\u2190':'larr','\\u219A':'nlarr','\\u2192':'rarr','\\u219B':'nrarr','\\u2191':'uarr','\\u2193':'darr','\\u2194':'harr','\\u21AE':'nharr','\\u2195':'varr','\\u2196':'nwarr','\\u2197':'nearr','\\u2198':'searr','\\u2199':'swarr','\\u219D':'rarrw','\\u219D\\u0338':'nrarrw','\\u219E':'Larr','\\u219F':'Uarr','\\u21A0':'Rarr','\\u21A1':'Darr','\\u21A2':'larrtl','\\u21A3':'rarrtl','\\u21A4':'mapstoleft','\\u21A5':'mapstoup','\\u21A6':'map','\\u21A7':'mapstodown','\\u21A9':'larrhk','\\u21AA':'rarrhk','\\u21AB':'larrlp','\\u21AC':'rarrlp','\\u21AD':'harrw','\\u21B0':'lsh','\\u21B1':'rsh','\\u21B2':'ldsh','\\u21B3':'rdsh','\\u21B5':'crarr','\\u21B6':'cularr','\\u21B7':'curarr','\\u21BA':'olarr','\\u21BB':'orarr','\\u21BC':'lharu','\\u21BD':'lhard','\\u21BE':'uharr','\\u21BF':'uharl','\\u21C0':'rharu','\\u21C1':'rhard','\\u21C2':'dharr','\\u21C3':'dharl','\\u21C4':'rlarr','\\u21C5':'udarr','\\u21C6':'lrarr','\\u21C7':'llarr','\\u21C8':'uuarr','\\u21C9':'rrarr','\\u21CA':'ddarr','\\u21CB':'lrhar','\\u21CC':'rlhar','\\u21D0':'lArr','\\u21CD':'nlArr','\\u21D1':'uArr','\\u21D2':'rArr','\\u21CF':'nrArr','\\u21D3':'dArr','\\u21D4':'iff','\\u21CE':'nhArr','\\u21D5':'vArr','\\u21D6':'nwArr','\\u21D7':'neArr','\\u21D8':'seArr','\\u21D9':'swArr','\\u21DA':'lAarr','\\u21DB':'rAarr','\\u21DD':'zigrarr','\\u21E4':'larrb','\\u21E5':'rarrb','\\u21F5':'duarr','\\u21FD':'loarr','\\u21FE':'roarr','\\u21FF':'hoarr','\\u2200':'forall','\\u2201':'comp','\\u2202':'part','\\u2202\\u0338':'npart','\\u2203':'exist','\\u2204':'nexist','\\u2205':'empty','\\u2207':'Del','\\u2208':'in','\\u2209':'notin','\\u220B':'ni','\\u220C':'notni','\\u03F6':'bepsi','\\u220F':'prod','\\u2210':'coprod','\\u2211':'sum','+':'plus','\\xB1':'pm','\\xF7':'div','\\xD7':'times','<':'lt','\\u226E':'nlt','<\\u20D2':'nvlt','=':'equals','\\u2260':'ne','=\\u20E5':'bne','\\u2A75':'Equal','>':'gt','\\u226F':'ngt','>\\u20D2':'nvgt','\\xAC':'not','|':'vert','\\xA6':'brvbar','\\u2212':'minus','\\u2213':'mp','\\u2214':'plusdo','\\u2044':'frasl','\\u2216':'setmn','\\u2217':'lowast','\\u2218':'compfn','\\u221A':'Sqrt','\\u221D':'prop','\\u221E':'infin','\\u221F':'angrt','\\u2220':'ang','\\u2220\\u20D2':'nang','\\u2221':'angmsd','\\u2222':'angsph','\\u2223':'mid','\\u2224':'nmid','\\u2225':'par','\\u2226':'npar','\\u2227':'and','\\u2228':'or','\\u2229':'cap','\\u2229\\uFE00':'caps','\\u222A':'cup','\\u222A\\uFE00':'cups','\\u222B':'int','\\u222C':'Int','\\u222D':'tint','\\u2A0C':'qint','\\u222E':'oint','\\u222F':'Conint','\\u2230':'Cconint','\\u2231':'cwint','\\u2232':'cwconint','\\u2233':'awconint','\\u2234':'there4','\\u2235':'becaus','\\u2236':'ratio','\\u2237':'Colon','\\u2238':'minusd','\\u223A':'mDDot','\\u223B':'homtht','\\u223C':'sim','\\u2241':'nsim','\\u223C\\u20D2':'nvsim','\\u223D':'bsim','\\u223D\\u0331':'race','\\u223E':'ac','\\u223E\\u0333':'acE','\\u223F':'acd','\\u2240':'wr','\\u2242':'esim','\\u2242\\u0338':'nesim','\\u2243':'sime','\\u2244':'nsime','\\u2245':'cong','\\u2247':'ncong','\\u2246':'simne','\\u2248':'ap','\\u2249':'nap','\\u224A':'ape','\\u224B':'apid','\\u224B\\u0338':'napid','\\u224C':'bcong','\\u224D':'CupCap','\\u226D':'NotCupCap','\\u224D\\u20D2':'nvap','\\u224E':'bump','\\u224E\\u0338':'nbump','\\u224F':'bumpe','\\u224F\\u0338':'nbumpe','\\u2250':'doteq','\\u2250\\u0338':'nedot','\\u2251':'eDot','\\u2252':'efDot','\\u2253':'erDot','\\u2254':'colone','\\u2255':'ecolon','\\u2256':'ecir','\\u2257':'cire','\\u2259':'wedgeq','\\u225A':'veeeq','\\u225C':'trie','\\u225F':'equest','\\u2261':'equiv','\\u2262':'nequiv','\\u2261\\u20E5':'bnequiv','\\u2264':'le','\\u2270':'nle','\\u2264\\u20D2':'nvle','\\u2265':'ge','\\u2271':'nge','\\u2265\\u20D2':'nvge','\\u2266':'lE','\\u2266\\u0338':'nlE','\\u2267':'gE','\\u2267\\u0338':'ngE','\\u2268\\uFE00':'lvnE','\\u2268':'lnE','\\u2269':'gnE','\\u2269\\uFE00':'gvnE','\\u226A':'ll','\\u226A\\u0338':'nLtv','\\u226A\\u20D2':'nLt','\\u226B':'gg','\\u226B\\u0338':'nGtv','\\u226B\\u20D2':'nGt','\\u226C':'twixt','\\u2272':'lsim','\\u2274':'nlsim','\\u2273':'gsim','\\u2275':'ngsim','\\u2276':'lg','\\u2278':'ntlg','\\u2277':'gl','\\u2279':'ntgl','\\u227A':'pr','\\u2280':'npr','\\u227B':'sc','\\u2281':'nsc','\\u227C':'prcue','\\u22E0':'nprcue','\\u227D':'sccue','\\u22E1':'nsccue','\\u227E':'prsim','\\u227F':'scsim','\\u227F\\u0338':'NotSucceedsTilde','\\u2282':'sub','\\u2284':'nsub','\\u2282\\u20D2':'vnsub','\\u2283':'sup','\\u2285':'nsup','\\u2283\\u20D2':'vnsup','\\u2286':'sube','\\u2288':'nsube','\\u2287':'supe','\\u2289':'nsupe','\\u228A\\uFE00':'vsubne','\\u228A':'subne','\\u228B\\uFE00':'vsupne','\\u228B':'supne','\\u228D':'cupdot','\\u228E':'uplus','\\u228F':'sqsub','\\u228F\\u0338':'NotSquareSubset','\\u2290':'sqsup','\\u2290\\u0338':'NotSquareSuperset','\\u2291':'sqsube','\\u22E2':'nsqsube','\\u2292':'sqsupe','\\u22E3':'nsqsupe','\\u2293':'sqcap','\\u2293\\uFE00':'sqcaps','\\u2294':'sqcup','\\u2294\\uFE00':'sqcups','\\u2295':'oplus','\\u2296':'ominus','\\u2297':'otimes','\\u2298':'osol','\\u2299':'odot','\\u229A':'ocir','\\u229B':'oast','\\u229D':'odash','\\u229E':'plusb','\\u229F':'minusb','\\u22A0':'timesb','\\u22A1':'sdotb','\\u22A2':'vdash','\\u22AC':'nvdash','\\u22A3':'dashv','\\u22A4':'top','\\u22A5':'bot','\\u22A7':'models','\\u22A8':'vDash','\\u22AD':'nvDash','\\u22A9':'Vdash','\\u22AE':'nVdash','\\u22AA':'Vvdash','\\u22AB':'VDash','\\u22AF':'nVDash','\\u22B0':'prurel','\\u22B2':'vltri','\\u22EA':'nltri','\\u22B3':'vrtri','\\u22EB':'nrtri','\\u22B4':'ltrie','\\u22EC':'nltrie','\\u22B4\\u20D2':'nvltrie','\\u22B5':'rtrie','\\u22ED':'nrtrie','\\u22B5\\u20D2':'nvrtrie','\\u22B6':'origof','\\u22B7':'imof','\\u22B8':'mumap','\\u22B9':'hercon','\\u22BA':'intcal','\\u22BB':'veebar','\\u22BD':'barvee','\\u22BE':'angrtvb','\\u22BF':'lrtri','\\u22C0':'Wedge','\\u22C1':'Vee','\\u22C2':'xcap','\\u22C3':'xcup','\\u22C4':'diam','\\u22C5':'sdot','\\u22C6':'Star','\\u22C7':'divonx','\\u22C8':'bowtie','\\u22C9':'ltimes','\\u22CA':'rtimes','\\u22CB':'lthree','\\u22CC':'rthree','\\u22CD':'bsime','\\u22CE':'cuvee','\\u22CF':'cuwed','\\u22D0':'Sub','\\u22D1':'Sup','\\u22D2':'Cap','\\u22D3':'Cup','\\u22D4':'fork','\\u22D5':'epar','\\u22D6':'ltdot','\\u22D7':'gtdot','\\u22D8':'Ll','\\u22D8\\u0338':'nLl','\\u22D9':'Gg','\\u22D9\\u0338':'nGg','\\u22DA\\uFE00':'lesg','\\u22DA':'leg','\\u22DB':'gel','\\u22DB\\uFE00':'gesl','\\u22DE':'cuepr','\\u22DF':'cuesc','\\u22E6':'lnsim','\\u22E7':'gnsim','\\u22E8':'prnsim','\\u22E9':'scnsim','\\u22EE':'vellip','\\u22EF':'ctdot','\\u22F0':'utdot','\\u22F1':'dtdot','\\u22F2':'disin','\\u22F3':'isinsv','\\u22F4':'isins','\\u22F5':'isindot','\\u22F5\\u0338':'notindot','\\u22F6':'notinvc','\\u22F7':'notinvb','\\u22F9':'isinE','\\u22F9\\u0338':'notinE','\\u22FA':'nisd','\\u22FB':'xnis','\\u22FC':'nis','\\u22FD':'notnivc','\\u22FE':'notnivb','\\u2305':'barwed','\\u2306':'Barwed','\\u230C':'drcrop','\\u230D':'dlcrop','\\u230E':'urcrop','\\u230F':'ulcrop','\\u2310':'bnot','\\u2312':'profline','\\u2313':'profsurf','\\u2315':'telrec','\\u2316':'target','\\u231C':'ulcorn','\\u231D':'urcorn','\\u231E':'dlcorn','\\u231F':'drcorn','\\u2322':'frown','\\u2323':'smile','\\u232D':'cylcty','\\u232E':'profalar','\\u2336':'topbot','\\u233D':'ovbar','\\u233F':'solbar','\\u237C':'angzarr','\\u23B0':'lmoust','\\u23B1':'rmoust','\\u23B4':'tbrk','\\u23B5':'bbrk','\\u23B6':'bbrktbrk','\\u23DC':'OverParenthesis','\\u23DD':'UnderParenthesis','\\u23DE':'OverBrace','\\u23DF':'UnderBrace','\\u23E2':'trpezium','\\u23E7':'elinters','\\u2423':'blank','\\u2500':'boxh','\\u2502':'boxv','\\u250C':'boxdr','\\u2510':'boxdl','\\u2514':'boxur','\\u2518':'boxul','\\u251C':'boxvr','\\u2524':'boxvl','\\u252C':'boxhd','\\u2534':'boxhu','\\u253C':'boxvh','\\u2550':'boxH','\\u2551':'boxV','\\u2552':'boxdR','\\u2553':'boxDr','\\u2554':'boxDR','\\u2555':'boxdL','\\u2556':'boxDl','\\u2557':'boxDL','\\u2558':'boxuR','\\u2559':'boxUr','\\u255A':'boxUR','\\u255B':'boxuL','\\u255C':'boxUl','\\u255D':'boxUL','\\u255E':'boxvR','\\u255F':'boxVr','\\u2560':'boxVR','\\u2561':'boxvL','\\u2562':'boxVl','\\u2563':'boxVL','\\u2564':'boxHd','\\u2565':'boxhD','\\u2566':'boxHD','\\u2567':'boxHu','\\u2568':'boxhU','\\u2569':'boxHU','\\u256A':'boxvH','\\u256B':'boxVh','\\u256C':'boxVH','\\u2580':'uhblk','\\u2584':'lhblk','\\u2588':'block','\\u2591':'blk14','\\u2592':'blk12','\\u2593':'blk34','\\u25A1':'squ','\\u25AA':'squf','\\u25AB':'EmptyVerySmallSquare','\\u25AD':'rect','\\u25AE':'marker','\\u25B1':'fltns','\\u25B3':'xutri','\\u25B4':'utrif','\\u25B5':'utri','\\u25B8':'rtrif','\\u25B9':'rtri','\\u25BD':'xdtri','\\u25BE':'dtrif','\\u25BF':'dtri','\\u25C2':'ltrif','\\u25C3':'ltri','\\u25CA':'loz','\\u25CB':'cir','\\u25EC':'tridot','\\u25EF':'xcirc','\\u25F8':'ultri','\\u25F9':'urtri','\\u25FA':'lltri','\\u25FB':'EmptySmallSquare','\\u25FC':'FilledSmallSquare','\\u2605':'starf','\\u2606':'star','\\u260E':'phone','\\u2640':'female','\\u2642':'male','\\u2660':'spades','\\u2663':'clubs','\\u2665':'hearts','\\u2666':'diams','\\u266A':'sung','\\u2713':'check','\\u2717':'cross','\\u2720':'malt','\\u2736':'sext','\\u2758':'VerticalSeparator','\\u27C8':'bsolhsub','\\u27C9':'suphsol','\\u27F5':'xlarr','\\u27F6':'xrarr','\\u27F7':'xharr','\\u27F8':'xlArr','\\u27F9':'xrArr','\\u27FA':'xhArr','\\u27FC':'xmap','\\u27FF':'dzigrarr','\\u2902':'nvlArr','\\u2903':'nvrArr','\\u2904':'nvHarr','\\u2905':'Map','\\u290C':'lbarr','\\u290D':'rbarr','\\u290E':'lBarr','\\u290F':'rBarr','\\u2910':'RBarr','\\u2911':'DDotrahd','\\u2912':'UpArrowBar','\\u2913':'DownArrowBar','\\u2916':'Rarrtl','\\u2919':'latail','\\u291A':'ratail','\\u291B':'lAtail','\\u291C':'rAtail','\\u291D':'larrfs','\\u291E':'rarrfs','\\u291F':'larrbfs','\\u2920':'rarrbfs','\\u2923':'nwarhk','\\u2924':'nearhk','\\u2925':'searhk','\\u2926':'swarhk','\\u2927':'nwnear','\\u2928':'toea','\\u2929':'tosa','\\u292A':'swnwar','\\u2933':'rarrc','\\u2933\\u0338':'nrarrc','\\u2935':'cudarrr','\\u2936':'ldca','\\u2937':'rdca','\\u2938':'cudarrl','\\u2939':'larrpl','\\u293C':'curarrm','\\u293D':'cularrp','\\u2945':'rarrpl','\\u2948':'harrcir','\\u2949':'Uarrocir','\\u294A':'lurdshar','\\u294B':'ldrushar','\\u294E':'LeftRightVector','\\u294F':'RightUpDownVector','\\u2950':'DownLeftRightVector','\\u2951':'LeftUpDownVector','\\u2952':'LeftVectorBar','\\u2953':'RightVectorBar','\\u2954':'RightUpVectorBar','\\u2955':'RightDownVectorBar','\\u2956':'DownLeftVectorBar','\\u2957':'DownRightVectorBar','\\u2958':'LeftUpVectorBar','\\u2959':'LeftDownVectorBar','\\u295A':'LeftTeeVector','\\u295B':'RightTeeVector','\\u295C':'RightUpTeeVector','\\u295D':'RightDownTeeVector','\\u295E':'DownLeftTeeVector','\\u295F':'DownRightTeeVector','\\u2960':'LeftUpTeeVector','\\u2961':'LeftDownTeeVector','\\u2962':'lHar','\\u2963':'uHar','\\u2964':'rHar','\\u2965':'dHar','\\u2966':'luruhar','\\u2967':'ldrdhar','\\u2968':'ruluhar','\\u2969':'rdldhar','\\u296A':'lharul','\\u296B':'llhard','\\u296C':'rharul','\\u296D':'lrhard','\\u296E':'udhar','\\u296F':'duhar','\\u2970':'RoundImplies','\\u2971':'erarr','\\u2972':'simrarr','\\u2973':'larrsim','\\u2974':'rarrsim','\\u2975':'rarrap','\\u2976':'ltlarr','\\u2978':'gtrarr','\\u2979':'subrarr','\\u297B':'suplarr','\\u297C':'lfisht','\\u297D':'rfisht','\\u297E':'ufisht','\\u297F':'dfisht','\\u299A':'vzigzag','\\u299C':'vangrt','\\u299D':'angrtvbd','\\u29A4':'ange','\\u29A5':'range','\\u29A6':'dwangle','\\u29A7':'uwangle','\\u29A8':'angmsdaa','\\u29A9':'angmsdab','\\u29AA':'angmsdac','\\u29AB':'angmsdad','\\u29AC':'angmsdae','\\u29AD':'angmsdaf','\\u29AE':'angmsdag','\\u29AF':'angmsdah','\\u29B0':'bemptyv','\\u29B1':'demptyv','\\u29B2':'cemptyv','\\u29B3':'raemptyv','\\u29B4':'laemptyv','\\u29B5':'ohbar','\\u29B6':'omid','\\u29B7':'opar','\\u29B9':'operp','\\u29BB':'olcross','\\u29BC':'odsold','\\u29BE':'olcir','\\u29BF':'ofcir','\\u29C0':'olt','\\u29C1':'ogt','\\u29C2':'cirscir','\\u29C3':'cirE','\\u29C4':'solb','\\u29C5':'bsolb','\\u29C9':'boxbox','\\u29CD':'trisb','\\u29CE':'rtriltri','\\u29CF':'LeftTriangleBar','\\u29CF\\u0338':'NotLeftTriangleBar','\\u29D0':'RightTriangleBar','\\u29D0\\u0338':'NotRightTriangleBar','\\u29DC':'iinfin','\\u29DD':'infintie','\\u29DE':'nvinfin','\\u29E3':'eparsl','\\u29E4':'smeparsl','\\u29E5':'eqvparsl','\\u29EB':'lozf','\\u29F4':'RuleDelayed','\\u29F6':'dsol','\\u2A00':'xodot','\\u2A01':'xoplus','\\u2A02':'xotime','\\u2A04':'xuplus','\\u2A06':'xsqcup','\\u2A0D':'fpartint','\\u2A10':'cirfnint','\\u2A11':'awint','\\u2A12':'rppolint','\\u2A13':'scpolint','\\u2A14':'npolint','\\u2A15':'pointint','\\u2A16':'quatint','\\u2A17':'intlarhk','\\u2A22':'pluscir','\\u2A23':'plusacir','\\u2A24':'simplus','\\u2A25':'plusdu','\\u2A26':'plussim','\\u2A27':'plustwo','\\u2A29':'mcomma','\\u2A2A':'minusdu','\\u2A2D':'loplus','\\u2A2E':'roplus','\\u2A2F':'Cross','\\u2A30':'timesd','\\u2A31':'timesbar','\\u2A33':'smashp','\\u2A34':'lotimes','\\u2A35':'rotimes','\\u2A36':'otimesas','\\u2A37':'Otimes','\\u2A38':'odiv','\\u2A39':'triplus','\\u2A3A':'triminus','\\u2A3B':'tritime','\\u2A3C':'iprod','\\u2A3F':'amalg','\\u2A40':'capdot','\\u2A42':'ncup','\\u2A43':'ncap','\\u2A44':'capand','\\u2A45':'cupor','\\u2A46':'cupcap','\\u2A47':'capcup','\\u2A48':'cupbrcap','\\u2A49':'capbrcup','\\u2A4A':'cupcup','\\u2A4B':'capcap','\\u2A4C':'ccups','\\u2A4D':'ccaps','\\u2A50':'ccupssm','\\u2A53':'And','\\u2A54':'Or','\\u2A55':'andand','\\u2A56':'oror','\\u2A57':'orslope','\\u2A58':'andslope','\\u2A5A':'andv','\\u2A5B':'orv','\\u2A5C':'andd','\\u2A5D':'ord','\\u2A5F':'wedbar','\\u2A66':'sdote','\\u2A6A':'simdot','\\u2A6D':'congdot','\\u2A6D\\u0338':'ncongdot','\\u2A6E':'easter','\\u2A6F':'apacir','\\u2A70':'apE','\\u2A70\\u0338':'napE','\\u2A71':'eplus','\\u2A72':'pluse','\\u2A73':'Esim','\\u2A77':'eDDot','\\u2A78':'equivDD','\\u2A79':'ltcir','\\u2A7A':'gtcir','\\u2A7B':'ltquest','\\u2A7C':'gtquest','\\u2A7D':'les','\\u2A7D\\u0338':'nles','\\u2A7E':'ges','\\u2A7E\\u0338':'nges','\\u2A7F':'lesdot','\\u2A80':'gesdot','\\u2A81':'lesdoto','\\u2A82':'gesdoto','\\u2A83':'lesdotor','\\u2A84':'gesdotol','\\u2A85':'lap','\\u2A86':'gap','\\u2A87':'lne','\\u2A88':'gne','\\u2A89':'lnap','\\u2A8A':'gnap','\\u2A8B':'lEg','\\u2A8C':'gEl','\\u2A8D':'lsime','\\u2A8E':'gsime','\\u2A8F':'lsimg','\\u2A90':'gsiml','\\u2A91':'lgE','\\u2A92':'glE','\\u2A93':'lesges','\\u2A94':'gesles','\\u2A95':'els','\\u2A96':'egs','\\u2A97':'elsdot','\\u2A98':'egsdot','\\u2A99':'el','\\u2A9A':'eg','\\u2A9D':'siml','\\u2A9E':'simg','\\u2A9F':'simlE','\\u2AA0':'simgE','\\u2AA1':'LessLess','\\u2AA1\\u0338':'NotNestedLessLess','\\u2AA2':'GreaterGreater','\\u2AA2\\u0338':'NotNestedGreaterGreater','\\u2AA4':'glj','\\u2AA5':'gla','\\u2AA6':'ltcc','\\u2AA7':'gtcc','\\u2AA8':'lescc','\\u2AA9':'gescc','\\u2AAA':'smt','\\u2AAB':'lat','\\u2AAC':'smte','\\u2AAC\\uFE00':'smtes','\\u2AAD':'late','\\u2AAD\\uFE00':'lates','\\u2AAE':'bumpE','\\u2AAF':'pre','\\u2AAF\\u0338':'npre','\\u2AB0':'sce','\\u2AB0\\u0338':'nsce','\\u2AB3':'prE','\\u2AB4':'scE','\\u2AB5':'prnE','\\u2AB6':'scnE','\\u2AB7':'prap','\\u2AB8':'scap','\\u2AB9':'prnap','\\u2ABA':'scnap','\\u2ABB':'Pr','\\u2ABC':'Sc','\\u2ABD':'subdot','\\u2ABE':'supdot','\\u2ABF':'subplus','\\u2AC0':'supplus','\\u2AC1':'submult','\\u2AC2':'supmult','\\u2AC3':'subedot','\\u2AC4':'supedot','\\u2AC5':'subE','\\u2AC5\\u0338':'nsubE','\\u2AC6':'supE','\\u2AC6\\u0338':'nsupE','\\u2AC7':'subsim','\\u2AC8':'supsim','\\u2ACB\\uFE00':'vsubnE','\\u2ACB':'subnE','\\u2ACC\\uFE00':'vsupnE','\\u2ACC':'supnE','\\u2ACF':'csub','\\u2AD0':'csup','\\u2AD1':'csube','\\u2AD2':'csupe','\\u2AD3':'subsup','\\u2AD4':'supsub','\\u2AD5':'subsub','\\u2AD6':'supsup','\\u2AD7':'suphsub','\\u2AD8':'supdsub','\\u2AD9':'forkv','\\u2ADA':'topfork','\\u2ADB':'mlcp','\\u2AE4':'Dashv','\\u2AE6':'Vdashl','\\u2AE7':'Barv','\\u2AE8':'vBar','\\u2AE9':'vBarv','\\u2AEB':'Vbar','\\u2AEC':'Not','\\u2AED':'bNot','\\u2AEE':'rnmid','\\u2AEF':'cirmid','\\u2AF0':'midcir','\\u2AF1':'topcir','\\u2AF2':'nhpar','\\u2AF3':'parsim','\\u2AFD':'parsl','\\u2AFD\\u20E5':'nparsl','\\u266D':'flat','\\u266E':'natur','\\u266F':'sharp','\\xA4':'curren','\\xA2':'cent','$':'dollar','\\xA3':'pound','\\xA5':'yen','\\u20AC':'euro','\\xB9':'sup1','\\xBD':'half','\\u2153':'frac13','\\xBC':'frac14','\\u2155':'frac15','\\u2159':'frac16','\\u215B':'frac18','\\xB2':'sup2','\\u2154':'frac23','\\u2156':'frac25','\\xB3':'sup3','\\xBE':'frac34','\\u2157':'frac35','\\u215C':'frac38','\\u2158':'frac45','\\u215A':'frac56','\\u215D':'frac58','\\u215E':'frac78','\\uD835\\uDCB6':'ascr','\\uD835\\uDD52':'aopf','\\uD835\\uDD1E':'afr','\\uD835\\uDD38':'Aopf','\\uD835\\uDD04':'Afr','\\uD835\\uDC9C':'Ascr','\\xAA':'ordf','\\xE1':'aacute','\\xC1':'Aacute','\\xE0':'agrave','\\xC0':'Agrave','\\u0103':'abreve','\\u0102':'Abreve','\\xE2':'acirc','\\xC2':'Acirc','\\xE5':'aring','\\xC5':'angst','\\xE4':'auml','\\xC4':'Auml','\\xE3':'atilde','\\xC3':'Atilde','\\u0105':'aogon','\\u0104':'Aogon','\\u0101':'amacr','\\u0100':'Amacr','\\xE6':'aelig','\\xC6':'AElig','\\uD835\\uDCB7':'bscr','\\uD835\\uDD53':'bopf','\\uD835\\uDD1F':'bfr','\\uD835\\uDD39':'Bopf','\\u212C':'Bscr','\\uD835\\uDD05':'Bfr','\\uD835\\uDD20':'cfr','\\uD835\\uDCB8':'cscr','\\uD835\\uDD54':'copf','\\u212D':'Cfr','\\uD835\\uDC9E':'Cscr','\\u2102':'Copf','\\u0107':'cacute','\\u0106':'Cacute','\\u0109':'ccirc','\\u0108':'Ccirc','\\u010D':'ccaron','\\u010C':'Ccaron','\\u010B':'cdot','\\u010A':'Cdot','\\xE7':'ccedil','\\xC7':'Ccedil','\\u2105':'incare','\\uD835\\uDD21':'dfr','\\u2146':'dd','\\uD835\\uDD55':'dopf','\\uD835\\uDCB9':'dscr','\\uD835\\uDC9F':'Dscr','\\uD835\\uDD07':'Dfr','\\u2145':'DD','\\uD835\\uDD3B':'Dopf','\\u010F':'dcaron','\\u010E':'Dcaron','\\u0111':'dstrok','\\u0110':'Dstrok','\\xF0':'eth','\\xD0':'ETH','\\u2147':'ee','\\u212F':'escr','\\uD835\\uDD22':'efr','\\uD835\\uDD56':'eopf','\\u2130':'Escr','\\uD835\\uDD08':'Efr','\\uD835\\uDD3C':'Eopf','\\xE9':'eacute','\\xC9':'Eacute','\\xE8':'egrave','\\xC8':'Egrave','\\xEA':'ecirc','\\xCA':'Ecirc','\\u011B':'ecaron','\\u011A':'Ecaron','\\xEB':'euml','\\xCB':'Euml','\\u0117':'edot','\\u0116':'Edot','\\u0119':'eogon','\\u0118':'Eogon','\\u0113':'emacr','\\u0112':'Emacr','\\uD835\\uDD23':'ffr','\\uD835\\uDD57':'fopf','\\uD835\\uDCBB':'fscr','\\uD835\\uDD09':'Ffr','\\uD835\\uDD3D':'Fopf','\\u2131':'Fscr','\\uFB00':'fflig','\\uFB03':'ffilig','\\uFB04':'ffllig','\\uFB01':'filig','fj':'fjlig','\\uFB02':'fllig','\\u0192':'fnof','\\u210A':'gscr','\\uD835\\uDD58':'gopf','\\uD835\\uDD24':'gfr','\\uD835\\uDCA2':'Gscr','\\uD835\\uDD3E':'Gopf','\\uD835\\uDD0A':'Gfr','\\u01F5':'gacute','\\u011F':'gbreve','\\u011E':'Gbreve','\\u011D':'gcirc','\\u011C':'Gcirc','\\u0121':'gdot','\\u0120':'Gdot','\\u0122':'Gcedil','\\uD835\\uDD25':'hfr','\\u210E':'planckh','\\uD835\\uDCBD':'hscr','\\uD835\\uDD59':'hopf','\\u210B':'Hscr','\\u210C':'Hfr','\\u210D':'Hopf','\\u0125':'hcirc','\\u0124':'Hcirc','\\u210F':'hbar','\\u0127':'hstrok','\\u0126':'Hstrok','\\uD835\\uDD5A':'iopf','\\uD835\\uDD26':'ifr','\\uD835\\uDCBE':'iscr','\\u2148':'ii','\\uD835\\uDD40':'Iopf','\\u2110':'Iscr','\\u2111':'Im','\\xED':'iacute','\\xCD':'Iacute','\\xEC':'igrave','\\xCC':'Igrave','\\xEE':'icirc','\\xCE':'Icirc','\\xEF':'iuml','\\xCF':'Iuml','\\u0129':'itilde','\\u0128':'Itilde','\\u0130':'Idot','\\u012F':'iogon','\\u012E':'Iogon','\\u012B':'imacr','\\u012A':'Imacr','\\u0133':'ijlig','\\u0132':'IJlig','\\u0131':'imath','\\uD835\\uDCBF':'jscr','\\uD835\\uDD5B':'jopf','\\uD835\\uDD27':'jfr','\\uD835\\uDCA5':'Jscr','\\uD835\\uDD0D':'Jfr','\\uD835\\uDD41':'Jopf','\\u0135':'jcirc','\\u0134':'Jcirc','\\u0237':'jmath','\\uD835\\uDD5C':'kopf','\\uD835\\uDCC0':'kscr','\\uD835\\uDD28':'kfr','\\uD835\\uDCA6':'Kscr','\\uD835\\uDD42':'Kopf','\\uD835\\uDD0E':'Kfr','\\u0137':'kcedil','\\u0136':'Kcedil','\\uD835\\uDD29':'lfr','\\uD835\\uDCC1':'lscr','\\u2113':'ell','\\uD835\\uDD5D':'lopf','\\u2112':'Lscr','\\uD835\\uDD0F':'Lfr','\\uD835\\uDD43':'Lopf','\\u013A':'lacute','\\u0139':'Lacute','\\u013E':'lcaron','\\u013D':'Lcaron','\\u013C':'lcedil','\\u013B':'Lcedil','\\u0142':'lstrok','\\u0141':'Lstrok','\\u0140':'lmidot','\\u013F':'Lmidot','\\uD835\\uDD2A':'mfr','\\uD835\\uDD5E':'mopf','\\uD835\\uDCC2':'mscr','\\uD835\\uDD10':'Mfr','\\uD835\\uDD44':'Mopf','\\u2133':'Mscr','\\uD835\\uDD2B':'nfr','\\uD835\\uDD5F':'nopf','\\uD835\\uDCC3':'nscr','\\u2115':'Nopf','\\uD835\\uDCA9':'Nscr','\\uD835\\uDD11':'Nfr','\\u0144':'nacute','\\u0143':'Nacute','\\u0148':'ncaron','\\u0147':'Ncaron','\\xF1':'ntilde','\\xD1':'Ntilde','\\u0146':'ncedil','\\u0145':'Ncedil','\\u2116':'numero','\\u014B':'eng','\\u014A':'ENG','\\uD835\\uDD60':'oopf','\\uD835\\uDD2C':'ofr','\\u2134':'oscr','\\uD835\\uDCAA':'Oscr','\\uD835\\uDD12':'Ofr','\\uD835\\uDD46':'Oopf','\\xBA':'ordm','\\xF3':'oacute','\\xD3':'Oacute','\\xF2':'ograve','\\xD2':'Ograve','\\xF4':'ocirc','\\xD4':'Ocirc','\\xF6':'ouml','\\xD6':'Ouml','\\u0151':'odblac','\\u0150':'Odblac','\\xF5':'otilde','\\xD5':'Otilde','\\xF8':'oslash','\\xD8':'Oslash','\\u014D':'omacr','\\u014C':'Omacr','\\u0153':'oelig','\\u0152':'OElig','\\uD835\\uDD2D':'pfr','\\uD835\\uDCC5':'pscr','\\uD835\\uDD61':'popf','\\u2119':'Popf','\\uD835\\uDD13':'Pfr','\\uD835\\uDCAB':'Pscr','\\uD835\\uDD62':'qopf','\\uD835\\uDD2E':'qfr','\\uD835\\uDCC6':'qscr','\\uD835\\uDCAC':'Qscr','\\uD835\\uDD14':'Qfr','\\u211A':'Qopf','\\u0138':'kgreen','\\uD835\\uDD2F':'rfr','\\uD835\\uDD63':'ropf','\\uD835\\uDCC7':'rscr','\\u211B':'Rscr','\\u211C':'Re','\\u211D':'Ropf','\\u0155':'racute','\\u0154':'Racute','\\u0159':'rcaron','\\u0158':'Rcaron','\\u0157':'rcedil','\\u0156':'Rcedil','\\uD835\\uDD64':'sopf','\\uD835\\uDCC8':'sscr','\\uD835\\uDD30':'sfr','\\uD835\\uDD4A':'Sopf','\\uD835\\uDD16':'Sfr','\\uD835\\uDCAE':'Sscr','\\u24C8':'oS','\\u015B':'sacute','\\u015A':'Sacute','\\u015D':'scirc','\\u015C':'Scirc','\\u0161':'scaron','\\u0160':'Scaron','\\u015F':'scedil','\\u015E':'Scedil','\\xDF':'szlig','\\uD835\\uDD31':'tfr','\\uD835\\uDCC9':'tscr','\\uD835\\uDD65':'topf','\\uD835\\uDCAF':'Tscr','\\uD835\\uDD17':'Tfr','\\uD835\\uDD4B':'Topf','\\u0165':'tcaron','\\u0164':'Tcaron','\\u0163':'tcedil','\\u0162':'Tcedil','\\u2122':'trade','\\u0167':'tstrok','\\u0166':'Tstrok','\\uD835\\uDCCA':'uscr','\\uD835\\uDD66':'uopf','\\uD835\\uDD32':'ufr','\\uD835\\uDD4C':'Uopf','\\uD835\\uDD18':'Ufr','\\uD835\\uDCB0':'Uscr','\\xFA':'uacute','\\xDA':'Uacute','\\xF9':'ugrave','\\xD9':'Ugrave','\\u016D':'ubreve','\\u016C':'Ubreve','\\xFB':'ucirc','\\xDB':'Ucirc','\\u016F':'uring','\\u016E':'Uring','\\xFC':'uuml','\\xDC':'Uuml','\\u0171':'udblac','\\u0170':'Udblac','\\u0169':'utilde','\\u0168':'Utilde','\\u0173':'uogon','\\u0172':'Uogon','\\u016B':'umacr','\\u016A':'Umacr','\\uD835\\uDD33':'vfr','\\uD835\\uDD67':'vopf','\\uD835\\uDCCB':'vscr','\\uD835\\uDD19':'Vfr','\\uD835\\uDD4D':'Vopf','\\uD835\\uDCB1':'Vscr','\\uD835\\uDD68':'wopf','\\uD835\\uDCCC':'wscr','\\uD835\\uDD34':'wfr','\\uD835\\uDCB2':'Wscr','\\uD835\\uDD4E':'Wopf','\\uD835\\uDD1A':'Wfr','\\u0175':'wcirc','\\u0174':'Wcirc','\\uD835\\uDD35':'xfr','\\uD835\\uDCCD':'xscr','\\uD835\\uDD69':'xopf','\\uD835\\uDD4F':'Xopf','\\uD835\\uDD1B':'Xfr','\\uD835\\uDCB3':'Xscr','\\uD835\\uDD36':'yfr','\\uD835\\uDCCE':'yscr','\\uD835\\uDD6A':'yopf','\\uD835\\uDCB4':'Yscr','\\uD835\\uDD1C':'Yfr','\\uD835\\uDD50':'Yopf','\\xFD':'yacute','\\xDD':'Yacute','\\u0177':'ycirc','\\u0176':'Ycirc','\\xFF':'yuml','\\u0178':'Yuml','\\uD835\\uDCCF':'zscr','\\uD835\\uDD37':'zfr','\\uD835\\uDD6B':'zopf','\\u2128':'Zfr','\\u2124':'Zopf','\\uD835\\uDCB5':'Zscr','\\u017A':'zacute','\\u0179':'Zacute','\\u017E':'zcaron','\\u017D':'Zcaron','\\u017C':'zdot','\\u017B':'Zdot','\\u01B5':'imped','\\xFE':'thorn','\\xDE':'THORN','\\u0149':'napos','\\u03B1':'alpha','\\u0391':'Alpha','\\u03B2':'beta','\\u0392':'Beta','\\u03B3':'gamma','\\u0393':'Gamma','\\u03B4':'delta','\\u0394':'Delta','\\u03B5':'epsi','\\u03F5':'epsiv','\\u0395':'Epsilon','\\u03DD':'gammad','\\u03DC':'Gammad','\\u03B6':'zeta','\\u0396':'Zeta','\\u03B7':'eta','\\u0397':'Eta','\\u03B8':'theta','\\u03D1':'thetav','\\u0398':'Theta','\\u03B9':'iota','\\u0399':'Iota','\\u03BA':'kappa','\\u03F0':'kappav','\\u039A':'Kappa','\\u03BB':'lambda','\\u039B':'Lambda','\\u03BC':'mu','\\xB5':'micro','\\u039C':'Mu','\\u03BD':'nu','\\u039D':'Nu','\\u03BE':'xi','\\u039E':'Xi','\\u03BF':'omicron','\\u039F':'Omicron','\\u03C0':'pi','\\u03D6':'piv','\\u03A0':'Pi','\\u03C1':'rho','\\u03F1':'rhov','\\u03A1':'Rho','\\u03C3':'sigma','\\u03A3':'Sigma','\\u03C2':'sigmaf','\\u03C4':'tau','\\u03A4':'Tau','\\u03C5':'upsi','\\u03A5':'Upsilon','\\u03D2':'Upsi','\\u03C6':'phi','\\u03D5':'phiv','\\u03A6':'Phi','\\u03C7':'chi','\\u03A7':'Chi','\\u03C8':'psi','\\u03A8':'Psi','\\u03C9':'omega','\\u03A9':'ohm','\\u0430':'acy','\\u0410':'Acy','\\u0431':'bcy','\\u0411':'Bcy','\\u0432':'vcy','\\u0412':'Vcy','\\u0433':'gcy','\\u0413':'Gcy','\\u0453':'gjcy','\\u0403':'GJcy','\\u0434':'dcy','\\u0414':'Dcy','\\u0452':'djcy','\\u0402':'DJcy','\\u0435':'iecy','\\u0415':'IEcy','\\u0451':'iocy','\\u0401':'IOcy','\\u0454':'jukcy','\\u0404':'Jukcy','\\u0436':'zhcy','\\u0416':'ZHcy','\\u0437':'zcy','\\u0417':'Zcy','\\u0455':'dscy','\\u0405':'DScy','\\u0438':'icy','\\u0418':'Icy','\\u0456':'iukcy','\\u0406':'Iukcy','\\u0457':'yicy','\\u0407':'YIcy','\\u0439':'jcy','\\u0419':'Jcy','\\u0458':'jsercy','\\u0408':'Jsercy','\\u043A':'kcy','\\u041A':'Kcy','\\u045C':'kjcy','\\u040C':'KJcy','\\u043B':'lcy','\\u041B':'Lcy','\\u0459':'ljcy','\\u0409':'LJcy','\\u043C':'mcy','\\u041C':'Mcy','\\u043D':'ncy','\\u041D':'Ncy','\\u045A':'njcy','\\u040A':'NJcy','\\u043E':'ocy','\\u041E':'Ocy','\\u043F':'pcy','\\u041F':'Pcy','\\u0440':'rcy','\\u0420':'Rcy','\\u0441':'scy','\\u0421':'Scy','\\u0442':'tcy','\\u0422':'Tcy','\\u045B':'tshcy','\\u040B':'TSHcy','\\u0443':'ucy','\\u0423':'Ucy','\\u045E':'ubrcy','\\u040E':'Ubrcy','\\u0444':'fcy','\\u0424':'Fcy','\\u0445':'khcy','\\u0425':'KHcy','\\u0446':'tscy','\\u0426':'TScy','\\u0447':'chcy','\\u0427':'CHcy','\\u045F':'dzcy','\\u040F':'DZcy','\\u0448':'shcy','\\u0428':'SHcy','\\u0449':'shchcy','\\u0429':'SHCHcy','\\u044A':'hardcy','\\u042A':'HARDcy','\\u044B':'ycy','\\u042B':'Ycy','\\u044C':'softcy','\\u042C':'SOFTcy','\\u044D':'ecy','\\u042D':'Ecy','\\u044E':'yucy','\\u042E':'YUcy','\\u044F':'yacy','\\u042F':'YAcy','\\u2135':'aleph','\\u2136':'beth','\\u2137':'gimel','\\u2138':'daleth'};\n\n\tvar regexEscape = /[\"&'<>`]/g;\n\tvar escapeMap = {\n\t\t'\"': '&quot;',\n\t\t'&': '&amp;',\n\t\t'\\'': '&#x27;',\n\t\t'<': '&lt;',\n\t\t// See https://mathiasbynens.be/notes/ambiguous-ampersands: in HTML, the\n\t\t// following is not strictly necessary unless it’s part of a tag or an\n\t\t// unquoted attribute value. We’re only escaping it to support those\n\t\t// situations, and for XML support.\n\t\t'>': '&gt;',\n\t\t// In Internet Explorer ≤ 8, the backtick character can be used\n\t\t// to break out of (un)quoted attribute values or HTML comments.\n\t\t// See http://html5sec.org/#102, http://html5sec.org/#108, and\n\t\t// http://html5sec.org/#133.\n\t\t'`': '&#x60;'\n\t};\n\n\tvar regexInvalidEntity = /&#(?:[xX][^a-fA-F0-9]|[^0-9xX])/;\n\tvar regexInvalidRawCodePoint = /[\\0-\\x08\\x0B\\x0E-\\x1F\\x7F-\\x9F\\uFDD0-\\uFDEF\\uFFFE\\uFFFF]|[\\uD83F\\uD87F\\uD8BF\\uD8FF\\uD93F\\uD97F\\uD9BF\\uD9FF\\uDA3F\\uDA7F\\uDABF\\uDAFF\\uDB3F\\uDB7F\\uDBBF\\uDBFF][\\uDFFE\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/;\n\tvar regexDecode = /&(CounterClockwiseContourIntegral|DoubleLongLeftRightArrow|ClockwiseContourIntegral|NotNestedGreaterGreater|NotSquareSupersetEqual|DiacriticalDoubleAcute|NotRightTriangleEqual|NotSucceedsSlantEqual|NotPrecedesSlantEqual|CloseCurlyDoubleQuote|NegativeVeryThinSpace|DoubleContourIntegral|FilledVerySmallSquare|CapitalDifferentialD|OpenCurlyDoubleQuote|EmptyVerySmallSquare|NestedGreaterGreater|DoubleLongRightArrow|NotLeftTriangleEqual|NotGreaterSlantEqual|ReverseUpEquilibrium|DoubleLeftRightArrow|NotSquareSubsetEqual|NotDoubleVerticalBar|RightArrowLeftArrow|NotGreaterFullEqual|NotRightTriangleBar|SquareSupersetEqual|DownLeftRightVector|DoubleLongLeftArrow|leftrightsquigarrow|LeftArrowRightArrow|NegativeMediumSpace|blacktriangleright|RightDownVectorBar|PrecedesSlantEqual|RightDoubleBracket|SucceedsSlantEqual|NotLeftTriangleBar|RightTriangleEqual|SquareIntersection|RightDownTeeVector|ReverseEquilibrium|NegativeThickSpace|longleftrightarrow|Longleftrightarrow|LongLeftRightArrow|DownRightTeeVector|DownRightVectorBar|GreaterSlantEqual|SquareSubsetEqual|LeftDownVectorBar|LeftDoubleBracket|VerticalSeparator|rightleftharpoons|NotGreaterGreater|NotSquareSuperset|blacktriangleleft|blacktriangledown|NegativeThinSpace|LeftDownTeeVector|NotLessSlantEqual|leftrightharpoons|DoubleUpDownArrow|DoubleVerticalBar|LeftTriangleEqual|FilledSmallSquare|twoheadrightarrow|NotNestedLessLess|DownLeftTeeVector|DownLeftVectorBar|RightAngleBracket|NotTildeFullEqual|NotReverseElement|RightUpDownVector|DiacriticalTilde|NotSucceedsTilde|circlearrowright|NotPrecedesEqual|rightharpoondown|DoubleRightArrow|NotSucceedsEqual|NonBreakingSpace|NotRightTriangle|LessEqualGreater|RightUpTeeVector|LeftAngleBracket|GreaterFullEqual|DownArrowUpArrow|RightUpVectorBar|twoheadleftarrow|GreaterEqualLess|downharpoonright|RightTriangleBar|ntrianglerighteq|NotSupersetEqual|LeftUpDownVector|DiacriticalAcute|rightrightarrows|vartriangleright|UpArrowDownArrow|DiacriticalGrave|UnderParenthesis|EmptySmallSquare|LeftUpVectorBar|leftrightarrows|DownRightVector|downharpoonleft|trianglerighteq|ShortRightArrow|OverParenthesis|DoubleLeftArrow|DoubleDownArrow|NotSquareSubset|bigtriangledown|ntrianglelefteq|UpperRightArrow|curvearrowright|vartriangleleft|NotLeftTriangle|nleftrightarrow|LowerRightArrow|NotHumpDownHump|NotGreaterTilde|rightthreetimes|LeftUpTeeVector|NotGreaterEqual|straightepsilon|LeftTriangleBar|rightsquigarrow|ContourIntegral|rightleftarrows|CloseCurlyQuote|RightDownVector|LeftRightVector|nLeftrightarrow|leftharpoondown|circlearrowleft|SquareSuperset|OpenCurlyQuote|hookrightarrow|HorizontalLine|DiacriticalDot|NotLessGreater|ntriangleright|DoubleRightTee|InvisibleComma|InvisibleTimes|LowerLeftArrow|DownLeftVector|NotSubsetEqual|curvearrowleft|trianglelefteq|NotVerticalBar|TildeFullEqual|downdownarrows|NotGreaterLess|RightTeeVector|ZeroWidthSpace|looparrowright|LongRightArrow|doublebarwedge|ShortLeftArrow|ShortDownArrow|RightVectorBar|GreaterGreater|ReverseElement|rightharpoonup|LessSlantEqual|leftthreetimes|upharpoonright|rightarrowtail|LeftDownVector|Longrightarrow|NestedLessLess|UpperLeftArrow|nshortparallel|leftleftarrows|leftrightarrow|Leftrightarrow|LeftRightArrow|longrightarrow|upharpoonleft|RightArrowBar|ApplyFunction|LeftTeeVector|leftarrowtail|NotEqualTilde|varsubsetneqq|varsupsetneqq|RightTeeArrow|SucceedsEqual|SucceedsTilde|LeftVectorBar|SupersetEqual|hookleftarrow|DifferentialD|VerticalTilde|VeryThinSpace|blacktriangle|bigtriangleup|LessFullEqual|divideontimes|leftharpoonup|UpEquilibrium|ntriangleleft|RightTriangle|measuredangle|shortparallel|longleftarrow|Longleftarrow|LongLeftArrow|DoubleLeftTee|Poincareplane|PrecedesEqual|triangleright|DoubleUpArrow|RightUpVector|fallingdotseq|looparrowleft|PrecedesTilde|NotTildeEqual|NotTildeTilde|smallsetminus|Proportional|triangleleft|triangledown|UnderBracket|NotHumpEqual|exponentiale|ExponentialE|NotLessTilde|HilbertSpace|RightCeiling|blacklozenge|varsupsetneq|HumpDownHump|GreaterEqual|VerticalLine|LeftTeeArrow|NotLessEqual|DownTeeArrow|LeftTriangle|varsubsetneq|Intersection|NotCongruent|DownArrowBar|LeftUpVector|LeftArrowBar|risingdotseq|GreaterTilde|RoundImplies|SquareSubset|ShortUpArrow|NotSuperset|quaternions|precnapprox|backepsilon|preccurlyeq|OverBracket|blacksquare|MediumSpace|VerticalBar|circledcirc|circleddash|CircleMinus|CircleTimes|LessGreater|curlyeqprec|curlyeqsucc|diamondsuit|UpDownArrow|Updownarrow|RuleDelayed|Rrightarrow|updownarrow|RightVector|nRightarrow|nrightarrow|eqslantless|LeftCeiling|Equilibrium|SmallCircle|expectation|NotSucceeds|thickapprox|GreaterLess|SquareUnion|NotPrecedes|NotLessLess|straightphi|succnapprox|succcurlyeq|SubsetEqual|sqsupseteq|Proportion|Laplacetrf|ImaginaryI|supsetneqq|NotGreater|gtreqqless|NotElement|ThickSpace|TildeEqual|TildeTilde|Fouriertrf|rmoustache|EqualTilde|eqslantgtr|UnderBrace|LeftVector|UpArrowBar|nLeftarrow|nsubseteqq|subsetneqq|nsupseteqq|nleftarrow|succapprox|lessapprox|UpTeeArrow|upuparrows|curlywedge|lesseqqgtr|varepsilon|varnothing|RightFloor|complement|CirclePlus|sqsubseteq|Lleftarrow|circledast|RightArrow|Rightarrow|rightarrow|lmoustache|Bernoullis|precapprox|mapstoleft|mapstodown|longmapsto|dotsquare|downarrow|DoubleDot|nsubseteq|supsetneq|leftarrow|nsupseteq|subsetneq|ThinSpace|ngeqslant|subseteqq|HumpEqual|NotSubset|triangleq|NotCupCap|lesseqgtr|heartsuit|TripleDot|Leftarrow|Coproduct|Congruent|varpropto|complexes|gvertneqq|LeftArrow|LessTilde|supseteqq|MinusPlus|CircleDot|nleqslant|NotExists|gtreqless|nparallel|UnionPlus|LeftFloor|checkmark|CenterDot|centerdot|Mellintrf|gtrapprox|bigotimes|OverBrace|spadesuit|therefore|pitchfork|rationals|PlusMinus|Backslash|Therefore|DownBreve|backsimeq|backprime|DownArrow|nshortmid|Downarrow|lvertneqq|eqvparsl|imagline|imagpart|infintie|integers|Integral|intercal|LessLess|Uarrocir|intlarhk|sqsupset|angmsdaf|sqsubset|llcorner|vartheta|cupbrcap|lnapprox|Superset|SuchThat|succnsim|succneqq|angmsdag|biguplus|curlyvee|trpezium|Succeeds|NotTilde|bigwedge|angmsdah|angrtvbd|triminus|cwconint|fpartint|lrcorner|smeparsl|subseteq|urcorner|lurdshar|laemptyv|DDotrahd|approxeq|ldrushar|awconint|mapstoup|backcong|shortmid|triangle|geqslant|gesdotol|timesbar|circledR|circledS|setminus|multimap|naturals|scpolint|ncongdot|RightTee|boxminus|gnapprox|boxtimes|andslope|thicksim|angmsdaa|varsigma|cirfnint|rtriltri|angmsdab|rppolint|angmsdac|barwedge|drbkarow|clubsuit|thetasym|bsolhsub|capbrcup|dzigrarr|doteqdot|DotEqual|dotminus|UnderBar|NotEqual|realpart|otimesas|ulcorner|hksearow|hkswarow|parallel|PartialD|elinters|emptyset|plusacir|bbrktbrk|angmsdad|pointint|bigoplus|angmsdae|Precedes|bigsqcup|varkappa|notindot|supseteq|precneqq|precnsim|profalar|profline|profsurf|leqslant|lesdotor|raemptyv|subplus|notnivb|notnivc|subrarr|zigrarr|vzigzag|submult|subedot|Element|between|cirscir|larrbfs|larrsim|lotimes|lbrksld|lbrkslu|lozenge|ldrdhar|dbkarow|bigcirc|epsilon|simrarr|simplus|ltquest|Epsilon|luruhar|gtquest|maltese|npolint|eqcolon|npreceq|bigodot|ddagger|gtrless|bnequiv|harrcir|ddotseq|equivDD|backsim|demptyv|nsqsube|nsqsupe|Upsilon|nsubset|upsilon|minusdu|nsucceq|swarrow|nsupset|coloneq|searrow|boxplus|napprox|natural|asympeq|alefsym|congdot|nearrow|bigstar|diamond|supplus|tritime|LeftTee|nvinfin|triplus|NewLine|nvltrie|nvrtrie|nwarrow|nexists|Diamond|ruluhar|Implies|supmult|angzarr|suplarr|suphsub|questeq|because|digamma|Because|olcross|bemptyv|omicron|Omicron|rotimes|NoBreak|intprod|angrtvb|orderof|uwangle|suphsol|lesdoto|orslope|DownTee|realine|cudarrl|rdldhar|OverBar|supedot|lessdot|supdsub|topfork|succsim|rbrkslu|rbrksld|pertenk|cudarrr|isindot|planckh|lessgtr|pluscir|gesdoto|plussim|plustwo|lesssim|cularrp|rarrsim|Cayleys|notinva|notinvb|notinvc|UpArrow|Uparrow|uparrow|NotLess|dwangle|precsim|Product|curarrm|Cconint|dotplus|rarrbfs|ccupssm|Cedilla|cemptyv|notniva|quatint|frac35|frac38|frac45|frac56|frac58|frac78|tridot|xoplus|gacute|gammad|Gammad|lfisht|lfloor|bigcup|sqsupe|gbreve|Gbreve|lharul|sqsube|sqcups|Gcedil|apacir|llhard|lmidot|Lmidot|lmoust|andand|sqcaps|approx|Abreve|spades|circeq|tprime|divide|topcir|Assign|topbot|gesdot|divonx|xuplus|timesd|gesles|atilde|solbar|SOFTcy|loplus|timesb|lowast|lowbar|dlcorn|dlcrop|softcy|dollar|lparlt|thksim|lrhard|Atilde|lsaquo|smashp|bigvee|thinsp|wreath|bkarow|lsquor|lstrok|Lstrok|lthree|ltimes|ltlarr|DotDot|simdot|ltrPar|weierp|xsqcup|angmsd|sigmav|sigmaf|zeetrf|Zcaron|zcaron|mapsto|vsupne|thetav|cirmid|marker|mcomma|Zacute|vsubnE|there4|gtlPar|vsubne|bottom|gtrarr|SHCHcy|shchcy|midast|midcir|middot|minusb|minusd|gtrdot|bowtie|sfrown|mnplus|models|colone|seswar|Colone|mstpos|searhk|gtrsim|nacute|Nacute|boxbox|telrec|hairsp|Tcedil|nbumpe|scnsim|ncaron|Ncaron|ncedil|Ncedil|hamilt|Scedil|nearhk|hardcy|HARDcy|tcedil|Tcaron|commat|nequiv|nesear|tcaron|target|hearts|nexist|varrho|scedil|Scaron|scaron|hellip|Sacute|sacute|hercon|swnwar|compfn|rtimes|rthree|rsquor|rsaquo|zacute|wedgeq|homtht|barvee|barwed|Barwed|rpargt|horbar|conint|swarhk|roplus|nltrie|hslash|hstrok|Hstrok|rmoust|Conint|bprime|hybull|hyphen|iacute|Iacute|supsup|supsub|supsim|varphi|coprod|brvbar|agrave|Supset|supset|igrave|Igrave|notinE|Agrave|iiiint|iinfin|copysr|wedbar|Verbar|vangrt|becaus|incare|verbar|inodot|bullet|drcorn|intcal|drcrop|cularr|vellip|Utilde|bumpeq|cupcap|dstrok|Dstrok|CupCap|cupcup|cupdot|eacute|Eacute|supdot|iquest|easter|ecaron|Ecaron|ecolon|isinsv|utilde|itilde|Itilde|curarr|succeq|Bumpeq|cacute|ulcrop|nparsl|Cacute|nprcue|egrave|Egrave|nrarrc|nrarrw|subsup|subsub|nrtrie|jsercy|nsccue|Jsercy|kappav|kcedil|Kcedil|subsim|ulcorn|nsimeq|egsdot|veebar|kgreen|capand|elsdot|Subset|subset|curren|aacute|lacute|Lacute|emptyv|ntilde|Ntilde|lagran|lambda|Lambda|capcap|Ugrave|langle|subdot|emsp13|numero|emsp14|nvdash|nvDash|nVdash|nVDash|ugrave|ufisht|nvHarr|larrfs|nvlArr|larrhk|larrlp|larrpl|nvrArr|Udblac|nwarhk|larrtl|nwnear|oacute|Oacute|latail|lAtail|sstarf|lbrace|odblac|Odblac|lbrack|udblac|odsold|eparsl|lcaron|Lcaron|ograve|Ograve|lcedil|Lcedil|Aacute|ssmile|ssetmn|squarf|ldquor|capcup|ominus|cylcty|rharul|eqcirc|dagger|rfloor|rfisht|Dagger|daleth|equals|origof|capdot|equest|dcaron|Dcaron|rdquor|oslash|Oslash|otilde|Otilde|otimes|Otimes|urcrop|Ubreve|ubreve|Yacute|Uacute|uacute|Rcedil|rcedil|urcorn|parsim|Rcaron|Vdashl|rcaron|Tstrok|percnt|period|permil|Exists|yacute|rbrack|rbrace|phmmat|ccaron|Ccaron|planck|ccedil|plankv|tstrok|female|plusdo|plusdu|ffilig|plusmn|ffllig|Ccedil|rAtail|dfisht|bernou|ratail|Rarrtl|rarrtl|angsph|rarrpl|rarrlp|rarrhk|xwedge|xotime|forall|ForAll|Vvdash|vsupnE|preceq|bigcap|frac12|frac13|frac14|primes|rarrfs|prnsim|frac15|Square|frac16|square|lesdot|frac18|frac23|propto|prurel|rarrap|rangle|puncsp|frac25|Racute|qprime|racute|lesges|frac34|abreve|AElig|eqsim|utdot|setmn|urtri|Equal|Uring|seArr|uring|searr|dashv|Dashv|mumap|nabla|iogon|Iogon|sdote|sdotb|scsim|napid|napos|equiv|natur|Acirc|dblac|erarr|nbump|iprod|erDot|ucirc|awint|esdot|angrt|ncong|isinE|scnap|Scirc|scirc|ndash|isins|Ubrcy|nearr|neArr|isinv|nedot|ubrcy|acute|Ycirc|iukcy|Iukcy|xutri|nesim|caret|jcirc|Jcirc|caron|twixt|ddarr|sccue|exist|jmath|sbquo|ngeqq|angst|ccaps|lceil|ngsim|UpTee|delta|Delta|rtrif|nharr|nhArr|nhpar|rtrie|jukcy|Jukcy|kappa|rsquo|Kappa|nlarr|nlArr|TSHcy|rrarr|aogon|Aogon|fflig|xrarr|tshcy|ccirc|nleqq|filig|upsih|nless|dharl|nlsim|fjlig|ropar|nltri|dharr|robrk|roarr|fllig|fltns|roang|rnmid|subnE|subne|lAarr|trisb|Ccirc|acirc|ccups|blank|VDash|forkv|Vdash|langd|cedil|blk12|blk14|laquo|strns|diams|notin|vDash|larrb|blk34|block|disin|uplus|vdash|vBarv|aelig|starf|Wedge|check|xrArr|lates|lbarr|lBarr|notni|lbbrk|bcong|frasl|lbrke|frown|vrtri|vprop|vnsup|gamma|Gamma|wedge|xodot|bdquo|srarr|doteq|ldquo|boxdl|boxdL|gcirc|Gcirc|boxDl|boxDL|boxdr|boxdR|boxDr|TRADE|trade|rlhar|boxDR|vnsub|npart|vltri|rlarr|boxhd|boxhD|nprec|gescc|nrarr|nrArr|boxHd|boxHD|boxhu|boxhU|nrtri|boxHu|clubs|boxHU|times|colon|Colon|gimel|xlArr|Tilde|nsime|tilde|nsmid|nspar|THORN|thorn|xlarr|nsube|nsubE|thkap|xhArr|comma|nsucc|boxul|boxuL|nsupe|nsupE|gneqq|gnsim|boxUl|boxUL|grave|boxur|boxuR|boxUr|boxUR|lescc|angle|bepsi|boxvh|varpi|boxvH|numsp|Theta|gsime|gsiml|theta|boxVh|boxVH|boxvl|gtcir|gtdot|boxvL|boxVl|boxVL|crarr|cross|Cross|nvsim|boxvr|nwarr|nwArr|sqsup|dtdot|Uogon|lhard|lharu|dtrif|ocirc|Ocirc|lhblk|duarr|odash|sqsub|Hacek|sqcup|llarr|duhar|oelig|OElig|ofcir|boxvR|uogon|lltri|boxVr|csube|uuarr|ohbar|csupe|ctdot|olarr|olcir|harrw|oline|sqcap|omacr|Omacr|omega|Omega|boxVR|aleph|lneqq|lnsim|loang|loarr|rharu|lobrk|hcirc|operp|oplus|rhard|Hcirc|orarr|Union|order|ecirc|Ecirc|cuepr|szlig|cuesc|breve|reals|eDDot|Breve|hoarr|lopar|utrif|rdquo|Umacr|umacr|efDot|swArr|ultri|alpha|rceil|ovbar|swarr|Wcirc|wcirc|smtes|smile|bsemi|lrarr|aring|parsl|lrhar|bsime|uhblk|lrtri|cupor|Aring|uharr|uharl|slarr|rbrke|bsolb|lsime|rbbrk|RBarr|lsimg|phone|rBarr|rbarr|icirc|lsquo|Icirc|emacr|Emacr|ratio|simne|plusb|simlE|simgE|simeq|pluse|ltcir|ltdot|empty|xharr|xdtri|iexcl|Alpha|ltrie|rarrw|pound|ltrif|xcirc|bumpe|prcue|bumpE|asymp|amacr|cuvee|Sigma|sigma|iiint|udhar|iiota|ijlig|IJlig|supnE|imacr|Imacr|prime|Prime|image|prnap|eogon|Eogon|rarrc|mdash|mDDot|cuwed|imath|supne|imped|Amacr|udarr|prsim|micro|rarrb|cwint|raquo|infin|eplus|range|rangd|Ucirc|radic|minus|amalg|veeeq|rAarr|epsiv|ycirc|quest|sharp|quot|zwnj|Qscr|race|qscr|Qopf|qopf|qint|rang|Rang|Zscr|zscr|Zopf|zopf|rarr|rArr|Rarr|Pscr|pscr|prop|prod|prnE|prec|ZHcy|zhcy|prap|Zeta|zeta|Popf|popf|Zdot|plus|zdot|Yuml|yuml|phiv|YUcy|yucy|Yscr|yscr|perp|Yopf|yopf|part|para|YIcy|Ouml|rcub|yicy|YAcy|rdca|ouml|osol|Oscr|rdsh|yacy|real|oscr|xvee|andd|rect|andv|Xscr|oror|ordm|ordf|xscr|ange|aopf|Aopf|rHar|Xopf|opar|Oopf|xopf|xnis|rhov|oopf|omid|xmap|oint|apid|apos|ogon|ascr|Ascr|odot|odiv|xcup|xcap|ocir|oast|nvlt|nvle|nvgt|nvge|nvap|Wscr|wscr|auml|ntlg|ntgl|nsup|nsub|nsim|Nscr|nscr|nsce|Wopf|ring|npre|wopf|npar|Auml|Barv|bbrk|Nopf|nopf|nmid|nLtv|beta|ropf|Ropf|Beta|beth|nles|rpar|nleq|bnot|bNot|nldr|NJcy|rscr|Rscr|Vscr|vscr|rsqb|njcy|bopf|nisd|Bopf|rtri|Vopf|nGtv|ngtr|vopf|boxh|boxH|boxv|nges|ngeq|boxV|bscr|scap|Bscr|bsim|Vert|vert|bsol|bull|bump|caps|cdot|ncup|scnE|ncap|nbsp|napE|Cdot|cent|sdot|Vbar|nang|vBar|chcy|Mscr|mscr|sect|semi|CHcy|Mopf|mopf|sext|circ|cire|mldr|mlcp|cirE|comp|shcy|SHcy|vArr|varr|cong|copf|Copf|copy|COPY|malt|male|macr|lvnE|cscr|ltri|sime|ltcc|simg|Cscr|siml|csub|Uuml|lsqb|lsim|uuml|csup|Lscr|lscr|utri|smid|lpar|cups|smte|lozf|darr|Lopf|Uscr|solb|lopf|sopf|Sopf|lneq|uscr|spar|dArr|lnap|Darr|dash|Sqrt|LJcy|ljcy|lHar|dHar|Upsi|upsi|diam|lesg|djcy|DJcy|leqq|dopf|Dopf|dscr|Dscr|dscy|ldsh|ldca|squf|DScy|sscr|Sscr|dsol|lcub|late|star|Star|Uopf|Larr|lArr|larr|uopf|dtri|dzcy|sube|subE|Lang|lang|Kscr|kscr|Kopf|kopf|KJcy|kjcy|KHcy|khcy|DZcy|ecir|edot|eDot|Jscr|jscr|succ|Jopf|jopf|Edot|uHar|emsp|ensp|Iuml|iuml|eopf|isin|Iscr|iscr|Eopf|epar|sung|epsi|escr|sup1|sup2|sup3|Iota|iota|supe|supE|Iopf|iopf|IOcy|iocy|Escr|esim|Esim|imof|Uarr|QUOT|uArr|uarr|euml|IEcy|iecy|Idot|Euml|euro|excl|Hscr|hscr|Hopf|hopf|TScy|tscy|Tscr|hbar|tscr|flat|tbrk|fnof|hArr|harr|half|fopf|Fopf|tdot|gvnE|fork|trie|gtcc|fscr|Fscr|gdot|gsim|Gscr|gscr|Gopf|gopf|gneq|Gdot|tosa|gnap|Topf|topf|geqq|toea|GJcy|gjcy|tint|gesl|mid|Sfr|ggg|top|ges|gla|glE|glj|geq|gne|gEl|gel|gnE|Gcy|gcy|gap|Tfr|tfr|Tcy|tcy|Hat|Tau|Ffr|tau|Tab|hfr|Hfr|ffr|Fcy|fcy|icy|Icy|iff|ETH|eth|ifr|Ifr|Eta|eta|int|Int|Sup|sup|ucy|Ucy|Sum|sum|jcy|ENG|ufr|Ufr|eng|Jcy|jfr|els|ell|egs|Efr|efr|Jfr|uml|kcy|Kcy|Ecy|ecy|kfr|Kfr|lap|Sub|sub|lat|lcy|Lcy|leg|Dot|dot|lEg|leq|les|squ|div|die|lfr|Lfr|lgE|Dfr|dfr|Del|deg|Dcy|dcy|lne|lnE|sol|loz|smt|Cup|lrm|cup|lsh|Lsh|sim|shy|map|Map|mcy|Mcy|mfr|Mfr|mho|gfr|Gfr|sfr|cir|Chi|chi|nap|Cfr|vcy|Vcy|cfr|Scy|scy|ncy|Ncy|vee|Vee|Cap|cap|nfr|scE|sce|Nfr|nge|ngE|nGg|vfr|Vfr|ngt|bot|nGt|nis|niv|Rsh|rsh|nle|nlE|bne|Bfr|bfr|nLl|nlt|nLt|Bcy|bcy|not|Not|rlm|wfr|Wfr|npr|nsc|num|ocy|ast|Ocy|ofr|xfr|Xfr|Ofr|ogt|ohm|apE|olt|Rho|ape|rho|Rfr|rfr|ord|REG|ang|reg|orv|And|and|AMP|Rcy|amp|Afr|ycy|Ycy|yen|yfr|Yfr|rcy|par|pcy|Pcy|pfr|Pfr|phi|Phi|afr|Acy|acy|zcy|Zcy|piv|acE|acd|zfr|Zfr|pre|prE|psi|Psi|qfr|Qfr|zwj|Or|ge|Gg|gt|gg|el|oS|lt|Lt|LT|Re|lg|gl|eg|ne|Im|it|le|DD|wp|wr|nu|Nu|dd|lE|Sc|sc|pi|Pi|ee|af|ll|Ll|rx|gE|xi|pm|Xi|ic|pr|Pr|in|ni|mp|mu|ac|Mu|or|ap|Gt|GT|ii);|&(Aacute|Agrave|Atilde|Ccedil|Eacute|Egrave|Iacute|Igrave|Ntilde|Oacute|Ograve|Oslash|Otilde|Uacute|Ugrave|Yacute|aacute|agrave|atilde|brvbar|ccedil|curren|divide|eacute|egrave|frac12|frac14|frac34|iacute|igrave|iquest|middot|ntilde|oacute|ograve|oslash|otilde|plusmn|uacute|ugrave|yacute|AElig|Acirc|Aring|Ecirc|Icirc|Ocirc|THORN|Ucirc|acirc|acute|aelig|aring|cedil|ecirc|icirc|iexcl|laquo|micro|ocirc|pound|raquo|szlig|thorn|times|ucirc|Auml|COPY|Euml|Iuml|Ouml|QUOT|Uuml|auml|cent|copy|euml|iuml|macr|nbsp|ordf|ordm|ouml|para|quot|sect|sup1|sup2|sup3|uuml|yuml|AMP|ETH|REG|amp|deg|eth|not|reg|shy|uml|yen|GT|LT|gt|lt)(?!;)([=a-zA-Z0-9]?)|&#([0-9]+)(;?)|&#[xX]([a-fA-F0-9]+)(;?)|&([0-9a-zA-Z]+)/g;\n\tvar decodeMap = {'aacute':'\\xE1','Aacute':'\\xC1','abreve':'\\u0103','Abreve':'\\u0102','ac':'\\u223E','acd':'\\u223F','acE':'\\u223E\\u0333','acirc':'\\xE2','Acirc':'\\xC2','acute':'\\xB4','acy':'\\u0430','Acy':'\\u0410','aelig':'\\xE6','AElig':'\\xC6','af':'\\u2061','afr':'\\uD835\\uDD1E','Afr':'\\uD835\\uDD04','agrave':'\\xE0','Agrave':'\\xC0','alefsym':'\\u2135','aleph':'\\u2135','alpha':'\\u03B1','Alpha':'\\u0391','amacr':'\\u0101','Amacr':'\\u0100','amalg':'\\u2A3F','amp':'&','AMP':'&','and':'\\u2227','And':'\\u2A53','andand':'\\u2A55','andd':'\\u2A5C','andslope':'\\u2A58','andv':'\\u2A5A','ang':'\\u2220','ange':'\\u29A4','angle':'\\u2220','angmsd':'\\u2221','angmsdaa':'\\u29A8','angmsdab':'\\u29A9','angmsdac':'\\u29AA','angmsdad':'\\u29AB','angmsdae':'\\u29AC','angmsdaf':'\\u29AD','angmsdag':'\\u29AE','angmsdah':'\\u29AF','angrt':'\\u221F','angrtvb':'\\u22BE','angrtvbd':'\\u299D','angsph':'\\u2222','angst':'\\xC5','angzarr':'\\u237C','aogon':'\\u0105','Aogon':'\\u0104','aopf':'\\uD835\\uDD52','Aopf':'\\uD835\\uDD38','ap':'\\u2248','apacir':'\\u2A6F','ape':'\\u224A','apE':'\\u2A70','apid':'\\u224B','apos':'\\'','ApplyFunction':'\\u2061','approx':'\\u2248','approxeq':'\\u224A','aring':'\\xE5','Aring':'\\xC5','ascr':'\\uD835\\uDCB6','Ascr':'\\uD835\\uDC9C','Assign':'\\u2254','ast':'*','asymp':'\\u2248','asympeq':'\\u224D','atilde':'\\xE3','Atilde':'\\xC3','auml':'\\xE4','Auml':'\\xC4','awconint':'\\u2233','awint':'\\u2A11','backcong':'\\u224C','backepsilon':'\\u03F6','backprime':'\\u2035','backsim':'\\u223D','backsimeq':'\\u22CD','Backslash':'\\u2216','Barv':'\\u2AE7','barvee':'\\u22BD','barwed':'\\u2305','Barwed':'\\u2306','barwedge':'\\u2305','bbrk':'\\u23B5','bbrktbrk':'\\u23B6','bcong':'\\u224C','bcy':'\\u0431','Bcy':'\\u0411','bdquo':'\\u201E','becaus':'\\u2235','because':'\\u2235','Because':'\\u2235','bemptyv':'\\u29B0','bepsi':'\\u03F6','bernou':'\\u212C','Bernoullis':'\\u212C','beta':'\\u03B2','Beta':'\\u0392','beth':'\\u2136','between':'\\u226C','bfr':'\\uD835\\uDD1F','Bfr':'\\uD835\\uDD05','bigcap':'\\u22C2','bigcirc':'\\u25EF','bigcup':'\\u22C3','bigodot':'\\u2A00','bigoplus':'\\u2A01','bigotimes':'\\u2A02','bigsqcup':'\\u2A06','bigstar':'\\u2605','bigtriangledown':'\\u25BD','bigtriangleup':'\\u25B3','biguplus':'\\u2A04','bigvee':'\\u22C1','bigwedge':'\\u22C0','bkarow':'\\u290D','blacklozenge':'\\u29EB','blacksquare':'\\u25AA','blacktriangle':'\\u25B4','blacktriangledown':'\\u25BE','blacktriangleleft':'\\u25C2','blacktriangleright':'\\u25B8','blank':'\\u2423','blk12':'\\u2592','blk14':'\\u2591','blk34':'\\u2593','block':'\\u2588','bne':'=\\u20E5','bnequiv':'\\u2261\\u20E5','bnot':'\\u2310','bNot':'\\u2AED','bopf':'\\uD835\\uDD53','Bopf':'\\uD835\\uDD39','bot':'\\u22A5','bottom':'\\u22A5','bowtie':'\\u22C8','boxbox':'\\u29C9','boxdl':'\\u2510','boxdL':'\\u2555','boxDl':'\\u2556','boxDL':'\\u2557','boxdr':'\\u250C','boxdR':'\\u2552','boxDr':'\\u2553','boxDR':'\\u2554','boxh':'\\u2500','boxH':'\\u2550','boxhd':'\\u252C','boxhD':'\\u2565','boxHd':'\\u2564','boxHD':'\\u2566','boxhu':'\\u2534','boxhU':'\\u2568','boxHu':'\\u2567','boxHU':'\\u2569','boxminus':'\\u229F','boxplus':'\\u229E','boxtimes':'\\u22A0','boxul':'\\u2518','boxuL':'\\u255B','boxUl':'\\u255C','boxUL':'\\u255D','boxur':'\\u2514','boxuR':'\\u2558','boxUr':'\\u2559','boxUR':'\\u255A','boxv':'\\u2502','boxV':'\\u2551','boxvh':'\\u253C','boxvH':'\\u256A','boxVh':'\\u256B','boxVH':'\\u256C','boxvl':'\\u2524','boxvL':'\\u2561','boxVl':'\\u2562','boxVL':'\\u2563','boxvr':'\\u251C','boxvR':'\\u255E','boxVr':'\\u255F','boxVR':'\\u2560','bprime':'\\u2035','breve':'\\u02D8','Breve':'\\u02D8','brvbar':'\\xA6','bscr':'\\uD835\\uDCB7','Bscr':'\\u212C','bsemi':'\\u204F','bsim':'\\u223D','bsime':'\\u22CD','bsol':'\\\\','bsolb':'\\u29C5','bsolhsub':'\\u27C8','bull':'\\u2022','bullet':'\\u2022','bump':'\\u224E','bumpe':'\\u224F','bumpE':'\\u2AAE','bumpeq':'\\u224F','Bumpeq':'\\u224E','cacute':'\\u0107','Cacute':'\\u0106','cap':'\\u2229','Cap':'\\u22D2','capand':'\\u2A44','capbrcup':'\\u2A49','capcap':'\\u2A4B','capcup':'\\u2A47','capdot':'\\u2A40','CapitalDifferentialD':'\\u2145','caps':'\\u2229\\uFE00','caret':'\\u2041','caron':'\\u02C7','Cayleys':'\\u212D','ccaps':'\\u2A4D','ccaron':'\\u010D','Ccaron':'\\u010C','ccedil':'\\xE7','Ccedil':'\\xC7','ccirc':'\\u0109','Ccirc':'\\u0108','Cconint':'\\u2230','ccups':'\\u2A4C','ccupssm':'\\u2A50','cdot':'\\u010B','Cdot':'\\u010A','cedil':'\\xB8','Cedilla':'\\xB8','cemptyv':'\\u29B2','cent':'\\xA2','centerdot':'\\xB7','CenterDot':'\\xB7','cfr':'\\uD835\\uDD20','Cfr':'\\u212D','chcy':'\\u0447','CHcy':'\\u0427','check':'\\u2713','checkmark':'\\u2713','chi':'\\u03C7','Chi':'\\u03A7','cir':'\\u25CB','circ':'\\u02C6','circeq':'\\u2257','circlearrowleft':'\\u21BA','circlearrowright':'\\u21BB','circledast':'\\u229B','circledcirc':'\\u229A','circleddash':'\\u229D','CircleDot':'\\u2299','circledR':'\\xAE','circledS':'\\u24C8','CircleMinus':'\\u2296','CirclePlus':'\\u2295','CircleTimes':'\\u2297','cire':'\\u2257','cirE':'\\u29C3','cirfnint':'\\u2A10','cirmid':'\\u2AEF','cirscir':'\\u29C2','ClockwiseContourIntegral':'\\u2232','CloseCurlyDoubleQuote':'\\u201D','CloseCurlyQuote':'\\u2019','clubs':'\\u2663','clubsuit':'\\u2663','colon':':','Colon':'\\u2237','colone':'\\u2254','Colone':'\\u2A74','coloneq':'\\u2254','comma':',','commat':'@','comp':'\\u2201','compfn':'\\u2218','complement':'\\u2201','complexes':'\\u2102','cong':'\\u2245','congdot':'\\u2A6D','Congruent':'\\u2261','conint':'\\u222E','Conint':'\\u222F','ContourIntegral':'\\u222E','copf':'\\uD835\\uDD54','Copf':'\\u2102','coprod':'\\u2210','Coproduct':'\\u2210','copy':'\\xA9','COPY':'\\xA9','copysr':'\\u2117','CounterClockwiseContourIntegral':'\\u2233','crarr':'\\u21B5','cross':'\\u2717','Cross':'\\u2A2F','cscr':'\\uD835\\uDCB8','Cscr':'\\uD835\\uDC9E','csub':'\\u2ACF','csube':'\\u2AD1','csup':'\\u2AD0','csupe':'\\u2AD2','ctdot':'\\u22EF','cudarrl':'\\u2938','cudarrr':'\\u2935','cuepr':'\\u22DE','cuesc':'\\u22DF','cularr':'\\u21B6','cularrp':'\\u293D','cup':'\\u222A','Cup':'\\u22D3','cupbrcap':'\\u2A48','cupcap':'\\u2A46','CupCap':'\\u224D','cupcup':'\\u2A4A','cupdot':'\\u228D','cupor':'\\u2A45','cups':'\\u222A\\uFE00','curarr':'\\u21B7','curarrm':'\\u293C','curlyeqprec':'\\u22DE','curlyeqsucc':'\\u22DF','curlyvee':'\\u22CE','curlywedge':'\\u22CF','curren':'\\xA4','curvearrowleft':'\\u21B6','curvearrowright':'\\u21B7','cuvee':'\\u22CE','cuwed':'\\u22CF','cwconint':'\\u2232','cwint':'\\u2231','cylcty':'\\u232D','dagger':'\\u2020','Dagger':'\\u2021','daleth':'\\u2138','darr':'\\u2193','dArr':'\\u21D3','Darr':'\\u21A1','dash':'\\u2010','dashv':'\\u22A3','Dashv':'\\u2AE4','dbkarow':'\\u290F','dblac':'\\u02DD','dcaron':'\\u010F','Dcaron':'\\u010E','dcy':'\\u0434','Dcy':'\\u0414','dd':'\\u2146','DD':'\\u2145','ddagger':'\\u2021','ddarr':'\\u21CA','DDotrahd':'\\u2911','ddotseq':'\\u2A77','deg':'\\xB0','Del':'\\u2207','delta':'\\u03B4','Delta':'\\u0394','demptyv':'\\u29B1','dfisht':'\\u297F','dfr':'\\uD835\\uDD21','Dfr':'\\uD835\\uDD07','dHar':'\\u2965','dharl':'\\u21C3','dharr':'\\u21C2','DiacriticalAcute':'\\xB4','DiacriticalDot':'\\u02D9','DiacriticalDoubleAcute':'\\u02DD','DiacriticalGrave':'`','DiacriticalTilde':'\\u02DC','diam':'\\u22C4','diamond':'\\u22C4','Diamond':'\\u22C4','diamondsuit':'\\u2666','diams':'\\u2666','die':'\\xA8','DifferentialD':'\\u2146','digamma':'\\u03DD','disin':'\\u22F2','div':'\\xF7','divide':'\\xF7','divideontimes':'\\u22C7','divonx':'\\u22C7','djcy':'\\u0452','DJcy':'\\u0402','dlcorn':'\\u231E','dlcrop':'\\u230D','dollar':'$','dopf':'\\uD835\\uDD55','Dopf':'\\uD835\\uDD3B','dot':'\\u02D9','Dot':'\\xA8','DotDot':'\\u20DC','doteq':'\\u2250','doteqdot':'\\u2251','DotEqual':'\\u2250','dotminus':'\\u2238','dotplus':'\\u2214','dotsquare':'\\u22A1','doublebarwedge':'\\u2306','DoubleContourIntegral':'\\u222F','DoubleDot':'\\xA8','DoubleDownArrow':'\\u21D3','DoubleLeftArrow':'\\u21D0','DoubleLeftRightArrow':'\\u21D4','DoubleLeftTee':'\\u2AE4','DoubleLongLeftArrow':'\\u27F8','DoubleLongLeftRightArrow':'\\u27FA','DoubleLongRightArrow':'\\u27F9','DoubleRightArrow':'\\u21D2','DoubleRightTee':'\\u22A8','DoubleUpArrow':'\\u21D1','DoubleUpDownArrow':'\\u21D5','DoubleVerticalBar':'\\u2225','downarrow':'\\u2193','Downarrow':'\\u21D3','DownArrow':'\\u2193','DownArrowBar':'\\u2913','DownArrowUpArrow':'\\u21F5','DownBreve':'\\u0311','downdownarrows':'\\u21CA','downharpoonleft':'\\u21C3','downharpoonright':'\\u21C2','DownLeftRightVector':'\\u2950','DownLeftTeeVector':'\\u295E','DownLeftVector':'\\u21BD','DownLeftVectorBar':'\\u2956','DownRightTeeVector':'\\u295F','DownRightVector':'\\u21C1','DownRightVectorBar':'\\u2957','DownTee':'\\u22A4','DownTeeArrow':'\\u21A7','drbkarow':'\\u2910','drcorn':'\\u231F','drcrop':'\\u230C','dscr':'\\uD835\\uDCB9','Dscr':'\\uD835\\uDC9F','dscy':'\\u0455','DScy':'\\u0405','dsol':'\\u29F6','dstrok':'\\u0111','Dstrok':'\\u0110','dtdot':'\\u22F1','dtri':'\\u25BF','dtrif':'\\u25BE','duarr':'\\u21F5','duhar':'\\u296F','dwangle':'\\u29A6','dzcy':'\\u045F','DZcy':'\\u040F','dzigrarr':'\\u27FF','eacute':'\\xE9','Eacute':'\\xC9','easter':'\\u2A6E','ecaron':'\\u011B','Ecaron':'\\u011A','ecir':'\\u2256','ecirc':'\\xEA','Ecirc':'\\xCA','ecolon':'\\u2255','ecy':'\\u044D','Ecy':'\\u042D','eDDot':'\\u2A77','edot':'\\u0117','eDot':'\\u2251','Edot':'\\u0116','ee':'\\u2147','efDot':'\\u2252','efr':'\\uD835\\uDD22','Efr':'\\uD835\\uDD08','eg':'\\u2A9A','egrave':'\\xE8','Egrave':'\\xC8','egs':'\\u2A96','egsdot':'\\u2A98','el':'\\u2A99','Element':'\\u2208','elinters':'\\u23E7','ell':'\\u2113','els':'\\u2A95','elsdot':'\\u2A97','emacr':'\\u0113','Emacr':'\\u0112','empty':'\\u2205','emptyset':'\\u2205','EmptySmallSquare':'\\u25FB','emptyv':'\\u2205','EmptyVerySmallSquare':'\\u25AB','emsp':'\\u2003','emsp13':'\\u2004','emsp14':'\\u2005','eng':'\\u014B','ENG':'\\u014A','ensp':'\\u2002','eogon':'\\u0119','Eogon':'\\u0118','eopf':'\\uD835\\uDD56','Eopf':'\\uD835\\uDD3C','epar':'\\u22D5','eparsl':'\\u29E3','eplus':'\\u2A71','epsi':'\\u03B5','epsilon':'\\u03B5','Epsilon':'\\u0395','epsiv':'\\u03F5','eqcirc':'\\u2256','eqcolon':'\\u2255','eqsim':'\\u2242','eqslantgtr':'\\u2A96','eqslantless':'\\u2A95','Equal':'\\u2A75','equals':'=','EqualTilde':'\\u2242','equest':'\\u225F','Equilibrium':'\\u21CC','equiv':'\\u2261','equivDD':'\\u2A78','eqvparsl':'\\u29E5','erarr':'\\u2971','erDot':'\\u2253','escr':'\\u212F','Escr':'\\u2130','esdot':'\\u2250','esim':'\\u2242','Esim':'\\u2A73','eta':'\\u03B7','Eta':'\\u0397','eth':'\\xF0','ETH':'\\xD0','euml':'\\xEB','Euml':'\\xCB','euro':'\\u20AC','excl':'!','exist':'\\u2203','Exists':'\\u2203','expectation':'\\u2130','exponentiale':'\\u2147','ExponentialE':'\\u2147','fallingdotseq':'\\u2252','fcy':'\\u0444','Fcy':'\\u0424','female':'\\u2640','ffilig':'\\uFB03','fflig':'\\uFB00','ffllig':'\\uFB04','ffr':'\\uD835\\uDD23','Ffr':'\\uD835\\uDD09','filig':'\\uFB01','FilledSmallSquare':'\\u25FC','FilledVerySmallSquare':'\\u25AA','fjlig':'fj','flat':'\\u266D','fllig':'\\uFB02','fltns':'\\u25B1','fnof':'\\u0192','fopf':'\\uD835\\uDD57','Fopf':'\\uD835\\uDD3D','forall':'\\u2200','ForAll':'\\u2200','fork':'\\u22D4','forkv':'\\u2AD9','Fouriertrf':'\\u2131','fpartint':'\\u2A0D','frac12':'\\xBD','frac13':'\\u2153','frac14':'\\xBC','frac15':'\\u2155','frac16':'\\u2159','frac18':'\\u215B','frac23':'\\u2154','frac25':'\\u2156','frac34':'\\xBE','frac35':'\\u2157','frac38':'\\u215C','frac45':'\\u2158','frac56':'\\u215A','frac58':'\\u215D','frac78':'\\u215E','frasl':'\\u2044','frown':'\\u2322','fscr':'\\uD835\\uDCBB','Fscr':'\\u2131','gacute':'\\u01F5','gamma':'\\u03B3','Gamma':'\\u0393','gammad':'\\u03DD','Gammad':'\\u03DC','gap':'\\u2A86','gbreve':'\\u011F','Gbreve':'\\u011E','Gcedil':'\\u0122','gcirc':'\\u011D','Gcirc':'\\u011C','gcy':'\\u0433','Gcy':'\\u0413','gdot':'\\u0121','Gdot':'\\u0120','ge':'\\u2265','gE':'\\u2267','gel':'\\u22DB','gEl':'\\u2A8C','geq':'\\u2265','geqq':'\\u2267','geqslant':'\\u2A7E','ges':'\\u2A7E','gescc':'\\u2AA9','gesdot':'\\u2A80','gesdoto':'\\u2A82','gesdotol':'\\u2A84','gesl':'\\u22DB\\uFE00','gesles':'\\u2A94','gfr':'\\uD835\\uDD24','Gfr':'\\uD835\\uDD0A','gg':'\\u226B','Gg':'\\u22D9','ggg':'\\u22D9','gimel':'\\u2137','gjcy':'\\u0453','GJcy':'\\u0403','gl':'\\u2277','gla':'\\u2AA5','glE':'\\u2A92','glj':'\\u2AA4','gnap':'\\u2A8A','gnapprox':'\\u2A8A','gne':'\\u2A88','gnE':'\\u2269','gneq':'\\u2A88','gneqq':'\\u2269','gnsim':'\\u22E7','gopf':'\\uD835\\uDD58','Gopf':'\\uD835\\uDD3E','grave':'`','GreaterEqual':'\\u2265','GreaterEqualLess':'\\u22DB','GreaterFullEqual':'\\u2267','GreaterGreater':'\\u2AA2','GreaterLess':'\\u2277','GreaterSlantEqual':'\\u2A7E','GreaterTilde':'\\u2273','gscr':'\\u210A','Gscr':'\\uD835\\uDCA2','gsim':'\\u2273','gsime':'\\u2A8E','gsiml':'\\u2A90','gt':'>','Gt':'\\u226B','GT':'>','gtcc':'\\u2AA7','gtcir':'\\u2A7A','gtdot':'\\u22D7','gtlPar':'\\u2995','gtquest':'\\u2A7C','gtrapprox':'\\u2A86','gtrarr':'\\u2978','gtrdot':'\\u22D7','gtreqless':'\\u22DB','gtreqqless':'\\u2A8C','gtrless':'\\u2277','gtrsim':'\\u2273','gvertneqq':'\\u2269\\uFE00','gvnE':'\\u2269\\uFE00','Hacek':'\\u02C7','hairsp':'\\u200A','half':'\\xBD','hamilt':'\\u210B','hardcy':'\\u044A','HARDcy':'\\u042A','harr':'\\u2194','hArr':'\\u21D4','harrcir':'\\u2948','harrw':'\\u21AD','Hat':'^','hbar':'\\u210F','hcirc':'\\u0125','Hcirc':'\\u0124','hearts':'\\u2665','heartsuit':'\\u2665','hellip':'\\u2026','hercon':'\\u22B9','hfr':'\\uD835\\uDD25','Hfr':'\\u210C','HilbertSpace':'\\u210B','hksearow':'\\u2925','hkswarow':'\\u2926','hoarr':'\\u21FF','homtht':'\\u223B','hookleftarrow':'\\u21A9','hookrightarrow':'\\u21AA','hopf':'\\uD835\\uDD59','Hopf':'\\u210D','horbar':'\\u2015','HorizontalLine':'\\u2500','hscr':'\\uD835\\uDCBD','Hscr':'\\u210B','hslash':'\\u210F','hstrok':'\\u0127','Hstrok':'\\u0126','HumpDownHump':'\\u224E','HumpEqual':'\\u224F','hybull':'\\u2043','hyphen':'\\u2010','iacute':'\\xED','Iacute':'\\xCD','ic':'\\u2063','icirc':'\\xEE','Icirc':'\\xCE','icy':'\\u0438','Icy':'\\u0418','Idot':'\\u0130','iecy':'\\u0435','IEcy':'\\u0415','iexcl':'\\xA1','iff':'\\u21D4','ifr':'\\uD835\\uDD26','Ifr':'\\u2111','igrave':'\\xEC','Igrave':'\\xCC','ii':'\\u2148','iiiint':'\\u2A0C','iiint':'\\u222D','iinfin':'\\u29DC','iiota':'\\u2129','ijlig':'\\u0133','IJlig':'\\u0132','Im':'\\u2111','imacr':'\\u012B','Imacr':'\\u012A','image':'\\u2111','ImaginaryI':'\\u2148','imagline':'\\u2110','imagpart':'\\u2111','imath':'\\u0131','imof':'\\u22B7','imped':'\\u01B5','Implies':'\\u21D2','in':'\\u2208','incare':'\\u2105','infin':'\\u221E','infintie':'\\u29DD','inodot':'\\u0131','int':'\\u222B','Int':'\\u222C','intcal':'\\u22BA','integers':'\\u2124','Integral':'\\u222B','intercal':'\\u22BA','Intersection':'\\u22C2','intlarhk':'\\u2A17','intprod':'\\u2A3C','InvisibleComma':'\\u2063','InvisibleTimes':'\\u2062','iocy':'\\u0451','IOcy':'\\u0401','iogon':'\\u012F','Iogon':'\\u012E','iopf':'\\uD835\\uDD5A','Iopf':'\\uD835\\uDD40','iota':'\\u03B9','Iota':'\\u0399','iprod':'\\u2A3C','iquest':'\\xBF','iscr':'\\uD835\\uDCBE','Iscr':'\\u2110','isin':'\\u2208','isindot':'\\u22F5','isinE':'\\u22F9','isins':'\\u22F4','isinsv':'\\u22F3','isinv':'\\u2208','it':'\\u2062','itilde':'\\u0129','Itilde':'\\u0128','iukcy':'\\u0456','Iukcy':'\\u0406','iuml':'\\xEF','Iuml':'\\xCF','jcirc':'\\u0135','Jcirc':'\\u0134','jcy':'\\u0439','Jcy':'\\u0419','jfr':'\\uD835\\uDD27','Jfr':'\\uD835\\uDD0D','jmath':'\\u0237','jopf':'\\uD835\\uDD5B','Jopf':'\\uD835\\uDD41','jscr':'\\uD835\\uDCBF','Jscr':'\\uD835\\uDCA5','jsercy':'\\u0458','Jsercy':'\\u0408','jukcy':'\\u0454','Jukcy':'\\u0404','kappa':'\\u03BA','Kappa':'\\u039A','kappav':'\\u03F0','kcedil':'\\u0137','Kcedil':'\\u0136','kcy':'\\u043A','Kcy':'\\u041A','kfr':'\\uD835\\uDD28','Kfr':'\\uD835\\uDD0E','kgreen':'\\u0138','khcy':'\\u0445','KHcy':'\\u0425','kjcy':'\\u045C','KJcy':'\\u040C','kopf':'\\uD835\\uDD5C','Kopf':'\\uD835\\uDD42','kscr':'\\uD835\\uDCC0','Kscr':'\\uD835\\uDCA6','lAarr':'\\u21DA','lacute':'\\u013A','Lacute':'\\u0139','laemptyv':'\\u29B4','lagran':'\\u2112','lambda':'\\u03BB','Lambda':'\\u039B','lang':'\\u27E8','Lang':'\\u27EA','langd':'\\u2991','langle':'\\u27E8','lap':'\\u2A85','Laplacetrf':'\\u2112','laquo':'\\xAB','larr':'\\u2190','lArr':'\\u21D0','Larr':'\\u219E','larrb':'\\u21E4','larrbfs':'\\u291F','larrfs':'\\u291D','larrhk':'\\u21A9','larrlp':'\\u21AB','larrpl':'\\u2939','larrsim':'\\u2973','larrtl':'\\u21A2','lat':'\\u2AAB','latail':'\\u2919','lAtail':'\\u291B','late':'\\u2AAD','lates':'\\u2AAD\\uFE00','lbarr':'\\u290C','lBarr':'\\u290E','lbbrk':'\\u2772','lbrace':'{','lbrack':'[','lbrke':'\\u298B','lbrksld':'\\u298F','lbrkslu':'\\u298D','lcaron':'\\u013E','Lcaron':'\\u013D','lcedil':'\\u013C','Lcedil':'\\u013B','lceil':'\\u2308','lcub':'{','lcy':'\\u043B','Lcy':'\\u041B','ldca':'\\u2936','ldquo':'\\u201C','ldquor':'\\u201E','ldrdhar':'\\u2967','ldrushar':'\\u294B','ldsh':'\\u21B2','le':'\\u2264','lE':'\\u2266','LeftAngleBracket':'\\u27E8','leftarrow':'\\u2190','Leftarrow':'\\u21D0','LeftArrow':'\\u2190','LeftArrowBar':'\\u21E4','LeftArrowRightArrow':'\\u21C6','leftarrowtail':'\\u21A2','LeftCeiling':'\\u2308','LeftDoubleBracket':'\\u27E6','LeftDownTeeVector':'\\u2961','LeftDownVector':'\\u21C3','LeftDownVectorBar':'\\u2959','LeftFloor':'\\u230A','leftharpoondown':'\\u21BD','leftharpoonup':'\\u21BC','leftleftarrows':'\\u21C7','leftrightarrow':'\\u2194','Leftrightarrow':'\\u21D4','LeftRightArrow':'\\u2194','leftrightarrows':'\\u21C6','leftrightharpoons':'\\u21CB','leftrightsquigarrow':'\\u21AD','LeftRightVector':'\\u294E','LeftTee':'\\u22A3','LeftTeeArrow':'\\u21A4','LeftTeeVector':'\\u295A','leftthreetimes':'\\u22CB','LeftTriangle':'\\u22B2','LeftTriangleBar':'\\u29CF','LeftTriangleEqual':'\\u22B4','LeftUpDownVector':'\\u2951','LeftUpTeeVector':'\\u2960','LeftUpVector':'\\u21BF','LeftUpVectorBar':'\\u2958','LeftVector':'\\u21BC','LeftVectorBar':'\\u2952','leg':'\\u22DA','lEg':'\\u2A8B','leq':'\\u2264','leqq':'\\u2266','leqslant':'\\u2A7D','les':'\\u2A7D','lescc':'\\u2AA8','lesdot':'\\u2A7F','lesdoto':'\\u2A81','lesdotor':'\\u2A83','lesg':'\\u22DA\\uFE00','lesges':'\\u2A93','lessapprox':'\\u2A85','lessdot':'\\u22D6','lesseqgtr':'\\u22DA','lesseqqgtr':'\\u2A8B','LessEqualGreater':'\\u22DA','LessFullEqual':'\\u2266','LessGreater':'\\u2276','lessgtr':'\\u2276','LessLess':'\\u2AA1','lesssim':'\\u2272','LessSlantEqual':'\\u2A7D','LessTilde':'\\u2272','lfisht':'\\u297C','lfloor':'\\u230A','lfr':'\\uD835\\uDD29','Lfr':'\\uD835\\uDD0F','lg':'\\u2276','lgE':'\\u2A91','lHar':'\\u2962','lhard':'\\u21BD','lharu':'\\u21BC','lharul':'\\u296A','lhblk':'\\u2584','ljcy':'\\u0459','LJcy':'\\u0409','ll':'\\u226A','Ll':'\\u22D8','llarr':'\\u21C7','llcorner':'\\u231E','Lleftarrow':'\\u21DA','llhard':'\\u296B','lltri':'\\u25FA','lmidot':'\\u0140','Lmidot':'\\u013F','lmoust':'\\u23B0','lmoustache':'\\u23B0','lnap':'\\u2A89','lnapprox':'\\u2A89','lne':'\\u2A87','lnE':'\\u2268','lneq':'\\u2A87','lneqq':'\\u2268','lnsim':'\\u22E6','loang':'\\u27EC','loarr':'\\u21FD','lobrk':'\\u27E6','longleftarrow':'\\u27F5','Longleftarrow':'\\u27F8','LongLeftArrow':'\\u27F5','longleftrightarrow':'\\u27F7','Longleftrightarrow':'\\u27FA','LongLeftRightArrow':'\\u27F7','longmapsto':'\\u27FC','longrightarrow':'\\u27F6','Longrightarrow':'\\u27F9','LongRightArrow':'\\u27F6','looparrowleft':'\\u21AB','looparrowright':'\\u21AC','lopar':'\\u2985','lopf':'\\uD835\\uDD5D','Lopf':'\\uD835\\uDD43','loplus':'\\u2A2D','lotimes':'\\u2A34','lowast':'\\u2217','lowbar':'_','LowerLeftArrow':'\\u2199','LowerRightArrow':'\\u2198','loz':'\\u25CA','lozenge':'\\u25CA','lozf':'\\u29EB','lpar':'(','lparlt':'\\u2993','lrarr':'\\u21C6','lrcorner':'\\u231F','lrhar':'\\u21CB','lrhard':'\\u296D','lrm':'\\u200E','lrtri':'\\u22BF','lsaquo':'\\u2039','lscr':'\\uD835\\uDCC1','Lscr':'\\u2112','lsh':'\\u21B0','Lsh':'\\u21B0','lsim':'\\u2272','lsime':'\\u2A8D','lsimg':'\\u2A8F','lsqb':'[','lsquo':'\\u2018','lsquor':'\\u201A','lstrok':'\\u0142','Lstrok':'\\u0141','lt':'<','Lt':'\\u226A','LT':'<','ltcc':'\\u2AA6','ltcir':'\\u2A79','ltdot':'\\u22D6','lthree':'\\u22CB','ltimes':'\\u22C9','ltlarr':'\\u2976','ltquest':'\\u2A7B','ltri':'\\u25C3','ltrie':'\\u22B4','ltrif':'\\u25C2','ltrPar':'\\u2996','lurdshar':'\\u294A','luruhar':'\\u2966','lvertneqq':'\\u2268\\uFE00','lvnE':'\\u2268\\uFE00','macr':'\\xAF','male':'\\u2642','malt':'\\u2720','maltese':'\\u2720','map':'\\u21A6','Map':'\\u2905','mapsto':'\\u21A6','mapstodown':'\\u21A7','mapstoleft':'\\u21A4','mapstoup':'\\u21A5','marker':'\\u25AE','mcomma':'\\u2A29','mcy':'\\u043C','Mcy':'\\u041C','mdash':'\\u2014','mDDot':'\\u223A','measuredangle':'\\u2221','MediumSpace':'\\u205F','Mellintrf':'\\u2133','mfr':'\\uD835\\uDD2A','Mfr':'\\uD835\\uDD10','mho':'\\u2127','micro':'\\xB5','mid':'\\u2223','midast':'*','midcir':'\\u2AF0','middot':'\\xB7','minus':'\\u2212','minusb':'\\u229F','minusd':'\\u2238','minusdu':'\\u2A2A','MinusPlus':'\\u2213','mlcp':'\\u2ADB','mldr':'\\u2026','mnplus':'\\u2213','models':'\\u22A7','mopf':'\\uD835\\uDD5E','Mopf':'\\uD835\\uDD44','mp':'\\u2213','mscr':'\\uD835\\uDCC2','Mscr':'\\u2133','mstpos':'\\u223E','mu':'\\u03BC','Mu':'\\u039C','multimap':'\\u22B8','mumap':'\\u22B8','nabla':'\\u2207','nacute':'\\u0144','Nacute':'\\u0143','nang':'\\u2220\\u20D2','nap':'\\u2249','napE':'\\u2A70\\u0338','napid':'\\u224B\\u0338','napos':'\\u0149','napprox':'\\u2249','natur':'\\u266E','natural':'\\u266E','naturals':'\\u2115','nbsp':'\\xA0','nbump':'\\u224E\\u0338','nbumpe':'\\u224F\\u0338','ncap':'\\u2A43','ncaron':'\\u0148','Ncaron':'\\u0147','ncedil':'\\u0146','Ncedil':'\\u0145','ncong':'\\u2247','ncongdot':'\\u2A6D\\u0338','ncup':'\\u2A42','ncy':'\\u043D','Ncy':'\\u041D','ndash':'\\u2013','ne':'\\u2260','nearhk':'\\u2924','nearr':'\\u2197','neArr':'\\u21D7','nearrow':'\\u2197','nedot':'\\u2250\\u0338','NegativeMediumSpace':'\\u200B','NegativeThickSpace':'\\u200B','NegativeThinSpace':'\\u200B','NegativeVeryThinSpace':'\\u200B','nequiv':'\\u2262','nesear':'\\u2928','nesim':'\\u2242\\u0338','NestedGreaterGreater':'\\u226B','NestedLessLess':'\\u226A','NewLine':'\\n','nexist':'\\u2204','nexists':'\\u2204','nfr':'\\uD835\\uDD2B','Nfr':'\\uD835\\uDD11','nge':'\\u2271','ngE':'\\u2267\\u0338','ngeq':'\\u2271','ngeqq':'\\u2267\\u0338','ngeqslant':'\\u2A7E\\u0338','nges':'\\u2A7E\\u0338','nGg':'\\u22D9\\u0338','ngsim':'\\u2275','ngt':'\\u226F','nGt':'\\u226B\\u20D2','ngtr':'\\u226F','nGtv':'\\u226B\\u0338','nharr':'\\u21AE','nhArr':'\\u21CE','nhpar':'\\u2AF2','ni':'\\u220B','nis':'\\u22FC','nisd':'\\u22FA','niv':'\\u220B','njcy':'\\u045A','NJcy':'\\u040A','nlarr':'\\u219A','nlArr':'\\u21CD','nldr':'\\u2025','nle':'\\u2270','nlE':'\\u2266\\u0338','nleftarrow':'\\u219A','nLeftarrow':'\\u21CD','nleftrightarrow':'\\u21AE','nLeftrightarrow':'\\u21CE','nleq':'\\u2270','nleqq':'\\u2266\\u0338','nleqslant':'\\u2A7D\\u0338','nles':'\\u2A7D\\u0338','nless':'\\u226E','nLl':'\\u22D8\\u0338','nlsim':'\\u2274','nlt':'\\u226E','nLt':'\\u226A\\u20D2','nltri':'\\u22EA','nltrie':'\\u22EC','nLtv':'\\u226A\\u0338','nmid':'\\u2224','NoBreak':'\\u2060','NonBreakingSpace':'\\xA0','nopf':'\\uD835\\uDD5F','Nopf':'\\u2115','not':'\\xAC','Not':'\\u2AEC','NotCongruent':'\\u2262','NotCupCap':'\\u226D','NotDoubleVerticalBar':'\\u2226','NotElement':'\\u2209','NotEqual':'\\u2260','NotEqualTilde':'\\u2242\\u0338','NotExists':'\\u2204','NotGreater':'\\u226F','NotGreaterEqual':'\\u2271','NotGreaterFullEqual':'\\u2267\\u0338','NotGreaterGreater':'\\u226B\\u0338','NotGreaterLess':'\\u2279','NotGreaterSlantEqual':'\\u2A7E\\u0338','NotGreaterTilde':'\\u2275','NotHumpDownHump':'\\u224E\\u0338','NotHumpEqual':'\\u224F\\u0338','notin':'\\u2209','notindot':'\\u22F5\\u0338','notinE':'\\u22F9\\u0338','notinva':'\\u2209','notinvb':'\\u22F7','notinvc':'\\u22F6','NotLeftTriangle':'\\u22EA','NotLeftTriangleBar':'\\u29CF\\u0338','NotLeftTriangleEqual':'\\u22EC','NotLess':'\\u226E','NotLessEqual':'\\u2270','NotLessGreater':'\\u2278','NotLessLess':'\\u226A\\u0338','NotLessSlantEqual':'\\u2A7D\\u0338','NotLessTilde':'\\u2274','NotNestedGreaterGreater':'\\u2AA2\\u0338','NotNestedLessLess':'\\u2AA1\\u0338','notni':'\\u220C','notniva':'\\u220C','notnivb':'\\u22FE','notnivc':'\\u22FD','NotPrecedes':'\\u2280','NotPrecedesEqual':'\\u2AAF\\u0338','NotPrecedesSlantEqual':'\\u22E0','NotReverseElement':'\\u220C','NotRightTriangle':'\\u22EB','NotRightTriangleBar':'\\u29D0\\u0338','NotRightTriangleEqual':'\\u22ED','NotSquareSubset':'\\u228F\\u0338','NotSquareSubsetEqual':'\\u22E2','NotSquareSuperset':'\\u2290\\u0338','NotSquareSupersetEqual':'\\u22E3','NotSubset':'\\u2282\\u20D2','NotSubsetEqual':'\\u2288','NotSucceeds':'\\u2281','NotSucceedsEqual':'\\u2AB0\\u0338','NotSucceedsSlantEqual':'\\u22E1','NotSucceedsTilde':'\\u227F\\u0338','NotSuperset':'\\u2283\\u20D2','NotSupersetEqual':'\\u2289','NotTilde':'\\u2241','NotTildeEqual':'\\u2244','NotTildeFullEqual':'\\u2247','NotTildeTilde':'\\u2249','NotVerticalBar':'\\u2224','npar':'\\u2226','nparallel':'\\u2226','nparsl':'\\u2AFD\\u20E5','npart':'\\u2202\\u0338','npolint':'\\u2A14','npr':'\\u2280','nprcue':'\\u22E0','npre':'\\u2AAF\\u0338','nprec':'\\u2280','npreceq':'\\u2AAF\\u0338','nrarr':'\\u219B','nrArr':'\\u21CF','nrarrc':'\\u2933\\u0338','nrarrw':'\\u219D\\u0338','nrightarrow':'\\u219B','nRightarrow':'\\u21CF','nrtri':'\\u22EB','nrtrie':'\\u22ED','nsc':'\\u2281','nsccue':'\\u22E1','nsce':'\\u2AB0\\u0338','nscr':'\\uD835\\uDCC3','Nscr':'\\uD835\\uDCA9','nshortmid':'\\u2224','nshortparallel':'\\u2226','nsim':'\\u2241','nsime':'\\u2244','nsimeq':'\\u2244','nsmid':'\\u2224','nspar':'\\u2226','nsqsube':'\\u22E2','nsqsupe':'\\u22E3','nsub':'\\u2284','nsube':'\\u2288','nsubE':'\\u2AC5\\u0338','nsubset':'\\u2282\\u20D2','nsubseteq':'\\u2288','nsubseteqq':'\\u2AC5\\u0338','nsucc':'\\u2281','nsucceq':'\\u2AB0\\u0338','nsup':'\\u2285','nsupe':'\\u2289','nsupE':'\\u2AC6\\u0338','nsupset':'\\u2283\\u20D2','nsupseteq':'\\u2289','nsupseteqq':'\\u2AC6\\u0338','ntgl':'\\u2279','ntilde':'\\xF1','Ntilde':'\\xD1','ntlg':'\\u2278','ntriangleleft':'\\u22EA','ntrianglelefteq':'\\u22EC','ntriangleright':'\\u22EB','ntrianglerighteq':'\\u22ED','nu':'\\u03BD','Nu':'\\u039D','num':'#','numero':'\\u2116','numsp':'\\u2007','nvap':'\\u224D\\u20D2','nvdash':'\\u22AC','nvDash':'\\u22AD','nVdash':'\\u22AE','nVDash':'\\u22AF','nvge':'\\u2265\\u20D2','nvgt':'>\\u20D2','nvHarr':'\\u2904','nvinfin':'\\u29DE','nvlArr':'\\u2902','nvle':'\\u2264\\u20D2','nvlt':'<\\u20D2','nvltrie':'\\u22B4\\u20D2','nvrArr':'\\u2903','nvrtrie':'\\u22B5\\u20D2','nvsim':'\\u223C\\u20D2','nwarhk':'\\u2923','nwarr':'\\u2196','nwArr':'\\u21D6','nwarrow':'\\u2196','nwnear':'\\u2927','oacute':'\\xF3','Oacute':'\\xD3','oast':'\\u229B','ocir':'\\u229A','ocirc':'\\xF4','Ocirc':'\\xD4','ocy':'\\u043E','Ocy':'\\u041E','odash':'\\u229D','odblac':'\\u0151','Odblac':'\\u0150','odiv':'\\u2A38','odot':'\\u2299','odsold':'\\u29BC','oelig':'\\u0153','OElig':'\\u0152','ofcir':'\\u29BF','ofr':'\\uD835\\uDD2C','Ofr':'\\uD835\\uDD12','ogon':'\\u02DB','ograve':'\\xF2','Ograve':'\\xD2','ogt':'\\u29C1','ohbar':'\\u29B5','ohm':'\\u03A9','oint':'\\u222E','olarr':'\\u21BA','olcir':'\\u29BE','olcross':'\\u29BB','oline':'\\u203E','olt':'\\u29C0','omacr':'\\u014D','Omacr':'\\u014C','omega':'\\u03C9','Omega':'\\u03A9','omicron':'\\u03BF','Omicron':'\\u039F','omid':'\\u29B6','ominus':'\\u2296','oopf':'\\uD835\\uDD60','Oopf':'\\uD835\\uDD46','opar':'\\u29B7','OpenCurlyDoubleQuote':'\\u201C','OpenCurlyQuote':'\\u2018','operp':'\\u29B9','oplus':'\\u2295','or':'\\u2228','Or':'\\u2A54','orarr':'\\u21BB','ord':'\\u2A5D','order':'\\u2134','orderof':'\\u2134','ordf':'\\xAA','ordm':'\\xBA','origof':'\\u22B6','oror':'\\u2A56','orslope':'\\u2A57','orv':'\\u2A5B','oS':'\\u24C8','oscr':'\\u2134','Oscr':'\\uD835\\uDCAA','oslash':'\\xF8','Oslash':'\\xD8','osol':'\\u2298','otilde':'\\xF5','Otilde':'\\xD5','otimes':'\\u2297','Otimes':'\\u2A37','otimesas':'\\u2A36','ouml':'\\xF6','Ouml':'\\xD6','ovbar':'\\u233D','OverBar':'\\u203E','OverBrace':'\\u23DE','OverBracket':'\\u23B4','OverParenthesis':'\\u23DC','par':'\\u2225','para':'\\xB6','parallel':'\\u2225','parsim':'\\u2AF3','parsl':'\\u2AFD','part':'\\u2202','PartialD':'\\u2202','pcy':'\\u043F','Pcy':'\\u041F','percnt':'%','period':'.','permil':'\\u2030','perp':'\\u22A5','pertenk':'\\u2031','pfr':'\\uD835\\uDD2D','Pfr':'\\uD835\\uDD13','phi':'\\u03C6','Phi':'\\u03A6','phiv':'\\u03D5','phmmat':'\\u2133','phone':'\\u260E','pi':'\\u03C0','Pi':'\\u03A0','pitchfork':'\\u22D4','piv':'\\u03D6','planck':'\\u210F','planckh':'\\u210E','plankv':'\\u210F','plus':'+','plusacir':'\\u2A23','plusb':'\\u229E','pluscir':'\\u2A22','plusdo':'\\u2214','plusdu':'\\u2A25','pluse':'\\u2A72','PlusMinus':'\\xB1','plusmn':'\\xB1','plussim':'\\u2A26','plustwo':'\\u2A27','pm':'\\xB1','Poincareplane':'\\u210C','pointint':'\\u2A15','popf':'\\uD835\\uDD61','Popf':'\\u2119','pound':'\\xA3','pr':'\\u227A','Pr':'\\u2ABB','prap':'\\u2AB7','prcue':'\\u227C','pre':'\\u2AAF','prE':'\\u2AB3','prec':'\\u227A','precapprox':'\\u2AB7','preccurlyeq':'\\u227C','Precedes':'\\u227A','PrecedesEqual':'\\u2AAF','PrecedesSlantEqual':'\\u227C','PrecedesTilde':'\\u227E','preceq':'\\u2AAF','precnapprox':'\\u2AB9','precneqq':'\\u2AB5','precnsim':'\\u22E8','precsim':'\\u227E','prime':'\\u2032','Prime':'\\u2033','primes':'\\u2119','prnap':'\\u2AB9','prnE':'\\u2AB5','prnsim':'\\u22E8','prod':'\\u220F','Product':'\\u220F','profalar':'\\u232E','profline':'\\u2312','profsurf':'\\u2313','prop':'\\u221D','Proportion':'\\u2237','Proportional':'\\u221D','propto':'\\u221D','prsim':'\\u227E','prurel':'\\u22B0','pscr':'\\uD835\\uDCC5','Pscr':'\\uD835\\uDCAB','psi':'\\u03C8','Psi':'\\u03A8','puncsp':'\\u2008','qfr':'\\uD835\\uDD2E','Qfr':'\\uD835\\uDD14','qint':'\\u2A0C','qopf':'\\uD835\\uDD62','Qopf':'\\u211A','qprime':'\\u2057','qscr':'\\uD835\\uDCC6','Qscr':'\\uD835\\uDCAC','quaternions':'\\u210D','quatint':'\\u2A16','quest':'?','questeq':'\\u225F','quot':'\"','QUOT':'\"','rAarr':'\\u21DB','race':'\\u223D\\u0331','racute':'\\u0155','Racute':'\\u0154','radic':'\\u221A','raemptyv':'\\u29B3','rang':'\\u27E9','Rang':'\\u27EB','rangd':'\\u2992','range':'\\u29A5','rangle':'\\u27E9','raquo':'\\xBB','rarr':'\\u2192','rArr':'\\u21D2','Rarr':'\\u21A0','rarrap':'\\u2975','rarrb':'\\u21E5','rarrbfs':'\\u2920','rarrc':'\\u2933','rarrfs':'\\u291E','rarrhk':'\\u21AA','rarrlp':'\\u21AC','rarrpl':'\\u2945','rarrsim':'\\u2974','rarrtl':'\\u21A3','Rarrtl':'\\u2916','rarrw':'\\u219D','ratail':'\\u291A','rAtail':'\\u291C','ratio':'\\u2236','rationals':'\\u211A','rbarr':'\\u290D','rBarr':'\\u290F','RBarr':'\\u2910','rbbrk':'\\u2773','rbrace':'}','rbrack':']','rbrke':'\\u298C','rbrksld':'\\u298E','rbrkslu':'\\u2990','rcaron':'\\u0159','Rcaron':'\\u0158','rcedil':'\\u0157','Rcedil':'\\u0156','rceil':'\\u2309','rcub':'}','rcy':'\\u0440','Rcy':'\\u0420','rdca':'\\u2937','rdldhar':'\\u2969','rdquo':'\\u201D','rdquor':'\\u201D','rdsh':'\\u21B3','Re':'\\u211C','real':'\\u211C','realine':'\\u211B','realpart':'\\u211C','reals':'\\u211D','rect':'\\u25AD','reg':'\\xAE','REG':'\\xAE','ReverseElement':'\\u220B','ReverseEquilibrium':'\\u21CB','ReverseUpEquilibrium':'\\u296F','rfisht':'\\u297D','rfloor':'\\u230B','rfr':'\\uD835\\uDD2F','Rfr':'\\u211C','rHar':'\\u2964','rhard':'\\u21C1','rharu':'\\u21C0','rharul':'\\u296C','rho':'\\u03C1','Rho':'\\u03A1','rhov':'\\u03F1','RightAngleBracket':'\\u27E9','rightarrow':'\\u2192','Rightarrow':'\\u21D2','RightArrow':'\\u2192','RightArrowBar':'\\u21E5','RightArrowLeftArrow':'\\u21C4','rightarrowtail':'\\u21A3','RightCeiling':'\\u2309','RightDoubleBracket':'\\u27E7','RightDownTeeVector':'\\u295D','RightDownVector':'\\u21C2','RightDownVectorBar':'\\u2955','RightFloor':'\\u230B','rightharpoondown':'\\u21C1','rightharpoonup':'\\u21C0','rightleftarrows':'\\u21C4','rightleftharpoons':'\\u21CC','rightrightarrows':'\\u21C9','rightsquigarrow':'\\u219D','RightTee':'\\u22A2','RightTeeArrow':'\\u21A6','RightTeeVector':'\\u295B','rightthreetimes':'\\u22CC','RightTriangle':'\\u22B3','RightTriangleBar':'\\u29D0','RightTriangleEqual':'\\u22B5','RightUpDownVector':'\\u294F','RightUpTeeVector':'\\u295C','RightUpVector':'\\u21BE','RightUpVectorBar':'\\u2954','RightVector':'\\u21C0','RightVectorBar':'\\u2953','ring':'\\u02DA','risingdotseq':'\\u2253','rlarr':'\\u21C4','rlhar':'\\u21CC','rlm':'\\u200F','rmoust':'\\u23B1','rmoustache':'\\u23B1','rnmid':'\\u2AEE','roang':'\\u27ED','roarr':'\\u21FE','robrk':'\\u27E7','ropar':'\\u2986','ropf':'\\uD835\\uDD63','Ropf':'\\u211D','roplus':'\\u2A2E','rotimes':'\\u2A35','RoundImplies':'\\u2970','rpar':')','rpargt':'\\u2994','rppolint':'\\u2A12','rrarr':'\\u21C9','Rrightarrow':'\\u21DB','rsaquo':'\\u203A','rscr':'\\uD835\\uDCC7','Rscr':'\\u211B','rsh':'\\u21B1','Rsh':'\\u21B1','rsqb':']','rsquo':'\\u2019','rsquor':'\\u2019','rthree':'\\u22CC','rtimes':'\\u22CA','rtri':'\\u25B9','rtrie':'\\u22B5','rtrif':'\\u25B8','rtriltri':'\\u29CE','RuleDelayed':'\\u29F4','ruluhar':'\\u2968','rx':'\\u211E','sacute':'\\u015B','Sacute':'\\u015A','sbquo':'\\u201A','sc':'\\u227B','Sc':'\\u2ABC','scap':'\\u2AB8','scaron':'\\u0161','Scaron':'\\u0160','sccue':'\\u227D','sce':'\\u2AB0','scE':'\\u2AB4','scedil':'\\u015F','Scedil':'\\u015E','scirc':'\\u015D','Scirc':'\\u015C','scnap':'\\u2ABA','scnE':'\\u2AB6','scnsim':'\\u22E9','scpolint':'\\u2A13','scsim':'\\u227F','scy':'\\u0441','Scy':'\\u0421','sdot':'\\u22C5','sdotb':'\\u22A1','sdote':'\\u2A66','searhk':'\\u2925','searr':'\\u2198','seArr':'\\u21D8','searrow':'\\u2198','sect':'\\xA7','semi':';','seswar':'\\u2929','setminus':'\\u2216','setmn':'\\u2216','sext':'\\u2736','sfr':'\\uD835\\uDD30','Sfr':'\\uD835\\uDD16','sfrown':'\\u2322','sharp':'\\u266F','shchcy':'\\u0449','SHCHcy':'\\u0429','shcy':'\\u0448','SHcy':'\\u0428','ShortDownArrow':'\\u2193','ShortLeftArrow':'\\u2190','shortmid':'\\u2223','shortparallel':'\\u2225','ShortRightArrow':'\\u2192','ShortUpArrow':'\\u2191','shy':'\\xAD','sigma':'\\u03C3','Sigma':'\\u03A3','sigmaf':'\\u03C2','sigmav':'\\u03C2','sim':'\\u223C','simdot':'\\u2A6A','sime':'\\u2243','simeq':'\\u2243','simg':'\\u2A9E','simgE':'\\u2AA0','siml':'\\u2A9D','simlE':'\\u2A9F','simne':'\\u2246','simplus':'\\u2A24','simrarr':'\\u2972','slarr':'\\u2190','SmallCircle':'\\u2218','smallsetminus':'\\u2216','smashp':'\\u2A33','smeparsl':'\\u29E4','smid':'\\u2223','smile':'\\u2323','smt':'\\u2AAA','smte':'\\u2AAC','smtes':'\\u2AAC\\uFE00','softcy':'\\u044C','SOFTcy':'\\u042C','sol':'/','solb':'\\u29C4','solbar':'\\u233F','sopf':'\\uD835\\uDD64','Sopf':'\\uD835\\uDD4A','spades':'\\u2660','spadesuit':'\\u2660','spar':'\\u2225','sqcap':'\\u2293','sqcaps':'\\u2293\\uFE00','sqcup':'\\u2294','sqcups':'\\u2294\\uFE00','Sqrt':'\\u221A','sqsub':'\\u228F','sqsube':'\\u2291','sqsubset':'\\u228F','sqsubseteq':'\\u2291','sqsup':'\\u2290','sqsupe':'\\u2292','sqsupset':'\\u2290','sqsupseteq':'\\u2292','squ':'\\u25A1','square':'\\u25A1','Square':'\\u25A1','SquareIntersection':'\\u2293','SquareSubset':'\\u228F','SquareSubsetEqual':'\\u2291','SquareSuperset':'\\u2290','SquareSupersetEqual':'\\u2292','SquareUnion':'\\u2294','squarf':'\\u25AA','squf':'\\u25AA','srarr':'\\u2192','sscr':'\\uD835\\uDCC8','Sscr':'\\uD835\\uDCAE','ssetmn':'\\u2216','ssmile':'\\u2323','sstarf':'\\u22C6','star':'\\u2606','Star':'\\u22C6','starf':'\\u2605','straightepsilon':'\\u03F5','straightphi':'\\u03D5','strns':'\\xAF','sub':'\\u2282','Sub':'\\u22D0','subdot':'\\u2ABD','sube':'\\u2286','subE':'\\u2AC5','subedot':'\\u2AC3','submult':'\\u2AC1','subne':'\\u228A','subnE':'\\u2ACB','subplus':'\\u2ABF','subrarr':'\\u2979','subset':'\\u2282','Subset':'\\u22D0','subseteq':'\\u2286','subseteqq':'\\u2AC5','SubsetEqual':'\\u2286','subsetneq':'\\u228A','subsetneqq':'\\u2ACB','subsim':'\\u2AC7','subsub':'\\u2AD5','subsup':'\\u2AD3','succ':'\\u227B','succapprox':'\\u2AB8','succcurlyeq':'\\u227D','Succeeds':'\\u227B','SucceedsEqual':'\\u2AB0','SucceedsSlantEqual':'\\u227D','SucceedsTilde':'\\u227F','succeq':'\\u2AB0','succnapprox':'\\u2ABA','succneqq':'\\u2AB6','succnsim':'\\u22E9','succsim':'\\u227F','SuchThat':'\\u220B','sum':'\\u2211','Sum':'\\u2211','sung':'\\u266A','sup':'\\u2283','Sup':'\\u22D1','sup1':'\\xB9','sup2':'\\xB2','sup3':'\\xB3','supdot':'\\u2ABE','supdsub':'\\u2AD8','supe':'\\u2287','supE':'\\u2AC6','supedot':'\\u2AC4','Superset':'\\u2283','SupersetEqual':'\\u2287','suphsol':'\\u27C9','suphsub':'\\u2AD7','suplarr':'\\u297B','supmult':'\\u2AC2','supne':'\\u228B','supnE':'\\u2ACC','supplus':'\\u2AC0','supset':'\\u2283','Supset':'\\u22D1','supseteq':'\\u2287','supseteqq':'\\u2AC6','supsetneq':'\\u228B','supsetneqq':'\\u2ACC','supsim':'\\u2AC8','supsub':'\\u2AD4','supsup':'\\u2AD6','swarhk':'\\u2926','swarr':'\\u2199','swArr':'\\u21D9','swarrow':'\\u2199','swnwar':'\\u292A','szlig':'\\xDF','Tab':'\\t','target':'\\u2316','tau':'\\u03C4','Tau':'\\u03A4','tbrk':'\\u23B4','tcaron':'\\u0165','Tcaron':'\\u0164','tcedil':'\\u0163','Tcedil':'\\u0162','tcy':'\\u0442','Tcy':'\\u0422','tdot':'\\u20DB','telrec':'\\u2315','tfr':'\\uD835\\uDD31','Tfr':'\\uD835\\uDD17','there4':'\\u2234','therefore':'\\u2234','Therefore':'\\u2234','theta':'\\u03B8','Theta':'\\u0398','thetasym':'\\u03D1','thetav':'\\u03D1','thickapprox':'\\u2248','thicksim':'\\u223C','ThickSpace':'\\u205F\\u200A','thinsp':'\\u2009','ThinSpace':'\\u2009','thkap':'\\u2248','thksim':'\\u223C','thorn':'\\xFE','THORN':'\\xDE','tilde':'\\u02DC','Tilde':'\\u223C','TildeEqual':'\\u2243','TildeFullEqual':'\\u2245','TildeTilde':'\\u2248','times':'\\xD7','timesb':'\\u22A0','timesbar':'\\u2A31','timesd':'\\u2A30','tint':'\\u222D','toea':'\\u2928','top':'\\u22A4','topbot':'\\u2336','topcir':'\\u2AF1','topf':'\\uD835\\uDD65','Topf':'\\uD835\\uDD4B','topfork':'\\u2ADA','tosa':'\\u2929','tprime':'\\u2034','trade':'\\u2122','TRADE':'\\u2122','triangle':'\\u25B5','triangledown':'\\u25BF','triangleleft':'\\u25C3','trianglelefteq':'\\u22B4','triangleq':'\\u225C','triangleright':'\\u25B9','trianglerighteq':'\\u22B5','tridot':'\\u25EC','trie':'\\u225C','triminus':'\\u2A3A','TripleDot':'\\u20DB','triplus':'\\u2A39','trisb':'\\u29CD','tritime':'\\u2A3B','trpezium':'\\u23E2','tscr':'\\uD835\\uDCC9','Tscr':'\\uD835\\uDCAF','tscy':'\\u0446','TScy':'\\u0426','tshcy':'\\u045B','TSHcy':'\\u040B','tstrok':'\\u0167','Tstrok':'\\u0166','twixt':'\\u226C','twoheadleftarrow':'\\u219E','twoheadrightarrow':'\\u21A0','uacute':'\\xFA','Uacute':'\\xDA','uarr':'\\u2191','uArr':'\\u21D1','Uarr':'\\u219F','Uarrocir':'\\u2949','ubrcy':'\\u045E','Ubrcy':'\\u040E','ubreve':'\\u016D','Ubreve':'\\u016C','ucirc':'\\xFB','Ucirc':'\\xDB','ucy':'\\u0443','Ucy':'\\u0423','udarr':'\\u21C5','udblac':'\\u0171','Udblac':'\\u0170','udhar':'\\u296E','ufisht':'\\u297E','ufr':'\\uD835\\uDD32','Ufr':'\\uD835\\uDD18','ugrave':'\\xF9','Ugrave':'\\xD9','uHar':'\\u2963','uharl':'\\u21BF','uharr':'\\u21BE','uhblk':'\\u2580','ulcorn':'\\u231C','ulcorner':'\\u231C','ulcrop':'\\u230F','ultri':'\\u25F8','umacr':'\\u016B','Umacr':'\\u016A','uml':'\\xA8','UnderBar':'_','UnderBrace':'\\u23DF','UnderBracket':'\\u23B5','UnderParenthesis':'\\u23DD','Union':'\\u22C3','UnionPlus':'\\u228E','uogon':'\\u0173','Uogon':'\\u0172','uopf':'\\uD835\\uDD66','Uopf':'\\uD835\\uDD4C','uparrow':'\\u2191','Uparrow':'\\u21D1','UpArrow':'\\u2191','UpArrowBar':'\\u2912','UpArrowDownArrow':'\\u21C5','updownarrow':'\\u2195','Updownarrow':'\\u21D5','UpDownArrow':'\\u2195','UpEquilibrium':'\\u296E','upharpoonleft':'\\u21BF','upharpoonright':'\\u21BE','uplus':'\\u228E','UpperLeftArrow':'\\u2196','UpperRightArrow':'\\u2197','upsi':'\\u03C5','Upsi':'\\u03D2','upsih':'\\u03D2','upsilon':'\\u03C5','Upsilon':'\\u03A5','UpTee':'\\u22A5','UpTeeArrow':'\\u21A5','upuparrows':'\\u21C8','urcorn':'\\u231D','urcorner':'\\u231D','urcrop':'\\u230E','uring':'\\u016F','Uring':'\\u016E','urtri':'\\u25F9','uscr':'\\uD835\\uDCCA','Uscr':'\\uD835\\uDCB0','utdot':'\\u22F0','utilde':'\\u0169','Utilde':'\\u0168','utri':'\\u25B5','utrif':'\\u25B4','uuarr':'\\u21C8','uuml':'\\xFC','Uuml':'\\xDC','uwangle':'\\u29A7','vangrt':'\\u299C','varepsilon':'\\u03F5','varkappa':'\\u03F0','varnothing':'\\u2205','varphi':'\\u03D5','varpi':'\\u03D6','varpropto':'\\u221D','varr':'\\u2195','vArr':'\\u21D5','varrho':'\\u03F1','varsigma':'\\u03C2','varsubsetneq':'\\u228A\\uFE00','varsubsetneqq':'\\u2ACB\\uFE00','varsupsetneq':'\\u228B\\uFE00','varsupsetneqq':'\\u2ACC\\uFE00','vartheta':'\\u03D1','vartriangleleft':'\\u22B2','vartriangleright':'\\u22B3','vBar':'\\u2AE8','Vbar':'\\u2AEB','vBarv':'\\u2AE9','vcy':'\\u0432','Vcy':'\\u0412','vdash':'\\u22A2','vDash':'\\u22A8','Vdash':'\\u22A9','VDash':'\\u22AB','Vdashl':'\\u2AE6','vee':'\\u2228','Vee':'\\u22C1','veebar':'\\u22BB','veeeq':'\\u225A','vellip':'\\u22EE','verbar':'|','Verbar':'\\u2016','vert':'|','Vert':'\\u2016','VerticalBar':'\\u2223','VerticalLine':'|','VerticalSeparator':'\\u2758','VerticalTilde':'\\u2240','VeryThinSpace':'\\u200A','vfr':'\\uD835\\uDD33','Vfr':'\\uD835\\uDD19','vltri':'\\u22B2','vnsub':'\\u2282\\u20D2','vnsup':'\\u2283\\u20D2','vopf':'\\uD835\\uDD67','Vopf':'\\uD835\\uDD4D','vprop':'\\u221D','vrtri':'\\u22B3','vscr':'\\uD835\\uDCCB','Vscr':'\\uD835\\uDCB1','vsubne':'\\u228A\\uFE00','vsubnE':'\\u2ACB\\uFE00','vsupne':'\\u228B\\uFE00','vsupnE':'\\u2ACC\\uFE00','Vvdash':'\\u22AA','vzigzag':'\\u299A','wcirc':'\\u0175','Wcirc':'\\u0174','wedbar':'\\u2A5F','wedge':'\\u2227','Wedge':'\\u22C0','wedgeq':'\\u2259','weierp':'\\u2118','wfr':'\\uD835\\uDD34','Wfr':'\\uD835\\uDD1A','wopf':'\\uD835\\uDD68','Wopf':'\\uD835\\uDD4E','wp':'\\u2118','wr':'\\u2240','wreath':'\\u2240','wscr':'\\uD835\\uDCCC','Wscr':'\\uD835\\uDCB2','xcap':'\\u22C2','xcirc':'\\u25EF','xcup':'\\u22C3','xdtri':'\\u25BD','xfr':'\\uD835\\uDD35','Xfr':'\\uD835\\uDD1B','xharr':'\\u27F7','xhArr':'\\u27FA','xi':'\\u03BE','Xi':'\\u039E','xlarr':'\\u27F5','xlArr':'\\u27F8','xmap':'\\u27FC','xnis':'\\u22FB','xodot':'\\u2A00','xopf':'\\uD835\\uDD69','Xopf':'\\uD835\\uDD4F','xoplus':'\\u2A01','xotime':'\\u2A02','xrarr':'\\u27F6','xrArr':'\\u27F9','xscr':'\\uD835\\uDCCD','Xscr':'\\uD835\\uDCB3','xsqcup':'\\u2A06','xuplus':'\\u2A04','xutri':'\\u25B3','xvee':'\\u22C1','xwedge':'\\u22C0','yacute':'\\xFD','Yacute':'\\xDD','yacy':'\\u044F','YAcy':'\\u042F','ycirc':'\\u0177','Ycirc':'\\u0176','ycy':'\\u044B','Ycy':'\\u042B','yen':'\\xA5','yfr':'\\uD835\\uDD36','Yfr':'\\uD835\\uDD1C','yicy':'\\u0457','YIcy':'\\u0407','yopf':'\\uD835\\uDD6A','Yopf':'\\uD835\\uDD50','yscr':'\\uD835\\uDCCE','Yscr':'\\uD835\\uDCB4','yucy':'\\u044E','YUcy':'\\u042E','yuml':'\\xFF','Yuml':'\\u0178','zacute':'\\u017A','Zacute':'\\u0179','zcaron':'\\u017E','Zcaron':'\\u017D','zcy':'\\u0437','Zcy':'\\u0417','zdot':'\\u017C','Zdot':'\\u017B','zeetrf':'\\u2128','ZeroWidthSpace':'\\u200B','zeta':'\\u03B6','Zeta':'\\u0396','zfr':'\\uD835\\uDD37','Zfr':'\\u2128','zhcy':'\\u0436','ZHcy':'\\u0416','zigrarr':'\\u21DD','zopf':'\\uD835\\uDD6B','Zopf':'\\u2124','zscr':'\\uD835\\uDCCF','Zscr':'\\uD835\\uDCB5','zwj':'\\u200D','zwnj':'\\u200C'};\n\tvar decodeMapLegacy = {'aacute':'\\xE1','Aacute':'\\xC1','acirc':'\\xE2','Acirc':'\\xC2','acute':'\\xB4','aelig':'\\xE6','AElig':'\\xC6','agrave':'\\xE0','Agrave':'\\xC0','amp':'&','AMP':'&','aring':'\\xE5','Aring':'\\xC5','atilde':'\\xE3','Atilde':'\\xC3','auml':'\\xE4','Auml':'\\xC4','brvbar':'\\xA6','ccedil':'\\xE7','Ccedil':'\\xC7','cedil':'\\xB8','cent':'\\xA2','copy':'\\xA9','COPY':'\\xA9','curren':'\\xA4','deg':'\\xB0','divide':'\\xF7','eacute':'\\xE9','Eacute':'\\xC9','ecirc':'\\xEA','Ecirc':'\\xCA','egrave':'\\xE8','Egrave':'\\xC8','eth':'\\xF0','ETH':'\\xD0','euml':'\\xEB','Euml':'\\xCB','frac12':'\\xBD','frac14':'\\xBC','frac34':'\\xBE','gt':'>','GT':'>','iacute':'\\xED','Iacute':'\\xCD','icirc':'\\xEE','Icirc':'\\xCE','iexcl':'\\xA1','igrave':'\\xEC','Igrave':'\\xCC','iquest':'\\xBF','iuml':'\\xEF','Iuml':'\\xCF','laquo':'\\xAB','lt':'<','LT':'<','macr':'\\xAF','micro':'\\xB5','middot':'\\xB7','nbsp':'\\xA0','not':'\\xAC','ntilde':'\\xF1','Ntilde':'\\xD1','oacute':'\\xF3','Oacute':'\\xD3','ocirc':'\\xF4','Ocirc':'\\xD4','ograve':'\\xF2','Ograve':'\\xD2','ordf':'\\xAA','ordm':'\\xBA','oslash':'\\xF8','Oslash':'\\xD8','otilde':'\\xF5','Otilde':'\\xD5','ouml':'\\xF6','Ouml':'\\xD6','para':'\\xB6','plusmn':'\\xB1','pound':'\\xA3','quot':'\"','QUOT':'\"','raquo':'\\xBB','reg':'\\xAE','REG':'\\xAE','sect':'\\xA7','shy':'\\xAD','sup1':'\\xB9','sup2':'\\xB2','sup3':'\\xB3','szlig':'\\xDF','thorn':'\\xFE','THORN':'\\xDE','times':'\\xD7','uacute':'\\xFA','Uacute':'\\xDA','ucirc':'\\xFB','Ucirc':'\\xDB','ugrave':'\\xF9','Ugrave':'\\xD9','uml':'\\xA8','uuml':'\\xFC','Uuml':'\\xDC','yacute':'\\xFD','Yacute':'\\xDD','yen':'\\xA5','yuml':'\\xFF'};\n\tvar decodeMapNumeric = {'0':'\\uFFFD','128':'\\u20AC','130':'\\u201A','131':'\\u0192','132':'\\u201E','133':'\\u2026','134':'\\u2020','135':'\\u2021','136':'\\u02C6','137':'\\u2030','138':'\\u0160','139':'\\u2039','140':'\\u0152','142':'\\u017D','145':'\\u2018','146':'\\u2019','147':'\\u201C','148':'\\u201D','149':'\\u2022','150':'\\u2013','151':'\\u2014','152':'\\u02DC','153':'\\u2122','154':'\\u0161','155':'\\u203A','156':'\\u0153','158':'\\u017E','159':'\\u0178'};\n\tvar invalidReferenceCodePoints = [1,2,3,4,5,6,7,8,11,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,64976,64977,64978,64979,64980,64981,64982,64983,64984,64985,64986,64987,64988,64989,64990,64991,64992,64993,64994,64995,64996,64997,64998,64999,65000,65001,65002,65003,65004,65005,65006,65007,65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1048574,1048575,1114110,1114111];\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\tvar object = {};\n\tvar hasOwnProperty = object.hasOwnProperty;\n\tvar has = function(object, propertyName) {\n\t\treturn hasOwnProperty.call(object, propertyName);\n\t};\n\n\tvar contains = function(array, value) {\n\t\tvar index = -1;\n\t\tvar length = array.length;\n\t\twhile (++index < length) {\n\t\t\tif (array[index] == value) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t};\n\n\tvar merge = function(options, defaults) {\n\t\tif (!options) {\n\t\t\treturn defaults;\n\t\t}\n\t\tvar result = {};\n\t\tvar key;\n\t\tfor (key in defaults) {\n\t\t\t// A `hasOwnProperty` check is not needed here, since only recognized\n\t\t\t// option names are used anyway. Any others are ignored.\n\t\t\tresult[key] = has(options, key) ? options[key] : defaults[key];\n\t\t}\n\t\treturn result;\n\t};\n\n\t// Modified version of `ucs2encode`; see https://mths.be/punycode.\n\tvar codePointToSymbol = function(codePoint, strict) {\n\t\tvar output = '';\n\t\tif ((codePoint >= 0xD800 && codePoint <= 0xDFFF) || codePoint > 0x10FFFF) {\n\t\t\t// See issue #4:\n\t\t\t// “Otherwise, if the number is in the range 0xD800 to 0xDFFF or is\n\t\t\t// greater than 0x10FFFF, then this is a parse error. Return a U+FFFD\n\t\t\t// REPLACEMENT CHARACTER.”\n\t\t\tif (strict) {\n\t\t\t\tparseError('character reference outside the permissible Unicode range');\n\t\t\t}\n\t\t\treturn '\\uFFFD';\n\t\t}\n\t\tif (has(decodeMapNumeric, codePoint)) {\n\t\t\tif (strict) {\n\t\t\t\tparseError('disallowed character reference');\n\t\t\t}\n\t\t\treturn decodeMapNumeric[codePoint];\n\t\t}\n\t\tif (strict && contains(invalidReferenceCodePoints, codePoint)) {\n\t\t\tparseError('disallowed character reference');\n\t\t}\n\t\tif (codePoint > 0xFFFF) {\n\t\t\tcodePoint -= 0x10000;\n\t\t\toutput += stringFromCharCode(codePoint >>> 10 & 0x3FF | 0xD800);\n\t\t\tcodePoint = 0xDC00 | codePoint & 0x3FF;\n\t\t}\n\t\toutput += stringFromCharCode(codePoint);\n\t\treturn output;\n\t};\n\n\tvar hexEscape = function(codePoint) {\n\t\treturn '&#x' + codePoint.toString(16).toUpperCase() + ';';\n\t};\n\n\tvar decEscape = function(codePoint) {\n\t\treturn '&#' + codePoint + ';';\n\t};\n\n\tvar parseError = function(message) {\n\t\tthrow Error('Parse error: ' + message);\n\t};\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar encode = function(string, options) {\n\t\toptions = merge(options, encode.options);\n\t\tvar strict = options.strict;\n\t\tif (strict && regexInvalidRawCodePoint.test(string)) {\n\t\t\tparseError('forbidden code point');\n\t\t}\n\t\tvar encodeEverything = options.encodeEverything;\n\t\tvar useNamedReferences = options.useNamedReferences;\n\t\tvar allowUnsafeSymbols = options.allowUnsafeSymbols;\n\t\tvar escapeCodePoint = options.decimal ? decEscape : hexEscape;\n\n\t\tvar escapeBmpSymbol = function(symbol) {\n\t\t\treturn escapeCodePoint(symbol.charCodeAt(0));\n\t\t};\n\n\t\tif (encodeEverything) {\n\t\t\t// Encode ASCII symbols.\n\t\t\tstring = string.replace(regexAsciiWhitelist, function(symbol) {\n\t\t\t\t// Use named references if requested & possible.\n\t\t\t\tif (useNamedReferences && has(encodeMap, symbol)) {\n\t\t\t\t\treturn '&' + encodeMap[symbol] + ';';\n\t\t\t\t}\n\t\t\t\treturn escapeBmpSymbol(symbol);\n\t\t\t});\n\t\t\t// Shorten a few escapes that represent two symbols, of which at least one\n\t\t\t// is within the ASCII range.\n\t\t\tif (useNamedReferences) {\n\t\t\t\tstring = string\n\t\t\t\t\t.replace(/&gt;\\u20D2/g, '&nvgt;')\n\t\t\t\t\t.replace(/&lt;\\u20D2/g, '&nvlt;')\n\t\t\t\t\t.replace(/&#x66;&#x6A;/g, '&fjlig;');\n\t\t\t}\n\t\t\t// Encode non-ASCII symbols.\n\t\t\tif (useNamedReferences) {\n\t\t\t\t// Encode non-ASCII symbols that can be replaced with a named reference.\n\t\t\t\tstring = string.replace(regexEncodeNonAscii, function(string) {\n\t\t\t\t\t// Note: there is no need to check `has(encodeMap, string)` here.\n\t\t\t\t\treturn '&' + encodeMap[string] + ';';\n\t\t\t\t});\n\t\t\t}\n\t\t\t// Note: any remaining non-ASCII symbols are handled outside of the `if`.\n\t\t} else if (useNamedReferences) {\n\t\t\t// Apply named character references.\n\t\t\t// Encode `<>\"'&` using named character references.\n\t\t\tif (!allowUnsafeSymbols) {\n\t\t\t\tstring = string.replace(regexEscape, function(string) {\n\t\t\t\t\treturn '&' + encodeMap[string] + ';'; // no need to check `has()` here\n\t\t\t\t});\n\t\t\t}\n\t\t\t// Shorten escapes that represent two symbols, of which at least one is\n\t\t\t// `<>\"'&`.\n\t\t\tstring = string\n\t\t\t\t.replace(/&gt;\\u20D2/g, '&nvgt;')\n\t\t\t\t.replace(/&lt;\\u20D2/g, '&nvlt;');\n\t\t\t// Encode non-ASCII symbols that can be replaced with a named reference.\n\t\t\tstring = string.replace(regexEncodeNonAscii, function(string) {\n\t\t\t\t// Note: there is no need to check `has(encodeMap, string)` here.\n\t\t\t\treturn '&' + encodeMap[string] + ';';\n\t\t\t});\n\t\t} else if (!allowUnsafeSymbols) {\n\t\t\t// Encode `<>\"'&` using hexadecimal escapes, now that they’re not handled\n\t\t\t// using named character references.\n\t\t\tstring = string.replace(regexEscape, escapeBmpSymbol);\n\t\t}\n\t\treturn string\n\t\t\t// Encode astral symbols.\n\t\t\t.replace(regexAstralSymbols, function($0) {\n\t\t\t\t// https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n\t\t\t\tvar high = $0.charCodeAt(0);\n\t\t\t\tvar low = $0.charCodeAt(1);\n\t\t\t\tvar codePoint = (high - 0xD800) * 0x400 + low - 0xDC00 + 0x10000;\n\t\t\t\treturn escapeCodePoint(codePoint);\n\t\t\t})\n\t\t\t// Encode any remaining BMP symbols that are not printable ASCII symbols\n\t\t\t// using a hexadecimal escape.\n\t\t\t.replace(regexBmpWhitelist, escapeBmpSymbol);\n\t};\n\t// Expose default options (so they can be overridden globally).\n\tencode.options = {\n\t\t'allowUnsafeSymbols': false,\n\t\t'encodeEverything': false,\n\t\t'strict': false,\n\t\t'useNamedReferences': false,\n\t\t'decimal' : false\n\t};\n\n\tvar decode = function(html, options) {\n\t\toptions = merge(options, decode.options);\n\t\tvar strict = options.strict;\n\t\tif (strict && regexInvalidEntity.test(html)) {\n\t\t\tparseError('malformed character reference');\n\t\t}\n\t\treturn html.replace(regexDecode, function($0, $1, $2, $3, $4, $5, $6, $7, $8) {\n\t\t\tvar codePoint;\n\t\t\tvar semicolon;\n\t\t\tvar decDigits;\n\t\t\tvar hexDigits;\n\t\t\tvar reference;\n\t\t\tvar next;\n\n\t\t\tif ($1) {\n\t\t\t\treference = $1;\n\t\t\t\t// Note: there is no need to check `has(decodeMap, reference)`.\n\t\t\t\treturn decodeMap[reference];\n\t\t\t}\n\n\t\t\tif ($2) {\n\t\t\t\t// Decode named character references without trailing `;`, e.g. `&amp`.\n\t\t\t\t// This is only a parse error if it gets converted to `&`, or if it is\n\t\t\t\t// followed by `=` in an attribute context.\n\t\t\t\treference = $2;\n\t\t\t\tnext = $3;\n\t\t\t\tif (next && options.isAttributeValue) {\n\t\t\t\t\tif (strict && next == '=') {\n\t\t\t\t\t\tparseError('`&` did not start a character reference');\n\t\t\t\t\t}\n\t\t\t\t\treturn $0;\n\t\t\t\t} else {\n\t\t\t\t\tif (strict) {\n\t\t\t\t\t\tparseError(\n\t\t\t\t\t\t\t'named character reference was not terminated by a semicolon'\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\t// Note: there is no need to check `has(decodeMapLegacy, reference)`.\n\t\t\t\t\treturn decodeMapLegacy[reference] + (next || '');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ($4) {\n\t\t\t\t// Decode decimal escapes, e.g. `&#119558;`.\n\t\t\t\tdecDigits = $4;\n\t\t\t\tsemicolon = $5;\n\t\t\t\tif (strict && !semicolon) {\n\t\t\t\t\tparseError('character reference was not terminated by a semicolon');\n\t\t\t\t}\n\t\t\t\tcodePoint = parseInt(decDigits, 10);\n\t\t\t\treturn codePointToSymbol(codePoint, strict);\n\t\t\t}\n\n\t\t\tif ($6) {\n\t\t\t\t// Decode hexadecimal escapes, e.g. `&#x1D306;`.\n\t\t\t\thexDigits = $6;\n\t\t\t\tsemicolon = $7;\n\t\t\t\tif (strict && !semicolon) {\n\t\t\t\t\tparseError('character reference was not terminated by a semicolon');\n\t\t\t\t}\n\t\t\t\tcodePoint = parseInt(hexDigits, 16);\n\t\t\t\treturn codePointToSymbol(codePoint, strict);\n\t\t\t}\n\n\t\t\t// If we’re still here, `if ($7)` is implied; it’s an ambiguous\n\t\t\t// ampersand for sure. https://mths.be/notes/ambiguous-ampersands\n\t\t\tif (strict) {\n\t\t\t\tparseError(\n\t\t\t\t\t'named character reference was not terminated by a semicolon'\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn $0;\n\t\t});\n\t};\n\t// Expose default options (so they can be overridden globally).\n\tdecode.options = {\n\t\t'isAttributeValue': false,\n\t\t'strict': false\n\t};\n\n\tvar escape = function(string) {\n\t\treturn string.replace(regexEscape, function($0) {\n\t\t\t// Note: there is no need to check `has(escapeMap, $0)` here.\n\t\t\treturn escapeMap[$0];\n\t\t});\n\t};\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar he = {\n\t\t'version': '1.2.0',\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'escape': escape,\n\t\t'unescape': decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn he;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js, io.js, or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = he;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in he) {\n\t\t\t\thas(he, key) && (freeExports[key] = he[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.he = he;\n\t}\n\n}(this));\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","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\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","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","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n 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","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","'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","module.exports = minimatch\nminimatch.Minimatch = Minimatch\n\nvar path = { sep: '/' }\ntry {\n path = require('path')\n} catch (er) {}\n\nvar GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {}\nvar expand = require('brace-expansion')\n\nvar plTypes = {\n '!': { open: '(?:(?!(?:', close: '))[^/]*?)'},\n '?': { open: '(?:', close: ')?' },\n '+': { open: '(?:', close: ')+' },\n '*': { open: '(?:', close: ')*' },\n '@': { open: '(?:', close: ')' }\n}\n\n// any single thing other than /\n// don't need to escape / when using new RegExp()\nvar qmark = '[^/]'\n\n// * => any number of characters\nvar star = qmark + '*?'\n\n// ** when dots are allowed. Anything goes, except .. and .\n// not (^ or / followed by one or two dots followed by $ or /),\n// followed by anything, any number of times.\nvar twoStarDot = '(?:(?!(?:\\\\\\/|^)(?:\\\\.{1,2})($|\\\\\\/)).)*?'\n\n// not a ^ or / followed by a dot,\n// followed by anything, any number of times.\nvar twoStarNoDot = '(?:(?!(?:\\\\\\/|^)\\\\.).)*?'\n\n// characters that need to be escaped in RegExp.\nvar reSpecials = charSet('().*{}+?[]^$\\\\!')\n\n// \"abc\" -> { a:true, b:true, c:true }\nfunction charSet (s) {\n return s.split('').reduce(function (set, c) {\n set[c] = true\n return set\n }, {})\n}\n\n// normalizes slashes.\nvar slashSplit = /\\/+/\n\nminimatch.filter = filter\nfunction filter (pattern, options) {\n options = options || {}\n return function (p, i, list) {\n return minimatch(p, pattern, options)\n }\n}\n\nfunction ext (a, b) {\n a = a || {}\n b = b || {}\n var t = {}\n Object.keys(b).forEach(function (k) {\n t[k] = b[k]\n })\n Object.keys(a).forEach(function (k) {\n t[k] = a[k]\n })\n return t\n}\n\nminimatch.defaults = function (def) {\n if (!def || !Object.keys(def).length) return minimatch\n\n var orig = minimatch\n\n var m = function minimatch (p, pattern, options) {\n return orig.minimatch(p, pattern, ext(def, options))\n }\n\n m.Minimatch = function Minimatch (pattern, options) {\n return new orig.Minimatch(pattern, ext(def, options))\n }\n\n return m\n}\n\nMinimatch.defaults = function (def) {\n if (!def || !Object.keys(def).length) return Minimatch\n return minimatch.defaults(def).Minimatch\n}\n\nfunction minimatch (p, pattern, options) {\n if (typeof pattern !== 'string') {\n throw new TypeError('glob pattern string required')\n }\n\n if (!options) options = {}\n\n // shortcut: comments match nothing.\n if (!options.nocomment && pattern.charAt(0) === '#') {\n return false\n }\n\n // \"\" only matches \"\"\n if (pattern.trim() === '') return p === ''\n\n return new Minimatch(pattern, options).match(p)\n}\n\nfunction Minimatch (pattern, options) {\n if (!(this instanceof Minimatch)) {\n return new Minimatch(pattern, options)\n }\n\n if (typeof pattern !== 'string') {\n throw new TypeError('glob pattern string required')\n }\n\n if (!options) options = {}\n pattern = pattern.trim()\n\n // windows support: need to use /, not \\\n if (path.sep !== '/') {\n pattern = pattern.split(path.sep).join('/')\n }\n\n this.options = options\n this.set = []\n this.pattern = pattern\n this.regexp = null\n this.negate = false\n this.comment = false\n this.empty = false\n\n // make the set of regexps etc.\n this.make()\n}\n\nMinimatch.prototype.debug = function () {}\n\nMinimatch.prototype.make = make\nfunction make () {\n // don't do it more than once.\n if (this._made) return\n\n var pattern = this.pattern\n var options = this.options\n\n // empty patterns and comments match nothing.\n if (!options.nocomment && pattern.charAt(0) === '#') {\n this.comment = true\n return\n }\n if (!pattern) {\n this.empty = true\n return\n }\n\n // step 1: figure out negation, etc.\n this.parseNegate()\n\n // step 2: expand braces\n var set = this.globSet = this.braceExpand()\n\n if (options.debug) this.debug = console.error\n\n this.debug(this.pattern, set)\n\n // step 3: now we have a set, so turn each one into a series of path-portion\n // matching patterns.\n // These will be regexps, except in the case of \"**\", which is\n // set to the GLOBSTAR object for globstar behavior,\n // and will not contain any / characters\n set = this.globParts = set.map(function (s) {\n return s.split(slashSplit)\n })\n\n this.debug(this.pattern, set)\n\n // glob --> regexps\n set = set.map(function (s, si, set) {\n return s.map(this.parse, this)\n }, this)\n\n this.debug(this.pattern, set)\n\n // filter out everything that didn't compile properly.\n set = set.filter(function (s) {\n return s.indexOf(false) === -1\n })\n\n this.debug(this.pattern, set)\n\n this.set = set\n}\n\nMinimatch.prototype.parseNegate = parseNegate\nfunction parseNegate () {\n var pattern = this.pattern\n var negate = false\n var options = this.options\n var negateOffset = 0\n\n if (options.nonegate) return\n\n for (var i = 0, l = pattern.length\n ; i < l && pattern.charAt(i) === '!'\n ; i++) {\n negate = !negate\n negateOffset++\n }\n\n if (negateOffset) this.pattern = pattern.substr(negateOffset)\n this.negate = negate\n}\n\n// Brace expansion:\n// a{b,c}d -> abd acd\n// a{b,}c -> abc ac\n// a{0..3}d -> a0d a1d a2d a3d\n// a{b,c{d,e}f}g -> abg acdfg acefg\n// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg\n//\n// Invalid sets are not expanded.\n// a{2..}b -> a{2..}b\n// a{b}c -> a{b}c\nminimatch.braceExpand = function (pattern, options) {\n return braceExpand(pattern, options)\n}\n\nMinimatch.prototype.braceExpand = braceExpand\n\nfunction braceExpand (pattern, options) {\n if (!options) {\n if (this instanceof Minimatch) {\n options = this.options\n } else {\n options = {}\n }\n }\n\n pattern = typeof pattern === 'undefined'\n ? this.pattern : pattern\n\n if (typeof pattern === 'undefined') {\n throw new TypeError('undefined pattern')\n }\n\n if (options.nobrace ||\n !pattern.match(/\\{.*\\}/)) {\n // shortcut. no need to expand.\n return [pattern]\n }\n\n return expand(pattern)\n}\n\n// parse a component of the expanded set.\n// At this point, no pattern may contain \"/\" in it\n// so we're going to return a 2d array, where each entry is the full\n// pattern, split on '/', and then turned into a regular expression.\n// A regexp is made at the end which joins each array with an\n// escaped /, and another full one which joins each regexp with |.\n//\n// Following the lead of Bash 4.1, note that \"**\" only has special meaning\n// when it is the *only* thing in a path portion. Otherwise, any series\n// of * is equivalent to a single *. Globstar behavior is enabled by\n// default, and can be disabled by setting options.noglobstar.\nMinimatch.prototype.parse = parse\nvar SUBPARSE = {}\nfunction parse (pattern, isSub) {\n if (pattern.length > 1024 * 64) {\n throw new TypeError('pattern is too long')\n }\n\n var options = this.options\n\n // shortcuts\n if (!options.noglobstar && pattern === '**') return GLOBSTAR\n if (pattern === '') return ''\n\n var re = ''\n var hasMagic = !!options.nocase\n var escaping = false\n // ? => one single character\n var patternListStack = []\n var negativeLists = []\n var stateChar\n var inClass = false\n var reClassStart = -1\n var classStart = -1\n // . and .. never match anything that doesn't start with .,\n // even when options.dot is set.\n var patternStart = pattern.charAt(0) === '.' ? '' // anything\n // not (start or / followed by . or .. followed by / or end)\n : options.dot ? '(?!(?:^|\\\\\\/)\\\\.{1,2}(?:$|\\\\\\/))'\n : '(?!\\\\.)'\n var self = this\n\n function clearStateChar () {\n if (stateChar) {\n // we had some state-tracking character\n // that wasn't consumed by this pass.\n switch (stateChar) {\n case '*':\n re += star\n hasMagic = true\n break\n case '?':\n re += qmark\n hasMagic = true\n break\n default:\n re += '\\\\' + stateChar\n break\n }\n self.debug('clearStateChar %j %j', stateChar, re)\n stateChar = false\n }\n }\n\n for (var i = 0, len = pattern.length, c\n ; (i < len) && (c = pattern.charAt(i))\n ; i++) {\n this.debug('%s\\t%s %s %j', pattern, i, re, c)\n\n // skip over any that are escaped.\n if (escaping && reSpecials[c]) {\n re += '\\\\' + c\n escaping = false\n continue\n }\n\n switch (c) {\n case '/':\n // completely not allowed, even escaped.\n // Should already be path-split by now.\n return false\n\n case '\\\\':\n clearStateChar()\n escaping = true\n continue\n\n // the various stateChar values\n // for the \"extglob\" stuff.\n case '?':\n case '*':\n case '+':\n case '@':\n case '!':\n this.debug('%s\\t%s %s %j <-- stateChar', pattern, i, re, c)\n\n // all of those are literals inside a class, except that\n // the glob [!a] means [^a] in regexp\n if (inClass) {\n this.debug(' in class')\n if (c === '!' && i === classStart + 1) c = '^'\n re += c\n continue\n }\n\n // if we already have a stateChar, then it means\n // that there was something like ** or +? in there.\n // Handle the stateChar, then proceed with this one.\n self.debug('call clearStateChar %j', stateChar)\n clearStateChar()\n stateChar = c\n // if extglob is disabled, then +(asdf|foo) isn't a thing.\n // just clear the statechar *now*, rather than even diving into\n // the patternList stuff.\n if (options.noext) clearStateChar()\n continue\n\n case '(':\n if (inClass) {\n re += '('\n continue\n }\n\n if (!stateChar) {\n re += '\\\\('\n continue\n }\n\n patternListStack.push({\n type: stateChar,\n start: i - 1,\n reStart: re.length,\n open: plTypes[stateChar].open,\n close: plTypes[stateChar].close\n })\n // negation is (?:(?!js)[^/]*)\n re += stateChar === '!' ? '(?:(?!(?:' : '(?:'\n this.debug('plType %j %j', stateChar, re)\n stateChar = false\n continue\n\n case ')':\n if (inClass || !patternListStack.length) {\n re += '\\\\)'\n continue\n }\n\n clearStateChar()\n hasMagic = true\n var pl = patternListStack.pop()\n // negation is (?:(?!js)[^/]*)\n // The others are (?:<pattern>)<type>\n re += pl.close\n if (pl.type === '!') {\n negativeLists.push(pl)\n }\n pl.reEnd = re.length\n continue\n\n case '|':\n if (inClass || !patternListStack.length || escaping) {\n re += '\\\\|'\n escaping = false\n continue\n }\n\n clearStateChar()\n re += '|'\n continue\n\n // these are mostly the same in regexp and glob\n case '[':\n // swallow any state-tracking char before the [\n clearStateChar()\n\n if (inClass) {\n re += '\\\\' + c\n continue\n }\n\n inClass = true\n classStart = i\n reClassStart = re.length\n re += c\n continue\n\n case ']':\n // a right bracket shall lose its special\n // meaning and represent itself in\n // a bracket expression if it occurs\n // first in the list. -- POSIX.2 2.8.3.2\n if (i === classStart + 1 || !inClass) {\n re += '\\\\' + c\n escaping = false\n continue\n }\n\n // handle the case where we left a class open.\n // \"[z-a]\" is valid, equivalent to \"\\[z-a\\]\"\n if (inClass) {\n // split where the last [ was, make sure we don't have\n // an invalid re. if so, re-walk the contents of the\n // would-be class to re-translate any characters that\n // were passed through as-is\n // TODO: It would probably be faster to determine this\n // without a try/catch and a new RegExp, but it's tricky\n // to do safely. For now, this is safe and works.\n var cs = pattern.substring(classStart + 1, i)\n try {\n RegExp('[' + cs + ']')\n } catch (er) {\n // not a valid class!\n var sp = this.parse(cs, SUBPARSE)\n re = re.substr(0, reClassStart) + '\\\\[' + sp[0] + '\\\\]'\n hasMagic = hasMagic || sp[1]\n inClass = false\n continue\n }\n }\n\n // finish up the class.\n hasMagic = true\n inClass = false\n re += c\n continue\n\n default:\n // swallow any state char that wasn't consumed\n clearStateChar()\n\n if (escaping) {\n // no need\n escaping = false\n } else if (reSpecials[c]\n && !(c === '^' && inClass)) {\n re += '\\\\'\n }\n\n re += c\n\n } // switch\n } // for\n\n // handle the case where we left a class open.\n // \"[abc\" is valid, equivalent to \"\\[abc\"\n if (inClass) {\n // split where the last [ was, and escape it\n // this is a huge pita. We now have to re-walk\n // the contents of the would-be class to re-translate\n // any characters that were passed through as-is\n cs = pattern.substr(classStart + 1)\n sp = this.parse(cs, SUBPARSE)\n re = re.substr(0, reClassStart) + '\\\\[' + sp[0]\n hasMagic = hasMagic || sp[1]\n }\n\n // handle the case where we had a +( thing at the *end*\n // of the pattern.\n // each pattern list stack adds 3 chars, and we need to go through\n // and escape any | chars that were passed through as-is for the regexp.\n // Go through and escape them, taking care not to double-escape any\n // | chars that were already escaped.\n for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) {\n var tail = re.slice(pl.reStart + pl.open.length)\n this.debug('setting tail', re, pl)\n // maybe some even number of \\, then maybe 1 \\, followed by a |\n tail = tail.replace(/((?:\\\\{2}){0,64})(\\\\?)\\|/g, function (_, $1, $2) {\n if (!$2) {\n // the | isn't already escaped, so escape it.\n $2 = '\\\\'\n }\n\n // need to escape all those slashes *again*, without escaping the\n // one that we need for escaping the | character. As it works out,\n // escaping an even number of slashes can be done by simply repeating\n // it exactly after itself. That's why this trick works.\n //\n // I am sorry that you have to see this.\n return $1 + $1 + $2 + '|'\n })\n\n this.debug('tail=%j\\n %s', tail, tail, pl, re)\n var t = pl.type === '*' ? star\n : pl.type === '?' ? qmark\n : '\\\\' + pl.type\n\n hasMagic = true\n re = re.slice(0, pl.reStart) + t + '\\\\(' + tail\n }\n\n // handle trailing things that only matter at the very end.\n clearStateChar()\n if (escaping) {\n // trailing \\\\\n re += '\\\\\\\\'\n }\n\n // only need to apply the nodot start if the re starts with\n // something that could conceivably capture a dot\n var addPatternStart = false\n switch (re.charAt(0)) {\n case '.':\n case '[':\n case '(': addPatternStart = true\n }\n\n // Hack to work around lack of negative lookbehind in JS\n // A pattern like: *.!(x).!(y|z) needs to ensure that a name\n // like 'a.xyz.yz' doesn't match. So, the first negative\n // lookahead, has to look ALL the way ahead, to the end of\n // the pattern.\n for (var n = negativeLists.length - 1; n > -1; n--) {\n var nl = negativeLists[n]\n\n var nlBefore = re.slice(0, nl.reStart)\n var nlFirst = re.slice(nl.reStart, nl.reEnd - 8)\n var nlLast = re.slice(nl.reEnd - 8, nl.reEnd)\n var nlAfter = re.slice(nl.reEnd)\n\n nlLast += nlAfter\n\n // Handle nested stuff like *(*.js|!(*.json)), where open parens\n // mean that we should *not* include the ) in the bit that is considered\n // \"after\" the negated section.\n var openParensBefore = nlBefore.split('(').length - 1\n var cleanAfter = nlAfter\n for (i = 0; i < openParensBefore; i++) {\n cleanAfter = cleanAfter.replace(/\\)[+*?]?/, '')\n }\n nlAfter = cleanAfter\n\n var dollar = ''\n if (nlAfter === '' && isSub !== SUBPARSE) {\n dollar = '$'\n }\n var newRe = nlBefore + nlFirst + nlAfter + dollar + nlLast\n re = newRe\n }\n\n // if the re is not \"\" at this point, then we need to make sure\n // it doesn't match against an empty path part.\n // Otherwise a/* will match a/, which it should not.\n if (re !== '' && hasMagic) {\n re = '(?=.)' + re\n }\n\n if (addPatternStart) {\n re = patternStart + re\n }\n\n // parsing just a piece of a larger pattern.\n if (isSub === SUBPARSE) {\n return [re, hasMagic]\n }\n\n // skip the regexp for non-magical patterns\n // unescape anything in it, though, so that it'll be\n // an exact match against a file etc.\n if (!hasMagic) {\n return globUnescape(pattern)\n }\n\n var flags = options.nocase ? 'i' : ''\n try {\n var regExp = new RegExp('^' + re + '$', flags)\n } catch (er) {\n // If it was an invalid regular expression, then it can't match\n // anything. This trick looks for a character after the end of\n // the string, which is of course impossible, except in multi-line\n // mode, but it's not a /m regex.\n return new RegExp('$.')\n }\n\n regExp._glob = pattern\n regExp._src = re\n\n return regExp\n}\n\nminimatch.makeRe = function (pattern, options) {\n return new Minimatch(pattern, options || {}).makeRe()\n}\n\nMinimatch.prototype.makeRe = makeRe\nfunction makeRe () {\n if (this.regexp || this.regexp === false) return this.regexp\n\n // at this point, this.set is a 2d array of partial\n // pattern strings, or \"**\".\n //\n // It's better to use .match(). This function shouldn't\n // be used, really, but it's pretty convenient sometimes,\n // when you just want to work with a regex.\n var set = this.set\n\n if (!set.length) {\n this.regexp = false\n return this.regexp\n }\n var options = this.options\n\n var twoStar = options.noglobstar ? star\n : options.dot ? twoStarDot\n : twoStarNoDot\n var flags = options.nocase ? 'i' : ''\n\n var re = set.map(function (pattern) {\n return pattern.map(function (p) {\n return (p === GLOBSTAR) ? twoStar\n : (typeof p === 'string') ? regExpEscape(p)\n : p._src\n }).join('\\\\\\/')\n }).join('|')\n\n // must match entire pattern\n // ending in a * or ** will make it less strict.\n re = '^(?:' + re + ')$'\n\n // can match anything, as long as it's not this.\n if (this.negate) re = '^(?!' + re + ').*$'\n\n try {\n this.regexp = new RegExp(re, flags)\n } catch (ex) {\n this.regexp = false\n }\n return this.regexp\n}\n\nminimatch.match = function (list, pattern, options) {\n options = options || {}\n var mm = new Minimatch(pattern, options)\n list = list.filter(function (f) {\n return mm.match(f)\n })\n if (mm.options.nonull && !list.length) {\n list.push(pattern)\n }\n return list\n}\n\nMinimatch.prototype.match = match\nfunction match (f, partial) {\n this.debug('match', f, this.pattern)\n // short-circuit in the case of busted things.\n // comments, etc.\n if (this.comment) return false\n if (this.empty) return f === ''\n\n if (f === '/' && partial) return true\n\n var options = this.options\n\n // windows: need to use /, not \\\n if (path.sep !== '/') {\n f = f.split(path.sep).join('/')\n }\n\n // treat the test path as a set of pathparts.\n f = f.split(slashSplit)\n this.debug(this.pattern, 'split', f)\n\n // just ONE of the pattern sets in this.set needs to match\n // in order for it to be valid. If negating, then just one\n // match means that we have failed.\n // Either way, return on the first hit.\n\n var set = this.set\n this.debug(this.pattern, 'set', set)\n\n // Find the basename of the path by looking for the last non-empty segment\n var filename\n var i\n for (i = f.length - 1; i >= 0; i--) {\n filename = f[i]\n if (filename) break\n }\n\n for (i = 0; i < set.length; i++) {\n var pattern = set[i]\n var file = f\n if (options.matchBase && pattern.length === 1) {\n file = [filename]\n }\n var hit = this.matchOne(file, pattern, partial)\n if (hit) {\n if (options.flipNegate) return true\n return !this.negate\n }\n }\n\n // didn't get any hits. this is success if it's a negative\n // pattern, failure otherwise.\n if (options.flipNegate) return false\n return this.negate\n}\n\n// set partial to true to test if, for example,\n// \"/a/b\" matches the start of \"/*/b/*/d\"\n// Partial means, if you run out of file before you run\n// out of pattern, then that's fine, as long as all\n// the parts match.\nMinimatch.prototype.matchOne = function (file, pattern, partial) {\n var options = this.options\n\n this.debug('matchOne',\n { 'this': this, file: file, pattern: pattern })\n\n this.debug('matchOne', file.length, pattern.length)\n\n for (var fi = 0,\n pi = 0,\n fl = file.length,\n pl = pattern.length\n ; (fi < fl) && (pi < pl)\n ; fi++, pi++) {\n this.debug('matchOne loop')\n var p = pattern[pi]\n var f = file[fi]\n\n this.debug(pattern, p, f)\n\n // should be impossible.\n // some invalid regexp stuff in the set.\n if (p === false) return false\n\n if (p === GLOBSTAR) {\n this.debug('GLOBSTAR', [pattern, p, f])\n\n // \"**\"\n // a/**/b/**/c would match the following:\n // a/b/x/y/z/c\n // a/x/y/z/b/c\n // a/b/x/b/x/c\n // a/b/c\n // To do this, take the rest of the pattern after\n // the **, and see if it would match the file remainder.\n // If so, return success.\n // If not, the ** \"swallows\" a segment, and try again.\n // This is recursively awful.\n //\n // a/**/b/**/c matching a/b/x/y/z/c\n // - a matches a\n // - doublestar\n // - matchOne(b/x/y/z/c, b/**/c)\n // - b matches b\n // - doublestar\n // - matchOne(x/y/z/c, c) -> no\n // - matchOne(y/z/c, c) -> no\n // - matchOne(z/c, c) -> no\n // - matchOne(c, c) yes, hit\n var fr = fi\n var pr = pi + 1\n if (pr === pl) {\n this.debug('** at the end')\n // a ** at the end will just swallow the rest.\n // We have found a match.\n // however, it will not swallow /.x, unless\n // options.dot is set.\n // . and .. are *never* matched by **, for explosively\n // exponential reasons.\n for (; fi < fl; fi++) {\n if (file[fi] === '.' || file[fi] === '..' ||\n (!options.dot && file[fi].charAt(0) === '.')) return false\n }\n return true\n }\n\n // ok, let's see if we can swallow whatever we can.\n while (fr < fl) {\n var swallowee = file[fr]\n\n this.debug('\\nglobstar while', file, fr, pattern, pr, swallowee)\n\n // XXX remove this slice. Just pass the start index.\n if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) {\n this.debug('globstar found match!', fr, fl, swallowee)\n // found a match.\n return true\n } else {\n // can't swallow \".\" or \"..\" ever.\n // can only swallow \".foo\" when explicitly asked.\n if (swallowee === '.' || swallowee === '..' ||\n (!options.dot && swallowee.charAt(0) === '.')) {\n this.debug('dot detected!', file, fr, pattern, pr)\n break\n }\n\n // ** swallows a segment, and continue.\n this.debug('globstar swallow a segment, and continue')\n fr++\n }\n }\n\n // no match was found.\n // However, in partial mode, we can't say this is necessarily over.\n // If there's more *pattern* left, then\n if (partial) {\n // ran out of file\n this.debug('\\n>>> no match, partial?', file, fr, pattern, pr)\n if (fr === fl) return true\n }\n return false\n }\n\n // something other than **\n // non-magic patterns just have to match exactly\n // patterns with magic have been turned into regexps.\n var hit\n if (typeof p === 'string') {\n if (options.nocase) {\n hit = f.toLowerCase() === p.toLowerCase()\n } else {\n hit = f === p\n }\n this.debug('string match', p, f, hit)\n } else {\n hit = f.match(p)\n this.debug('pattern match', p, f, hit)\n }\n\n if (!hit) return false\n }\n\n // Note: ending in / means that we'll get a final \"\"\n // at the end of the pattern. This can only match a\n // corresponding \"\" at the end of the file.\n // If the file ends in /, then it can only match a\n // a pattern that ends in /, unless the pattern just\n // doesn't have any more for it. But, a/b/ should *not*\n // match \"a/b/*\", even though \"\" matches against the\n // [^/]*? pattern, except in partial mode, where it might\n // simply not be reached yet.\n // However, a/b/ should still satisfy a/*\n\n // now either we fell off the end of the pattern, or we're done.\n if (fi === fl && pi === pl) {\n // ran out of pattern and filename at the same time.\n // an exact hit!\n return true\n } else if (fi === fl) {\n // ran out of file, but still had pattern left.\n // this is ok if we're doing the match as part of\n // a glob fs traversal.\n return partial\n } else if (pi === pl) {\n // ran out of pattern, still have file left.\n // this is only acceptable if we're on the very last\n // empty segment of a file with a trailing slash.\n // a/* should match a/b/\n var emptyFileEnd = (fi === fl - 1) && (file[fi] === '')\n return emptyFileEnd\n }\n\n // should be unreachable.\n throw new Error('wtf?')\n}\n\n// replace stuff like \\* with *\nfunction globUnescape (s) {\n return s.replace(/\\\\(.)/g, '$1')\n}\n\nfunction regExpEscape (s) {\n return s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&')\n}\n","/**\n* @license nested-property https://github.com/cosmosio/nested-property\n*\n* The MIT License (MIT)\n*\n* Copyright (c) 2014-2020 Olivier Scherrer <pode.fr@gmail.com>\n*/\n\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, 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\nvar ARRAY_WILDCARD = \"+\";\nvar PATH_DELIMITER = \".\";\n\nvar ObjectPrototypeMutationError = /*#__PURE__*/function (_Error) {\n _inherits(ObjectPrototypeMutationError, _Error);\n\n function ObjectPrototypeMutationError(params) {\n var _this;\n\n _classCallCheck(this, ObjectPrototypeMutationError);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(ObjectPrototypeMutationError).call(this, params));\n _this.name = \"ObjectPrototypeMutationError\";\n return _this;\n }\n\n return ObjectPrototypeMutationError;\n}(_wrapNativeSuper(Error));\n\nmodule.exports = {\n set: setNestedProperty,\n get: getNestedProperty,\n has: hasNestedProperty,\n hasOwn: function hasOwn(object, property, options) {\n return this.has(object, property, options || {\n own: true\n });\n },\n isIn: isInNestedProperty,\n ObjectPrototypeMutationError: ObjectPrototypeMutationError\n};\n/**\n * Get the property of an object nested in one or more objects or array\n * Given an object such as a.b.c.d = 5, getNestedProperty(a, \"b.c.d\") will return 5.\n * It also works through arrays. Given a nested array such as a[0].b = 5, getNestedProperty(a, \"0.b\") will return 5.\n * For accessing nested properties through all items in an array, you may use the array wildcard \"+\".\n * For instance, getNestedProperty([{a:1}, {a:2}, {a:3}], \"+.a\") will return [1, 2, 3]\n * @param {Object} object the object to get the property from\n * @param {String} property the path to the property as a string\n * @returns the object or the the property value if found\n */\n\nfunction getNestedProperty(object, property) {\n if (_typeof(object) != \"object\" || object === null) {\n return object;\n }\n\n if (typeof property == \"undefined\") {\n return object;\n }\n\n if (typeof property == \"number\") {\n return object[property];\n }\n\n try {\n return traverse(object, property, function _getNestedProperty(currentObject, currentProperty) {\n return currentObject[currentProperty];\n });\n } catch (err) {\n return object;\n }\n}\n/**\n * Tell if a nested object has a given property (or array a given index)\n * given an object such as a.b.c.d = 5, hasNestedProperty(a, \"b.c.d\") will return true.\n * It also returns true if the property is in the prototype chain.\n * @param {Object} object the object to get the property from\n * @param {String} property the path to the property as a string\n * @param {Object} options:\n * - own: set to reject properties from the prototype\n * @returns true if has (property in object), false otherwise\n */\n\n\nfunction hasNestedProperty(object, property) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (_typeof(object) != \"object\" || object === null) {\n return false;\n }\n\n if (typeof property == \"undefined\") {\n return false;\n }\n\n if (typeof property == \"number\") {\n return property in object;\n }\n\n try {\n var has = false;\n traverse(object, property, function _hasNestedProperty(currentObject, currentProperty, segments, index) {\n if (isLastSegment(segments, index)) {\n if (options.own) {\n has = currentObject.hasOwnProperty(currentProperty);\n } else {\n has = currentProperty in currentObject;\n }\n } else {\n return currentObject && currentObject[currentProperty];\n }\n });\n return has;\n } catch (err) {\n return false;\n }\n}\n/**\n * Set the property of an object nested in one or more objects\n * If the property doesn't exist, it gets created.\n * @param {Object} object\n * @param {String} property\n * @param value the value to set\n * @returns object if no assignment was made or the value if the assignment was made\n */\n\n\nfunction setNestedProperty(object, property, value) {\n if (_typeof(object) != \"object\" || object === null) {\n return object;\n }\n\n if (typeof property == \"undefined\") {\n return object;\n }\n\n if (typeof property == \"number\") {\n object[property] = value;\n return object[property];\n }\n\n try {\n return traverse(object, property, function _setNestedProperty(currentObject, currentProperty, segments, index) {\n if (currentObject === Reflect.getPrototypeOf({})) {\n throw new ObjectPrototypeMutationError(\"Attempting to mutate Object.prototype\");\n }\n\n if (!currentObject[currentProperty]) {\n var nextPropIsNumber = Number.isInteger(Number(segments[index + 1]));\n var nextPropIsArrayWildcard = segments[index + 1] === ARRAY_WILDCARD;\n\n if (nextPropIsNumber || nextPropIsArrayWildcard) {\n currentObject[currentProperty] = [];\n } else {\n currentObject[currentProperty] = {};\n }\n }\n\n if (isLastSegment(segments, index)) {\n currentObject[currentProperty] = value;\n }\n\n return currentObject[currentProperty];\n });\n } catch (err) {\n if (err instanceof ObjectPrototypeMutationError) {\n // rethrow\n throw err;\n } else {\n return object;\n }\n }\n}\n/**\n * Tell if an object is on the path to a nested property\n * If the object is on the path, and the path exists, it returns true, and false otherwise.\n * @param {Object} object to get the nested property from\n * @param {String} property name of the nested property\n * @param {Object} objectInPath the object to check\n * @param {Object} options:\n * - validPath: return false if the path is invalid, even if the object is in the path\n * @returns {boolean} true if the object is on the path\n */\n\n\nfunction isInNestedProperty(object, property, objectInPath) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n\n if (_typeof(object) != \"object\" || object === null) {\n return false;\n }\n\n if (typeof property == \"undefined\") {\n return false;\n }\n\n try {\n var isIn = false,\n pathExists = false;\n traverse(object, property, function _isInNestedProperty(currentObject, currentProperty, segments, index) {\n isIn = isIn || currentObject === objectInPath || !!currentObject && currentObject[currentProperty] === objectInPath;\n pathExists = isLastSegment(segments, index) && _typeof(currentObject) === \"object\" && currentProperty in currentObject;\n return currentObject && currentObject[currentProperty];\n });\n\n if (options.validPath) {\n return isIn && pathExists;\n } else {\n return isIn;\n }\n } catch (err) {\n return false;\n }\n}\n\nfunction traverse(object, path) {\n var callback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () {};\n var segments = path.split(PATH_DELIMITER);\n var length = segments.length;\n\n var _loop = function _loop(idx) {\n var currentSegment = segments[idx];\n\n if (!object) {\n return {\n v: void 0\n };\n }\n\n if (currentSegment === ARRAY_WILDCARD) {\n if (Array.isArray(object)) {\n return {\n v: object.map(function (value, index) {\n var remainingSegments = segments.slice(idx + 1);\n\n if (remainingSegments.length > 0) {\n return traverse(value, remainingSegments.join(PATH_DELIMITER), callback);\n } else {\n return callback(object, index, segments, idx);\n }\n })\n };\n } else {\n var pathToHere = segments.slice(0, idx).join(PATH_DELIMITER);\n throw new Error(\"Object at wildcard (\".concat(pathToHere, \") is not an array\"));\n }\n } else {\n object = callback(object, currentSegment, segments, idx);\n }\n };\n\n for (var idx = 0; idx < length; idx++) {\n var _ret = _loop(idx);\n\n if (_typeof(_ret) === \"object\") return _ret.v;\n }\n\n return object;\n}\n\nfunction isLastSegment(segments, index) {\n return segments.length === index + 1;\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","// 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","// 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","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","// 'path' module extracted from Node.js v8.11.1 (only the posix part)\n// transplited with Babel\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\nfunction assertPath(path) {\n if (typeof path !== 'string') {\n throw new TypeError('Path must be a string. Received ' + JSON.stringify(path));\n }\n}\n\n// Resolves . and .. elements in a path with directory names\nfunction normalizeStringPosix(path, allowAboveRoot) {\n var res = '';\n var lastSegmentLength = 0;\n var lastSlash = -1;\n var dots = 0;\n var code;\n for (var i = 0; i <= path.length; ++i) {\n if (i < path.length)\n code = path.charCodeAt(i);\n else if (code === 47 /*/*/)\n break;\n else\n code = 47 /*/*/;\n if (code === 47 /*/*/) {\n if (lastSlash === i - 1 || dots === 1) {\n // NOOP\n } else if (lastSlash !== i - 1 && dots === 2) {\n if (res.length < 2 || lastSegmentLength !== 2 || res.charCodeAt(res.length - 1) !== 46 /*.*/ || res.charCodeAt(res.length - 2) !== 46 /*.*/) {\n if (res.length > 2) {\n var lastSlashIndex = res.lastIndexOf('/');\n if (lastSlashIndex !== res.length - 1) {\n if (lastSlashIndex === -1) {\n res = '';\n lastSegmentLength = 0;\n } else {\n res = res.slice(0, lastSlashIndex);\n lastSegmentLength = res.length - 1 - res.lastIndexOf('/');\n }\n lastSlash = i;\n dots = 0;\n continue;\n }\n } else if (res.length === 2 || res.length === 1) {\n res = '';\n lastSegmentLength = 0;\n lastSlash = i;\n dots = 0;\n continue;\n }\n }\n if (allowAboveRoot) {\n if (res.length > 0)\n res += '/..';\n else\n res = '..';\n lastSegmentLength = 2;\n }\n } else {\n if (res.length > 0)\n res += '/' + path.slice(lastSlash + 1, i);\n else\n res = path.slice(lastSlash + 1, i);\n lastSegmentLength = i - lastSlash - 1;\n }\n lastSlash = i;\n dots = 0;\n } else if (code === 46 /*.*/ && dots !== -1) {\n ++dots;\n } else {\n dots = -1;\n }\n }\n return res;\n}\n\nfunction _format(sep, pathObject) {\n var dir = pathObject.dir || pathObject.root;\n var base = pathObject.base || (pathObject.name || '') + (pathObject.ext || '');\n if (!dir) {\n return base;\n }\n if (dir === pathObject.root) {\n return dir + base;\n }\n return dir + sep + base;\n}\n\nvar posix = {\n // path.resolve([from ...], to)\n resolve: function resolve() {\n var resolvedPath = '';\n var resolvedAbsolute = false;\n var cwd;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path;\n if (i >= 0)\n path = arguments[i];\n else {\n if (cwd === undefined)\n cwd = process.cwd();\n path = cwd;\n }\n\n assertPath(path);\n\n // Skip empty entries\n if (path.length === 0) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charCodeAt(0) === 47 /*/*/;\n }\n\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n\n // Normalize the path\n resolvedPath = normalizeStringPosix(resolvedPath, !resolvedAbsolute);\n\n if (resolvedAbsolute) {\n if (resolvedPath.length > 0)\n return '/' + resolvedPath;\n else\n return '/';\n } else if (resolvedPath.length > 0) {\n return resolvedPath;\n } else {\n return '.';\n }\n },\n\n normalize: function normalize(path) {\n assertPath(path);\n\n if (path.length === 0) return '.';\n\n var isAbsolute = path.charCodeAt(0) === 47 /*/*/;\n var trailingSeparator = path.charCodeAt(path.length - 1) === 47 /*/*/;\n\n // Normalize the path\n path = normalizeStringPosix(path, !isAbsolute);\n\n if (path.length === 0 && !isAbsolute) path = '.';\n if (path.length > 0 && trailingSeparator) path += '/';\n\n if (isAbsolute) return '/' + path;\n return path;\n },\n\n isAbsolute: function isAbsolute(path) {\n assertPath(path);\n return path.length > 0 && path.charCodeAt(0) === 47 /*/*/;\n },\n\n join: function join() {\n if (arguments.length === 0)\n return '.';\n var joined;\n for (var i = 0; i < arguments.length; ++i) {\n var arg = arguments[i];\n assertPath(arg);\n if (arg.length > 0) {\n if (joined === undefined)\n joined = arg;\n else\n joined += '/' + arg;\n }\n }\n if (joined === undefined)\n return '.';\n return posix.normalize(joined);\n },\n\n relative: function relative(from, to) {\n assertPath(from);\n assertPath(to);\n\n if (from === to) return '';\n\n from = posix.resolve(from);\n to = posix.resolve(to);\n\n if (from === to) return '';\n\n // Trim any leading backslashes\n var fromStart = 1;\n for (; fromStart < from.length; ++fromStart) {\n if (from.charCodeAt(fromStart) !== 47 /*/*/)\n break;\n }\n var fromEnd = from.length;\n var fromLen = fromEnd - fromStart;\n\n // Trim any leading backslashes\n var toStart = 1;\n for (; toStart < to.length; ++toStart) {\n if (to.charCodeAt(toStart) !== 47 /*/*/)\n break;\n }\n var toEnd = to.length;\n var toLen = toEnd - toStart;\n\n // Compare paths to find the longest common path from root\n var length = fromLen < toLen ? fromLen : toLen;\n var lastCommonSep = -1;\n var i = 0;\n for (; i <= length; ++i) {\n if (i === length) {\n if (toLen > length) {\n if (to.charCodeAt(toStart + i) === 47 /*/*/) {\n // We get here if `from` is the exact base path for `to`.\n // For example: from='/foo/bar'; to='/foo/bar/baz'\n return to.slice(toStart + i + 1);\n } else if (i === 0) {\n // We get here if `from` is the root\n // For example: from='/'; to='/foo'\n return to.slice(toStart + i);\n }\n } else if (fromLen > length) {\n if (from.charCodeAt(fromStart + i) === 47 /*/*/) {\n // We get here if `to` is the exact base path for `from`.\n // For example: from='/foo/bar/baz'; to='/foo/bar'\n lastCommonSep = i;\n } else if (i === 0) {\n // We get here if `to` is the root.\n // For example: from='/foo'; to='/'\n lastCommonSep = 0;\n }\n }\n break;\n }\n var fromCode = from.charCodeAt(fromStart + i);\n var toCode = to.charCodeAt(toStart + i);\n if (fromCode !== toCode)\n break;\n else if (fromCode === 47 /*/*/)\n lastCommonSep = i;\n }\n\n var out = '';\n // Generate the relative path based on the path difference between `to`\n // and `from`\n for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) {\n if (i === fromEnd || from.charCodeAt(i) === 47 /*/*/) {\n if (out.length === 0)\n out += '..';\n else\n out += '/..';\n }\n }\n\n // Lastly, append the rest of the destination (`to`) path that comes after\n // the common path parts\n if (out.length > 0)\n return out + to.slice(toStart + lastCommonSep);\n else {\n toStart += lastCommonSep;\n if (to.charCodeAt(toStart) === 47 /*/*/)\n ++toStart;\n return to.slice(toStart);\n }\n },\n\n _makeLong: function _makeLong(path) {\n return path;\n },\n\n dirname: function dirname(path) {\n assertPath(path);\n if (path.length === 0) return '.';\n var code = path.charCodeAt(0);\n var hasRoot = code === 47 /*/*/;\n var end = -1;\n var matchedSlash = true;\n for (var i = path.length - 1; i >= 1; --i) {\n code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n if (!matchedSlash) {\n end = i;\n break;\n }\n } else {\n // We saw the first non-path separator\n matchedSlash = false;\n }\n }\n\n if (end === -1) return hasRoot ? '/' : '.';\n if (hasRoot && end === 1) return '//';\n return path.slice(0, end);\n },\n\n basename: function basename(path, ext) {\n if (ext !== undefined && typeof ext !== 'string') throw new TypeError('\"ext\" argument must be a string');\n assertPath(path);\n\n var start = 0;\n var end = -1;\n var matchedSlash = true;\n var i;\n\n if (ext !== undefined && ext.length > 0 && ext.length <= path.length) {\n if (ext.length === path.length && ext === path) return '';\n var extIdx = ext.length - 1;\n var firstNonSlashEnd = -1;\n for (i = path.length - 1; i >= 0; --i) {\n var code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else {\n if (firstNonSlashEnd === -1) {\n // We saw the first non-path separator, remember this index in case\n // we need it if the extension ends up not matching\n matchedSlash = false;\n firstNonSlashEnd = i + 1;\n }\n if (extIdx >= 0) {\n // Try to match the explicit extension\n if (code === ext.charCodeAt(extIdx)) {\n if (--extIdx === -1) {\n // We matched the extension, so mark this as the end of our path\n // component\n end = i;\n }\n } else {\n // Extension does not match, so our result is the entire path\n // component\n extIdx = -1;\n end = firstNonSlashEnd;\n }\n }\n }\n }\n\n if (start === end) end = firstNonSlashEnd;else if (end === -1) end = path.length;\n return path.slice(start, end);\n } else {\n for (i = path.length - 1; i >= 0; --i) {\n if (path.charCodeAt(i) === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // path component\n matchedSlash = false;\n end = i + 1;\n }\n }\n\n if (end === -1) return '';\n return path.slice(start, end);\n }\n },\n\n extname: function extname(path) {\n assertPath(path);\n var startDot = -1;\n var startPart = 0;\n var end = -1;\n var matchedSlash = true;\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n var preDotState = 0;\n for (var i = path.length - 1; i >= 0; --i) {\n var code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (code === 46 /*.*/) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1)\n startDot = i;\n else if (preDotState !== 1)\n preDotState = 1;\n } else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n\n if (startDot === -1 || end === -1 ||\n // We saw a non-dot character immediately before the dot\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly '..'\n preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n return '';\n }\n return path.slice(startDot, end);\n },\n\n format: function format(pathObject) {\n if (pathObject === null || typeof pathObject !== 'object') {\n throw new TypeError('The \"pathObject\" argument must be of type Object. Received type ' + typeof pathObject);\n }\n return _format('/', pathObject);\n },\n\n parse: function parse(path) {\n assertPath(path);\n\n var ret = { root: '', dir: '', base: '', ext: '', name: '' };\n if (path.length === 0) return ret;\n var code = path.charCodeAt(0);\n var isAbsolute = code === 47 /*/*/;\n var start;\n if (isAbsolute) {\n ret.root = '/';\n start = 1;\n } else {\n start = 0;\n }\n var startDot = -1;\n var startPart = 0;\n var end = -1;\n var matchedSlash = true;\n var i = path.length - 1;\n\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n var preDotState = 0;\n\n // Get non-dir info\n for (; i >= start; --i) {\n code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (code === 46 /*.*/) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1) startDot = i;else if (preDotState !== 1) preDotState = 1;\n } else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n\n if (startDot === -1 || end === -1 ||\n // We saw a non-dot character immediately before the dot\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly '..'\n preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n if (end !== -1) {\n if (startPart === 0 && isAbsolute) ret.base = ret.name = path.slice(1, end);else ret.base = ret.name = path.slice(startPart, end);\n }\n } else {\n if (startPart === 0 && isAbsolute) {\n ret.name = path.slice(1, startDot);\n ret.base = path.slice(1, end);\n } else {\n ret.name = path.slice(startPart, startDot);\n ret.base = path.slice(startPart, end);\n }\n ret.ext = path.slice(startDot, end);\n }\n\n if (startPart > 0) ret.dir = path.slice(0, startPart - 1);else if (isAbsolute) ret.dir = '/';\n\n return ret;\n },\n\n sep: '/',\n delimiter: ':',\n win32: null,\n posix: null\n};\n\nposix.posix = posix;\n\nmodule.exports = posix;\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';\nvar util = require('util');\nvar isString = function (x) {\n return typeof x === 'string';\n};\n\n\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n var res = [];\n for (var i = 0; i < parts.length; i++) {\n var p = parts[i];\n\n // ignore empty parts\n if (!p || p === '.')\n continue;\n\n if (p === '..') {\n if (res.length && res[res.length - 1] !== '..') {\n res.pop();\n } else if (allowAboveRoot) {\n res.push('..');\n }\n } else {\n res.push(p);\n }\n }\n\n return res;\n}\n\n// Split a filename into [root, dir, basename, ext], unix version\n// 'root' is just a slash, or nothing.\nvar splitPathRe =\n /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\nvar posix = {};\n\n\nfunction posixSplitPath(filename) {\n return splitPathRe.exec(filename).slice(1);\n}\n\n\n// path.resolve([from ...], to)\n// posix version\nposix.resolve = function() {\n var resolvedPath = '',\n resolvedAbsolute = false;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path = (i >= 0) ? arguments[i] : process.cwd();\n\n // Skip empty and invalid entries\n if (!isString(path)) {\n throw new TypeError('Arguments to path.resolve must be strings');\n } else if (!path) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charAt(0) === '/';\n }\n\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n\n // Normalize the path\n resolvedPath = normalizeArray(resolvedPath.split('/'),\n !resolvedAbsolute).join('/');\n\n return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\n};\n\n// path.normalize(path)\n// posix version\nposix.normalize = function(path) {\n var isAbsolute = posix.isAbsolute(path),\n trailingSlash = path.substr(-1) === '/';\n\n // Normalize the path\n path = normalizeArray(path.split('/'), !isAbsolute).join('/');\n\n if (!path && !isAbsolute) {\n path = '.';\n }\n if (path && trailingSlash) {\n path += '/';\n }\n\n return (isAbsolute ? '/' : '') + path;\n};\n\n// posix version\nposix.isAbsolute = function(path) {\n return path.charAt(0) === '/';\n};\n\n// posix version\nposix.join = function() {\n var path = '';\n for (var i = 0; i < arguments.length; i++) {\n var segment = arguments[i];\n if (!isString(segment)) {\n throw new TypeError('Arguments to path.join must be strings');\n }\n if (segment) {\n if (!path) {\n path += segment;\n } else {\n path += '/' + segment;\n }\n }\n }\n return posix.normalize(path);\n};\n\n\n// path.relative(from, to)\n// posix version\nposix.relative = function(from, to) {\n from = posix.resolve(from).substr(1);\n to = posix.resolve(to).substr(1);\n\n function trim(arr) {\n var start = 0;\n for (; start < arr.length; start++) {\n if (arr[start] !== '') break;\n }\n\n var end = arr.length - 1;\n for (; end >= 0; end--) {\n if (arr[end] !== '') break;\n }\n\n if (start > end) return [];\n return arr.slice(start, end + 1);\n }\n\n var fromParts = trim(from.split('/'));\n var toParts = trim(to.split('/'));\n\n var length = Math.min(fromParts.length, toParts.length);\n var samePartsLength = length;\n for (var i = 0; i < length; i++) {\n if (fromParts[i] !== toParts[i]) {\n samePartsLength = i;\n break;\n }\n }\n\n var outputParts = [];\n for (var i = samePartsLength; i < fromParts.length; i++) {\n outputParts.push('..');\n }\n\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n return outputParts.join('/');\n};\n\n\nposix._makeLong = function(path) {\n return path;\n};\n\n\nposix.dirname = function(path) {\n var result = posixSplitPath(path),\n root = result[0],\n dir = result[1];\n\n if (!root && !dir) {\n // No dirname whatsoever\n return '.';\n }\n\n if (dir) {\n // It has a dirname, strip trailing slash\n dir = dir.substr(0, dir.length - 1);\n }\n\n return root + dir;\n};\n\n\nposix.basename = function(path, ext) {\n var f = posixSplitPath(path)[2];\n // TODO: make this comparison case-insensitive on windows?\n if (ext && f.substr(-1 * ext.length) === ext) {\n f = f.substr(0, f.length - ext.length);\n }\n return f;\n};\n\n\nposix.extname = function(path) {\n return posixSplitPath(path)[3];\n};\n\n\nposix.format = function(pathObject) {\n if (!util.isObject(pathObject)) {\n throw new TypeError(\n \"Parameter 'pathObject' must be an object, not \" + typeof pathObject\n );\n }\n\n var root = pathObject.root || '';\n\n if (!isString(root)) {\n throw new TypeError(\n \"'pathObject.root' must be a string or undefined, not \" +\n typeof pathObject.root\n );\n }\n\n var dir = pathObject.dir ? pathObject.dir + posix.sep : '';\n var base = pathObject.base || '';\n return dir + base;\n};\n\n\nposix.parse = function(pathString) {\n if (!isString(pathString)) {\n throw new TypeError(\n \"Parameter 'pathString' must be a string, not \" + typeof pathString\n );\n }\n var allParts = posixSplitPath(pathString);\n if (!allParts || allParts.length !== 4) {\n throw new TypeError(\"Invalid path '\" + pathString + \"'\");\n }\n allParts[1] = allParts[1] || '';\n allParts[2] = allParts[2] || '';\n allParts[3] = allParts[3] || '';\n\n return {\n root: allParts[0],\n dir: allParts[0] + allParts[1].slice(0, allParts[1].length - 1),\n base: allParts[2],\n ext: allParts[3],\n name: allParts[2].slice(0, allParts[2].length - allParts[3].length)\n };\n};\n\n\nposix.sep = '/';\nposix.delimiter = ':';\n\n module.exports = posix;\n","exports.pbkdf2 = require('./lib/async')\nexports.pbkdf2Sync = require('./lib/sync')\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}\nvar nextTick\nfunction getNextTick () {\n if (nextTick) {\n return nextTick\n }\n if (global.process && global.process.nextTick) {\n nextTick = global.process.nextTick\n } else if (global.queueMicrotask) {\n nextTick = global.queueMicrotask\n } else if (global.setImmediate) {\n nextTick = global.setImmediate\n } else {\n nextTick = global.setTimeout\n }\n return nextTick\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 getNextTick()(function () {\n callback(null, out)\n })\n }, function (e) {\n getNextTick()(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 getNextTick()(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 return\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","var defaultEncoding\n/* istanbul ignore next */\nif (global.process && global.process.browser) {\n defaultEncoding = 'utf-8'\n} else if (global.process && global.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","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","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 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","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","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","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n 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 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","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","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","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\nvar has = Object.prototype.hasOwnProperty\n , undef;\n\n/**\n * Decode a URI encoded string.\n *\n * @param {String} input The URI encoded string.\n * @returns {String|Null} The decoded string.\n * @api private\n */\nfunction decode(input) {\n try {\n return decodeURIComponent(input.replace(/\\+/g, ' '));\n } catch (e) {\n return null;\n }\n}\n\n/**\n * Attempts to encode a given input.\n *\n * @param {String} input The string that needs to be encoded.\n * @returns {String|Null} The encoded string.\n * @api private\n */\nfunction encode(input) {\n try {\n return encodeURIComponent(input);\n } catch (e) {\n return null;\n }\n}\n\n/**\n * Simple query string parser.\n *\n * @param {String} query The query string that needs to be parsed.\n * @returns {Object}\n * @api public\n */\nfunction querystring(query) {\n var parser = /([^=?#&]+)=?([^&]*)/g\n , result = {}\n , part;\n\n while (part = parser.exec(query)) {\n var key = decode(part[1])\n , value = decode(part[2]);\n\n //\n // Prevent overriding of existing properties. This ensures that build-in\n // methods like `toString` or __proto__ are not overriden by malicious\n // querystrings.\n //\n // In the case if failed decoding, we want to omit the key/value pairs\n // from the result.\n //\n if (key === null || value === null || key in result) continue;\n result[key] = value;\n }\n\n return result;\n}\n\n/**\n * Transform a query string to an object.\n *\n * @param {Object} obj Object that should be transformed.\n * @param {String} prefix Optional prefix.\n * @returns {String}\n * @api public\n */\nfunction querystringify(obj, prefix) {\n prefix = prefix || '';\n\n var pairs = []\n , value\n , key;\n\n //\n // Optionally prefix with a '?' if needed\n //\n if ('string' !== typeof prefix) prefix = '?';\n\n for (key in obj) {\n if (has.call(obj, key)) {\n value = obj[key];\n\n //\n // Edge cases where we actually want to encode the value to an empty\n // string instead of the stringified value.\n //\n if (!value && (value === null || value === undef || isNaN(value))) {\n value = '';\n }\n\n key = encode(key);\n value = encode(value);\n\n //\n // If we failed to encode the strings, we should bail out as we don't\n // want to add invalid strings to the query.\n //\n if (key === null || value === null) continue;\n pairs.push(key +'='+ value);\n }\n }\n\n return pairs.length ? prefix + pairs.join('&') : '';\n}\n\n//\n// Expose the module.\n//\nexports.stringify = querystringify;\nexports.parse = querystring;\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\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\n/**\n * Check if we're required to add a port number.\n *\n * @see https://url.spec.whatwg.org/#default-port\n * @param {Number|String} port Port number we need to check\n * @param {String} protocol Protocol we need to check against.\n * @returns {Boolean} Is it a default port for the given protocol\n * @api private\n */\nmodule.exports = function required(port, protocol) {\n protocol = protocol.split(':')[0];\n port = +port;\n\n if (!port) return false;\n\n switch (protocol) {\n case 'http':\n case 'ws':\n return port !== 80;\n\n case 'https':\n case 'wss':\n return port !== 443;\n\n case 'ftp':\n return port !== 21;\n\n case 'gopher':\n return port !== 70;\n\n case 'file':\n return false;\n }\n\n return port !== 0;\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","/* 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","/* 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","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 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","/*\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","/*\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","/**\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","/**\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","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","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","// 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/lib/_stream_readable.js');\nStream.Writable = require('readable-stream/lib/_stream_writable.js');\nStream.Duplex = require('readable-stream/lib/_stream_duplex.js');\nStream.Transform = require('readable-stream/lib/_stream_transform.js');\nStream.PassThrough = require('readable-stream/lib/_stream_passthrough.js');\nStream.finished = require('readable-stream/lib/internal/streams/end-of-stream.js')\nStream.pipeline = require('readable-stream/lib/internal/streams/pipeline.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","'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","// 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/*<replacement>*/\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/*</replacement>*/\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});","// 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};","// 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/*<replacement>*/\n\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n/*<replacement>*/\n\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\n\n\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\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/*<replacement>*/\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/*</replacement>*/\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}","// 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}","// 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/* <replacement> */\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/* </replacement> */\n\n/*<replacement>*/\n\n\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n/*<replacement>*/\n\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\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';\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\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}();","'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};","// 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;","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;","'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};","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\n'use strict';\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\n/*</replacement>*/\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}","(function (name, context, definition) {\n if (typeof module !== 'undefined' && module.exports) module.exports = definition();\n else if (typeof define === 'function' && define.amd) define(definition);\n else context[name] = definition();\n})('urljoin', this, function () {\n\n function normalize (strArray) {\n var resultArray = [];\n if (strArray.length === 0) { return ''; }\n\n if (typeof strArray[0] !== 'string') {\n throw new TypeError('Url must be a string. Received ' + strArray[0]);\n }\n\n // If the first part is a plain protocol, we combine it with the next part.\n if (strArray[0].match(/^[^/:]+:\\/*$/) && strArray.length > 1) {\n var first = strArray.shift();\n strArray[0] = first + strArray[0];\n }\n\n // There must be two or three slashes in the file protocol, two slashes in anything else.\n if (strArray[0].match(/^file:\\/\\/\\//)) {\n strArray[0] = strArray[0].replace(/^([^/:]+):\\/*/, '$1:///');\n } else {\n strArray[0] = strArray[0].replace(/^([^/:]+):\\/*/, '$1://');\n }\n\n for (var i = 0; i < strArray.length; i++) {\n var component = strArray[i];\n\n if (typeof component !== 'string') {\n throw new TypeError('Url must be a string. Received ' + component);\n }\n\n if (component === '') { continue; }\n\n if (i > 0) {\n // Removing the starting slashes for each component but the first.\n component = component.replace(/^[\\/]+/, '');\n }\n if (i < strArray.length - 1) {\n // Removing the ending slashes for each component but the last.\n component = component.replace(/[\\/]+$/, '');\n } else {\n // For the last component we will combine multiple slashes to a single one.\n component = component.replace(/[\\/]+$/, '/');\n }\n\n resultArray.push(component);\n\n }\n\n var str = resultArray.join('/');\n // Each input component is now separated by a single slash except the possible first plain protocol part.\n\n // remove trailing slash before parameters or hash\n str = str.replace(/\\/(\\?|&|#[^!])/g, '$1');\n\n // replace ? in parameters with &\n var parts = str.split('?');\n str = parts.shift() + (parts.length > 0 ? '?': '') + parts.join('&');\n\n return str;\n }\n\n return function () {\n var input;\n\n if (typeof arguments[0] === 'object') {\n input = arguments[0];\n } else {\n input = [].slice.call(arguments);\n }\n\n return normalize(input);\n };\n\n});\n","'use strict';\n\nvar required = require('requires-port')\n , qs = require('querystringify')\n , slashes = /^[A-Za-z][A-Za-z0-9+-.]*:\\/\\//\n , protocolre = /^([a-z][a-z0-9.+-]*:)?(\\/\\/)?([\\\\/]+)?([\\S\\s]*)/i\n , windowsDriveLetter = /^[a-zA-Z]:/\n , whitespace = '[\\\\x09\\\\x0A\\\\x0B\\\\x0C\\\\x0D\\\\x20\\\\xA0\\\\u1680\\\\u180E\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200A\\\\u202F\\\\u205F\\\\u3000\\\\u2028\\\\u2029\\\\uFEFF]'\n , left = new RegExp('^'+ whitespace +'+');\n\n/**\n * Trim a given string.\n *\n * @param {String} str String to trim.\n * @public\n */\nfunction trimLeft(str) {\n return (str ? str : '').toString().replace(left, '');\n}\n\n/**\n * These are the parse rules for the URL parser, it informs the parser\n * about:\n *\n * 0. The char it Needs to parse, if it's a string it should be done using\n * indexOf, RegExp using exec and NaN means set as current value.\n * 1. The property we should set when parsing this value.\n * 2. Indication if it's backwards or forward parsing, when set as number it's\n * the value of extra chars that should be split off.\n * 3. Inherit from location if non existing in the parser.\n * 4. `toLowerCase` the resulting value.\n */\nvar rules = [\n ['#', 'hash'], // Extract from the back.\n ['?', 'query'], // Extract from the back.\n function sanitize(address, url) { // Sanitize what is left of the address\n return isSpecial(url.protocol) ? address.replace(/\\\\/g, '/') : address;\n },\n ['/', 'pathname'], // Extract from the back.\n ['@', 'auth', 1], // Extract from the front.\n [NaN, 'host', undefined, 1, 1], // Set left over value.\n [/:(\\d+)$/, 'port', undefined, 1], // RegExp the back.\n [NaN, 'hostname', undefined, 1, 1] // Set left over.\n];\n\n/**\n * These properties should not be copied or inherited from. This is only needed\n * for all non blob URL's as a blob URL does not include a hash, only the\n * origin.\n *\n * @type {Object}\n * @private\n */\nvar ignore = { hash: 1, query: 1 };\n\n/**\n * The location object differs when your code is loaded through a normal page,\n * Worker or through a worker using a blob. And with the blobble begins the\n * trouble as the location object will contain the URL of the blob, not the\n * location of the page where our code is loaded in. The actual origin is\n * encoded in the `pathname` so we can thankfully generate a good \"default\"\n * location from it so we can generate proper relative URL's again.\n *\n * @param {Object|String} loc Optional default location object.\n * @returns {Object} lolcation object.\n * @public\n */\nfunction lolcation(loc) {\n var globalVar;\n\n if (typeof window !== 'undefined') globalVar = window;\n else if (typeof global !== 'undefined') globalVar = global;\n else if (typeof self !== 'undefined') globalVar = self;\n else globalVar = {};\n\n var location = globalVar.location || {};\n loc = loc || location;\n\n var finaldestination = {}\n , type = typeof loc\n , key;\n\n if ('blob:' === loc.protocol) {\n finaldestination = new Url(unescape(loc.pathname), {});\n } else if ('string' === type) {\n finaldestination = new Url(loc, {});\n for (key in ignore) delete finaldestination[key];\n } else if ('object' === type) {\n for (key in loc) {\n if (key in ignore) continue;\n finaldestination[key] = loc[key];\n }\n\n if (finaldestination.slashes === undefined) {\n finaldestination.slashes = slashes.test(loc.href);\n }\n }\n\n return finaldestination;\n}\n\n/**\n * Check whether a protocol scheme is special.\n *\n * @param {String} The protocol scheme of the URL\n * @return {Boolean} `true` if the protocol scheme is special, else `false`\n * @private\n */\nfunction isSpecial(scheme) {\n return (\n scheme === 'file:' ||\n scheme === 'ftp:' ||\n scheme === 'http:' ||\n scheme === 'https:' ||\n scheme === 'ws:' ||\n scheme === 'wss:'\n );\n}\n\n/**\n * @typedef ProtocolExtract\n * @type Object\n * @property {String} protocol Protocol matched in the URL, in lowercase.\n * @property {Boolean} slashes `true` if protocol is followed by \"//\", else `false`.\n * @property {String} rest Rest of the URL that is not part of the protocol.\n */\n\n/**\n * Extract protocol information from a URL with/without double slash (\"//\").\n *\n * @param {String} address URL we want to extract from.\n * @param {Object} location\n * @return {ProtocolExtract} Extracted information.\n * @private\n */\nfunction extractProtocol(address, location) {\n address = trimLeft(address);\n location = location || {};\n\n var match = protocolre.exec(address);\n var protocol = match[1] ? match[1].toLowerCase() : '';\n var forwardSlashes = !!match[2];\n var otherSlashes = !!match[3];\n var slashesCount = 0;\n var rest;\n\n if (forwardSlashes) {\n if (otherSlashes) {\n rest = match[2] + match[3] + match[4];\n slashesCount = match[2].length + match[3].length;\n } else {\n rest = match[2] + match[4];\n slashesCount = match[2].length;\n }\n } else {\n if (otherSlashes) {\n rest = match[3] + match[4];\n slashesCount = match[3].length;\n } else {\n rest = match[4]\n }\n }\n\n if (protocol === 'file:') {\n if (slashesCount >= 2) {\n rest = rest.slice(2);\n }\n } else if (isSpecial(protocol)) {\n rest = match[4];\n } else if (protocol) {\n if (forwardSlashes) {\n rest = rest.slice(2);\n }\n } else if (slashesCount >= 2 && isSpecial(location.protocol)) {\n rest = match[4];\n }\n\n return {\n protocol: protocol,\n slashes: forwardSlashes || isSpecial(protocol),\n slashesCount: slashesCount,\n rest: rest\n };\n}\n\n/**\n * Resolve a relative URL pathname against a base URL pathname.\n *\n * @param {String} relative Pathname of the relative URL.\n * @param {String} base Pathname of the base URL.\n * @return {String} Resolved pathname.\n * @private\n */\nfunction resolve(relative, base) {\n if (relative === '') return base;\n\n var path = (base || '/').split('/').slice(0, -1).concat(relative.split('/'))\n , i = path.length\n , last = path[i - 1]\n , unshift = false\n , up = 0;\n\n while (i--) {\n if (path[i] === '.') {\n path.splice(i, 1);\n } else if (path[i] === '..') {\n path.splice(i, 1);\n up++;\n } else if (up) {\n if (i === 0) unshift = true;\n path.splice(i, 1);\n up--;\n }\n }\n\n if (unshift) path.unshift('');\n if (last === '.' || last === '..') path.push('');\n\n return path.join('/');\n}\n\n/**\n * The actual URL instance. Instead of returning an object we've opted-in to\n * create an actual constructor as it's much more memory efficient and\n * faster and it pleases my OCD.\n *\n * It is worth noting that we should not use `URL` as class name to prevent\n * clashes with the global URL instance that got introduced in browsers.\n *\n * @constructor\n * @param {String} address URL we want to parse.\n * @param {Object|String} [location] Location defaults for relative paths.\n * @param {Boolean|Function} [parser] Parser for the query string.\n * @private\n */\nfunction Url(address, location, parser) {\n address = trimLeft(address);\n\n if (!(this instanceof Url)) {\n return new Url(address, location, parser);\n }\n\n var relative, extracted, parse, instruction, index, key\n , instructions = rules.slice()\n , type = typeof location\n , url = this\n , i = 0;\n\n //\n // The following if statements allows this module two have compatibility with\n // 2 different API:\n //\n // 1. Node.js's `url.parse` api which accepts a URL, boolean as arguments\n // where the boolean indicates that the query string should also be parsed.\n //\n // 2. The `URL` interface of the browser which accepts a URL, object as\n // arguments. The supplied object will be used as default values / fall-back\n // for relative paths.\n //\n if ('object' !== type && 'string' !== type) {\n parser = location;\n location = null;\n }\n\n if (parser && 'function' !== typeof parser) parser = qs.parse;\n\n location = lolcation(location);\n\n //\n // Extract protocol information before running the instructions.\n //\n extracted = extractProtocol(address || '', location);\n relative = !extracted.protocol && !extracted.slashes;\n url.slashes = extracted.slashes || relative && location.slashes;\n url.protocol = extracted.protocol || location.protocol || '';\n address = extracted.rest;\n\n //\n // When the authority component is absent the URL starts with a path\n // component.\n //\n if (\n extracted.protocol === 'file:' && (\n extracted.slashesCount !== 2 || windowsDriveLetter.test(address)) ||\n (!extracted.slashes &&\n (extracted.protocol ||\n extracted.slashesCount < 2 ||\n !isSpecial(url.protocol)))\n ) {\n instructions[3] = [/(.*)/, 'pathname'];\n }\n\n for (; i < instructions.length; i++) {\n instruction = instructions[i];\n\n if (typeof instruction === 'function') {\n address = instruction(address, url);\n continue;\n }\n\n parse = instruction[0];\n key = instruction[1];\n\n if (parse !== parse) {\n url[key] = address;\n } else if ('string' === typeof parse) {\n if (~(index = address.indexOf(parse))) {\n if ('number' === typeof instruction[2]) {\n url[key] = address.slice(0, index);\n address = address.slice(index + instruction[2]);\n } else {\n url[key] = address.slice(index);\n address = address.slice(0, index);\n }\n }\n } else if ((index = parse.exec(address))) {\n url[key] = index[1];\n address = address.slice(0, index.index);\n }\n\n url[key] = url[key] || (\n relative && instruction[3] ? location[key] || '' : ''\n );\n\n //\n // Hostname, host and protocol should be lowercased so they can be used to\n // create a proper `origin`.\n //\n if (instruction[4]) url[key] = url[key].toLowerCase();\n }\n\n //\n // Also parse the supplied query string in to an object. If we're supplied\n // with a custom parser as function use that instead of the default build-in\n // parser.\n //\n if (parser) url.query = parser(url.query);\n\n //\n // If the URL is relative, resolve the pathname against the base URL.\n //\n if (\n relative\n && location.slashes\n && url.pathname.charAt(0) !== '/'\n && (url.pathname !== '' || location.pathname !== '')\n ) {\n url.pathname = resolve(url.pathname, location.pathname);\n }\n\n //\n // Default to a / for pathname if none exists. This normalizes the URL\n // to always have a /\n //\n if (url.pathname.charAt(0) !== '/' && isSpecial(url.protocol)) {\n url.pathname = '/' + url.pathname;\n }\n\n //\n // We should not add port numbers if they are already the default port number\n // for a given protocol. As the host also contains the port number we're going\n // override it with the hostname which contains no port number.\n //\n if (!required(url.port, url.protocol)) {\n url.host = url.hostname;\n url.port = '';\n }\n\n //\n // Parse down the `auth` for the username and password.\n //\n url.username = url.password = '';\n if (url.auth) {\n instruction = url.auth.split(':');\n url.username = instruction[0];\n url.password = instruction[1] || '';\n }\n\n url.origin = url.protocol !== 'file:' && isSpecial(url.protocol) && url.host\n ? url.protocol +'//'+ url.host\n : 'null';\n\n //\n // The href is just the compiled result.\n //\n url.href = url.toString();\n}\n\n/**\n * This is convenience method for changing properties in the URL instance to\n * insure that they all propagate correctly.\n *\n * @param {String} part Property we need to adjust.\n * @param {Mixed} value The newly assigned value.\n * @param {Boolean|Function} fn When setting the query, it will be the function\n * used to parse the query.\n * When setting the protocol, double slash will be\n * removed from the final url if it is true.\n * @returns {URL} URL instance for chaining.\n * @public\n */\nfunction set(part, value, fn) {\n var url = this;\n\n switch (part) {\n case 'query':\n if ('string' === typeof value && value.length) {\n value = (fn || qs.parse)(value);\n }\n\n url[part] = value;\n break;\n\n case 'port':\n url[part] = value;\n\n if (!required(value, url.protocol)) {\n url.host = url.hostname;\n url[part] = '';\n } else if (value) {\n url.host = url.hostname +':'+ value;\n }\n\n break;\n\n case 'hostname':\n url[part] = value;\n\n if (url.port) value += ':'+ url.port;\n url.host = value;\n break;\n\n case 'host':\n url[part] = value;\n\n if (/:\\d+$/.test(value)) {\n value = value.split(':');\n url.port = value.pop();\n url.hostname = value.join(':');\n } else {\n url.hostname = value;\n url.port = '';\n }\n\n break;\n\n case 'protocol':\n url.protocol = value.toLowerCase();\n url.slashes = !fn;\n break;\n\n case 'pathname':\n case 'hash':\n if (value) {\n var char = part === 'pathname' ? '/' : '#';\n url[part] = value.charAt(0) !== char ? char + value : value;\n } else {\n url[part] = value;\n }\n break;\n\n case 'username':\n case 'password':\n url[part] = encodeURIComponent(value);\n break;\n\n case 'auth':\n var splits = value.split(':');\n url.username = splits[0];\n url.password = splits.length === 2 ? splits[1] : '';\n }\n\n for (var i = 0; i < rules.length; i++) {\n var ins = rules[i];\n\n if (ins[4]) url[ins[1]] = url[ins[1]].toLowerCase();\n }\n\n url.auth = url.password ? url.username +':'+ url.password : url.username;\n\n url.origin = url.protocol !== 'file:' && isSpecial(url.protocol) && url.host\n ? url.protocol +'//'+ url.host\n : 'null';\n\n url.href = url.toString();\n\n return url;\n}\n\n/**\n * Transform the properties back in to a valid and full URL string.\n *\n * @param {Function} stringify Optional query stringify function.\n * @returns {String} Compiled version of the URL.\n * @public\n */\nfunction toString(stringify) {\n if (!stringify || 'function' !== typeof stringify) stringify = qs.stringify;\n\n var query\n , url = this\n , protocol = url.protocol;\n\n if (protocol && protocol.charAt(protocol.length - 1) !== ':') protocol += ':';\n\n var result =\n protocol +\n ((url.protocol && url.slashes) || isSpecial(url.protocol) ? '//' : '');\n\n if (url.username) {\n result += url.username;\n if (url.password) result += ':'+ url.password;\n result += '@';\n } else if (url.password) {\n result += ':'+ url.password;\n result += '@';\n }\n\n result += url.host + url.pathname;\n\n query = 'object' === typeof url.query ? stringify(url.query) : url.query;\n if (query) result += '?' !== query.charAt(0) ? '?'+ query : query;\n\n if (url.hash) result += url.hash;\n\n return result;\n}\n\nUrl.prototype = { set: set, toString: toString };\n\n//\n// Expose the URL parser and some additional properties that might be useful for\n// others or testing.\n//\nUrl.extractProtocol = extractProtocol;\nUrl.location = lolcation;\nUrl.trimLeft = trimLeft;\nUrl.qs = qs;\n\nmodule.exports = Url;\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"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"sources":["webpack:///photos/node_modules/asn1.js/lib/asn1.js","webpack:///photos/node_modules/asn1.js/lib/asn1/api.js","webpack:///photos/node_modules/asn1.js/lib/asn1/base/buffer.js","webpack:///photos/node_modules/asn1.js/lib/asn1/base/index.js","webpack:///photos/node_modules/asn1.js/lib/asn1/base/node.js","webpack:///photos/node_modules/asn1.js/lib/asn1/base/reporter.js","webpack:///photos/node_modules/asn1.js/lib/asn1/constants/der.js","webpack:///photos/node_modules/asn1.js/lib/asn1/constants/index.js","webpack:///photos/node_modules/asn1.js/lib/asn1/decoders/der.js","webpack:///photos/node_modules/asn1.js/lib/asn1/decoders/index.js","webpack:///photos/node_modules/asn1.js/lib/asn1/decoders/pem.js","webpack:///photos/node_modules/asn1.js/lib/asn1/encoders/der.js","webpack:///photos/node_modules/asn1.js/lib/asn1/encoders/index.js","webpack:///photos/node_modules/asn1.js/lib/asn1/encoders/pem.js","webpack:///photos/node_modules/asn1.js/node_modules/bn.js/lib/bn.js","webpack:///photos/node_modules/hot-patcher/source/functions.js","webpack:///photos/node_modules/hot-patcher/source/index.js","webpack:///photos/node_modules/webdav/dist/node/auth.js","webpack:///photos/node_modules/webdav/dist/node/crypto.js","webpack:///photos/node_modules/webdav/dist/node/encode.js","webpack:///photos/node_modules/webdav/dist/node/factory.js","webpack:///photos/node_modules/webdav/dist/node/fetch.js","webpack:///photos/node_modules/webdav/dist/node/index.js","webpack:///photos/node_modules/webdav/dist/node/interface/copyFile.js","webpack:///photos/node_modules/webdav/dist/node/interface/createDirectory.js","webpack:///photos/node_modules/webdav/dist/node/interface/createStream.js","webpack:///photos/node_modules/webdav/dist/node/interface/custom.js","webpack:///photos/node_modules/webdav/dist/node/interface/dav.js","webpack:///photos/node_modules/webdav/dist/node/interface/delete.js","webpack:///photos/node_modules/webdav/dist/node/interface/directoryContents.js","webpack:///photos/node_modules/webdav/dist/node/interface/exists.js","webpack:///photos/node_modules/webdav/dist/node/interface/getFile.js","webpack:///photos/node_modules/webdav/dist/node/interface/moveFile.js","webpack:///photos/node_modules/webdav/dist/node/interface/putFile.js","webpack:///photos/node_modules/webdav/dist/node/interface/quota.js","webpack:///photos/node_modules/webdav/dist/node/interface/stat.js","webpack:///photos/node_modules/webdav/dist/node/merge.js","webpack:///photos/node_modules/webdav/dist/node/patcher.js","webpack:///photos/node_modules/webdav/dist/node/request.js","webpack:///photos/node_modules/webdav/dist/node/response.js","webpack:///photos/node_modules/webdav/dist/node/url.js","webpack:///photos/node_modules/balanced-match/index.js","webpack:///photos/node_modules/base-64/base64.js","webpack:///photos/node_modules/base64-js/index.js","webpack:///photos/node_modules/bn.js/lib/bn.js","webpack:///photos/node_modules/brace-expansion/index.js","webpack:///photos/node_modules/brorand/index.js","webpack:///photos/node_modules/browserify-aes/aes.js","webpack:///photos/node_modules/browserify-aes/authCipher.js","webpack:///photos/node_modules/browserify-aes/browser.js","webpack:///photos/node_modules/browserify-aes/decrypter.js","webpack:///photos/node_modules/browserify-aes/encrypter.js","webpack:///photos/node_modules/browserify-aes/ghash.js","webpack:///photos/node_modules/browserify-aes/incr32.js","webpack:///photos/node_modules/browserify-aes/modes/cbc.js","webpack:///photos/node_modules/browserify-aes/modes/cfb.js","webpack:///photos/node_modules/browserify-aes/modes/cfb1.js","webpack:///photos/node_modules/browserify-aes/modes/cfb8.js","webpack:///photos/node_modules/browserify-aes/modes/ctr.js","webpack:///photos/node_modules/browserify-aes/modes/ecb.js","webpack:///photos/node_modules/browserify-aes/modes/index.js","webpack:///photos/node_modules/browserify-aes/modes/ofb.js","webpack:///photos/node_modules/browserify-aes/streamCipher.js","webpack:///photos/node_modules/browserify-cipher/browser.js","webpack:///photos/node_modules/browserify-des/index.js","webpack:///photos/node_modules/browserify-des/modes.js","webpack:///photos/node_modules/browserify-rsa/index.js","webpack:///photos/node_modules/browserify-sign/algos.js","webpack:///photos/node_modules/browserify-sign/browser/index.js","webpack:///photos/node_modules/browserify-sign/browser/sign.js","webpack:///photos/node_modules/browserify-sign/browser/verify.js","webpack:///photos/node_modules/browserify-sign/node_modules/readable-stream/errors-browser.js","webpack:///photos/node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_duplex.js","webpack:///photos/node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_passthrough.js","webpack:///photos/node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_readable.js","webpack:///photos/node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_transform.js","webpack:///photos/node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_writable.js","webpack:///photos/node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/async_iterator.js","webpack:///photos/node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/buffer_list.js","webpack:///photos/node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/destroy.js","webpack:///photos/node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/end-of-stream.js","webpack:///photos/node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/from-browser.js","webpack:///photos/node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/pipeline.js","webpack:///photos/node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/state.js","webpack:///photos/node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/stream-browser.js","webpack:///photos/node_modules/browserify-sign/node_modules/readable-stream/readable-browser.js","webpack:///photos/node_modules/browserify-sign/node_modules/safe-buffer/index.js","webpack:///photos/node_modules/buffer-xor/index.js","webpack:///photos/node_modules/buffer/index.js","webpack:///photos/node_modules/cipher-base/index.js","webpack:///photos/node_modules/concat-map/index.js","webpack:///photos/node_modules/create-ecdh/browser.js","webpack:///photos/node_modules/create-ecdh/node_modules/bn.js/lib/bn.js","webpack:///photos/node_modules/create-hash/browser.js","webpack:///photos/node_modules/create-hash/md5.js","webpack:///photos/node_modules/create-hmac/browser.js","webpack:///photos/node_modules/create-hmac/legacy.js","webpack:///photos/node_modules/crypto-browserify/index.js","webpack:///photos/node_modules/des.js/lib/des.js","webpack:///photos/node_modules/des.js/lib/des/cbc.js","webpack:///photos/node_modules/des.js/lib/des/cipher.js","webpack:///photos/node_modules/des.js/lib/des/des.js","webpack:///photos/node_modules/des.js/lib/des/ede.js","webpack:///photos/node_modules/des.js/lib/des/utils.js","webpack:///photos/node_modules/diffie-hellman/browser.js","webpack:///photos/node_modules/diffie-hellman/lib/dh.js","webpack:///photos/node_modules/diffie-hellman/lib/generatePrime.js","webpack:///photos/node_modules/diffie-hellman/node_modules/bn.js/lib/bn.js","webpack:///photos/node_modules/elliptic/lib/elliptic.js","webpack:///photos/node_modules/elliptic/lib/elliptic/curve/base.js","webpack:///photos/node_modules/elliptic/lib/elliptic/curve/edwards.js","webpack:///photos/node_modules/elliptic/lib/elliptic/curve/index.js","webpack:///photos/node_modules/elliptic/lib/elliptic/curve/mont.js","webpack:///photos/node_modules/elliptic/lib/elliptic/curve/short.js","webpack:///photos/node_modules/elliptic/lib/elliptic/curves.js","webpack:///photos/node_modules/elliptic/lib/elliptic/ec/index.js","webpack:///photos/node_modules/elliptic/lib/elliptic/ec/key.js","webpack:///photos/node_modules/elliptic/lib/elliptic/ec/signature.js","webpack:///photos/node_modules/elliptic/lib/elliptic/eddsa/index.js","webpack:///photos/node_modules/elliptic/lib/elliptic/eddsa/key.js","webpack:///photos/node_modules/elliptic/lib/elliptic/eddsa/signature.js","webpack:///photos/node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js","webpack:///photos/node_modules/elliptic/lib/elliptic/utils.js","webpack:///photos/node_modules/elliptic/node_modules/bn.js/lib/bn.js","webpack:///photos/node_modules/events/events.js","webpack:///photos/node_modules/evp_bytestokey/index.js","webpack:///photos/node_modules/fast-xml-parser/src/json2xml.js","webpack:///photos/node_modules/fast-xml-parser/src/nimndata.js","webpack:///photos/node_modules/fast-xml-parser/src/node2json.js","webpack:///photos/node_modules/fast-xml-parser/src/node2json_str.js","webpack:///photos/node_modules/fast-xml-parser/src/parser.js","webpack:///photos/node_modules/fast-xml-parser/src/util.js","webpack:///photos/node_modules/fast-xml-parser/src/validator.js","webpack:///photos/node_modules/fast-xml-parser/src/xmlNode.js","webpack:///photos/node_modules/fast-xml-parser/src/xmlstr2xmlnode.js","webpack:///photos/node_modules/hash-base/index.js","webpack:///photos/node_modules/hash-base/node_modules/readable-stream/errors-browser.js","webpack:///photos/node_modules/hash-base/node_modules/readable-stream/lib/_stream_duplex.js","webpack:///photos/node_modules/hash-base/node_modules/readable-stream/lib/_stream_passthrough.js","webpack:///photos/node_modules/hash-base/node_modules/readable-stream/lib/_stream_readable.js","webpack:///photos/node_modules/hash-base/node_modules/readable-stream/lib/_stream_transform.js","webpack:///photos/node_modules/hash-base/node_modules/readable-stream/lib/_stream_writable.js","webpack:///photos/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/async_iterator.js","webpack:///photos/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/buffer_list.js","webpack:///photos/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/destroy.js","webpack:///photos/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/end-of-stream.js","webpack:///photos/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/from-browser.js","webpack:///photos/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/pipeline.js","webpack:///photos/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/state.js","webpack:///photos/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/stream-browser.js","webpack:///photos/node_modules/hash-base/node_modules/readable-stream/readable-browser.js","webpack:///photos/node_modules/hash-base/node_modules/safe-buffer/index.js","webpack:///photos/node_modules/hash.js/lib/hash.js","webpack:///photos/node_modules/hash.js/lib/hash/common.js","webpack:///photos/node_modules/hash.js/lib/hash/hmac.js","webpack:///photos/node_modules/hash.js/lib/hash/ripemd.js","webpack:///photos/node_modules/hash.js/lib/hash/sha.js","webpack:///photos/node_modules/hash.js/lib/hash/sha/1.js","webpack:///photos/node_modules/hash.js/lib/hash/sha/224.js","webpack:///photos/node_modules/hash.js/lib/hash/sha/256.js","webpack:///photos/node_modules/hash.js/lib/hash/sha/384.js","webpack:///photos/node_modules/hash.js/lib/hash/sha/512.js","webpack:///photos/node_modules/hash.js/lib/hash/sha/common.js","webpack:///photos/node_modules/hash.js/lib/hash/utils.js","webpack:///photos/node_modules/he/he.js","webpack:///photos/node_modules/hmac-drbg/lib/hmac-drbg.js","webpack:///photos/node_modules/ieee754/index.js","webpack:///photos/node_modules/md5.js/index.js","webpack:///photos/node_modules/miller-rabin/lib/mr.js","webpack:///photos/node_modules/miller-rabin/node_modules/bn.js/lib/bn.js","webpack:///photos/node_modules/minimalistic-assert/index.js","webpack:///photos/node_modules/minimalistic-crypto-utils/lib/utils.js","webpack:///photos/node_modules/minimatch/minimatch.js","webpack:///photos/node_modules/nested-property/dist/nested-property.js","webpack:///photos/node_modules/parse-asn1/asn1.js","webpack:///photos/node_modules/parse-asn1/certificate.js","webpack:///photos/node_modules/parse-asn1/fixProc.js","webpack:///photos/node_modules/parse-asn1/index.js","webpack:///photos/node_modules/path-browserify/index.js","webpack:///photos/node_modules/path-posix/index.js","webpack:///photos/node_modules/pbkdf2/browser.js","webpack:///photos/node_modules/pbkdf2/lib/async.js","webpack:///photos/node_modules/pbkdf2/lib/default-encoding.js","webpack:///photos/node_modules/pbkdf2/lib/precondition.js","webpack:///photos/node_modules/pbkdf2/lib/sync-browser.js","webpack:///photos/node_modules/pbkdf2/lib/to-buffer.js","webpack:///photos/node_modules/public-encrypt/browser.js","webpack:///photos/node_modules/public-encrypt/mgf.js","webpack:///photos/node_modules/public-encrypt/node_modules/bn.js/lib/bn.js","webpack:///photos/node_modules/public-encrypt/privateDecrypt.js","webpack:///photos/node_modules/public-encrypt/publicEncrypt.js","webpack:///photos/node_modules/public-encrypt/withPublic.js","webpack:///photos/node_modules/public-encrypt/xor.js","webpack:///photos/node_modules/querystringify/index.js","webpack:///photos/node_modules/randombytes/browser.js","webpack:///photos/node_modules/randomfill/browser.js","webpack:///photos/node_modules/requires-port/index.js","webpack:///photos/node_modules/ripemd160/index.js","webpack:///photos/node_modules/safe-buffer/index.js","webpack:///photos/node_modules/safer-buffer/safer.js","webpack:///photos/node_modules/sha.js/hash.js","webpack:///photos/node_modules/sha.js/index.js","webpack:///photos/node_modules/sha.js/sha.js","webpack:///photos/node_modules/sha.js/sha1.js","webpack:///photos/node_modules/sha.js/sha224.js","webpack:///photos/node_modules/sha.js/sha256.js","webpack:///photos/node_modules/sha.js/sha384.js","webpack:///photos/node_modules/sha.js/sha512.js","webpack:///photos/node_modules/stream-browserify/index.js","webpack:///photos/node_modules/stream-browserify/node_modules/readable-stream/errors-browser.js","webpack:///photos/node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_duplex.js","webpack:///photos/node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_passthrough.js","webpack:///photos/node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_readable.js","webpack:///photos/node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_transform.js","webpack:///photos/node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_writable.js","webpack:///photos/node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/async_iterator.js","webpack:///photos/node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/buffer_list.js","webpack:///photos/node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/destroy.js","webpack:///photos/node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/end-of-stream.js","webpack:///photos/node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/from-browser.js","webpack:///photos/node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/pipeline.js","webpack:///photos/node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/state.js","webpack:///photos/node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/stream-browser.js","webpack:///photos/node_modules/string_decoder/lib/string_decoder.js","webpack:///photos/node_modules/url-join/lib/url-join.js","webpack:///photos/node_modules/url-parse/index.js","webpack:///photos/node_modules/util-deprecate/browser.js"],"names":["asn1","exports","bignum","define","base","constants","decoders","encoders","inherits","Entity","name","body","this","prototype","_createNamed","Base","Generated","entity","_initNamed","call","_getDecoder","enc","hasOwnProperty","decode","data","options","_getEncoder","encode","reporter","Reporter","Buffer","DecoderBuffer","isBuffer","offset","length","error","EncoderBuffer","value","Array","isArray","map","item","isEncoderBuffer","byteLength","isDecoderBuffer","constructor","save","restore","isEmpty","readUInt8","skip","raw","res","fail","bytes","_reporterState","slice","join","out","alloc","forEach","write","copy","Node","assert","tags","methods","concat","parent","state","_baseState","children","tag","args","reverseArgs","choice","optional","any","obj","use","useDecoder","key","explicit","implicit","contains","_wrap","module","stateProps","clone","cstate","prop","method","push","apply","arguments","_init","filter","child","equal","_useArgs","arg","Object","keys","Error","def","val","num","newKey","_decode","input","wrapResult","prevObj","result","present","prevKey","enterKey","_peekTag","isError","_decodeGeneric","_decodeChoice","e","enterObject","_decodeTag","start","track","path","_getUse","leaveObject","exitKey","leaveKey","_decodeList","test","_decodeStr","_decodeObjid","_decodeTime","_decodeNull","_decodeBool","_decodeInt","_use","match","some","node","type","_createEncoderBuffer","_encode","_encodeValue","undefined","_skipDefault","content","primitive","_encodeChoice","_encodePrimitive","cls","_encodeComposite","JSON","stringify","_encodeStr","_encodeObjid","_encodeTime","_encodeNull","_encodeInt","_encodeBool","_isNumstr","str","_isPrintstr","errors","ReporterError","msg","rethrow","pathLen","index","prev","now","err","inherited","elem","message","stack","partial","captureStackTrace","reverse","tagClass","0","1","2","3","tagClassByName","tagByName","_reverse","der","DERDecoder","tree","DERNode","derDecodeTag","buf","oct","tagStr","derDecodeLen","len","i","j","buffer","decodedTag","_skipUntilEnd","decoder","possibleEnd","unused","String","fromCharCode","readUInt16BE","numstr","toString","printstr","values","relative","identifiers","ident","subident","first","second","tmp","year","mon","day","hour","min","sec","Date","UTC","pem","PEMDecoder","lines","split","label","toUpperCase","re","end","base64","replace","from","DEREncoder","two","encodedTag","encodeTag","header","lenOctets","writeUInt16BE","charCodeAt","id","splice","size","objid","time","date","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","numArray","toArray","sign","unshift","dataBuffer","defaultBuffer","PEMEncoder","p","ctor","superCtor","super_","TempCtor","BN","number","endian","isBN","negative","words","red","wordSize","window","parseHex4Bits","string","c","parseHexByte","lowerBound","r","parseBase","mul","Math","max","left","right","cmp","_initNumber","_initArray","_parseHex","_parseBase","ceil","w","off","strip","limbLen","limbPow","total","mod","word","imuln","_iaddn","pow","dest","_expand","_normSign","inspect","zeros","groupSizes","groupBases","smallMulTo","self","a","b","lo","carry","k","ncarry","rword","maxJ","padding","groupSize","groupBase","isZero","modn","idivn","toNumber","ret","toJSON","toBuffer","toArrayLike","ArrayType","reqLength","littleEndian","q","andln","iushrn","clz32","_countBits","t","_zeroBits","bitLength","hi","zeroBits","toTwos","width","abs","inotn","iaddn","fromTwos","testn","notn","ineg","isNeg","neg","iuor","ior","or","uor","iuand","iand","and","uand","iuxor","ixor","xor","uxor","bytesNeeded","bitsLeft","setn","bit","wbit","iadd","isub","add","sub","comb10MulTo","mid","o","a0","al0","ah0","a1","al1","ah1","a2","al2","ah2","a3","al3","ah3","a4","al4","ah4","a5","al5","ah5","a6","al6","ah6","a7","al7","ah7","a8","al8","ah8","a9","al9","ah9","b0","bl0","bh0","b1","bl1","bh1","b2","bl2","bh2","b3","bl3","bh3","b4","bl4","bh4","b5","bl5","bh5","b6","bl6","bh6","b7","bl7","bh7","b8","bl8","bh8","b9","bl9","bh9","w0","imul","w1","w2","w3","w4","w5","w6","w7","w8","w9","w10","w11","w12","w13","w14","w15","w16","w17","w18","jumboMulTo","FFTM","mulp","x","y","mulTo","hncarry","bigMulTo","makeRBT","N","l","revBin","rb","permute","rbt","rws","iws","rtws","itws","transform","s","rtwdf","cos","PI","itwdf","sin","rtwdf_","itwdf_","ie","ro","io","rx","guessLen13b","n","m","odd","conjugate","normalize13b","ws","round","convert13b","stub","ph","_","rwst","iwst","nrws","nrwst","niwst","rmws","mulf","muln","sqr","isqr","toBitArray","iushln","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","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","primes","k256","p224","p192","p25519","MPrime","_tmp","K256","P224","P192","P25519","prime","_prime","Mont","imod","rinv","minv","ireduce","rlen","imulK","_strip","output","outLen","next","mod3","one","nOne","lpow","z","inv","wnd","current","currentLen","mont","u","sequence","_this","require","HOT_PATCHER_TYPE","NOOP","createNewItem","original","final","_configuration","registry","getEmptyAction","__type__","configuration","newAction","control","target","allowTargetOverrides","foreignKey","assign","execute","get","isPatched","patch","chain","patchInline","plugin","setFinal","toBase64","md5","ha1Compute","generateBasicAuthHeader","username","password","encoded","generateTokenAuthHeader","tokenInfo","token_type","access_token","generateDigestAuthHeader","digest","url","uri","indexOf","qop","ncString","nc","ha1","cnonce","algorithm","realm","nonce","ha2","digestResponse","authValues","response","opaque","authHeader","createHash","update","user","pass","toLowerCase","decodeHTMLEntities","WEB","txt","document","createElement","innerHTML","fromBase64","authTools","urlTools","merge","directoryContents","createDir","custom","deletion","pathsExist","getFile","quota","move","putFile","stats","createClient","remoteURL","opts","httpAgent","httpsAgent","token","runtimeOptions","headers","remotePath","extractURLPath","_digest","hasDigestAuth","Authorization","copyFile","targetRemotePath","copyOptions","createDirectory","dirPath","createOptions","createReadStream","remoteFilename","createStream","createWriteStream","callback","customRequest","requestOptions","customOptions","deleteFile","deleteOptions","exists","existsOptions","pathExists","getDirectoryContents","getOptions","getFileContents","format","getFileContentsString","getFileContentsBuffer","getFileDownloadLink","getFileLink","getFileUploadLink","putOptions","getQuota","moveFile","moveOptions","putFileContents","stat","getStat","axios","getPatcher","parseAuth","exec","nonceRaw","uid","floor","random","makeNonce","request","then","status","response2","responseHandlers","encodePath","joinURL","prepareRequestOptions","filename","destination","Destination","handleResponseCode","filePath","outStream","PassThroughStream","PassThrough","rangeHeader","range","Range","responseType","getFileStream","stream","pipe","catch","emit","writeStream","overwrite","maxRedirects","setTimeout","xmlParser","nestedProp","getPropertyOfType","normaliseResult","multistatus","set","normaliseResponse","parseXML","xml","Promise","resolve","parse","arrayMode","ignoreNameSpace","prepareFileFromProps","props","rawFilename","isDetailed","getlastmodified","lastMod","getcontentlength","rawSize","resourcetype","resourceType","getcontenttype","mimeType","getetag","etag","collection","basename","lastmod","parseInt","mime","translateDiskSpace","pathPosix","processGlobFilter","processResponsePayload","normaliseHREF","normalisePath","Accept","Depth","deep","serverBasePath","requestPath","serverBase","responseItems","href","propstat","decodeURIComponent","getDirectoryFiles","details","files","glob","protocol","authPart","trim","authContents","Readable","parseQuota","responseItem","quotaUsed","quotaAvail","used","available","parseStat","getPrototypeOf","proto","isPlainObject","setPrototypeOf","mergeObjects","obj1","obj2","items","nextItem","HotPatcher","__patcher","joinURLParts","fetch","SEP_PATH_POSIX","SEP_PATH_WINDOWS","replaced","encodeURIComponent","parts","reduce","nextPart","partIndex","methodOptions","withCredentials","maxContentLength","maxBodyLength","onUploadProgress","validateStatus","minimatch","statusText","file","matchBase","URL","pathStr","normalisedPath","substr","fullURL","urlPath","pathname","balanced","RegExp","maybeMatch","pre","post","reg","begs","beg","ai","bi","pop","root","freeExports","freeGlobal","global","InvalidCharacterError","TABLE","REGEX_SPACE_CHARACTERS","position","charAt","bitStorage","bitCounter","b64","lens","getLens","validLen","placeHoldersLen","toByteArray","arr","Arr","_byteLength","curByte","revLookup","fromByteArray","uint8","extraBytes","maxChunkLength","len2","encodeChunk","lookup","Uint8Array","code","src","_move","Symbol","for","modrn","allocUnsafe","allocate","_toArrayLikeLE","_toArrayLikeBE","isNegNum","concatMap","expand","escSlash","escOpen","escClose","escComma","escPeriod","escapeBraces","unescapeBraces","numeric","parseCommaParts","postParts","embrace","isPadded","el","isTop","expansions","isNumericSequence","isAlphaSequence","isSequence","isOptions","incr","pad","need","expansion","Rand","rand","generate","_rand","getBytes","getByte","crypto","getRandomValues","msCrypto","randomBytes","asUInt32Array","readUInt32BE","scrubVec","v","cryptBlock","M","keySchedule","SUB_MIX","SBOX","nRounds","t0","t1","t2","t3","SUB_MIX0","SUB_MIX1","SUB_MIX2","SUB_MIX3","s0","s1","s2","s3","ksRow","RCON","G","d","INV_SBOX","INV_SUB_MIX","xi","sx","x4","x8","AES","_key","_reset","blockSize","keySize","keyWords","ksRows","invKeySchedule","ik","ksR","tt","_nRounds","_keySchedule","_invKeySchedule","encryptBlockRaw","encryptBlock","writeUInt32BE","decryptBlock","m1","scrub","aes","Transform","GHASH","incr32","StreamCipher","iv","decrypt","_cipher","ck","_ghash","_finID","ghash","toPad","ivBits","tail","writeUIntBE","calcIv","_prev","_cache","_secCache","_decrypt","_alen","_len","_mode","_authTag","_called","_update","chunk","rump","encrypt","_final","xorTest","getAuthTag","setAuthTag","setAAD","ciphers","deciphers","modes","createCipher","Cipher","createCipheriv","Cipheriv","createDecipher","Decipher","createDecipheriv","Decipheriv","listCiphers","getCiphers","AuthCipher","MODES","ebtk","Splitter","_last","_autopadding","cache","suite","config","TypeError","thing","flush","last","padded","unpad","setAutoPadding","setTo","autoPadding","PADDING","equals","padBuff","writeUInt8","ZEROES","fromArray","block","_multiply","lsbVi","Vi","Zi","abl","bl","encryptStart","encryptByte","byteParam","shiftIn","getBlock","chunkNum","modeModules","ECB","CBC","CFB","CFB8","CFB1","OFB","CTR","GCM","DES","aesModes","desModes","keyLen","ivLen","CipherBase","des","instantiate","EDE","modeName","_des","create","des3","getr","priv","modulus","prime1","prime2","crt","blinds","blinder","publicExponent","unblinder","blind","blinded","c1","c2","qinv","coefficient","exponent1","m2","exponent2","verify","algorithms","Sign","Writable","_hashType","hash","_hash","_tag","_signType","Verify","createSign","createVerify","_write","done","sig","createHmac","EC","parseKeys","curves","getKey","algo","hlen","hbits","bits2int","bits2octets","fill","obits","makeKey","kv","makeR","hashType","signType","curve","curveId","keyFromPrivate","privateKey","toDER","ecSign","params","priv_key","H","dsaSign","checkValue","pub","pubkey","subjectPrivateKey","ecVerify","pub_key","unpacked","signature","montp","dsaVerify","padNum","codes","createErrorType","NodeError","_Base","subClass","superClass","arg1","arg2","arg3","getMessage","__proto__","oneOf","expected","actual","determiner","search","pos","this_len","substring","endsWith","includes","objectKeys","Duplex","allowHalfOpen","readable","writable","once","onend","_writableState","ended","process","nextTick","onEndNT","defineProperty","enumerable","highWaterMark","getBuffer","_readableState","destroyed","_transform","encoding","cb","ReadableState","EElistenerCount","emitter","listeners","Stream","OurUint8Array","debug","debugUtil","debuglog","StringDecoder","createReadableStreamAsyncIterator","BufferList","destroyImpl","getHighWaterMark","_require$codes","ERR_INVALID_ARG_TYPE","ERR_STREAM_PUSH_AFTER_EOF","ERR_METHOD_NOT_IMPLEMENTED","ERR_STREAM_UNSHIFT_AFTER_END_EVENT","errorOrDestroy","kProxyEvents","isDuplex","objectMode","readableObjectMode","pipes","pipesCount","flowing","endEmitted","reading","sync","needReadable","emittedReadable","readableListening","resumeScheduled","paused","emitClose","autoDestroy","defaultEncoding","awaitDrain","readingMore","read","_read","destroy","_destroy","readableAddChunk","addToFront","skipChunkCheck","er","emitReadable","emitReadable_","onEofChunk","chunkInvalid","_uint8ArrayToBuffer","addChunk","maybeReadMore","_undestroy","undestroy","isPaused","setEncoding","head","clear","MAX_HWM","howMuchToRead","computeNewHighWaterMark","flow","maybeReadMore_","updateReadableListening","listenerCount","resume","nReadingNextTick","resume_","fromList","consume","endReadable","endReadableNT","wState","finished","xs","nOrig","doRead","pipeOpts","endFn","stdout","stderr","unpipe","onunpipe","unpipeInfo","hasUnpiped","removeListener","onclose","onfinish","ondrain","onerror","ondata","cleanedUp","needDrain","on","pipeOnDrain","pause","event","fn","prependListener","_events","dests","ev","addListener","removeAllListeners","wrap","bind","asyncIterator","_fromList","iterable","ERR_MULTIPLE_CALLBACK","ERR_TRANSFORM_ALREADY_TRANSFORMING","ERR_TRANSFORM_WITH_LENGTH_0","afterTransform","ts","_transformState","transforming","writecb","writechunk","rs","needTransform","writeencoding","_flush","prefinish","err2","CorkedRequest","entry","finish","corkReq","pendingcb","corkedRequestsFree","onCorkedFinish","WritableState","internalUtil","deprecate","realHasInstance","ERR_STREAM_CANNOT_PIPE","ERR_STREAM_DESTROYED","ERR_STREAM_NULL_VALUES","ERR_STREAM_WRITE_AFTER_END","ERR_UNKNOWN_ENCODING","nop","writableObjectMode","finalCalled","ending","noDecode","decodeStrings","writing","corked","bufferProcessing","onwrite","writelen","onwriteStateUpdate","finishMaybe","errorEmitted","onwriteError","needFinish","bufferedRequest","clearBuffer","afterWrite","lastBufferedRequest","prefinished","bufferedRequestCount","writev","_writev","doWrite","onwriteDrain","holder","count","allBuffers","isBuf","callFinal","rState","hasInstance","Function","object","writeAfterEnd","validChunk","newChunk","decodeChunk","writeOrBuffer","cork","uncork","setDefaultEncoding","endWritable","_Object$setPrototypeO","_defineProperty","configurable","kLastResolve","kLastReject","kError","kEnded","kLastPromise","kHandlePromise","kStream","createIterResult","readAndResolve","iter","onReadable","AsyncIteratorPrototype","ReadableStreamAsyncIteratorPrototype","reject","promise","lastPromise","wrapForNext","_this2","_Object$create","iterator","ownKeys","enumerableOnly","getOwnPropertySymbols","symbols","sym","getOwnPropertyDescriptor","_defineProperties","descriptor","instance","Constructor","_classCallCheck","protoProps","staticProps","hasStrings","_getString","_getBuffer","nb","source","getOwnPropertyDescriptors","defineProperties","_objectSpread","depth","customInspect","emitErrorAndCloseNT","emitErrorNT","emitCloseNT","readableDestroyed","writableDestroyed","ERR_STREAM_PREMATURE_CLOSE","noop","eos","called","onlegacyfinish","writableEnded","readableEnded","onrequest","req","setHeader","abort","isRequest","ERR_MISSING_ARGS","destroyer","closed","to","popCallback","streams","destroys","ERR_INVALID_OPT_VALUE","duplexKey","hwm","highWaterMarkFrom","isFinite","pipeline","copyProps","dst","SafeBuffer","encodingOrOffset","allocUnsafeSlow","SlowBuffer","ieee754","customInspectSymbol","INSPECT_MAX_BYTES","K_MAX_LENGTH","createBuffer","RangeError","isEncoding","fromString","ArrayBuffer","isView","arrayView","isInstance","fromArrayBuffer","byteOffset","fromArrayLike","fromArrayView","SharedArrayBuffer","valueOf","checked","numberIsNaN","fromObject","toPrimitive","assertSize","array","mustMatch","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","bidirectionalIndexOf","dir","arrayIndexOf","lastIndexOf","indexSize","arrLength","valLength","foundIndex","found","hexWrite","Number","remaining","strLen","parsed","utf8Write","blitBuffer","asciiWrite","byteArray","asciiToBytes","base64Write","ucs2Write","units","utf16leToBytes","firstByte","codePoint","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","codePoints","MAX_ARGUMENTS_LENGTH","decodeCodePointsArray","kMaxLength","TYPED_ARRAY_SUPPORT","foo","typedArraySupport","console","poolSize","_isBuffer","compare","list","swap16","swap32","swap64","toLocaleString","thisStart","thisEnd","thisCopy","targetCopy","_arr","hexSliceLookupTable","checkOffset","ext","checkInt","wrtBigUInt64LE","checkIntBI","BigInt","wrtBigUInt64BE","checkIEEE754","writeFloat","noAssert","writeDouble","newBuf","subarray","readUintLE","readUIntLE","readUintBE","readUIntBE","readUint8","readUint16LE","readUInt16LE","readUint16BE","readUint32LE","readUInt32LE","readUint32BE","readBigUInt64LE","defineBigIntMethod","validateNumber","boundsError","readBigUInt64BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readBigInt64LE","readBigInt64BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUintLE","writeUIntLE","writeUintBE","writeUint8","writeUint16LE","writeUInt16LE","writeUint16BE","writeUint32LE","writeUInt32LE","writeUint32BE","writeBigUInt64LE","writeBigUInt64BE","writeIntLE","limit","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeBigInt64LE","writeBigInt64BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","copyWithin","E","super","addNumericalSeparator","ERR_OUT_OF_RANGE","checkBounds","ERR_BUFFER_OUT_OF_BOUNDS","received","isInteger","INVALID_BASE64_RE","Infinity","leadSurrogate","base64clean","alphabet","table","i16","BufferBigIntNotDefined","hashMode","_finalOrDigest","__final","_decoder","_encoding","inputEnc","outputEnc","outData","_toString","fin","elliptic","ECDH","aliases","secp256k1","secp224r1","prime256v1","prime192v1","ed25519","secp384r1","secp521r1","curveType","ec","formatReturnValue","bn","p256","secp256r1","secp192r1","p384","p521","generateKeys","genKeyPair","getPublicKey","computeSecret","other","inenc","keyFromPublic","getPublic","getPrivate","getX","getPrivateKey","setPublicKey","_importPublic","setPrivateKey","_priv","_importPrivate","MD5","RIPEMD160","sha","Hash","alg","Legacy","ZEROS","Hmac","blocksize","_alg","ipad","_ipad","opad","_opad","rng","pseudoRandomBytes","prng","algos","algoKeys","hashes","getHashes","pbkdf2","pbkdf2Sync","dh","DiffieHellmanGroup","createDiffieHellmanGroup","getDiffieHellman","createDiffieHellman","DiffieHellman","createECDH","publicEncrypt","privateEncrypt","publicDecrypt","privateDecrypt","rf","randomFill","randomFillSync","createCredentials","utils","CBCState","_cbcInit","_cbcState","inp","inOff","outOff","superProto","bufferOff","_updateDecrypt","_updateEncrypt","_buffer","_flushBuffer","inputOff","outputOff","_finalEncrypt","_finalDecrypt","_pad","_unpad","DESState","_desState","deriveKeys","shiftTable","kL","kR","pc1","r28shl","pc2","ip","_encrypt","lStart","rStart","keyL","keyR","substitute","rip","EDEState","k1","k2","k3","_edeState","inL","inR","outL","outR","pc2table","sTable","permuteTable","padSplit","group","generatePrime","DH","ENCODINGS","gen","generator","genc","millerRabin","TWENTYFOUR","ELEVEN","TEN","THREE","SEVEN","_pub","primeCache","malleable","setGenerator","__prime","_primeLen","_primeCode","hex","rem","simpleSieve","fermatTest","checkPrime","__gen","_gen","secret","getPrime","front","getGenerator","findPrime","ONE","TWO","FIVE","FOUR","_getPrimes","n2","version","eddsa","getNAF","getJSF","BaseCurve","conf","zero","pointFromJSON","gRed","_wnafT1","_wnafT2","_wnafT3","_wnafT4","_bitLength","adjustCount","redN","_maxwellTrick","BasePoint","precomputed","point","validate","_fixedNafMul","doubles","_getDoubles","naf","I","step","nafW","repr","jpoint","mixedAdd","points","toP","_wnafMul","nafPoints","_getNAFPoints","dblp","_wnafMulAdd","defW","coeffs","jacobianResult","wndWidth","comb","toJ","jsf","ja","jb","decodePoint","pointFromX","encodeCompressed","compact","getY","precompute","power","beta","_getBeta","_hasDoubles","dbl","EdwardsCurve","twisted","mOneA","dd","oneC","Point","zOne","_mulA","_mulC","rhs","lhs","y2","pointFromY","isInfinity","normalize","fromJSON","_extDbl","f","nx","ny","nt","nz","_projDbl","_extAdd","_projAdd","mulAdd","jmulAdd","zi","eqXToP","xc","short","edwards","MontCurve","i4","a24","aa","bb","diffAdd","da","jumlAdd","ShortCurve","tinv","zeroA","threeA","endo","_getEndomorphism","_endoWnafT1","_endoWnafT2","isRed","inf","JPoint","lambda","betas","_getEndoRoots","lambdas","basis","vec","_getEndoBasis","ntinv","prevR","aprxSqrt","y1","len1","_endoSplit","v1","v2","p1","p2","q1","q2","ax","_endoWnafMulAdd","npoints","ncoeffs","endoMul","obj2point","ys1","dyinv","_precompute","negate","zinv","zinv2","ay","pz2","z2","u1","u2","h2","h3","jx","jy","jz","jz4","jyd","jx2","jyd2","jyd4","dny","_zeroDbl","_threeDbl","_dbl","xx","yy","yyyy","yyyy8","c8","gamma","alpha","beta4","beta8","ggamma8","jy2","jxd4","jyd8","trpl","zz","mm","ee","yyu4","kbase","z3","pz3","zs","PresetCurve","defineCurve","sha256","sha384","sha512","HmacDRBG","KeyPair","Signature","nh","keyPair","fromPrivate","fromPublic","drbg","pers","persEnc","entropy","hmacStrength","entropyEnc","ns2","_truncateToN","truncOnly","bkey","ns1","kp","kpX","recoveryParam","canonical","sinv","recoverPubKey","isYOdd","isSecondKey","rInv","getKeyRecoveryParam","Q","Qprime","privEnc","pubEnc","reason","derive","_importDER","Position","place","getLength","initial","octetLen","rmPadding","constructLength","octets","log","LN2","slen","backHalf","parseBytes","EDDSA","pointClass","encodingLength","keyFromSecret","hashInt","messagePrefix","R","Rencoded","encodePoint","s_","pubBytes","S","makeSignature","SG","intFromLE","fromSecret","lastIx","normed","xIsOdd","encodeInt","decodeInt","isPoint","cachedProperty","_secret","_pubBytes","privBytes","getSecret","_R","_S","_Rencoded","_Sencoded","Sencoded","toBytes","toHex","minAssert","minUtils","zero2","m8","d1","d2","m14","m24","computer","ReflectOwnKeys","Reflect","ReflectApply","receiver","getOwnPropertyNames","NumberIsNaN","isNaN","EventEmitter","init","errorListener","resolver","eventTargetAgnosticAddListener","handler","flags","addErrorHandlerIfEventEmitter","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","listener","_getMaxListeners","that","_addListener","prepend","events","existing","warning","newListener","warned","warn","onceWrapper","fired","wrapFn","_onceWrap","wrapped","_listeners","unwrap","evlistener","unwrapListeners","arrayClone","addEventListener","wrapListener","removeEventListener","setMaxListeners","getMaxListeners","doError","context","prependOnceListener","originalListener","spliceOne","rawListeners","eventNames","salt","keyBits","keyStart","ivStart","buildOptions","defaultOptions","attributeNamePrefix","attrNodeName","textNodeName","ignoreAttributes","cdataTagName","cdataPositionChar","indentBy","supressEmptyNode","tagValueProcessor","attrValueProcessor","Parser","isAttribute","attrPrefixLen","isCDATA","replaceCDATAstr","replaceCDATAarr","indentate","tagEndChar","newLine","buildTextNode","buildEmptyTextNode","buildObjNode","buildEmptyObjNode","buildTextValNode","buildObjectNode","cdata","attrStr","level","repeat","startsWith","jObj","j2x","attr","arrLen","Ks","L","char","chars","nilChar","missingChar","nilPremitive","missingPremitive","emptyChar","emptyValue","boundryChar","objStart","arrStart","arrayEnd","charsArr","_e","e_schema","getValue","hasValidData","attrsMap","itemSchema","arr_len","arr_i","processValue","isAppChar","ch","x2j","convert2nimn","util","convertToJson","isEmptyObject","isExist","tagname","_cToJsonStr","convertToJsonString","nodeToJson","xmlToNodeobj","x2xmlnode","validator","xmlData","validationOption","traversableObj","getTraversalObj","convertTonimn","j2xParser","parseToNimn","schema","nameStartChar","nameRegexp","regexName","newOptions","isName","getAllMatches","regex","matches","allmatches","allowBooleanAttributes","readPI","getErrorObject","getLineNumberForPosition","readCommentAndCDATA","angleBracketsCount","tagFound","reachedRoot","closingTag","tagName","readAttributeStr","isValid","validateAttributeString","line","tagClosed","otg","afterAmp","validateAmpersand","startChar","validAttrStrRegxp","attrNames","getPositionFromMatch","attrName","validateAttrName","validateNumberAmpersand","lineNumber","addChild","xmlNode","parseFloat","parseNodeValue","parseAttributeValue","trimValues","stopNodes","processTagValue","parseValue","parseTrueNumberOnly","resolveNameSpace","prefix","shouldParse","attrsRegx","buildAttributesMap","attrs","attrCollection","closingIndexForOpeningTag","attrBoundary","tagExp","findClosingIndex","errMsg","closingIndex","xmlObj","currentNode","textData","closeIndex","colonIndex","startIndex","childNode","separatorIndex","trimRight","HashBase","_block","_blockSize","_blockOffset","_length","_finalized","throwIfNotStringOrBuffer","common","ripemd","hmac","sha1","sha224","ripemd160","BlockHash","pending","pendingTotal","outSize","padLength","_delta8","_delta32","join32","inner","outer","rotl32","sum32","sum32_3","sum32_4","K","Kh","Ah","Bh","Ch","Dh","Eh","T","rh","sh","toHex32","split32","shaCommon","sum32_5","ft_1","sha1_K","SHA1","W","SHA256","SHA224","ch32","maj32","s0_256","s1_256","g0_256","g1_256","sha256_K","T1","T2","SHA512","SHA384","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","xh","xl","yh","yl","zh","ch64_lo","zl","maj64_hi","maj64_lo","s0_512_hi","s0_512_lo","s1_512_hi","s1_512_lo","g0_512_hi","g0_512_lo","g1_512_hi","g1_512_lo","_prepareBlock","c0_hi","c0_lo","c1_hi","c1_lo","c2_hi","c2_lo","c3_hi","c3_lo","ah","al","bh","cl","dl","eh","fh","fl","gh","gl","hh","hl","c4_hi","c4_lo","T1_hi","T1_lo","T2_hi","T2_lo","rotr32","p32","isSurrogatePair","htonl","zero8","regexAstralSymbols","regexAsciiWhitelist","regexBmpWhitelist","regexEncodeNonAscii","encodeMap","'","regexEscape","escapeMap","regexInvalidEntity","regexInvalidRawCodePoint","regexDecode","decodeMap","decodeMapLegacy","decodeMapNumeric","invalidReferenceCodePoints","stringFromCharCode","has","propertyName","defaults","codePointToSymbol","strict","parseError","hexEscape","decEscape","encodeEverything","useNamedReferences","allowUnsafeSymbols","escapeCodePoint","decimal","escapeBmpSymbol","symbol","$0","high","low","html","$1","$2","$3","$4","$5","$6","$7","$8","semicolon","decDigits","hexDigits","reference","isAttributeValue","he","predResist","minEntropy","_reseed","reseedInterval","V","nonceEnc","seed","_hmac","kmac","reseed","addEnc","temp","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","NaN","rt","ARRAY16","_a","_b","_c","_d","rotl","fnF","fnG","fnH","fnI","brorand","MillerRabin","_randbelow","min_bytes","_randrange","stop","rone","n1","rn1","getDivisor","Minimatch","sep","GLOBSTAR","plTypes","open","close","qmark","star","reSpecials","slashSplit","pattern","nocomment","regexp","comment","empty","make","braceExpand","nobrace","orig","_made","parseNegate","globSet","globParts","si","negateOffset","nonegate","isSub","noglobstar","stateChar","hasMagic","nocase","escaping","patternListStack","negativeLists","inClass","reClassStart","classStart","patternStart","dot","clearStateChar","noext","reStart","pl","reEnd","cs","sp","SUBPARSE","addPatternStart","nl","nlBefore","nlFirst","nlLast","nlAfter","openParensBefore","cleanAfter","dollar","globUnescape","regExp","_glob","_src","makeRe","twoStar","regExpEscape","ex","nonull","matchOne","flipNegate","fi","pi","hit","fr","pr","swallowee","_typeof","_possibleConstructorReturn","ReferenceError","_assertThisInitialized","_wrapNativeSuper","Class","Map","Wrapper","_construct","_getPrototypeOf","_setPrototypeOf","Parent","_isNativeReflectConstruct","construct","sham","Proxy","PATH_DELIMITER","ObjectPrototypeMutationError","_Error","_inherits","traverse","segments","_loop","idx","currentSegment","remainingSegments","pathToHere","_ret","isLastSegment","property","currentObject","currentProperty","nextPropIsNumber","nextPropIsArrayWildcard","own","hasOwn","isIn","objectInPath","validPath","certificate","RSAPrivateKey","seq","int","RSAPublicKey","PublicKey","AlgorithmIdentifier","bitstr","null_","PrivateKeyInfo","octstr","PrivateKey","EncryptedPrivateKeyInfo","EncryptedPrivateKey","DSAPrivateKey","DSAparam","ECPrivateKey","ECParameters","namedCurve","asn","Time","utcTime","utctime","generalTime","gentime","AttributeTypeValue","SubjectPublicKeyInfo","RelativeDistinguishedName","setof","RDNSequence","seqof","Name","rdnSequence","Validity","Extension","bool","TBSCertificate","X509Certificate","findProc","startRegex","fullRegex","evp","okey","decrypted","cipherText","cipherKey","cipher","match2","aesid","fixProc","compat","passphrase","subtype","ndata","stripped","tbsCertificate","subjectPublicKeyInfo","subjectPublicKey","kde","kdeparams","iters","keylen","parameters","assertPath","normalizeStringPosix","allowAboveRoot","lastSegmentLength","lastSlash","dots","lastSlashIndex","posix","cwd","resolvedPath","resolvedAbsolute","isAbsolute","trailingSeparator","joined","fromStart","fromEnd","fromLen","toStart","toLen","lastCommonSep","fromCode","_makeLong","dirname","hasRoot","matchedSlash","extIdx","firstNonSlashEnd","extname","startDot","startPart","preDotState","pathObject","_format","delimiter","win32","isString","normalizeArray","splitPathRe","posixSplitPath","trailingSlash","segment","fromParts","toParts","samePartsLength","outputParts","isObject","pathString","allParts","ZERO_BUF","checkParameters","subtle","toBrowser","checks","getNextTick","queueMicrotask","setImmediate","browserPbkdf2","iterations","importKey","deriveBits","resolvePromise","browser","prom","checkNative","resp","MAX_ALLOC","sizes","rmd160","saltLen","shaFunc","rmd160Func","getDigest","ipad1","ipad2","run","DK","block1","destPos","hLen","U","i2ops","mgf","withPublic","zBuffer","iHash","maskedSeed","maskedDb","db","dif","oaep","ps","pkcs1","publicKey","paddedMsg","hLen2","dblen","cur","nonZero","pairs","query","part","parser","MAX_BYTES","MAX_UINT32","generated","oldBrowser","safeBuffer","randombytes","kBufferMaxLength","kMaxUint32","assertOffset","actualFill","ourBuf","uint","port","zr","sl","sr","hr","fn1","fn2","fn3","fn4","fn5","ar","br","cr","dr","tl","tr","safer","Safer","kStringMaxLength","binding","MAX_LENGTH","MAX_STRING_LENGTH","finalSize","_finalSize","accum","assigned","remainder","lowBits","highBits","Algorithm","Sha","_w","rotl30","ft","Sha1","rotl5","Sha256","Sha224","_f","_g","_h","maj","sigma0","sigma1","gamma0","Sha384","_ah","_bh","_ch","_dh","_eh","_fh","_gh","_hh","_al","_bl","_cl","_dl","_el","_fl","_gl","_hl","writeInt64BE","Sha512","Gamma0","Gamma0l","Gamma1","Gamma1l","getCarry","gamma0l","gamma1","gamma1l","Wi7h","Wi7l","Wi16h","Wi16l","Wil","Wih","majh","majl","sigma0h","sigma0l","sigma1h","sigma1l","Kih","Kil","chh","chl","t1l","t1h","t2l","t2h","EE","_isStdio","didOnEnd","cleanup","nenc","retried","_normalizeEncoding","normalizeEncoding","text","utf16Text","utf16End","fillLast","utf8FillLast","base64Text","base64End","simpleWrite","simpleEnd","lastNeed","lastTotal","lastChar","utf8CheckByte","byte","utf8CheckExtraBytes","utf8CheckIncomplete","strArray","resultArray","component","definition","required","qs","controlOrWhitespace","CRHTLF","slashes","protocolre","windowsDriveLetter","trimLeft","rules","address","isSpecial","ignore","lolcation","loc","location","finaldestination","Url","unescape","scheme","extractProtocol","rest","forwardSlashes","otherSlashes","slashesCount","extracted","instruction","instructions","up","host","hostname","auth","origin","ins","localStorage","trace"],"mappings":"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E,EAAW,YAAY,WACpC,OAAOthE,KAAK21D,MAAMiP,YAAY5kE,KAAK0kE,QAGrCgB,EAAepE,EAAW,YAAY,WACpC,OAAOthE,KAAK21D,MAAM4P,UAAUvlE,KAAK+kE,QAGnCzD,EAAUrhE,UAAUmmE,QAAU,WAC5B,OAAOpmE,KAAK2kE,WAAWphE,OAAOvD,KAAKmmE,aAGrC7E,EAAUrhE,UAAUomE,MAAQ,WAC1B,OAAOlW,EAAMpvD,OAAOf,KAAKomE,UAAW,OAAOt4D,eAG7CpJ,EAAOrF,QAAUiiE,G,UChEjB58D,EAAOrF,QAAU,CACf23D,QAAS,CACPI,KAAM,EACNK,OAAQ,CACN,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,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,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,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,sEAINP,IAAK,CACHzvC,IAAK,EACLgwC,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,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,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,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CA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OAAO,EAAS,MAAM,GAAe,OAAO,EAAS,OAAO,GAAe,MAAM,GAAe,OAAO,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,GAAe,MAAM,GAAe,OAAO,GAAe,OAAO,GAAe,MAAM,GAAe,OAAO,EAAS,OAAO,GAAe,MAAM,GAAe,OAAO,GAAe,OAAO,EAAS,OAAO,GAAe,OAAO,GAAe,MAAM,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAO,SAAS,EAAO,SAAS,EAAS,SAAS,EAAS,SAAS,IAAS,SAAS,EAAS,MAAM,EAAS,MAAM,GAAe,OAAO,GAAe,MAAM,EAAS,OAAO,GAAe,OAAO,GAAe,MAAM,GAAe,OAAO,EAAO,OAAO,EAAO,SAAS,EAAO,SAAS,EAAO,SAAS,EAAO,SAAS,EAAO,QAAQ,EAAO,QAAQ,EAAO,OAAO,EAAO,OAAO,EAAS,SAAS,EAAS,SAAS,EAAO,SAAS,EAAO,SAAS,EAAO,SAAS,EAAO,SAAS,EAAS,QAAQ,EAAS,QAAQ,EAAS,QAAQ,EAAS,QAAQ,GAAe,MAAM,GAAe,OAAO,GAAe,OAAO,EAAS,OAAO,GAAe,MAAM,GAAe,OAAO,GAAe,OAAO,GAAe,MAAM,GAAe,OAAO,GAAe,OAAO,GAAe,MAAM,EAAS,OAAO,EAAS,SAAS,GAAe,MAAM,GAAe,OAAO,GAAe,OAAO,EAAS,OAAO,EAAS,KAAK,EAAS,OAAO,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,GAAe,OAAO,GAAe,OAAO,GAAe,MAAM,GAAe,OAAO,GAAe,MAAM,GAAe,OAAO,IAAS,KAAK,EAAS,SAAS,EAAS,SAAS,EAAS,QAAQ,EAAS,QAAQ,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAO,QAAQ,GAAe,MAAM,GAAe,OAAO,GAAe,OAAO,GAAe,OAAO,GAAe,MAAM,GAAe,OAAO,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,IAAS,QAAQ,EAAS,SAAS,EAAS,SAAS,GAAe,OAAO,GAAe,OAAO,GAAe,MAAM,GAAe,OAAO,GAAe,MAAM,GAAe,OAAO,EAAO,SAAS,EAAO,SAAS,EAAO,SAAS,EAAO,SAAS,EAAS,SAAS,EAAS,SAAS,EAAO,QAAQ,EAAO,QAAQ,EAAS,QAAQ,EAAS,QAAQ,EAAO,OAAO,EAAO,OAAO,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,QAAQ,EAAS,QAAQ,EAAS,QAAQ,EAAS,QAAQ,GAAe,MAAM,GAAe,OAAO,GAAe,OAAO,GAAe,MAAM,GAAe,OAAO,GAAe,OAAO,GAAe,OAAO,GAAe,OAAO,GAAe,MAAM,GAAe,OAAO,GAAe,OAAO,GAAe,MAAM,EAAS,QAAQ,EAAS,QAAQ,GAAe,MAAM,GAAe,OAAO,GAAe,OAAO,GAAe,OAAO,GAAe,MAAM,GAAe,OAAO,GAAe,MAAM,GAAe,OAAO,GAAe,OAAO,GAAe,OAAO,GAAe,MAAM,GAAe,OAAO,EAAO,SAAS,EAAO,SAAS,EAAS,QAAQ,EAAS,QAAQ,EAAO,OAAO,EAAS,OAAO,GAAe,OAAO,GAAe,MAAM,GAAe,OAAO,EAAS,MAAM,EAAS,OAAO,GAAe,OAAO,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,OAAO,EAAS,OAAO,EAAS,QAAQ,EAAO,QAAQ,EAAO,QAAQ,EAAS,QAAQ,EAAS,QAAQ,EAAS,QAAQ,EAAS,OAAO,EAAS,OAAO,EAAS,QAAQ,EAAS,QAAQ,EAAS,QAAQ,EAAS,QAAQ,EAAS,OAAO,EAAS,QAAQ,EAAS,UAAU,EAAS,SAAS,EAAS,SAAS,EAAS,OAAO,EAAS,OAAO,EAAS,MAAM,EAAS,MAAM,EAAS,QAAQ,EAAS,SAAS,EAAS,QAAQ,EAAS,OAAO,EAAS,OAAO,EAAS,QAAQ,EAAS,SAAS,EAAS,QAAQ,EAAS,SAAS,EAAS,SAAS,EAAS,KAAK,EAAO,QAAQ,EAAS,KAAK,EAAS,KAAK,EAAS,KAAK,EAAS,KAAK,EAAS,KAAK,EAAS,UAAU,EAAS,UAAU,EAAS,KAAK,EAAS,MAAM,EAAS,KAAK,EAAS,MAAM,EAAS,OAAO,EAAS,MAAM,EAAS,QAAQ,EAAS,QAAQ,EAAS,SAAS,EAAS,MAAM,EAAS,MAAM,EAAS,OAAO,EAAS,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","file":"photos-vendors-node_modules_webdav_dist_node_index_js-node_modules_webdav_dist_node_request_js.js?v=ab41d2ccd04feefb089f","sourcesContent":["'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","'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","'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","'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","'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","'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';\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\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\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","'use strict';\n\nconst decoders = exports;\n\ndecoders.der = require('./der');\ndecoders.pem = require('./pem');\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';\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","'use strict';\n\nconst encoders = exports;\n\nencoders.der = require('./der');\nencoders.pem = require('./pem');\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","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n 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 sequence(...methods) {\n if (methods.length === 0) {\n throw new Error(\"Failed creating sequence: No functions provided\");\n }\n return function __executeSequence(...args) {\n let result = args;\n const _this = this;\n while (methods.length > 0) {\n const method = methods.shift();\n result = [method.apply(_this, result)];\n }\n return result[0];\n };\n}\n\nmodule.exports = {\n sequence\n};\n","const { sequence } = require(\"./functions.js\");\n\nconst HOT_PATCHER_TYPE = \"@@HOTPATCHER\";\nconst NOOP = () => {};\n\nfunction createNewItem(method) {\n return {\n original: method,\n methods: [method],\n final: false\n };\n}\n\n/**\n * Hot patching manager class\n */\nclass HotPatcher {\n constructor() {\n this._configuration = {\n registry: {},\n getEmptyAction: \"null\"\n };\n this.__type__ = HOT_PATCHER_TYPE;\n }\n\n /**\n * Configuration object reference\n * @type {Object}\n * @memberof HotPatcher\n * @readonly\n */\n get configuration() {\n return this._configuration;\n }\n\n /**\n * The action to take when a non-set method is requested\n * Possible values: null/throw\n * @type {String}\n * @memberof HotPatcher\n */\n get getEmptyAction() {\n return this.configuration.getEmptyAction;\n }\n\n set getEmptyAction(newAction) {\n this.configuration.getEmptyAction = newAction;\n }\n\n /**\n * Control another hot-patcher instance\n * Force the remote instance to use patched methods from calling instance\n * @param {HotPatcher} target The target instance to control\n * @param {Boolean=} allowTargetOverrides Allow the target to override patched methods on\n * the controller (default is false)\n * @memberof HotPatcher\n * @returns {HotPatcher} Returns self\n * @throws {Error} Throws if the target is invalid\n */\n control(target, allowTargetOverrides = false) {\n if (!target || target.__type__ !== HOT_PATCHER_TYPE) {\n throw new Error(\n \"Failed taking control of target HotPatcher instance: Invalid type or object\"\n );\n }\n Object.keys(target.configuration.registry).forEach(foreignKey => {\n if (this.configuration.registry.hasOwnProperty(foreignKey)) {\n if (allowTargetOverrides) {\n this.configuration.registry[foreignKey] = Object.assign(\n {},\n target.configuration.registry[foreignKey]\n );\n }\n } else {\n this.configuration.registry[foreignKey] = Object.assign(\n {},\n target.configuration.registry[foreignKey]\n );\n }\n });\n target._configuration = this.configuration;\n return this;\n }\n\n /**\n * Execute a patched method\n * @param {String} key The method key\n * @param {...*} args Arguments to pass to the method (optional)\n * @memberof HotPatcher\n * @see HotPatcher#get\n * @returns {*} The output of the called method\n */\n execute(key, ...args) {\n const method = this.get(key) || NOOP;\n return method(...args);\n }\n\n /**\n * Get a method for a key\n * @param {String} key The method key\n * @returns {Function|null} Returns the requested function or null if the function\n * does not exist and the host is configured to return null (and not throw)\n * @memberof HotPatcher\n * @throws {Error} Throws if the configuration specifies to throw and the method\n * does not exist\n * @throws {Error} Throws if the `getEmptyAction` value is invalid\n */\n get(key) {\n const item = this.configuration.registry[key];\n if (!item) {\n switch (this.getEmptyAction) {\n case \"null\":\n return null;\n case \"throw\":\n throw new Error(\n `Failed handling method request: No method provided for override: ${key}`\n );\n default:\n throw new Error(\n `Failed handling request which resulted in an empty method: Invalid empty-action specified: ${\n this.getEmptyAction\n }`\n );\n }\n }\n return sequence(...item.methods);\n }\n\n /**\n * Check if a method has been patched\n * @param {String} key The function key\n * @returns {Boolean} True if already patched\n * @memberof HotPatcher\n */\n isPatched(key) {\n return !!this.configuration.registry[key];\n }\n\n /**\n * @typedef {Object} PatchOptions\n * @property {Boolean=} chain - Whether or not to allow chaining execution. Chained\n * execution allows for attaching multiple callbacks to a key, where the callbacks\n * will be executed in order of when they were patched (oldest to newest), the\n * values being passed from one method to another.\n */\n\n /**\n * Patch a method name\n * @param {String} key The method key to patch\n * @param {Function} method The function to set\n * @param {PatchOptions=} options Patch options\n * @memberof HotPatcher\n * @returns {HotPatcher} Returns self\n */\n patch(key, method, { chain = false } = {}) {\n if (this.configuration.registry[key] && this.configuration.registry[key].final) {\n throw new Error(`Failed patching '${key}': Method marked as being final`);\n }\n if (typeof method !== \"function\") {\n throw new Error(`Failed patching '${key}': Provided method is not a function`);\n }\n if (chain) {\n // Add new method to the chain\n if (!this.configuration.registry[key]) {\n // New key, create item\n this.configuration.registry[key] = createNewItem(method);\n } else {\n // Existing, push the method\n this.configuration.registry[key].methods.push(method);\n }\n } else {\n // Replace the original\n if (this.isPatched(key)) {\n const { original } = this.configuration.registry[key];\n this.configuration.registry[key] = Object.assign(createNewItem(method), {\n original\n });\n } else {\n this.configuration.registry[key] = createNewItem(method);\n }\n }\n return this;\n }\n\n /**\n * Patch a method inline, execute it and return the value\n * Used for patching contents of functions. This method will not apply a patched\n * function if it has already been patched, allowing for external overrides to\n * function. It also means that the function is cached so that it is not\n * instantiated every time the outer function is invoked.\n * @param {String} key The function key to use\n * @param {Function} method The function to patch (once, only if not patched)\n * @param {...*} args Arguments to pass to the function\n * @returns {*} The output of the patched function\n * @memberof HotPatcher\n * @example\n * function mySpecialFunction(a, b) {\n * return hotPatcher.patchInline(\"func\", (a, b) => {\n * return a + b;\n * }, a, b);\n * }\n */\n patchInline(key, method, ...args) {\n if (!this.isPatched(key)) {\n this.patch(key, method);\n }\n return this.execute(key, ...args);\n }\n\n /**\n * Patch a method (or methods) in sequential-mode\n * See `patch()` with the option `chain: true`\n * @see patch\n * @param {String} key The key to patch\n * @param {...Function} methods The methods to patch\n * @returns {HotPatcher} Returns self\n * @memberof HotPatcher\n */\n plugin(key, ...methods) {\n methods.forEach(method => {\n this.patch(key, method, { chain: true });\n });\n return this;\n }\n\n /**\n * Restore a patched method if it has been overridden\n * @param {String} key The method key\n * @memberof HotPatcher\n */\n restore(key) {\n if (!this.isPatched(key)) {\n throw new Error(`Failed restoring method: No method present for key: ${key}`);\n } else if (typeof this.configuration.registry[key].original !== \"function\") {\n throw new Error(\n `Failed restoring method: Original method not found or of invalid type for key: ${key}`\n );\n }\n this.configuration.registry[key].methods = [this.configuration.registry[key].original];\n }\n\n /**\n * Set a method as being final\n * This sets a method as having been finally overridden. Attempts at overriding\n * again will fail with an error.\n * @param {String} key The key to make final\n * @memberof HotPatcher\n * @returns {HotPatcher} Returns self\n */\n setFinal(key) {\n if (!this.configuration.registry.hasOwnProperty(key)) {\n throw new Error(`Failed marking '${key}' as final: No method found for key`);\n }\n this.configuration.registry[key].final = true;\n return this;\n }\n}\n\nmodule.exports = HotPatcher;\n","\"use strict\";\n\nconst {\n toBase64\n} = require(\"./encode.js\");\n\nconst {\n md5,\n ha1Compute\n} = require(\"./crypto.js\");\n\nfunction generateBasicAuthHeader(username, password) {\n const encoded = toBase64(`${username}:${password}`);\n return `Basic ${encoded}`;\n}\n\nfunction generateDigestAuthHeader(options, digest) {\n const url = options.url.replace(\"//\", \"\");\n const uri = url.indexOf(\"/\") == -1 ? \"/\" : url.slice(url.indexOf(\"/\"));\n const method = options.method ? options.method.toUpperCase() : \"GET\";\n const qop = /(^|,)\\s*auth\\s*($|,)/.test(digest.qop) ? \"auth\" : false;\n const ncString = `00000000${digest.nc}`.slice(-8);\n const cnonce = digest.cnonce;\n const ha1 = ha1Compute(digest.algorithm, digest.username, digest.realm, digest.password, digest.nonce, digest.cnonce);\n const ha2 = md5(`${method}:${uri}`);\n const digestResponse = qop ? md5(`${ha1}:${digest.nonce}:${ncString}:${digest.cnonce}:${qop}:${ha2}`) : md5(`${ha1}:${digest.nonce}:${ha2}`);\n const authValues = {\n username: digest.username,\n realm: digest.realm,\n nonce: digest.nonce,\n uri,\n qop,\n response: digestResponse,\n nc: ncString,\n cnonce: digest.cnonce,\n algorithm: digest.algorithm,\n opaque: digest.opaque\n };\n const authHeader = [];\n\n for (var k in authValues) {\n if (authValues[k]) {\n if (k === \"qop\" || k === \"nc\" || k === \"algorithm\") {\n authHeader.push(`${k}=${authValues[k]}`);\n } else {\n authHeader.push(`${k}=\"${authValues[k]}\"`);\n }\n }\n }\n\n return `Digest ${authHeader.join(\", \")}`;\n}\n\nfunction generateTokenAuthHeader(tokenInfo) {\n return `${tokenInfo.token_type} ${tokenInfo.access_token}`;\n}\n\nmodule.exports = {\n generateBasicAuthHeader,\n generateTokenAuthHeader,\n generateDigestAuthHeader\n};","\"use strict\";\n\nconst {\n createHash\n} = require(\"crypto\");\n\nfunction md5(data) {\n return createHash(\"md5\").update(data).digest(\"hex\");\n}\n\nfunction ha1Compute(algorithm, user, realm, pass, nonce, cnonce) {\n const ha1 = md5(`${user}:${realm}:${pass}`);\n\n if (algorithm && algorithm.toLowerCase() === \"md5-sess\") {\n return md5(`${ha1}:${nonce}:${cnonce}`);\n } else {\n return ha1;\n }\n}\n\nmodule.exports = {\n md5,\n ha1Compute\n};","\"use strict\";\n\nconst {\n decode,\n encode\n} = require(\"base-64\");\n\nfunction decodeHTMLEntities(str) {\n if (typeof WEB === \"undefined\") {\n // Node\n const he = require(\"he\");\n\n return he.decode(str);\n } else {\n // Nasty browser way\n const txt = document.createElement(\"textarea\");\n txt.innerHTML = str;\n return txt.value;\n }\n}\n\nfunction fromBase64(str) {\n return decode(str);\n}\n\nfunction toBase64(str) {\n return encode(str);\n}\n\nmodule.exports = {\n decodeHTMLEntities,\n fromBase64,\n toBase64\n};","\"use strict\";\n\nconst authTools = require(\"./auth.js\");\n\nconst urlTools = require(\"./url.js\");\n\nconst {\n merge\n} = require(\"./merge.js\");\n\nconst directoryContents = require(\"./interface/directoryContents.js\");\n\nconst createDir = require(\"./interface/createDirectory.js\");\n\nconst custom = require(\"./interface/custom.js\");\n\nconst deletion = require(\"./interface/delete.js\");\n\nconst pathsExist = require(\"./interface/exists.js\");\n\nconst getFile = require(\"./interface/getFile.js\");\n\nconst quota = require(\"./interface/quota.js\");\n\nconst move = require(\"./interface/moveFile.js\");\n\nconst copy = require(\"./interface/copyFile.js\");\n\nconst putFile = require(\"./interface/putFile.js\");\n\nconst stats = require(\"./interface/stat.js\");\n\nconst NOOP = () => {};\n/**\n * Client adapter\n * @typedef {Object} ClientInterface\n */\n\n/**\n * Options for creating a resource\n * @typedef {UserOptions} PutOptions\n * @property {Boolean=} overwrite - Whether or not to overwrite existing files (default: true)\n * @property {Number=} maxBodyLength - The maximum amount of bytes to upload (default: 10 MiB) (only in nodejs-environments)\n */\n\n/**\n * Options with headers and format\n * @typedef {UserOptions} OptionsWithFormat\n * @property {String} format - The format to use (text/binary)\n * @property {Boolean=} details - Provided detailed response information, such as response\n * headers (defaults to false). Only available on requests that return result data.\n * @property {Number=} maxContentLength - The maximum amount of bytes to download (default: 10 MiB)\n */\n\n/**\n * Options for methods that resturn responses\n * @typedef {UserOptions} OptionsForAdvancedResponses\n * @property {Boolean=} details - Provided detailed response information, such as response\n * headers (defaults to false). Only available on requests that return result data.\n */\n\n/**\n * @typedef {OptionsForAdvancedResponses} GetDirectoryContentsOptions\n * @property {Boolean=} deep - Return deep (infinite) items (default: false)\n * @property {String=} glob - Glob pattern for matching certain files\n */\n\n/**\n * @typedef {Object} AuthToken\n * @property {String} token_type - The type of token (eg \"Bearer\")\n * @property {String} access_token - The token access code\n */\n\n/**\n * @typedef {Object} CreateClientOptions\n * @property {String=} username - The username for authentication\n * @property {String=} password - The password for authentication\n * @property {http.Agent=} httpAgent - Override the HTTP Agent instance for requests\n * @property {https.Agent=} httpsAgent - Override the HTTPS Agent instance for requests\n * @property {AuthToken=} token - Optional OAuth token\n */\n\n/**\n * A stat result\n * @typedef {Object} Stat\n * @property {String} filename The full path and filename of the remote item\n * @property {String} basename The base filename of the remote item, without the path\n * @property {String|null} lastmod The last modification date (eg. \"Sun, 13 Mar 2016 04:23:32 GMT\")\n * @property {Number} size The size of the remote item\n * @property {String} type The type of the item (file/directory)\n * @property {String=} mime The file mimetype (not present on directories)\n * @property {String|null} etag The ETag of the remote item (as supported by the server)\n * @property {Object=} props Additionally returned properties from the server, unprocessed, if\n * `details: true` is specified in the options\n */\n\n/**\n * Create a client adapter\n * @param {String} remoteURL The remote address of the webdav server\n * @param {CreateClientOptions=} opts Client options\n * @returns {ClientInterface} A new client interface instance\n * @memberof module:WebDAV\n * @example\n * const createClient = require(\"webdav\");\n * const client = createClient(url, { username, password });\n * client\n * .getDirectoryContents(\"/\")\n * .then(contents => {\n * console.log(contents);\n * });\n * @example\n * const createClient = require(\"webdav\");\n * const client = createClient(url, {\n * token: { token_type: \"Bearer\", access_token: \"tokenvalue\" }\n * });\n * client\n * .getDirectoryContents(\"/\")\n * .then(contents => {\n * console.log(contents);\n * });\n */\n\n\nfunction createClient(remoteURL, opts = {}) {\n if (!opts || typeof opts !== \"object\") {\n throw new Error(\"Options must be an object, if specified\");\n }\n\n const {\n username,\n password,\n httpAgent,\n httpsAgent,\n token = null,\n digest = false\n } = opts;\n const runtimeOptions = {\n headers: {},\n remotePath: urlTools.extractURLPath(remoteURL),\n remoteURL,\n httpAgent,\n httpsAgent\n }; // Configure auth\n\n if (digest) {\n runtimeOptions._digest = {\n username,\n password,\n nc: 0,\n algorithm: \"md5\",\n hasDigestAuth: false\n };\n } else if (username) {\n runtimeOptions.headers.Authorization = authTools.generateBasicAuthHeader(username, password);\n } else if (token && typeof token === \"object\") {\n runtimeOptions.headers.Authorization = authTools.generateTokenAuthHeader(token);\n }\n\n return {\n /**\n * Copy a remote item to another path\n * @param {String} remotePath The remote item path\n * @param {String} targetRemotePath The path file will be copied to\n * @param {UserOptions=} options Options for the request\n * @memberof ClientInterface\n * @returns {Promise} A promise that resolves once the request has completed\n * @example\n * await client.copyFile(\"/photos/pic1.jpg\", \"/backup/pic1.jpg\");\n */\n copyFile: function copyFile(remotePath, targetRemotePath, options) {\n const copyOptions = merge(runtimeOptions, options || {});\n return copy.copyFile(remotePath, targetRemotePath, copyOptions);\n },\n\n /**\n * Create a directory\n * @param {String} dirPath The path to create\n * @param {UserOptions=} options Options for the request\n * @memberof ClientInterface\n * @returns {Promise} A promise that resolves when the remote path has been created\n * @example\n * await client.createDirectory(\"/my/directory\");\n */\n createDirectory: function createDirectory(dirPath, options) {\n const createOptions = merge(runtimeOptions, options || {});\n return createDir.createDirectory(dirPath, createOptions);\n },\n\n /**\n * Create a readable stream of a remote file\n * @param {String} remoteFilename The file to stream\n * @param {UserOptions=} options Options for the request\n * @memberof ClientInterface\n * @returns {Readable} A readable stream\n * @example\n * const remote = client.createReadStream(\"/data.zip\");\n * remote.pipe(someWriteStream);\n */\n createReadStream: function createReadStream(remoteFilename, options) {\n if (typeof WEB !== \"undefined\" && WEB === true) {\n throw new Error(\"createReadStream not implemented in web environment\");\n } else {\n const createStream = require(\"./interface/createStream.js\");\n\n const createOptions = merge(runtimeOptions, options || {});\n return createStream.createReadStream(remoteFilename, createOptions);\n }\n },\n\n /**\n * Create a writeable stream to a remote file\n * @param {String} remoteFilename The file to write to\n * @param {PutOptions=} options Options for the request\n * @param {Function=} callback Optional callback to fire\n * once the request has finished\n * @memberof ClientInterface\n * @returns {Writeable} A writeable stream\n * @example\n * const remote = client.createWriteStream(\"/data.zip\");\n * fs.createReadStream(\"~/myData.zip\").pipe(remote);\n */\n createWriteStream: function createWriteStream(remoteFilename, options, callback = NOOP) {\n if (typeof WEB !== \"undefined\" && WEB === true) {\n throw new Error(\"createWriteStream not implemented in web environment\");\n } else {\n const createStream = require(\"./interface/createStream.js\");\n\n const createOptions = merge(runtimeOptions, options || {});\n return createStream.createWriteStream(remoteFilename, createOptions, callback);\n }\n },\n\n /**\n * Send a custom request\n * @param {String} remotePath The remote path\n * @param {RequestOptions=} requestOptions the request options\n * @param {Options=} options Options for the request\n * @memberof ClientInterface\n * @returns {Promise<Any>} A promise that resolves with response of the request\n * @example\n * const contents = await client.customRequest(\"/alrighty.jpg\", {\n * method: \"PROPFIND\",\n * headers: {\n * Accept: \"text/plain\",\n * Depth: 0\n * },\n * responseType: \"text\"\n * });\n */\n customRequest: function customRequest(remotePath, requestOptions, options) {\n const customOptions = merge(runtimeOptions, options || {});\n return custom.customRequest(remotePath, requestOptions, customOptions);\n },\n\n /**\n * Delete a remote file\n * @param {String} remotePath The remote path to delete\n * @param {UserOptions=} options The options for the request\n * @memberof ClientInterface\n * @returns {Promise} A promise that resolves when the remote file as been deleted\n * @example\n * await client.deleteFile(\"/some/file.txt\");\n */\n deleteFile: function deleteFile(remotePath, options) {\n const deleteOptions = merge(runtimeOptions, options || {});\n return deletion.deleteFile(remotePath, deleteOptions);\n },\n\n /**\n * Check if a remote file or directory exists\n * @param {String} remotePath The remote path to check\n * @param {UserOptions=} options The options for the request\n * @memberof ClientInterface\n * @returns {Promise.<Boolean>} A promise that resolves with true if the path exists\n * or false if it does not\n * @example\n * if (await client.exists(\"/some-path/file.txt\")) {\n * // Do something\n * }\n */\n exists: function exists(remotePath, options) {\n const existsOptions = merge(runtimeOptions, options || {});\n return pathsExist.pathExists(remotePath, existsOptions);\n },\n\n /**\n * Get the contents of a remote directory\n * @param {String} remotePath The path to fetch the contents of\n * @param {GetDirectoryContentsOptions=} options Options for the remote the request\n * @returns {Promise.<Array.<Stat>>} A promise that resolves with an array of remote item stats\n * @memberof ClientInterface\n * @example\n * const contents = await client.getDirectoryContents(\"/\");\n */\n getDirectoryContents: function getDirectoryContents(remotePath, options) {\n const getOptions = merge(runtimeOptions, options || {});\n return directoryContents.getDirectoryContents(remotePath, getOptions);\n },\n\n /**\n * Get the contents of a remote file\n * @param {String} remoteFilename The file to fetch\n * @param {OptionsWithFormat=} options Options for the request\n * @memberof ClientInterface\n * @returns {Promise.<Buffer|String>} A promise that resolves with the contents of the remote file\n * @example\n * // Fetching data:\n * const buff = await client.getFileContents(\"/image.png\");\n * // Fetching text:\n * const txt = await client.getFileContents(\"/list.txt\", { format: \"text\" });\n */\n getFileContents: function getFileContents(remoteFilename, options) {\n const getOptions = merge(runtimeOptions, options || {});\n getOptions.format = getOptions.format || \"binary\";\n\n if ([\"binary\", \"text\"].indexOf(getOptions.format) < 0) {\n throw new Error(\"Unknown format: \" + getOptions.format);\n }\n\n return getOptions.format === \"text\" ? getFile.getFileContentsString(remoteFilename, getOptions) : getFile.getFileContentsBuffer(remoteFilename, getOptions);\n },\n\n /**\n * Get the download link of a remote file\n * Only supported for Basic authentication or unauthenticated connections.\n * @param {String} remoteFilename The file url to fetch\n * @param {UserOptions=} options Options for the request\n * @memberof ClientInterface\n * @returns {String} A download URL\n */\n getFileDownloadLink: function getFileDownloadLink(remoteFilename, options) {\n const getOptions = merge(runtimeOptions, options || {});\n return getFile.getFileLink(remoteFilename, getOptions);\n },\n\n /**\n * Get a file upload link\n * Only supported for Basic authentication or unauthenticated connections.\n * @param {String} remoteFilename The path of the remote file location\n * @param {PutOptions=} options The options for the request\n * @memberof ClientInterface\n * @returns {String} A upload URL\n */\n getFileUploadLink: function getFileUploadLink(remoteFilename, options) {\n var putOptions = merge(runtimeOptions, options || {});\n return putFile.getFileUploadLink(remoteFilename, putOptions);\n },\n\n /**\n * Get quota information\n * @param {OptionsForAdvancedResponses=} options Options for the request\n * @returns {Promise.<null|Object>} Returns null if failed, or an object with `used` and `available`\n * @memberof ClientInterface\n */\n getQuota: function getQuota(options) {\n const getOptions = merge(runtimeOptions, options || {});\n return quota.getQuota(getOptions);\n },\n\n /**\n * Move a remote item to another path\n * @param {String} remotePath The remote item path\n * @param {String} targetRemotePath The new path after moving\n * @param {UserOptions=} options Options for the request\n * @memberof ClientInterface\n * @returns {Promise} A promise that resolves once the request has completed\n * @example\n * await client.moveFile(\"/sub/file.dat\", \"/another/dir/file.dat\");\n */\n moveFile: function moveFile(remotePath, targetRemotePath, options) {\n const moveOptions = merge(runtimeOptions, options || {});\n return move.moveFile(remotePath, targetRemotePath, moveOptions);\n },\n\n /**\n * Write contents to a remote file path\n * @param {String} remoteFilename The path of the remote file\n * @param {String|Buffer} data The data to write\n * @param {PutOptions=} options The options for the request\n * @returns {Promise} A promise that resolves once the contents have been written\n * @memberof ClientInterface\n * @example\n * await client.putFileContents(\"/dir/image.png\", myImageBuffer);\n * // Put contents without overwriting:\n * await client.putFileContents(\"/dir/image.png\", myImageBuffer, { overwrite: false });\n */\n putFileContents: function putFileContents(remoteFilename, data, options) {\n const putOptions = merge(runtimeOptions, options || {});\n return putFile.putFileContents(remoteFilename, data, putOptions);\n },\n\n /**\n * Stat a remote object\n * @param {String} remotePath The path of the item\n * @param {OptionsForAdvancedResponses=} options Options for the request\n * @memberof ClientInterface\n * @returns {Promise.<Stat>} A promise that resolves with the stat data\n */\n stat: function stat(remotePath, options) {\n const getOptions = merge(runtimeOptions, options || {});\n return stats.getStat(remotePath, getOptions);\n }\n };\n}\n\nmodule.exports = {\n createClient\n};","\"use strict\";\n\nconst axios = require(\"axios\");\n\nconst {\n merge\n} = require(\"./merge.js\");\n\nconst {\n getPatcher\n} = require(\"./patcher.js\");\n\nconst {\n generateDigestAuthHeader\n} = require(\"./auth.js\");\n\nfunction makeNonce() {\n const cnonceSize = 32;\n const nonceRaw = \"abcdef0123456789\";\n let uid = \"\";\n\n for (let i = 0; i < cnonceSize; ++i) {\n uid += nonceRaw[Math.floor(Math.random() * nonceRaw.length)];\n }\n\n return uid;\n}\n\nfunction parseAuth(response, _digest) {\n const authHeader = response.headers[\"www-authenticate\"] || \"\";\n\n if (authHeader.split(/\\s/)[0].toLowerCase() !== \"digest\") {\n return false;\n }\n\n const re = /([a-z0-9_-]+)=(?:\"([^\"]+)\"|([a-z0-9_-]+))/gi;\n\n for (;;) {\n var match = re.exec(authHeader);\n\n if (!match) {\n break;\n }\n\n _digest[match[1]] = match[2] || match[3];\n }\n\n _digest.nc++;\n _digest.cnonce = makeNonce();\n return true;\n}\n\nfunction request(requestOptions) {\n return getPatcher().patchInline(\"request\", options => axios(options), requestOptions);\n}\n\nfunction fetch(requestOptions) {\n // Client not configured for digest authentication\n if (!requestOptions._digest) {\n return request(requestOptions);\n } // Remove client's digest authentication object from request options\n\n\n const _digest = requestOptions._digest;\n delete requestOptions._digest; // If client is already using digest authentication, include the digest authorization header\n\n if (_digest.hasDigestAuth) {\n requestOptions = merge(requestOptions, {\n headers: {\n Authorization: generateDigestAuthHeader(requestOptions, _digest)\n }\n });\n } // Perform the request and handle digest authentication\n\n\n return request(requestOptions).then(function (response) {\n if (response.status == 401) {\n _digest.hasDigestAuth = parseAuth(response, _digest);\n\n if (_digest.hasDigestAuth) {\n requestOptions = merge(requestOptions, {\n headers: {\n Authorization: generateDigestAuthHeader(requestOptions, _digest)\n }\n });\n return request(requestOptions).then(function (response2) {\n if (response2.status == 401) {\n _digest.hasDigestAuth = false;\n } else {\n _digest.nc++;\n }\n\n return response2;\n });\n }\n } else {\n _digest.nc++;\n }\n\n return response;\n });\n}\n\nmodule.exports = fetch;","\"use strict\";\n\nconst {\n axios\n} = require(\"./request.js\");\n\nconst {\n createClient\n} = require(\"./factory.js\");\n\nconst {\n getPatcher\n} = require(\"./patcher.js\");\n/**\n * @module WebDAV\n */\n\n\nmodule.exports = {\n /**\n * Axios request library\n * @type {Function}\n * @memberof module:WebDAV\n */\n axios,\n createClient,\n getPatcher\n};","\"use strict\";\n\nconst responseHandlers = require(\"../response.js\");\n\nconst {\n encodePath,\n joinURL,\n prepareRequestOptions,\n request\n} = require(\"../request.js\");\n\nfunction copyFile(filename, destination, options) {\n const requestOptions = {\n url: joinURL(options.remoteURL, encodePath(filename)),\n method: \"COPY\",\n headers: {\n Destination: joinURL(options.remoteURL, encodePath(destination))\n }\n };\n prepareRequestOptions(requestOptions, options);\n return request(requestOptions).then(responseHandlers.handleResponseCode);\n}\n\nmodule.exports = {\n copyFile\n};","\"use strict\";\n\nconst responseHandlers = require(\"../response.js\");\n\nconst {\n encodePath,\n joinURL,\n prepareRequestOptions,\n request\n} = require(\"../request.js\");\n\nfunction createDirectory(dirPath, options) {\n const requestOptions = {\n url: joinURL(options.remoteURL, encodePath(dirPath)),\n method: \"MKCOL\"\n };\n prepareRequestOptions(requestOptions, options);\n return request(requestOptions).then(responseHandlers.handleResponseCode);\n}\n\nmodule.exports = {\n createDirectory: createDirectory\n};","\"use strict\";\n\nconst responseHandlers = require(\"../response.js\");\n\nconst {\n encodePath,\n joinURL,\n prepareRequestOptions,\n request\n} = require(\"../request.js\");\n\nconst NOOP = () => {};\n\nfunction createReadStream(filePath, options) {\n const Stream = require(\"stream\");\n\n const PassThroughStream = Stream.PassThrough;\n const outStream = new PassThroughStream();\n getFileStream(filePath, options).then(stream => {\n stream.pipe(outStream);\n }).catch(err => {\n outStream.emit(\"error\", err);\n });\n return outStream;\n}\n\nfunction createWriteStream(filePath, options, callback = NOOP) {\n const Stream = require(\"stream\");\n\n const PassThroughStream = Stream.PassThrough;\n const writeStream = new PassThroughStream();\n const headers = {};\n\n if (options.overwrite === false) {\n headers[\"If-None-Match\"] = \"*\";\n }\n\n const requestOptions = {\n url: joinURL(options.remoteURL, encodePath(filePath)),\n method: \"PUT\",\n headers,\n data: writeStream,\n maxRedirects: 0\n };\n prepareRequestOptions(requestOptions, options);\n request(requestOptions).then(response => {\n // Fire callback asynchronously to avoid errors\n setTimeout(callback, 0);\n return response;\n }).then(responseHandlers.handleResponseCode).catch(err => {\n writeStream.emit(\"error\", err);\n });\n return writeStream;\n}\n\nfunction getFileStream(filePath, options) {\n let rangeHeader;\n const headers = {};\n\n if (typeof options.range === \"object\" && typeof options.range.start === \"number\") {\n rangeHeader = \"bytes=\" + options.range.start + \"-\";\n\n if (typeof options.range.end === \"number\") {\n rangeHeader += options.range.end;\n }\n\n headers.Range = rangeHeader;\n }\n\n const requestOptions = {\n url: joinURL(options.remoteURL, encodePath(filePath)),\n method: \"GET\",\n headers,\n responseType: \"stream\"\n };\n prepareRequestOptions(requestOptions, options);\n return request(requestOptions).then(responseHandlers.handleResponseCode).then(res => res.data);\n}\n\nmodule.exports = {\n createReadStream,\n createWriteStream\n};","\"use strict\";\n\nconst {\n handleResponseCode\n} = require(\"../response.js\");\n\nconst {\n encodePath,\n joinURL,\n prepareRequestOptions,\n request\n} = require(\"../request.js\");\n\nfunction customRequest(remotePath, requestOptions, options) {\n if (!requestOptions.url) {\n requestOptions.url = joinURL(options.remoteURL, encodePath(remotePath));\n }\n\n prepareRequestOptions(requestOptions, options);\n return request(requestOptions).then(handleResponseCode);\n}\n\nmodule.exports = {\n customRequest\n};","\"use strict\";\n\nconst xmlParser = require(\"fast-xml-parser\");\n\nconst nestedProp = require(\"nested-property\");\n\nconst {\n decodeHTMLEntities\n} = require(\"../encode.js\");\n\nfunction getPropertyOfType(obj, prop, type) {\n const val = nestedProp.get(obj, prop);\n\n if (type === \"array\" && Array.isArray(val) === false) {\n return [val];\n } else if (type === \"object\" && Array.isArray(val)) {\n return val[0];\n }\n\n return val;\n}\n\nfunction normaliseResponse(response) {\n const output = Object.assign({}, response);\n nestedProp.set(output, \"propstat\", getPropertyOfType(output, \"propstat\", \"object\"));\n nestedProp.set(output, \"propstat.prop\", getPropertyOfType(output, \"propstat.prop\", \"object\"));\n return output;\n}\n\nfunction normaliseResult(result) {\n const {\n multistatus\n } = result;\n\n if (multistatus === \"\") {\n return {\n multistatus: {\n response: []\n }\n };\n }\n\n if (!multistatus) {\n throw new Error(\"Invalid response: No root multistatus found\");\n }\n\n const output = {};\n output.multistatus = Array.isArray(multistatus) ? multistatus[0] : multistatus;\n nestedProp.set(output, \"multistatus.response\", getPropertyOfType(output, \"multistatus.response\", \"array\"));\n nestedProp.set(output, \"multistatus.response\", nestedProp.get(output, \"multistatus.response\").map(response => normaliseResponse(response)));\n return output;\n}\n\nfunction parseXML(xml) {\n return new Promise(resolve => {\n const result = xmlParser.parse(xml, {\n arrayMode: false,\n ignoreNameSpace: true // // We don't use the processors here as decoding is done manually\n // // later on - decoding early would break some path checks.\n // attrValueProcessor: val => decodeHTMLEntities(decodeURIComponent(val)),\n // tagValueProcessor: val => decodeHTMLEntities(decodeURIComponent(val))\n\n });\n resolve(normaliseResult(result));\n });\n}\n\nfunction prepareFileFromProps(props, rawFilename, isDetailed = false) {\n const path = require(\"path-posix\"); // Last modified time, raw size, item type and mime\n\n\n const {\n getlastmodified: lastMod = null,\n getcontentlength: rawSize = \"0\",\n resourcetype: resourceType = null,\n getcontenttype: mimeType = null,\n getetag: etag = null\n } = props;\n const type = resourceType && typeof resourceType === \"object\" && typeof resourceType.collection !== \"undefined\" ? \"directory\" : \"file\";\n const filename = decodeHTMLEntities(rawFilename);\n const stat = {\n filename: filename,\n basename: path.basename(filename),\n lastmod: lastMod,\n size: parseInt(rawSize, 10),\n type: type,\n etag: typeof etag === \"string\" ? etag.replace(/\"/g, \"\") : null\n };\n\n if (type === \"file\") {\n stat.mime = mimeType && typeof mimeType === \"string\" ? mimeType.split(\";\")[0] : \"\";\n }\n\n if (isDetailed) {\n stat.props = props;\n }\n\n return stat;\n}\n\nfunction translateDiskSpace(value) {\n switch (value.toString()) {\n case \"-3\":\n return \"unlimited\";\n\n case \"-2\":\n /* falls-through */\n\n case \"-1\":\n // -1 is non-computed\n return \"unknown\";\n\n default:\n return parseInt(value, 10);\n }\n}\n\nmodule.exports = {\n parseXML,\n prepareFileFromProps,\n translateDiskSpace\n};","\"use strict\";\n\nconst responseHandlers = require(\"../response.js\");\n\nconst {\n encodePath,\n joinURL,\n prepareRequestOptions,\n request\n} = require(\"../request.js\");\n\nfunction deleteFile(filename, options) {\n const requestOptions = {\n url: joinURL(options.remoteURL, encodePath(filename)),\n method: \"DELETE\"\n };\n prepareRequestOptions(requestOptions, options);\n return request(requestOptions).then(responseHandlers.handleResponseCode);\n}\n\nmodule.exports = {\n deleteFile\n};","\"use strict\";\n\nconst pathPosix = require(\"path-posix\");\n\nconst {\n merge\n} = require(\"../merge.js\");\n\nconst {\n handleResponseCode,\n processGlobFilter,\n processResponsePayload\n} = require(\"../response.js\");\n\nconst {\n normaliseHREF,\n normalisePath\n} = require(\"../url.js\");\n\nconst {\n parseXML,\n prepareFileFromProps\n} = require(\"./dav.js\");\n\nconst {\n encodePath,\n joinURL,\n prepareRequestOptions,\n request\n} = require(\"../request.js\");\n\nfunction getDirectoryContents(remotePath, options) {\n const requestOptions = {\n url: joinURL(options.remoteURL, encodePath(remotePath), \"/\"),\n method: \"PROPFIND\",\n headers: {\n Accept: \"text/plain\",\n Depth: options.deep ? \"infinity\" : 1\n },\n responseType: \"text\"\n };\n let response = null;\n prepareRequestOptions(requestOptions, options);\n return request(requestOptions).then(handleResponseCode).then(res => {\n response = res;\n return res.data;\n }).then(parseXML).then(result => getDirectoryFiles(result, options.remotePath, remotePath, options.details)).then(files => processResponsePayload(response, files, options.details)).then(files => options.glob ? processGlobFilter(files, options.glob) : files);\n}\n\nfunction getDirectoryFiles(result, serverBasePath, requestPath, isDetailed = false) {\n const serverBase = pathPosix.join(serverBasePath, \"/\"); // Extract the response items (directory contents)\n\n const {\n multistatus: {\n response: responseItems\n }\n } = result;\n return responseItems // Map all items to a consistent output structure (results)\n .map(item => {\n // HREF is the file path (in full)\n const href = normaliseHREF(item.href); // Each item should contain a stat object\n\n const {\n propstat: {\n prop: props\n }\n } = item; // Process the true full filename (minus the base server path)\n\n const filename = serverBase === \"/\" ? decodeURIComponent(normalisePath(href)) : decodeURIComponent(normalisePath(pathPosix.relative(serverBase, href)));\n return prepareFileFromProps(props, filename, isDetailed);\n }) // Filter out the item pointing to the current directory (not needed)\n .filter(item => item.basename && (item.type === \"file\" || item.filename !== requestPath.replace(/\\/$/, \"\")));\n}\n\nmodule.exports = {\n getDirectoryContents\n};","\"use strict\";\n\nconst {\n getStat\n} = require(\"./stat.js\");\n\nfunction pathExists(remotePath, options) {\n return getStat(remotePath, options).then(() => true).catch(err => {\n if (err.response && err.response.status === 404) {\n return false;\n }\n\n throw err;\n });\n}\n\nmodule.exports = {\n pathExists\n};","\"use strict\";\n\nconst {\n handleResponseCode,\n processResponsePayload\n} = require(\"../response.js\");\n\nconst {\n encodePath,\n joinURL,\n prepareRequestOptions,\n request\n} = require(\"../request.js\");\n\nconst {\n fromBase64\n} = require(\"../encode.js\");\n\nfunction getFileContentsBuffer(filePath, options) {\n const requestOptions = {\n url: joinURL(options.remoteURL, encodePath(filePath)),\n method: \"GET\",\n responseType: \"arraybuffer\"\n };\n prepareRequestOptions(requestOptions, options);\n return request(requestOptions).then(handleResponseCode).then(res => processResponsePayload(res, res.data, options.details));\n}\n\nfunction getFileContentsString(filePath, options) {\n const requestOptions = {\n url: joinURL(options.remoteURL, encodePath(filePath)),\n method: \"GET\",\n responseType: \"text\"\n };\n prepareRequestOptions(requestOptions, options);\n return request(requestOptions).then(handleResponseCode).then(res => processResponsePayload(res, res.data, options.details));\n}\n\nfunction getFileLink(filePath, options) {\n let url = joinURL(options.remoteURL, encodePath(filePath));\n const protocol = /^https:/i.test(url) ? \"https\" : \"http\";\n\n if (options.headers && options.headers.Authorization) {\n if (/^Basic /i.test(options.headers.Authorization) === false) {\n throw new Error(\"Failed retrieving download link: Invalid authorisation method\");\n }\n\n const authPart = options.headers.Authorization.replace(/^Basic /i, \"\").trim();\n const authContents = fromBase64(authPart);\n url = url.replace(/^https?:\\/\\//, `${protocol}://${authContents}@`);\n }\n\n return url;\n}\n\nmodule.exports = {\n getFileContentsBuffer,\n getFileContentsString,\n getFileLink\n};","\"use strict\";\n\nconst responseHandlers = require(\"../response.js\");\n\nconst {\n encodePath,\n joinURL,\n prepareRequestOptions,\n request\n} = require(\"../request.js\");\n\nfunction moveFile(filename, destination, options) {\n const requestOptions = {\n url: joinURL(options.remoteURL, encodePath(filename)),\n method: \"MOVE\",\n headers: {\n Destination: joinURL(options.remoteURL, encodePath(destination))\n }\n };\n prepareRequestOptions(requestOptions, options);\n return request(requestOptions).then(responseHandlers.handleResponseCode);\n}\n\nmodule.exports = {\n moveFile\n};","\"use strict\";\n\nconst {\n merge\n} = require(\"../merge.js\");\n\nconst responseHandlers = require(\"../response.js\");\n\nconst {\n encodePath,\n joinURL,\n prepareRequestOptions,\n request\n} = require(\"../request.js\");\n\nconst {\n fromBase64\n} = require(\"../encode.js\");\n\nfunction getPutContentsDefaults() {\n return {\n headers: {\n \"Content-Type\": \"application/octet-stream\"\n },\n overwrite: true\n };\n}\n\nfunction putFileContents(filePath, data, options) {\n const headers = {\n \"Content-Length\": data.length\n };\n\n if (typeof WEB === \"undefined\") {\n // We're running under NodeJS, so it's safe to check if the\n // input is a stream\n const stream = require(\"stream\");\n\n if (data instanceof stream.Readable) {\n // Input was a stream, remove the content length as this\n // is not known yet\n delete headers[\"Content-Length\"];\n }\n }\n\n const putOptions = merge(getPutContentsDefaults(), {\n headers\n }, options || {});\n\n if (putOptions.overwrite === false) {\n putOptions.headers[\"If-None-Match\"] = \"*\";\n }\n\n const requestOptions = {\n url: joinURL(options.remoteURL, encodePath(filePath)),\n method: \"PUT\",\n headers: putOptions.headers,\n data\n };\n prepareRequestOptions(requestOptions, options);\n return request(requestOptions).then(responseHandlers.handleResponseCode);\n}\n\nfunction getFileUploadLink(filePath, options) {\n let url = joinURL(options.remoteURL, encodePath(filePath));\n url += \"?Content-Type=application/octet-stream\";\n const protocol = /^https:/i.test(url) ? \"https\" : \"http\";\n\n if (options.headers && options.headers.Authorization) {\n if (/^Basic /i.test(options.headers.Authorization) === false) {\n throw new Error(\"Failed retrieving download link: Invalid authorisation method\");\n }\n\n const authPart = options.headers.Authorization.replace(/^Basic /i, \"\").trim();\n const authContents = fromBase64(authPart);\n url = url.replace(/^https?:\\/\\//, `${protocol}://${authContents}@`);\n }\n\n return url;\n}\n\nmodule.exports = {\n getFileUploadLink,\n putFileContents\n};","\"use strict\";\n\nconst {\n handleResponseCode,\n processResponsePayload\n} = require(\"../response.js\");\n\nconst {\n encodePath,\n joinURL,\n prepareRequestOptions,\n request\n} = require(\"../request.js\");\n\nconst {\n parseXML,\n translateDiskSpace\n} = require(\"./dav.js\");\n\nfunction getQuota(options) {\n const requestOptions = {\n url: joinURL(options.remoteURL, \"/\"),\n method: \"PROPFIND\",\n headers: {\n Accept: \"text/plain\",\n Depth: 0\n },\n responseType: \"text\"\n };\n let response = null;\n prepareRequestOptions(requestOptions, options);\n return request(requestOptions).then(handleResponseCode).then(res => {\n response = res;\n return res.data;\n }).then(parseXML).then(parseQuota).then(result => processResponsePayload(response, result, options.details));\n}\n\nfunction parseQuota(result) {\n try {\n const [responseItem] = result.multistatus.response;\n const {\n propstat: {\n prop: {\n \"quota-used-bytes\": quotaUsed,\n \"quota-available-bytes\": quotaAvail\n }\n }\n } = responseItem;\n return typeof quotaUsed !== \"undefined\" && typeof quotaAvail !== \"undefined\" ? {\n used: parseInt(quotaUsed, 10),\n available: translateDiskSpace(quotaAvail)\n } : null;\n } catch (err) {\n /* ignore */\n }\n\n return null;\n}\n\nmodule.exports = {\n getQuota\n};","\"use strict\";\n\nconst {\n merge\n} = require(\"../merge.js\");\n\nconst {\n handleResponseCode,\n processResponsePayload\n} = require(\"../response.js\");\n\nconst {\n parseXML,\n prepareFileFromProps\n} = require(\"./dav.js\");\n\nconst urlTools = require(\"../url.js\");\n\nconst {\n encodePath,\n joinURL,\n prepareRequestOptions,\n request\n} = require(\"../request.js\");\n\nfunction getStat(filename, options) {\n const requestOptions = {\n url: joinURL(options.remoteURL, encodePath(filename)),\n method: \"PROPFIND\",\n headers: {\n Accept: \"text/plain\",\n Depth: 0\n },\n responseType: \"text\"\n };\n let response = null;\n prepareRequestOptions(requestOptions, options);\n return request(requestOptions).then(handleResponseCode).then(res => {\n response = res;\n return res.data;\n }).then(parseXML).then(xml => parseStat(xml, filename, options.details)).then(result => processResponsePayload(response, result, options.details));\n}\n\nfunction parseStat(result, filename, isDetailed = false) {\n let responseItem = null;\n\n try {\n responseItem = result.multistatus.response[0];\n } catch (e) {\n /* ignore */\n }\n\n if (!responseItem) {\n throw new Error(\"Failed getting item stat: bad response\");\n }\n\n const {\n propstat: {\n prop: props\n }\n } = responseItem;\n const filePath = urlTools.normalisePath(filename);\n return prepareFileFromProps(props, filePath, isDetailed);\n}\n\nmodule.exports = {\n getStat,\n parseStat\n};","\"use strict\";\n\nfunction clone(obj) {\n return isPlainObject(obj) ? Object.assign({}, obj) : Object.setPrototypeOf(Object.assign({}, obj), Object.getPrototypeOf(obj));\n}\n\nfunction isPlainObject(obj) {\n if (typeof obj !== \"object\" || obj === null || Object.prototype.toString.call(obj) != \"[object Object]\") {\n // Not an object\n return false;\n }\n\n if (Object.getPrototypeOf(obj) === null) {\n return true;\n }\n\n let proto = obj; // Find the prototype\n\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n\n return Object.getPrototypeOf(obj) === proto;\n}\n\nfunction merge(...args) {\n let output = null,\n items = [...args];\n\n while (items.length > 0) {\n const nextItem = items.shift();\n\n if (!output) {\n output = clone(nextItem);\n } else {\n output = mergeObjects(output, nextItem);\n }\n }\n\n return output;\n}\n\nfunction mergeObjects(obj1, obj2) {\n const output = clone(obj1);\n Object.keys(obj2).forEach(key => {\n if (!output.hasOwnProperty(key)) {\n output[key] = obj2[key];\n return;\n }\n\n if (Array.isArray(obj2[key])) {\n output[key] = Array.isArray(output[key]) ? [...output[key], ...obj2[key]] : [...obj2[key]];\n } else if (typeof obj2[key] === \"object\" && !!obj2[key]) {\n output[key] = typeof output[key] === \"object\" && !!output[key] ? mergeObjects(output[key], obj2[key]) : clone(obj2[key]);\n } else {\n output[key] = obj2[key];\n }\n });\n return output;\n}\n\nmodule.exports = {\n merge\n};","\"use strict\";\n\nconst HotPatcher = require(\"hot-patcher\");\n\nlet __patcher = null;\n/**\n * Get the HotPatcher instance for patching internal methods\n * @returns {HotPatcher} The internal HotPatcher instance\n */\n\nfunction getPatcher() {\n if (!__patcher) {\n __patcher = new HotPatcher();\n }\n\n return __patcher;\n}\n\nmodule.exports = {\n getPatcher\n};","\"use strict\";\n\nconst axios = require(\"axios\");\n\nconst joinURLParts = require(\"url-join\");\n\nconst fetch = require(\"./fetch.js\");\n\nconst {\n merge\n} = require(\"./merge.js\");\n\nconst SEP_PATH_POSIX = \"__PATH_SEPARATOR_POSIX__\";\nconst SEP_PATH_WINDOWS = \"__PATH_SEPARATOR_WINDOWS__\";\n/**\n * Encode a path for use with WebDAV servers\n * @param {String} path The path to encode\n * @returns {String} The encoded path (separators protected)\n */\n\nfunction encodePath(path) {\n const replaced = path.replace(/\\//g, SEP_PATH_POSIX).replace(/\\\\\\\\/g, SEP_PATH_WINDOWS);\n const formatted = encodeURIComponent(replaced);\n return formatted.split(SEP_PATH_WINDOWS).join(\"\\\\\\\\\").split(SEP_PATH_POSIX).join(\"/\");\n}\n/**\n * Join URL segments\n * @param {...String} parts URL segments to join\n * @returns {String} A joined URL string\n */\n\n\nfunction joinURL(...parts) {\n return joinURLParts(parts.reduce((output, nextPart, partIndex) => {\n if (partIndex === 0 || nextPart !== \"/\" || nextPart === \"/\" && output[output.length - 1] !== \"/\") {\n output.push(nextPart);\n }\n\n return output;\n }, []));\n}\n/**\n * @typedef {Object} UserOptions\n * @property {Object=} httpAgent - HTTP agent instance\n * @property {Object=} httpsAgent - HTTPS agent instance\n * @property {Object=} headers - Set additional request headers\n * @property {Boolean=} withCredentials - Set whether or not credentials should\n * @property {Object|String|*=} data - Set additional body\n * be included with the request. Defaults to value used by axios.\n */\n\n/**\n * Process request options before being passed to Axios\n * @param {RequestOptions} requestOptions The request options object\n * @param {UserOptions} methodOptions Provided options (external)\n */\n\n\nfunction prepareRequestOptions(requestOptions, methodOptions) {\n if (methodOptions.httpAgent) {\n requestOptions.httpAgent = methodOptions.httpAgent;\n }\n\n if (methodOptions.httpsAgent) {\n requestOptions.httpsAgent = methodOptions.httpsAgent;\n }\n\n if (methodOptions.data) {\n requestOptions.data = methodOptions.data;\n }\n\n if (methodOptions.headers && typeof methodOptions.headers === \"object\") {\n requestOptions.headers = merge(requestOptions.headers || {}, methodOptions.headers);\n }\n\n if (typeof methodOptions.withCredentials === \"boolean\") {\n requestOptions.withCredentials = methodOptions.withCredentials;\n }\n\n if (methodOptions.maxContentLength) {\n requestOptions.maxContentLength = methodOptions.maxContentLength;\n }\n\n if (methodOptions.maxBodyLength) {\n requestOptions.maxBodyLength = methodOptions.maxBodyLength;\n }\n\n if (methodOptions.onUploadProgress && typeof methodOptions.onUploadProgress === \"function\") {\n requestOptions.onUploadProgress = methodOptions.onUploadProgress;\n }\n\n if (methodOptions._digest) {\n requestOptions._digest = methodOptions._digest;\n\n requestOptions.validateStatus = status => status >= 200 && status < 300 || status == 401;\n }\n}\n/**\n * @typedef {Object} RequestOptions\n * @property {String} url - The URL to request\n * @property {String} method - The method to use (eg. \"POST\")\n * @property {Object=} headers - Headers to set on the request\n * @property {Object=} httpAgent - A HTTP agent instance\n * @property {Object=} httpsAgent - A HTTPS agent interface\n * @property {Object|String|*=} data - Body data for the request\n */\n\n/**\n * Make a request\n * This method can be patched by patching or plugging-in to the \"request\"\n * item using {@link https://github.com/perry-mitchell/hot-patcher HotPatcher}.\n * It uses {@link https://github.com/axios/axios Axios} by default.\n * @param {RequestOptions} requestOptions Options for the request\n * @returns {Promise.<Object>} A promise that resolves with a response object\n */\n\n\nfunction request(requestOptions) {\n return fetch(requestOptions);\n}\n\nmodule.exports = {\n axios,\n encodePath,\n joinURL,\n prepareRequestOptions,\n request\n};","\"use strict\";\n\nconst minimatch = require(\"minimatch\");\n\nfunction handleResponseCode(response) {\n const status = parseInt(response.status, 10);\n let err;\n\n if (status >= 400) {\n err = new Error(\"Invalid response: \" + status + \" \" + response.statusText);\n err.status = status;\n throw err;\n }\n\n return response;\n}\n\nfunction processGlobFilter(files, glob) {\n return files.filter(file => minimatch(file.filename, glob, {\n matchBase: true\n }));\n}\n\nfunction processResponsePayload(response, data, isDetailed = false) {\n return isDetailed ? {\n data,\n headers: response.headers || {}\n } : data;\n}\n\nmodule.exports = {\n handleResponseCode,\n processGlobFilter,\n processResponsePayload\n};","\"use strict\";\n\nconst URL = require(\"url-parse\");\n\nfunction extractURLPath(fullURL) {\n const url = new URL(fullURL);\n let urlPath = url.pathname;\n\n if (urlPath.length <= 0) {\n urlPath = \"/\";\n }\n\n return normalisePath(urlPath);\n}\n\nfunction normaliseHREF(href) {\n const normalisedHref = href.replace(/^https?:\\/\\/[^\\/]+/, \"\");\n return normalisedHref;\n}\n\nfunction normalisePath(pathStr) {\n let normalisedPath = pathStr;\n\n if (normalisedPath[0] !== \"/\") {\n normalisedPath = \"/\" + normalisedPath;\n }\n\n if (/^.+\\/$/.test(normalisedPath)) {\n normalisedPath = normalisedPath.substr(0, normalisedPath.length - 1);\n }\n\n return normalisedPath;\n}\n\nmodule.exports = {\n extractURLPath,\n normaliseHREF,\n normalisePath\n};","'use strict';\nmodule.exports = balanced;\nfunction balanced(a, b, str) {\n if (a instanceof RegExp) a = maybeMatch(a, str);\n if (b instanceof RegExp) b = maybeMatch(b, str);\n\n var r = range(a, b, str);\n\n return r && {\n start: r[0],\n end: r[1],\n pre: str.slice(0, r[0]),\n body: str.slice(r[0] + a.length, r[1]),\n post: str.slice(r[1] + b.length)\n };\n}\n\nfunction maybeMatch(reg, str) {\n var m = str.match(reg);\n return m ? m[0] : null;\n}\n\nbalanced.range = range;\nfunction range(a, b, str) {\n var begs, beg, left, right, result;\n var ai = str.indexOf(a);\n var bi = str.indexOf(b, ai + 1);\n var i = ai;\n\n if (ai >= 0 && bi > 0) {\n begs = [];\n left = str.length;\n\n while (i >= 0 && !result) {\n if (i == ai) {\n begs.push(i);\n ai = str.indexOf(a, i + 1);\n } else if (begs.length == 1) {\n result = [ begs.pop(), bi ];\n } else {\n beg = begs.pop();\n if (beg < left) {\n left = beg;\n right = bi;\n }\n\n bi = str.indexOf(b, i + 1);\n }\n\n i = ai < bi && ai >= 0 ? ai : bi;\n }\n\n if (begs.length) {\n result = [ left, right ];\n }\n }\n\n return result;\n}\n","/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [number & 0x3ffffff];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [0];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this._strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // '0' - '9'\n if (c >= 48 && c <= 57) {\n return c - 48;\n // 'A' - 'F'\n } else if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n } else {\n assert(false, 'Invalid character in ' + string);\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this._strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var b = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n b = c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n b = c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n b = c;\n }\n assert(c >= 0 && b < mul, 'Invalid character');\n r += b;\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [0];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this._strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n function move (dest, src) {\n dest.words = src.words;\n dest.length = src.length;\n dest.negative = src.negative;\n dest.red = src.red;\n }\n\n BN.prototype._move = function _move (dest) {\n move(dest, this);\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype._strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n // Check Symbol.for because not everywhere where Symbol defined\n // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#Browser_compatibility\n if (typeof Symbol !== 'undefined' && typeof Symbol.for === 'function') {\n try {\n BN.prototype[Symbol.for('nodejs.util.inspect.custom')] = inspect;\n } catch (e) {\n BN.prototype.inspect = inspect;\n }\n } else {\n BN.prototype.inspect = inspect;\n }\n\n function inspect () {\n return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n }\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n 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","var concatMap = require('concat-map');\nvar balanced = require('balanced-match');\n\nmodule.exports = expandTop;\n\nvar escSlash = '\\0SLASH'+Math.random()+'\\0';\nvar escOpen = '\\0OPEN'+Math.random()+'\\0';\nvar escClose = '\\0CLOSE'+Math.random()+'\\0';\nvar escComma = '\\0COMMA'+Math.random()+'\\0';\nvar escPeriod = '\\0PERIOD'+Math.random()+'\\0';\n\nfunction numeric(str) {\n return parseInt(str, 10) == str\n ? parseInt(str, 10)\n : str.charCodeAt(0);\n}\n\nfunction escapeBraces(str) {\n return str.split('\\\\\\\\').join(escSlash)\n .split('\\\\{').join(escOpen)\n .split('\\\\}').join(escClose)\n .split('\\\\,').join(escComma)\n .split('\\\\.').join(escPeriod);\n}\n\nfunction unescapeBraces(str) {\n return str.split(escSlash).join('\\\\')\n .split(escOpen).join('{')\n .split(escClose).join('}')\n .split(escComma).join(',')\n .split(escPeriod).join('.');\n}\n\n\n// Basically just str.split(\",\"), but handling cases\n// where we have nested braced sections, which should be\n// treated as individual members, like {a,{b,c},d}\nfunction parseCommaParts(str) {\n if (!str)\n return [''];\n\n var parts = [];\n var m = balanced('{', '}', str);\n\n if (!m)\n return str.split(',');\n\n var pre = m.pre;\n var body = m.body;\n var post = m.post;\n var p = pre.split(',');\n\n p[p.length-1] += '{' + body + '}';\n var postParts = parseCommaParts(post);\n if (post.length) {\n p[p.length-1] += postParts.shift();\n p.push.apply(p, postParts);\n }\n\n parts.push.apply(parts, p);\n\n return parts;\n}\n\nfunction expandTop(str) {\n if (!str)\n return [];\n\n // I don't know why Bash 4.3 does this, but it does.\n // Anything starting with {} will have the first two bytes preserved\n // but *only* at the top level, so {},a}b will not expand to anything,\n // but a{},b}c will be expanded to [a}c,abc].\n // One could argue that this is a bug in Bash, but since the goal of\n // this module is to match Bash's rules, we escape a leading {}\n if (str.substr(0, 2) === '{}') {\n str = '\\\\{\\\\}' + str.substr(2);\n }\n\n return expand(escapeBraces(str), true).map(unescapeBraces);\n}\n\nfunction identity(e) {\n return e;\n}\n\nfunction embrace(str) {\n return '{' + str + '}';\n}\nfunction isPadded(el) {\n return /^-?0\\d/.test(el);\n}\n\nfunction lte(i, y) {\n return i <= y;\n}\nfunction gte(i, y) {\n return i >= y;\n}\n\nfunction expand(str, isTop) {\n var expansions = [];\n\n var m = balanced('{', '}', str);\n if (!m || /\\$$/.test(m.pre)) return [str];\n\n var isNumericSequence = /^-?\\d+\\.\\.-?\\d+(?:\\.\\.-?\\d+)?$/.test(m.body);\n var isAlphaSequence = /^[a-zA-Z]\\.\\.[a-zA-Z](?:\\.\\.-?\\d+)?$/.test(m.body);\n var isSequence = isNumericSequence || isAlphaSequence;\n var isOptions = m.body.indexOf(',') >= 0;\n if (!isSequence && !isOptions) {\n // {a},b}\n if (m.post.match(/,.*\\}/)) {\n str = m.pre + '{' + m.body + escClose + m.post;\n return expand(str);\n }\n return [str];\n }\n\n var n;\n if (isSequence) {\n n = m.body.split(/\\.\\./);\n } else {\n n = parseCommaParts(m.body);\n if (n.length === 1) {\n // x{{a,b}}y ==> x{a}y x{b}y\n n = expand(n[0], false).map(embrace);\n if (n.length === 1) {\n var post = m.post.length\n ? expand(m.post, false)\n : [''];\n return post.map(function(p) {\n return m.pre + n[0] + p;\n });\n }\n }\n }\n\n // at this point, n is the parts, and we know it's not a comma set\n // with a single entry.\n\n // no need to expand pre, since it is guaranteed to be free of brace-sets\n var pre = m.pre;\n var post = m.post.length\n ? expand(m.post, false)\n : [''];\n\n var N;\n\n if (isSequence) {\n var x = numeric(n[0]);\n var y = numeric(n[1]);\n var width = Math.max(n[0].length, n[1].length)\n var incr = n.length == 3\n ? Math.abs(numeric(n[2]))\n : 1;\n var test = lte;\n var reverse = y < x;\n if (reverse) {\n incr *= -1;\n test = gte;\n }\n var pad = n.some(isPadded);\n\n N = [];\n\n for (var i = x; test(i, y); i += incr) {\n var c;\n if (isAlphaSequence) {\n c = String.fromCharCode(i);\n if (c === '\\\\')\n c = '';\n } else {\n c = String(i);\n if (pad) {\n var need = width - c.length;\n if (need > 0) {\n var z = new Array(need + 1).join('0');\n if (i < 0)\n c = '-' + z + c.slice(1);\n else\n c = z + c;\n }\n }\n }\n N.push(c);\n }\n } else {\n N = concatMap(n, function(el) { return expand(el, false) });\n }\n\n for (var j = 0; j < N.length; j++) {\n for (var k = 0; k < post.length; k++) {\n var expansion = pre + N[j] + post[k];\n if (!isTop || isSequence || expansion)\n expansions.push(expansion);\n }\n }\n\n return expansions;\n}\n\n","var r;\n\nmodule.exports = function rand(len) {\n if (!r)\n r = new Rand(null);\n\n return r.generate(len);\n};\n\nfunction Rand(rand) {\n this.rand = rand;\n}\nmodule.exports.Rand = Rand;\n\nRand.prototype.generate = function generate(len) {\n return this._rand(len);\n};\n\n// Emulate crypto API using randy\nRand.prototype._rand = function _rand(n) {\n if (this.rand.getBytes)\n return this.rand.getBytes(n);\n\n var res = new Uint8Array(n);\n for (var i = 0; i < res.length; i++)\n res[i] = this.rand.getByte();\n return res;\n};\n\nif (typeof self === 'object') {\n if (self.crypto && self.crypto.getRandomValues) {\n // Modern browsers\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.crypto.getRandomValues(arr);\n return arr;\n };\n } else if (self.msCrypto && self.msCrypto.getRandomValues) {\n // IE\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.msCrypto.getRandomValues(arr);\n return arr;\n };\n\n // Safari's WebWorkers do not have `crypto`\n } else if (typeof window === 'object') {\n // Old junk\n Rand.prototype._rand = function() {\n throw new Error('Not implemented yet');\n };\n }\n} else {\n // Node.js or Web worker with no crypto support\n try {\n var crypto = require('crypto');\n if (typeof crypto.randomBytes !== 'function')\n throw new Error('Not supported');\n\n Rand.prototype._rand = function _rand(n) {\n return crypto.randomBytes(n);\n };\n } catch (e) {\n }\n}\n","// 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","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","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 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","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","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","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","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","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","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 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 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","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","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","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 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","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","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","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","var BN = require('bn.js')\nvar randomBytes = require('randombytes')\n\nfunction blind (priv) {\n var r = getr(priv)\n var blinder = r.toRed(BN.mont(priv.modulus)).redPow(new BN(priv.publicExponent)).fromRed()\n return { blinder: blinder, unblinder: r.invm(priv.modulus) }\n}\n\nfunction getr (priv) {\n var len = priv.modulus.byteLength()\n var r\n do {\n r = new BN(randomBytes(len))\n } while (r.cmp(priv.modulus) >= 0 || !r.umod(priv.prime1) || !r.umod(priv.prime2))\n return r\n}\n\nfunction crt (msg, priv) {\n var blinds = blind(priv)\n var len = priv.modulus.byteLength()\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).fromRed()\n var m2 = c2.redPow(priv.exponent2).fromRed()\n var h = m1.isub(m2).imul(qinv).umod(p).imul(q)\n return m2.iadd(h).imul(blinds.unblinder).umod(priv.modulus).toArrayLike(Buffer, 'be', len)\n}\ncrt.getr = getr\n\nmodule.exports = crt\n","module.exports = require('./browser/algorithms.json')\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","// 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","// 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';\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","// 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/*<replacement>*/\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/*</replacement>*/\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});","// 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};","// 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/*<replacement>*/\n\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n/*<replacement>*/\n\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\n\n\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\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/*<replacement>*/\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/*</replacement>*/\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}","// 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}","// 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/* <replacement> */\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/* </replacement> */\n\n/*<replacement>*/\n\n\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n/*<replacement>*/\n\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\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';\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\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}();","'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};","// 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;","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;","'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};","module.exports = require('events').EventEmitter;\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","/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\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","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","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <https://feross.org>\n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n const arr = new Uint8Array(1)\n const proto = { foo: function () { return 42 } }\n Object.setPrototypeOf(proto, Uint8Array.prototype)\n Object.setPrototypeOf(arr, proto)\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n const buf = new Uint8Array(length)\n Object.setPrototypeOf(buf, Buffer.prototype)\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value)\n }\n\n if (value == null) {\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' &&\n (isInstance(value, SharedArrayBuffer) ||\n (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n const valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n const b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n const length = byteLength(string, encoding) | 0\n let buf = createBuffer(length)\n\n const actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n const length = array.length < 0 ? 0 : checked(array.length) | 0\n const buf = createBuffer(length)\n for (let i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayView (arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n const copy = new Uint8Array(arrayView)\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n }\n return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n let buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(buf, Buffer.prototype)\n\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n const len = checked(obj.length) | 0\n const buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n let x = a.length\n let y = b.length\n\n for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n let i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n const buffer = Buffer.allocUnsafe(length)\n let pos = 0\n for (i = 0; i < list.length; ++i) {\n let buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n buf.copy(buffer, pos)\n } else {\n Uint8Array.prototype.set.call(\n buffer,\n buf,\n pos\n )\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n } else {\n buf.copy(buffer, pos)\n }\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n const len = string.length\n const mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n let loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n const i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n const len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (let i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n const len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (let i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n const len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (let i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n const length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n let str = ''\n const max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return '<Buffer ' + str + '>'\n}\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n let x = thisEnd - thisStart\n let y = end - start\n const len = Math.min(x, y)\n\n const thisCopy = this.slice(thisStart, thisEnd)\n const targetCopy = target.slice(start, end)\n\n for (let i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n let indexSize = 1\n let arrLength = arr.length\n let valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n let i\n if (dir) {\n let foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n let found = true\n for (let j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n const remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n const strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n let i\n for (i = 0; i < length; ++i) {\n const parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n const remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n case 'latin1':\n case 'binary':\n return asciiWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n const res = []\n\n let i = start\n while (i < end) {\n const firstByte = buf[i]\n let codePoint = null\n let bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n const len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n let res = ''\n let i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n const len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n let out = ''\n for (let i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n const bytes = buf.slice(start, end)\n let res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (let i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n const len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n const newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n let val = this[offset + --byteLength]\n let mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const lo = first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24\n\n const hi = this[++offset] +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n last * 2 ** 24\n\n return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const hi = first * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n const lo = this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last\n\n return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let i = byteLength\n let mul = 1\n let val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = this[offset + 4] +\n this[offset + 5] * 2 ** 8 +\n this[offset + 6] * 2 ** 16 +\n (last << 24) // Overflow\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = (first << 24) + // Overflow\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let mul = 1\n let i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let i = byteLength - 1\n let mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset + 7] = lo\n lo = lo >> 8\n buf[offset + 6] = lo\n lo = lo >> 8\n buf[offset + 5] = lo\n lo = lo >> 8\n buf[offset + 4] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset + 3] = hi\n hi = hi >> 8\n buf[offset + 2] = hi\n hi = hi >> 8\n buf[offset + 1] = hi\n hi = hi >> 8\n buf[offset] = hi\n return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = 0\n let mul = 1\n let sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = byteLength - 1\n let mul = 1\n let sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n const len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n const code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n } else if (typeof val === 'boolean') {\n val = Number(val)\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n let i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n const bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n const len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n errors[sym] = class NodeError extends Base {\n constructor () {\n super()\n\n Object.defineProperty(this, 'message', {\n value: getMessage.apply(this, arguments),\n writable: true,\n configurable: true\n })\n\n // Add the error code to the name to include it in the stack trace.\n this.name = `${this.name} [${sym}]`\n // Access the stack to generate the error message including the error code\n // from the name.\n this.stack // eslint-disable-line no-unused-expressions\n // Reset the name to the actual name.\n delete this.name\n }\n\n get code () {\n return sym\n }\n\n set code (value) {\n Object.defineProperty(this, 'code', {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n })\n }\n\n toString () {\n return `${this.name} [${sym}]: ${this.message}`\n }\n }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n function (name) {\n if (name) {\n return `${name} is outside of buffer bounds`\n }\n\n return 'Attempt to access memory outside buffer bounds'\n }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n function (name, actual) {\n return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n }, TypeError)\nE('ERR_OUT_OF_RANGE',\n function (str, range, input) {\n let msg = `The value of \"${str}\" is out of range.`\n let received = input\n if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n received = addNumericalSeparator(String(input))\n } else if (typeof input === 'bigint') {\n received = String(input)\n if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n received = addNumericalSeparator(received)\n }\n received += 'n'\n }\n msg += ` It must be ${range}. Received ${received}`\n return msg\n }, RangeError)\n\nfunction addNumericalSeparator (val) {\n let res = ''\n let i = val.length\n const start = val[0] === '-' ? 1 : 0\n for (; i >= start + 4; i -= 3) {\n res = `_${val.slice(i - 3, i)}${res}`\n }\n return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n validateNumber(offset, 'offset')\n if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n boundsError(offset, buf.length - (byteLength + 1))\n }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n if (value > max || value < min) {\n const n = typeof min === 'bigint' ? 'n' : ''\n let range\n if (byteLength > 3) {\n if (min === 0 || min === BigInt(0)) {\n range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n } else {\n range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n `${(byteLength + 1) * 8 - 1}${n}`\n }\n } else {\n range = `>= ${min}${n} and <= ${max}${n}`\n }\n throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n }\n checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n if (typeof value !== 'number') {\n throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n }\n}\n\nfunction boundsError (value, length, type) {\n if (Math.floor(value) !== value) {\n validateNumber(value, type)\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n }\n\n if (length < 0) {\n throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n }\n\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n `>= ${type ? 1 : 0} and <= ${length}`,\n value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n let codePoint\n const length = string.length\n let leadSurrogate = null\n const bytes = []\n\n for (let i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n let c, hi, lo\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n let i\n for (i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n const alphabet = '0123456789abcdef'\n const table = new Array(256)\n for (let i = 0; i < 16; ++i) {\n const i16 = i * 16\n for (let j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n throw new Error('BigInt not supported')\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","module.exports = function (xs, fn) {\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n var x = fn(xs[i], i);\n if (isArray(x)) res.push.apply(res, x);\n else res.push(x);\n }\n return res;\n};\n\nvar isArray = Array.isArray || function (xs) {\n return Object.prototype.toString.call(xs) === '[object Array]';\n};\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","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n 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'\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","var MD5 = require('md5.js')\n\nmodule.exports = function (buffer) {\n return new MD5().update(buffer).digest()\n}\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'\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","'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","'use strict';\n\nexports.utils = require('./des/utils');\nexports.Cipher = require('./des/cipher');\nexports.DES = require('./des/des');\nexports.CBC = require('./des/cbc');\nexports.EDE = require('./des/ede');\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar proto = {};\n\nfunction CBCState(iv) {\n assert.equal(iv.length, 8, 'Invalid IV length');\n\n this.iv = new Array(8);\n for (var i = 0; i < this.iv.length; i++)\n this.iv[i] = iv[i];\n}\n\nfunction instantiate(Base) {\n function CBC(options) {\n Base.call(this, options);\n this._cbcInit();\n }\n inherits(CBC, Base);\n\n var keys = Object.keys(proto);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n CBC.prototype[key] = proto[key];\n }\n\n CBC.create = function create(options) {\n return new CBC(options);\n };\n\n return CBC;\n}\n\nexports.instantiate = instantiate;\n\nproto._cbcInit = function _cbcInit() {\n var state = new CBCState(this.options.iv);\n this._cbcState = state;\n};\n\nproto._update = function _update(inp, inOff, out, outOff) {\n var state = this._cbcState;\n var superProto = this.constructor.super_.prototype;\n\n var iv = state.iv;\n if (this.type === 'encrypt') {\n for (var i = 0; i < this.blockSize; i++)\n iv[i] ^= inp[inOff + i];\n\n superProto._update.call(this, iv, 0, out, outOff);\n\n for (var i = 0; i < this.blockSize; i++)\n iv[i] = out[outOff + i];\n } else {\n superProto._update.call(this, inp, inOff, out, outOff);\n\n for (var i = 0; i < this.blockSize; i++)\n out[outOff + i] ^= iv[i];\n\n for (var i = 0; i < this.blockSize; i++)\n iv[i] = inp[inOff + i];\n }\n};\n","'use strict';\n\nvar assert = require('minimalistic-assert');\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\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","'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","'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","var generatePrime = require('./lib/generatePrime')\nvar primes = require('./lib/primes.json')\n\nvar DH = require('./lib/dh')\n\nfunction getDiffieHellman (mod) {\n var prime = new Buffer(primes[mod].prime, 'hex')\n var gen = new Buffer(primes[mod].gen, 'hex')\n\n return new DH(prime, gen)\n}\n\nvar ENCODINGS = {\n 'binary': true, 'hex': true, 'base64': true\n}\n\nfunction createDiffieHellman (prime, enc, generator, genc) {\n if (Buffer.isBuffer(enc) || ENCODINGS[enc] === undefined) {\n return createDiffieHellman(prime, 'binary', enc, generator)\n }\n\n enc = enc || 'binary'\n genc = genc || 'binary'\n generator = generator || new Buffer([2])\n\n if (!Buffer.isBuffer(generator)) {\n generator = new Buffer(generator, genc)\n }\n\n if (typeof prime === 'number') {\n return new DH(generatePrime(prime, generator), generator, true)\n }\n\n if (!Buffer.isBuffer(prime)) {\n prime = new Buffer(prime, enc)\n }\n\n return new DH(prime, generator, true)\n}\n\nexports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffieHellman = getDiffieHellman\nexports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman\n","var BN = require('bn.js');\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar TWENTYFOUR = new BN(24);\nvar ELEVEN = new BN(11);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar primes = require('./generatePrime');\nvar randomBytes = require('randombytes');\nmodule.exports = DH;\n\nfunction setPublicKey(pub, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(pub)) {\n pub = new Buffer(pub, enc);\n }\n this._pub = new BN(pub);\n return this;\n}\n\nfunction setPrivateKey(priv, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(priv)) {\n priv = new Buffer(priv, enc);\n }\n this._priv = new BN(priv);\n return this;\n}\n\nvar primeCache = {};\nfunction checkPrime(prime, generator) {\n var gen = generator.toString('hex');\n var hex = [gen, prime.toString(16)].join('_');\n if (hex in primeCache) {\n return primeCache[hex];\n }\n var error = 0;\n\n if (prime.isEven() ||\n !primes.simpleSieve ||\n !primes.fermatTest(prime) ||\n !millerRabin.test(prime)) {\n //not a prime so +1\n error += 1;\n\n if (gen === '02' || gen === '05') {\n // we'd be able to check the generator\n // it would fail so +8\n error += 8;\n } else {\n //we wouldn't be able to test the generator\n // so +4\n error += 4;\n }\n primeCache[hex] = error;\n return error;\n }\n if (!millerRabin.test(prime.shrn(1))) {\n //not a safe prime\n error += 2;\n }\n var rem;\n switch (gen) {\n case '02':\n if (prime.mod(TWENTYFOUR).cmp(ELEVEN)) {\n // unsuidable generator\n error += 8;\n }\n break;\n case '05':\n rem = prime.mod(TEN);\n if (rem.cmp(THREE) && rem.cmp(SEVEN)) {\n // prime mod 10 needs to equal 3 or 7\n error += 8;\n }\n break;\n default:\n error += 4;\n }\n primeCache[hex] = error;\n return error;\n}\n\nfunction DH(prime, generator, malleable) {\n this.setGenerator(generator);\n this.__prime = new BN(prime);\n this._prime = BN.mont(this.__prime);\n this._primeLen = prime.length;\n this._pub = undefined;\n this._priv = undefined;\n this._primeCode = undefined;\n if (malleable) {\n this.setPublicKey = setPublicKey;\n this.setPrivateKey = setPrivateKey;\n } else {\n this._primeCode = 8;\n }\n}\nObject.defineProperty(DH.prototype, 'verifyError', {\n enumerable: true,\n get: function () {\n if (typeof this._primeCode !== 'number') {\n this._primeCode = checkPrime(this.__prime, this.__gen);\n }\n return this._primeCode;\n }\n});\nDH.prototype.generateKeys = function () {\n if (!this._priv) {\n this._priv = new BN(randomBytes(this._primeLen));\n }\n this._pub = this._gen.toRed(this._prime).redPow(this._priv).fromRed();\n return this.getPublicKey();\n};\n\nDH.prototype.computeSecret = function (other) {\n other = new BN(other);\n other = other.toRed(this._prime);\n var secret = other.redPow(this._priv).fromRed();\n var out = new Buffer(secret.toArray());\n var prime = this.getPrime();\n if (out.length < prime.length) {\n var front = new Buffer(prime.length - out.length);\n front.fill(0);\n out = Buffer.concat([front, out]);\n }\n return out;\n};\n\nDH.prototype.getPublicKey = function getPublicKey(enc) {\n return formatReturnValue(this._pub, enc);\n};\n\nDH.prototype.getPrivateKey = function getPrivateKey(enc) {\n return formatReturnValue(this._priv, enc);\n};\n\nDH.prototype.getPrime = function (enc) {\n return formatReturnValue(this.__prime, enc);\n};\n\nDH.prototype.getGenerator = function (enc) {\n return formatReturnValue(this._gen, enc);\n};\n\nDH.prototype.setGenerator = function (gen, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(gen)) {\n gen = new Buffer(gen, enc);\n }\n this.__gen = gen;\n this._gen = new BN(gen);\n return this;\n};\n\nfunction formatReturnValue(bn, enc) {\n var buf = new Buffer(bn.toArray());\n if (!enc) {\n return buf;\n } else {\n return buf.toString(enc);\n }\n}\n","var randomBytes = require('randombytes');\nmodule.exports = findPrime;\nfindPrime.simpleSieve = simpleSieve;\nfindPrime.fermatTest = fermatTest;\nvar BN = require('bn.js');\nvar TWENTYFOUR = new BN(24);\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar ONE = new BN(1);\nvar TWO = new BN(2);\nvar FIVE = new BN(5);\nvar SIXTEEN = new BN(16);\nvar EIGHT = new BN(8);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar ELEVEN = new BN(11);\nvar FOUR = new BN(4);\nvar TWELVE = new BN(12);\nvar primes = null;\n\nfunction _getPrimes() {\n if (primes !== null)\n return primes;\n\n var limit = 0x100000;\n var res = [];\n res[0] = 2;\n for (var i = 1, k = 3; k < limit; k += 2) {\n var sqrt = Math.ceil(Math.sqrt(k));\n for (var j = 0; j < i && res[j] <= sqrt; j++)\n if (k % res[j] === 0)\n break;\n\n if (i !== j && res[j] <= sqrt)\n continue;\n\n res[i++] = k;\n }\n primes = res;\n return res;\n}\n\nfunction simpleSieve(p) {\n var primes = _getPrimes();\n\n for (var i = 0; i < primes.length; i++)\n if (p.modn(primes[i]) === 0) {\n if (p.cmpn(primes[i]) === 0) {\n return true;\n } else {\n return false;\n }\n }\n\n return true;\n}\n\nfunction fermatTest(p) {\n var red = BN.mont(p);\n return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0;\n}\n\nfunction findPrime(bits, gen) {\n if (bits < 16) {\n // this is what openssl does\n if (gen === 2 || gen === 5) {\n return new BN([0x8c, 0x7b]);\n } else {\n return new BN([0x8c, 0x27]);\n }\n }\n gen = new BN(gen);\n\n var num, n2;\n\n while (true) {\n num = new BN(randomBytes(Math.ceil(bits / 8)));\n while (num.bitLength() > bits) {\n num.ishrn(1);\n }\n if (num.isEven()) {\n num.iadd(ONE);\n }\n if (!num.testn(1)) {\n num.iadd(TWO);\n }\n if (!gen.cmp(TWO)) {\n while (num.mod(TWENTYFOUR).cmp(ELEVEN)) {\n num.iadd(FOUR);\n }\n } else if (!gen.cmp(FIVE)) {\n while (num.mod(TEN).cmp(THREE)) {\n num.iadd(FOUR);\n }\n }\n n2 = num.shrn(1);\n if (simpleSieve(n2) && simpleSieve(num) &&\n fermatTest(n2) && fermatTest(num) &&\n millerRabin.test(n2) && millerRabin.test(num)) {\n return num;\n }\n }\n\n}\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n 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 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","'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 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 '<EC Point Infinity>';\n return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n ' y: ' + this.y.fromRed().toString(16, 2) +\n ' z: ' + this.z.fromRed().toString(16, 2) + '>';\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","'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 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 '<EC Point Infinity>';\n return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n ' z: ' + this.z.fromRed().toString(16, 2) + '>';\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","'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 '<EC Point Infinity>';\n return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n ' y: ' + this.y.fromRed().toString(16, 2) + '>';\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 '<EC JPoint Infinity>';\n return '<EC JPoint x: ' + this.x.toString(16, 2) +\n ' y: ' + this.y.toString(16, 2) +\n ' z: ' + this.z.toString(16, 2) + '>';\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 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 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 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 '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +\n ' pub: ' + (this.pub && this.pub.inspect()) + ' >';\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","'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","'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<Byte>} [params.secret] - secret seed bytes\n* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)\n* @param {Array<Byte>} [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","'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<Bytes>|Object} sig -\n* @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes\n* @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes\n* @param {Array<Bytes>} [sig.Rencoded] - R point encoded\n* @param {Array<Bytes>} [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","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","'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","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n 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","// 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\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\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","'use strict';\n//parse Empty Node as self closing node\nconst buildOptions = require('./util').buildOptions;\n\nconst defaultOptions = {\n attributeNamePrefix: '@_',\n attrNodeName: false,\n textNodeName: '#text',\n ignoreAttributes: true,\n cdataTagName: false,\n cdataPositionChar: '\\\\c',\n format: false,\n indentBy: ' ',\n supressEmptyNode: false,\n tagValueProcessor: function(a) {\n return a;\n },\n attrValueProcessor: function(a) {\n return a;\n },\n};\n\nconst props = [\n 'attributeNamePrefix',\n 'attrNodeName',\n 'textNodeName',\n 'ignoreAttributes',\n 'cdataTagName',\n 'cdataPositionChar',\n 'format',\n 'indentBy',\n 'supressEmptyNode',\n 'tagValueProcessor',\n 'attrValueProcessor',\n];\n\nfunction Parser(options) {\n this.options = buildOptions(options, defaultOptions, props);\n if (this.options.ignoreAttributes || this.options.attrNodeName) {\n this.isAttribute = function(/*a*/) {\n return false;\n };\n } else {\n this.attrPrefixLen = this.options.attributeNamePrefix.length;\n this.isAttribute = isAttribute;\n }\n if (this.options.cdataTagName) {\n this.isCDATA = isCDATA;\n } else {\n this.isCDATA = function(/*a*/) {\n return false;\n };\n }\n this.replaceCDATAstr = replaceCDATAstr;\n this.replaceCDATAarr = replaceCDATAarr;\n\n if (this.options.format) {\n this.indentate = indentate;\n this.tagEndChar = '>\\n';\n this.newLine = '\\n';\n } else {\n this.indentate = function() {\n return '';\n };\n this.tagEndChar = '>';\n this.newLine = '';\n }\n\n if (this.options.supressEmptyNode) {\n this.buildTextNode = buildEmptyTextNode;\n this.buildObjNode = buildEmptyObjNode;\n } else {\n this.buildTextNode = buildTextValNode;\n this.buildObjNode = buildObjectNode;\n }\n\n this.buildTextValNode = buildTextValNode;\n this.buildObjectNode = buildObjectNode;\n}\n\nParser.prototype.parse = function(jObj) {\n return this.j2x(jObj, 0).val;\n};\n\nParser.prototype.j2x = function(jObj, level) {\n let attrStr = '';\n let val = '';\n const keys = Object.keys(jObj);\n const len = keys.length;\n for (let i = 0; i < len; i++) {\n const key = keys[i];\n if (typeof jObj[key] === 'undefined') {\n // supress undefined node\n } else if (jObj[key] === null) {\n val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;\n } else if (jObj[key] instanceof Date) {\n val += this.buildTextNode(jObj[key], key, '', level);\n } else if (typeof jObj[key] !== 'object') {\n //premitive type\n const attr = this.isAttribute(key);\n if (attr) {\n attrStr += ' ' + attr + '=\"' + this.options.attrValueProcessor('' + jObj[key]) + '\"';\n } else if (this.isCDATA(key)) {\n if (jObj[this.options.textNodeName]) {\n val += this.replaceCDATAstr(jObj[this.options.textNodeName], jObj[key]);\n } else {\n val += this.replaceCDATAstr('', jObj[key]);\n }\n } else {\n //tag value\n if (key === this.options.textNodeName) {\n if (jObj[this.options.cdataTagName]) {\n //value will added while processing cdata\n } else {\n val += this.options.tagValueProcessor('' + jObj[key]);\n }\n } else {\n val += this.buildTextNode(jObj[key], key, '', level);\n }\n }\n } else if (Array.isArray(jObj[key])) {\n //repeated nodes\n if (this.isCDATA(key)) {\n val += this.indentate(level);\n if (jObj[this.options.textNodeName]) {\n val += this.replaceCDATAarr(jObj[this.options.textNodeName], jObj[key]);\n } else {\n val += this.replaceCDATAarr('', jObj[key]);\n }\n } else {\n //nested nodes\n const arrLen = jObj[key].length;\n for (let j = 0; j < arrLen; j++) {\n const item = jObj[key][j];\n if (typeof item === 'undefined') {\n // supress undefined node\n } else if (item === null) {\n val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;\n } else if (typeof item === 'object') {\n const result = this.j2x(item, level + 1);\n val += this.buildObjNode(result.val, key, result.attrStr, level);\n } else {\n val += this.buildTextNode(item, key, '', level);\n }\n }\n }\n } else {\n //nested node\n if (this.options.attrNodeName && key === this.options.attrNodeName) {\n const Ks = Object.keys(jObj[key]);\n const L = Ks.length;\n for (let j = 0; j < L; j++) {\n attrStr += ' ' + Ks[j] + '=\"' + this.options.attrValueProcessor('' + jObj[key][Ks[j]]) + '\"';\n }\n } else {\n const result = this.j2x(jObj[key], level + 1);\n val += this.buildObjNode(result.val, key, result.attrStr, level);\n }\n }\n }\n return {attrStr: attrStr, val: val};\n};\n\nfunction replaceCDATAstr(str, cdata) {\n str = this.options.tagValueProcessor('' + str);\n if (this.options.cdataPositionChar === '' || str === '') {\n return str + '<![CDATA[' + cdata + ']]' + this.tagEndChar;\n } else {\n return str.replace(this.options.cdataPositionChar, '<![CDATA[' + cdata + ']]' + this.tagEndChar);\n }\n}\n\nfunction replaceCDATAarr(str, cdata) {\n str = this.options.tagValueProcessor('' + str);\n if (this.options.cdataPositionChar === '' || str === '') {\n return str + '<![CDATA[' + cdata.join(']]><![CDATA[') + ']]' + this.tagEndChar;\n } else {\n for (let v in cdata) {\n str = str.replace(this.options.cdataPositionChar, '<![CDATA[' + cdata[v] + ']]>');\n }\n return str + this.newLine;\n }\n}\n\nfunction buildObjectNode(val, key, attrStr, level) {\n if (attrStr && !val.includes('<')) {\n return (\n this.indentate(level) +\n '<' +\n key +\n attrStr +\n '>' +\n val +\n //+ this.newLine\n // + this.indentate(level)\n '</' +\n key +\n this.tagEndChar\n );\n } else {\n return (\n this.indentate(level) +\n '<' +\n key +\n attrStr +\n this.tagEndChar +\n val +\n //+ this.newLine\n this.indentate(level) +\n '</' +\n key +\n this.tagEndChar\n );\n }\n}\n\nfunction buildEmptyObjNode(val, key, attrStr, level) {\n if (val !== '') {\n return this.buildObjectNode(val, key, attrStr, level);\n } else {\n return this.indentate(level) + '<' + key + attrStr + '/' + this.tagEndChar;\n //+ this.newLine\n }\n}\n\nfunction buildTextValNode(val, key, attrStr, level) {\n return (\n this.indentate(level) +\n '<' +\n key +\n attrStr +\n '>' +\n this.options.tagValueProcessor(val) +\n '</' +\n key +\n this.tagEndChar\n );\n}\n\nfunction buildEmptyTextNode(val, key, attrStr, level) {\n if (val !== '') {\n return this.buildTextValNode(val, key, attrStr, level);\n } else {\n return this.indentate(level) + '<' + key + attrStr + '/' + this.tagEndChar;\n }\n}\n\nfunction indentate(level) {\n return this.options.indentBy.repeat(level);\n}\n\nfunction isAttribute(name /*, options*/) {\n if (name.startsWith(this.options.attributeNamePrefix)) {\n return name.substr(this.attrPrefixLen);\n } else {\n return false;\n }\n}\n\nfunction isCDATA(name) {\n return name === this.options.cdataTagName;\n}\n\n//formatting\n//indentation\n//\\n after each closing or self closing tag\n\nmodule.exports = Parser;\n","'use strict';\nconst char = function(a) {\n return String.fromCharCode(a);\n};\n\nconst chars = {\n nilChar: char(176),\n missingChar: char(201),\n nilPremitive: char(175),\n missingPremitive: char(200),\n\n emptyChar: char(178),\n emptyValue: char(177), //empty Premitive\n\n boundryChar: char(179),\n\n objStart: char(198),\n arrStart: char(204),\n arrayEnd: char(185),\n};\n\nconst charsArr = [\n chars.nilChar,\n chars.nilPremitive,\n chars.missingChar,\n chars.missingPremitive,\n chars.boundryChar,\n chars.emptyChar,\n chars.emptyValue,\n chars.arrayEnd,\n chars.objStart,\n chars.arrStart,\n];\n\nconst _e = function(node, e_schema, options) {\n if (typeof e_schema === 'string') {\n //premitive\n if (node && node[0] && node[0].val !== undefined) {\n return getValue(node[0].val, e_schema);\n } else {\n return getValue(node, e_schema);\n }\n } else {\n const hasValidData = hasData(node);\n if (hasValidData === true) {\n let str = '';\n if (Array.isArray(e_schema)) {\n //attributes can't be repeated. hence check in children tags only\n str += chars.arrStart;\n const itemSchema = e_schema[0];\n //var itemSchemaType = itemSchema;\n const arr_len = node.length;\n\n if (typeof itemSchema === 'string') {\n for (let arr_i = 0; arr_i < arr_len; arr_i++) {\n const r = getValue(node[arr_i].val, itemSchema);\n str = processValue(str, r);\n }\n } else {\n for (let arr_i = 0; arr_i < arr_len; arr_i++) {\n const r = _e(node[arr_i], itemSchema, options);\n str = processValue(str, r);\n }\n }\n str += chars.arrayEnd; //indicates that next item is not array item\n } else {\n //object\n str += chars.objStart;\n const keys = Object.keys(e_schema);\n if (Array.isArray(node)) {\n node = node[0];\n }\n for (let i in keys) {\n const key = keys[i];\n //a property defined in schema can be present either in attrsMap or children tags\n //options.textNodeName will not present in both maps, take it's value from val\n //options.attrNodeName will be present in attrsMap\n let r;\n if (!options.ignoreAttributes && node.attrsMap && node.attrsMap[key]) {\n r = _e(node.attrsMap[key], e_schema[key], options);\n } else if (key === options.textNodeName) {\n r = _e(node.val, e_schema[key], options);\n } else {\n r = _e(node.child[key], e_schema[key], options);\n }\n str = processValue(str, r);\n }\n }\n return str;\n } else {\n return hasValidData;\n }\n }\n};\n\nconst getValue = function(a /*, type*/) {\n switch (a) {\n case undefined:\n return chars.missingPremitive;\n case null:\n return chars.nilPremitive;\n case '':\n return chars.emptyValue;\n default:\n return a;\n }\n};\n\nconst processValue = function(str, r) {\n if (!isAppChar(r[0]) && !isAppChar(str[str.length - 1])) {\n str += chars.boundryChar;\n }\n return str + r;\n};\n\nconst isAppChar = function(ch) {\n return charsArr.indexOf(ch) !== -1;\n};\n\nfunction hasData(jObj) {\n if (jObj === undefined) {\n return chars.missingChar;\n } else if (jObj === null) {\n return chars.nilChar;\n } else if (\n jObj.child &&\n Object.keys(jObj.child).length === 0 &&\n (!jObj.attrsMap || Object.keys(jObj.attrsMap).length === 0)\n ) {\n return chars.emptyChar;\n } else {\n return true;\n }\n}\n\nconst x2j = require('./xmlstr2xmlnode');\nconst buildOptions = require('./util').buildOptions;\n\nconst convert2nimn = function(node, e_schema, options) {\n options = buildOptions(options, x2j.defaultOptions, x2j.props);\n return _e(node, e_schema, options);\n};\n\nexports.convert2nimn = convert2nimn;\n","'use strict';\n\nconst util = require('./util');\n\nconst convertToJson = function(node, options) {\n const jObj = {};\n\n //when no child node or attr is present\n if ((!node.child || util.isEmptyObject(node.child)) && (!node.attrsMap || util.isEmptyObject(node.attrsMap))) {\n return util.isExist(node.val) ? node.val : '';\n } else {\n //otherwise create a textnode if node has some text\n if (util.isExist(node.val)) {\n if (!(typeof node.val === 'string' && (node.val === '' || node.val === options.cdataPositionChar))) {\n if(options.arrayMode === \"strict\"){\n jObj[options.textNodeName] = [ node.val ];\n }else{\n jObj[options.textNodeName] = node.val;\n }\n }\n }\n }\n\n util.merge(jObj, node.attrsMap, options.arrayMode);\n\n const keys = Object.keys(node.child);\n for (let index = 0; index < keys.length; index++) {\n var tagname = keys[index];\n if (node.child[tagname] && node.child[tagname].length > 1) {\n jObj[tagname] = [];\n for (var tag in node.child[tagname]) {\n jObj[tagname].push(convertToJson(node.child[tagname][tag], options));\n }\n } else {\n if(options.arrayMode === true){\n const result = convertToJson(node.child[tagname][0], options)\n if(typeof result === 'object')\n jObj[tagname] = [ result ];\n else\n jObj[tagname] = result;\n }else if(options.arrayMode === \"strict\"){\n jObj[tagname] = [convertToJson(node.child[tagname][0], options) ];\n }else{\n jObj[tagname] = convertToJson(node.child[tagname][0], options);\n }\n }\n }\n\n //add value\n return jObj;\n};\n\nexports.convertToJson = convertToJson;\n","'use strict';\n\nconst util = require('./util');\nconst buildOptions = require('./util').buildOptions;\nconst x2j = require('./xmlstr2xmlnode');\n\n//TODO: do it later\nconst convertToJsonString = function(node, options) {\n options = buildOptions(options, x2j.defaultOptions, x2j.props);\n\n options.indentBy = options.indentBy || '';\n return _cToJsonStr(node, options, 0);\n};\n\nconst _cToJsonStr = function(node, options, level) {\n let jObj = '{';\n\n //traver through all the children\n const keys = Object.keys(node.child);\n\n for (let index = 0; index < keys.length; index++) {\n var tagname = keys[index];\n if (node.child[tagname] && node.child[tagname].length > 1) {\n jObj += '\"' + tagname + '\" : [ ';\n for (var tag in node.child[tagname]) {\n jObj += _cToJsonStr(node.child[tagname][tag], options) + ' , ';\n }\n jObj = jObj.substr(0, jObj.length - 1) + ' ] '; //remove extra comma in last\n } else {\n jObj += '\"' + tagname + '\" : ' + _cToJsonStr(node.child[tagname][0], options) + ' ,';\n }\n }\n util.merge(jObj, node.attrsMap);\n //add attrsMap as new children\n if (util.isEmptyObject(jObj)) {\n return util.isExist(node.val) ? node.val : '';\n } else {\n if (util.isExist(node.val)) {\n if (!(typeof node.val === 'string' && (node.val === '' || node.val === options.cdataPositionChar))) {\n jObj += '\"' + options.textNodeName + '\" : ' + stringval(node.val);\n }\n }\n }\n //add value\n if (jObj[jObj.length - 1] === ',') {\n jObj = jObj.substr(0, jObj.length - 2);\n }\n return jObj + '}';\n};\n\nfunction stringval(v) {\n if (v === true || v === false || !isNaN(v)) {\n return v;\n } else {\n return '\"' + v + '\"';\n }\n}\n\nfunction indentate(options, level) {\n return options.indentBy.repeat(level);\n}\n\nexports.convertToJsonString = convertToJsonString;\n","'use strict';\n\nconst nodeToJson = require('./node2json');\nconst xmlToNodeobj = require('./xmlstr2xmlnode');\nconst x2xmlnode = require('./xmlstr2xmlnode');\nconst buildOptions = require('./util').buildOptions;\nconst validator = require('./validator');\n\nexports.parse = function(xmlData, options, validationOption) {\n if( validationOption){\n if(validationOption === true) validationOption = {}\n \n const result = validator.validate(xmlData, validationOption);\n if (result !== true) {\n throw Error( result.err.msg)\n }\n }\n options = buildOptions(options, x2xmlnode.defaultOptions, x2xmlnode.props);\n const traversableObj = xmlToNodeobj.getTraversalObj(xmlData, options)\n //print(traversableObj, \" \");\n return nodeToJson.convertToJson(traversableObj, options);\n};\nexports.convertTonimn = require('../src/nimndata').convert2nimn;\nexports.getTraversalObj = xmlToNodeobj.getTraversalObj;\nexports.convertToJson = nodeToJson.convertToJson;\nexports.convertToJsonString = require('./node2json_str').convertToJsonString;\nexports.validate = validator.validate;\nexports.j2xParser = require('./json2xml');\nexports.parseToNimn = function(xmlData, schema, options) {\n return exports.convertTonimn(exports.getTraversalObj(xmlData, options), schema, options);\n};\n\n\nfunction print(xmlNode, indentation){\n if(xmlNode){\n console.log(indentation + \"{\")\n console.log(indentation + \" \\\"tagName\\\": \\\"\" + xmlNode.tagname + \"\\\", \");\n if(xmlNode.parent){\n console.log(indentation + \" \\\"parent\\\": \\\"\" + xmlNode.parent.tagname + \"\\\", \");\n }\n console.log(indentation + \" \\\"val\\\": \\\"\" + xmlNode.val + \"\\\", \");\n console.log(indentation + \" \\\"attrs\\\": \" + JSON.stringify(xmlNode.attrsMap,null,4) + \", \");\n\n if(xmlNode.child){\n console.log(indentation + \"\\\"child\\\": {\")\n const indentation2 = indentation + indentation;\n Object.keys(xmlNode.child).forEach( function(key) {\n const node = xmlNode.child[key];\n\n if(Array.isArray(node)){\n console.log(indentation + \"\\\"\"+key+\"\\\" :[\")\n node.forEach( function(item,index) {\n //console.log(indentation + \" \\\"\"+index+\"\\\" : [\")\n print(item, indentation2);\n })\n console.log(indentation + \"],\") \n }else{\n console.log(indentation + \" \\\"\"+key+\"\\\" : {\")\n print(node, indentation2);\n console.log(indentation + \"},\") \n }\n });\n console.log(indentation + \"},\")\n }\n console.log(indentation + \"},\")\n }\n}","'use strict';\n\nconst nameStartChar = ':A-Za-z_\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD';\nconst nameChar = nameStartChar + '\\\\-.\\\\d\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040';\nconst nameRegexp = '[' + nameStartChar + '][' + nameChar + ']*'\nconst regexName = new RegExp('^' + nameRegexp + '$');\n\nconst getAllMatches = function(string, regex) {\n const matches = [];\n let match = regex.exec(string);\n while (match) {\n const allmatches = [];\n const len = match.length;\n for (let index = 0; index < len; index++) {\n allmatches.push(match[index]);\n }\n matches.push(allmatches);\n match = regex.exec(string);\n }\n return matches;\n};\n\nconst isName = function(string) {\n const match = regexName.exec(string);\n return !(match === null || typeof match === 'undefined');\n};\n\nexports.isExist = function(v) {\n return typeof v !== 'undefined';\n};\n\nexports.isEmptyObject = function(obj) {\n return Object.keys(obj).length === 0;\n};\n\n/**\n * Copy all the properties of a into b.\n * @param {*} target\n * @param {*} a\n */\nexports.merge = function(target, a, arrayMode) {\n if (a) {\n const keys = Object.keys(a); // will return an array of own properties\n const len = keys.length; //don't make it inline\n for (let i = 0; i < len; i++) {\n if(arrayMode === 'strict'){\n target[keys[i]] = [ a[keys[i]] ];\n }else{\n target[keys[i]] = a[keys[i]];\n }\n }\n }\n};\n/* exports.merge =function (b,a){\n return Object.assign(b,a);\n} */\n\nexports.getValue = function(v) {\n if (exports.isExist(v)) {\n return v;\n } else {\n return '';\n }\n};\n\n// const fakeCall = function(a) {return a;};\n// const fakeCallNoReturn = function() {};\n\nexports.buildOptions = function(options, defaultOptions, props) {\n var newOptions = {};\n if (!options) {\n return defaultOptions; //if there are not options\n }\n\n for (let i = 0; i < props.length; i++) {\n if (options[props[i]] !== undefined) {\n newOptions[props[i]] = options[props[i]];\n } else {\n newOptions[props[i]] = defaultOptions[props[i]];\n }\n }\n return newOptions;\n};\n\nexports.isName = isName;\nexports.getAllMatches = getAllMatches;\nexports.nameRegexp = nameRegexp;\n","'use strict';\n\nconst util = require('./util');\n\nconst defaultOptions = {\n allowBooleanAttributes: false, //A tag can have attributes without any value\n};\n\nconst props = ['allowBooleanAttributes'];\n\n//const tagsPattern = new RegExp(\"<\\\\/?([\\\\w:\\\\-_\\.]+)\\\\s*\\/?>\",\"g\");\nexports.validate = function (xmlData, options) {\n options = util.buildOptions(options, defaultOptions, props);\n\n //xmlData = xmlData.replace(/(\\r\\n|\\n|\\r)/gm,\"\");//make it single line\n //xmlData = xmlData.replace(/(^\\s*<\\?xml.*?\\?>)/g,\"\");//Remove XML starting tag\n //xmlData = xmlData.replace(/(<!DOCTYPE[\\s\\w\\\"\\.\\/\\-\\:]+(\\[.*\\])*\\s*>)/g,\"\");//Remove DOCTYPE\n const tags = [];\n let tagFound = false;\n\n //indicates that the root tag has been closed (aka. depth 0 has been reached)\n let reachedRoot = false;\n\n if (xmlData[0] === '\\ufeff') {\n // check for byte order mark (BOM)\n xmlData = xmlData.substr(1);\n }\n\n for (let i = 0; i < xmlData.length; i++) {\n if (xmlData[i] === '<') {\n //starting of tag\n //read until you reach to '>' avoiding any '>' in attribute value\n\n i++;\n if (xmlData[i] === '?') {\n i = readPI(xmlData, ++i);\n if (i.err) {\n return i;\n }\n } else if (xmlData[i] === '!') {\n i = readCommentAndCDATA(xmlData, i);\n continue;\n } else {\n let closingTag = false;\n if (xmlData[i] === '/') {\n //closing tag\n closingTag = true;\n i++;\n }\n //read tagname\n let tagName = '';\n for (; i < xmlData.length &&\n xmlData[i] !== '>' &&\n xmlData[i] !== ' ' &&\n xmlData[i] !== '\\t' &&\n xmlData[i] !== '\\n' &&\n xmlData[i] !== '\\r'; i++\n ) {\n tagName += xmlData[i];\n }\n tagName = tagName.trim();\n //console.log(tagName);\n\n if (tagName[tagName.length - 1] === '/') {\n //self closing tag without attributes\n tagName = tagName.substring(0, tagName.length - 1);\n //continue;\n i--;\n }\n if (!validateTagName(tagName)) {\n let msg;\n if (tagName.trim().length === 0) {\n msg = \"There is an unnecessary space between tag name and backward slash '</ ..'.\";\n } else {\n msg = \"Tag '\"+tagName+\"' is an invalid name.\";\n }\n return getErrorObject('InvalidTag', msg, getLineNumberForPosition(xmlData, i));\n }\n\n const result = readAttributeStr(xmlData, i);\n if (result === false) {\n return getErrorObject('InvalidAttr', \"Attributes for '\"+tagName+\"' have open quote.\", getLineNumberForPosition(xmlData, i));\n }\n let attrStr = result.value;\n i = result.index;\n\n if (attrStr[attrStr.length - 1] === '/') {\n //self closing tag\n attrStr = attrStr.substring(0, attrStr.length - 1);\n const isValid = validateAttributeString(attrStr, options);\n if (isValid === true) {\n tagFound = true;\n //continue; //text may presents after self closing tag\n } else {\n //the result from the nested function returns the position of the error within the attribute\n //in order to get the 'true' error line, we need to calculate the position where the attribute begins (i - attrStr.length) and then add the position within the attribute\n //this gives us the absolute index in the entire xml, which we can use to find the line at last\n return getErrorObject(isValid.err.code, isValid.err.msg, getLineNumberForPosition(xmlData, i - attrStr.length + isValid.err.line));\n }\n } else if (closingTag) {\n if (!result.tagClosed) {\n return getErrorObject('InvalidTag', \"Closing tag '\"+tagName+\"' doesn't have proper closing.\", getLineNumberForPosition(xmlData, i));\n } else if (attrStr.trim().length > 0) {\n return getErrorObject('InvalidTag', \"Closing tag '\"+tagName+\"' can't have attributes or invalid starting.\", getLineNumberForPosition(xmlData, i));\n } else {\n const otg = tags.pop();\n if (tagName !== otg) {\n return getErrorObject('InvalidTag', \"Closing tag '\"+otg+\"' is expected inplace of '\"+tagName+\"'.\", getLineNumberForPosition(xmlData, i));\n }\n\n //when there are no more tags, we reached the root level.\n if (tags.length == 0) {\n reachedRoot = true;\n }\n }\n } else {\n const isValid = validateAttributeString(attrStr, options);\n if (isValid !== true) {\n //the result from the nested function returns the position of the error within the attribute\n //in order to get the 'true' error line, we need to calculate the position where the attribute begins (i - attrStr.length) and then add the position within the attribute\n //this gives us the absolute index in the entire xml, which we can use to find the line at last\n return getErrorObject(isValid.err.code, isValid.err.msg, getLineNumberForPosition(xmlData, i - attrStr.length + isValid.err.line));\n }\n\n //if the root level has been reached before ...\n if (reachedRoot === true) {\n return getErrorObject('InvalidXml', 'Multiple possible root nodes found.', getLineNumberForPosition(xmlData, i));\n } else {\n tags.push(tagName);\n }\n tagFound = true;\n }\n\n //skip tag text value\n //It may include comments and CDATA value\n for (i++; i < xmlData.length; i++) {\n if (xmlData[i] === '<') {\n if (xmlData[i + 1] === '!') {\n //comment or CADATA\n i++;\n i = readCommentAndCDATA(xmlData, i);\n continue;\n } else {\n break;\n }\n } else if (xmlData[i] === '&') {\n const afterAmp = validateAmpersand(xmlData, i);\n if (afterAmp == -1)\n return getErrorObject('InvalidChar', \"char '&' is not expected.\", getLineNumberForPosition(xmlData, i));\n i = afterAmp;\n }\n } //end of reading tag text value\n if (xmlData[i] === '<') {\n i--;\n }\n }\n } else {\n if (xmlData[i] === ' ' || xmlData[i] === '\\t' || xmlData[i] === '\\n' || xmlData[i] === '\\r') {\n continue;\n }\n return getErrorObject('InvalidChar', \"char '\"+xmlData[i]+\"' is not expected.\", getLineNumberForPosition(xmlData, i));\n }\n }\n\n if (!tagFound) {\n return getErrorObject('InvalidXml', 'Start tag expected.', 1);\n } else if (tags.length > 0) {\n return getErrorObject('InvalidXml', \"Invalid '\"+JSON.stringify(tags, null, 4).replace(/\\r?\\n/g, '')+\"' found.\", 1);\n }\n\n return true;\n};\n\n/**\n * Read Processing insstructions and skip\n * @param {*} xmlData\n * @param {*} i\n */\nfunction readPI(xmlData, i) {\n var start = i;\n for (; i < xmlData.length; i++) {\n if (xmlData[i] == '?' || xmlData[i] == ' ') {\n //tagname\n var tagname = xmlData.substr(start, i - start);\n if (i > 5 && tagname === 'xml') {\n return getErrorObject('InvalidXml', 'XML declaration allowed only at the start of the document.', getLineNumberForPosition(xmlData, i));\n } else if (xmlData[i] == '?' && xmlData[i + 1] == '>') {\n //check if valid attribut string\n i++;\n break;\n } else {\n continue;\n }\n }\n }\n return i;\n}\n\nfunction readCommentAndCDATA(xmlData, i) {\n if (xmlData.length > i + 5 && xmlData[i + 1] === '-' && xmlData[i + 2] === '-') {\n //comment\n for (i += 3; i < xmlData.length; i++) {\n if (xmlData[i] === '-' && xmlData[i + 1] === '-' && xmlData[i + 2] === '>') {\n i += 2;\n break;\n }\n }\n } else if (\n xmlData.length > i + 8 &&\n xmlData[i + 1] === 'D' &&\n xmlData[i + 2] === 'O' &&\n xmlData[i + 3] === 'C' &&\n xmlData[i + 4] === 'T' &&\n xmlData[i + 5] === 'Y' &&\n xmlData[i + 6] === 'P' &&\n xmlData[i + 7] === 'E'\n ) {\n let angleBracketsCount = 1;\n for (i += 8; i < xmlData.length; i++) {\n if (xmlData[i] === '<') {\n angleBracketsCount++;\n } else if (xmlData[i] === '>') {\n angleBracketsCount--;\n if (angleBracketsCount === 0) {\n break;\n }\n }\n }\n } else if (\n xmlData.length > i + 9 &&\n xmlData[i + 1] === '[' &&\n xmlData[i + 2] === 'C' &&\n xmlData[i + 3] === 'D' &&\n xmlData[i + 4] === 'A' &&\n xmlData[i + 5] === 'T' &&\n xmlData[i + 6] === 'A' &&\n xmlData[i + 7] === '['\n ) {\n for (i += 8; i < xmlData.length; i++) {\n if (xmlData[i] === ']' && xmlData[i + 1] === ']' && xmlData[i + 2] === '>') {\n i += 2;\n break;\n }\n }\n }\n\n return i;\n}\n\nvar doubleQuote = '\"';\nvar singleQuote = \"'\";\n\n/**\n * Keep reading xmlData until '<' is found outside the attribute value.\n * @param {string} xmlData\n * @param {number} i\n */\nfunction readAttributeStr(xmlData, i) {\n let attrStr = '';\n let startChar = '';\n let tagClosed = false;\n for (; i < xmlData.length; i++) {\n if (xmlData[i] === doubleQuote || xmlData[i] === singleQuote) {\n if (startChar === '') {\n startChar = xmlData[i];\n } else if (startChar !== xmlData[i]) {\n //if vaue is enclosed with double quote then single quotes are allowed inside the value and vice versa\n continue;\n } else {\n startChar = '';\n }\n } else if (xmlData[i] === '>') {\n if (startChar === '') {\n tagClosed = true;\n break;\n }\n }\n attrStr += xmlData[i];\n }\n if (startChar !== '') {\n return false;\n }\n\n return {\n value: attrStr,\n index: i,\n tagClosed: tagClosed\n };\n}\n\n/**\n * Select all the attributes whether valid or invalid.\n */\nconst validAttrStrRegxp = new RegExp('(\\\\s*)([^\\\\s=]+)(\\\\s*=)?(\\\\s*([\\'\"])(([\\\\s\\\\S])*?)\\\\5)?', 'g');\n\n//attr, =\"sd\", a=\"amit's\", a=\"sd\"b=\"saf\", ab cd=\"\"\n\nfunction validateAttributeString(attrStr, options) {\n //console.log(\"start:\"+attrStr+\":end\");\n\n //if(attrStr.trim().length === 0) return true; //empty string\n\n const matches = util.getAllMatches(attrStr, validAttrStrRegxp);\n const attrNames = {};\n\n for (let i = 0; i < matches.length; i++) {\n if (matches[i][1].length === 0) {\n //nospace before attribute name: a=\"sd\"b=\"saf\"\n return getErrorObject('InvalidAttr', \"Attribute '\"+matches[i][2]+\"' has no space in starting.\", getPositionFromMatch(attrStr, matches[i][0]))\n } else if (matches[i][3] === undefined && !options.allowBooleanAttributes) {\n //independent attribute: ab\n return getErrorObject('InvalidAttr', \"boolean attribute '\"+matches[i][2]+\"' is not allowed.\", getPositionFromMatch(attrStr, matches[i][0]));\n }\n /* else if(matches[i][6] === undefined){//attribute without value: ab=\n return { err: { code:\"InvalidAttr\",msg:\"attribute \" + matches[i][2] + \" has no value assigned.\"}};\n } */\n const attrName = matches[i][2];\n if (!validateAttrName(attrName)) {\n return getErrorObject('InvalidAttr', \"Attribute '\"+attrName+\"' is an invalid name.\", getPositionFromMatch(attrStr, matches[i][0]));\n }\n if (!attrNames.hasOwnProperty(attrName)) {\n //check for duplicate attribute.\n attrNames[attrName] = 1;\n } else {\n return getErrorObject('InvalidAttr', \"Attribute '\"+attrName+\"' is repeated.\", getPositionFromMatch(attrStr, matches[i][0]));\n }\n }\n\n return true;\n}\n\nfunction validateNumberAmpersand(xmlData, i) {\n let re = /\\d/;\n if (xmlData[i] === 'x') {\n i++;\n re = /[\\da-fA-F]/;\n }\n for (; i < xmlData.length; i++) {\n if (xmlData[i] === ';')\n return i;\n if (!xmlData[i].match(re))\n break;\n }\n return -1;\n}\n\nfunction validateAmpersand(xmlData, i) {\n // https://www.w3.org/TR/xml/#dt-charref\n i++;\n if (xmlData[i] === ';')\n return -1;\n if (xmlData[i] === '#') {\n i++;\n return validateNumberAmpersand(xmlData, i);\n }\n let count = 0;\n for (; i < xmlData.length; i++, count++) {\n if (xmlData[i].match(/\\w/) && count < 20)\n continue;\n if (xmlData[i] === ';')\n break;\n return -1;\n }\n return i;\n}\n\nfunction getErrorObject(code, message, lineNumber) {\n return {\n err: {\n code: code,\n msg: message,\n line: lineNumber,\n },\n };\n}\n\nfunction validateAttrName(attrName) {\n return util.isName(attrName);\n}\n\n// const startsWithXML = /^xml/i;\n\nfunction validateTagName(tagname) {\n return util.isName(tagname) /* && !tagname.match(startsWithXML) */;\n}\n\n//this function returns the line number for the character at the given index\nfunction getLineNumberForPosition(xmlData, index) {\n var lines = xmlData.substring(0, index).split(/\\r?\\n/);\n return lines.length;\n}\n\n//this function returns the position of the last character of match within attrStr\nfunction getPositionFromMatch(attrStr, match) {\n return attrStr.indexOf(match) + match.length;\n}\n","'use strict';\n\nmodule.exports = function(tagname, parent, val) {\n this.tagname = tagname;\n this.parent = parent;\n this.child = {}; //child tags\n this.attrsMap = {}; //attributes map\n this.val = val; //text only\n this.addChild = function(child) {\n if (Array.isArray(this.child[child.tagname])) {\n //already presents\n this.child[child.tagname].push(child);\n } else {\n this.child[child.tagname] = [child];\n }\n };\n};\n","'use strict';\n\nconst util = require('./util');\nconst buildOptions = require('./util').buildOptions;\nconst xmlNode = require('./xmlNode');\nconst regx =\n '<((!\\\\[CDATA\\\\[([\\\\s\\\\S]*?)(]]>))|((NAME:)?(NAME))([^>]*)>|((\\\\/)(NAME)\\\\s*>))([^<]*)'\n .replace(/NAME/g, util.nameRegexp);\n\n//const tagsRegx = new RegExp(\"<(\\\\/?[\\\\w:\\\\-\\._]+)([^>]*)>(\\\\s*\"+cdataRegx+\")*([^<]+)?\",\"g\");\n//const tagsRegx = new RegExp(\"<(\\\\/?)((\\\\w*:)?([\\\\w:\\\\-\\._]+))([^>]*)>([^<]*)(\"+cdataRegx+\"([^<]*))*([^<]+)?\",\"g\");\n\n//polyfill\nif (!Number.parseInt && window.parseInt) {\n Number.parseInt = window.parseInt;\n}\nif (!Number.parseFloat && window.parseFloat) {\n Number.parseFloat = window.parseFloat;\n}\n\nconst defaultOptions = {\n attributeNamePrefix: '@_',\n attrNodeName: false,\n textNodeName: '#text',\n ignoreAttributes: true,\n ignoreNameSpace: false,\n allowBooleanAttributes: false, //a tag can have attributes without any value\n //ignoreRootElement : false,\n parseNodeValue: true,\n parseAttributeValue: false,\n arrayMode: false,\n trimValues: true, //Trim string values of tag and attributes\n cdataTagName: false,\n cdataPositionChar: '\\\\c',\n tagValueProcessor: function(a, tagName) {\n return a;\n },\n attrValueProcessor: function(a, attrName) {\n return a;\n },\n stopNodes: []\n //decodeStrict: false,\n};\n\nexports.defaultOptions = defaultOptions;\n\nconst props = [\n 'attributeNamePrefix',\n 'attrNodeName',\n 'textNodeName',\n 'ignoreAttributes',\n 'ignoreNameSpace',\n 'allowBooleanAttributes',\n 'parseNodeValue',\n 'parseAttributeValue',\n 'arrayMode',\n 'trimValues',\n 'cdataTagName',\n 'cdataPositionChar',\n 'tagValueProcessor',\n 'attrValueProcessor',\n 'parseTrueNumberOnly',\n 'stopNodes'\n];\nexports.props = props;\n\n/**\n * Trim -> valueProcessor -> parse value\n * @param {string} tagName\n * @param {string} val\n * @param {object} options\n */\nfunction processTagValue(tagName, val, options) {\n if (val) {\n if (options.trimValues) {\n val = val.trim();\n }\n val = options.tagValueProcessor(val, tagName);\n val = parseValue(val, options.parseNodeValue, options.parseTrueNumberOnly);\n }\n\n return val;\n}\n\nfunction resolveNameSpace(tagname, options) {\n if (options.ignoreNameSpace) {\n const tags = tagname.split(':');\n const prefix = tagname.charAt(0) === '/' ? '/' : '';\n if (tags[0] === 'xmlns') {\n return '';\n }\n if (tags.length === 2) {\n tagname = prefix + tags[1];\n }\n }\n return tagname;\n}\n\nfunction parseValue(val, shouldParse, parseTrueNumberOnly) {\n if (shouldParse && typeof val === 'string') {\n let parsed;\n if (val.trim() === '' || isNaN(val)) {\n parsed = val === 'true' ? true : val === 'false' ? false : val;\n } else {\n if (val.indexOf('0x') !== -1) {\n //support hexa decimal\n parsed = Number.parseInt(val, 16);\n } else if (val.indexOf('.') !== -1) {\n parsed = Number.parseFloat(val);\n val = val.replace(/\\.?0+$/, \"\");\n } else {\n parsed = Number.parseInt(val, 10);\n }\n if (parseTrueNumberOnly) {\n parsed = String(parsed) === val ? parsed : val;\n }\n }\n return parsed;\n } else {\n if (util.isExist(val)) {\n return val;\n } else {\n return '';\n }\n }\n}\n\n//TODO: change regex to capture NS\n//const attrsRegx = new RegExp(\"([\\\\w\\\\-\\\\.\\\\:]+)\\\\s*=\\\\s*(['\\\"])((.|\\n)*?)\\\\2\",\"gm\");\nconst attrsRegx = new RegExp('([^\\\\s=]+)\\\\s*(=\\\\s*([\\'\"])(.*?)\\\\3)?', 'g');\n\nfunction buildAttributesMap(attrStr, options) {\n if (!options.ignoreAttributes && typeof attrStr === 'string') {\n attrStr = attrStr.replace(/\\r?\\n/g, ' ');\n //attrStr = attrStr || attrStr.trim();\n\n const matches = util.getAllMatches(attrStr, attrsRegx);\n const len = matches.length; //don't make it inline\n const attrs = {};\n for (let i = 0; i < len; i++) {\n const attrName = resolveNameSpace(matches[i][1], options);\n if (attrName.length) {\n if (matches[i][4] !== undefined) {\n if (options.trimValues) {\n matches[i][4] = matches[i][4].trim();\n }\n matches[i][4] = options.attrValueProcessor(matches[i][4], attrName);\n attrs[options.attributeNamePrefix + attrName] = parseValue(\n matches[i][4],\n options.parseAttributeValue,\n options.parseTrueNumberOnly\n );\n } else if (options.allowBooleanAttributes) {\n attrs[options.attributeNamePrefix + attrName] = true;\n }\n }\n }\n if (!Object.keys(attrs).length) {\n return;\n }\n if (options.attrNodeName) {\n const attrCollection = {};\n attrCollection[options.attrNodeName] = attrs;\n return attrCollection;\n }\n return attrs;\n }\n}\n\nconst getTraversalObj = function(xmlData, options) {\n xmlData = xmlData.replace(/(\\r\\n)|\\n/, \" \");\n options = buildOptions(options, defaultOptions, props);\n const xmlObj = new xmlNode('!xml');\n let currentNode = xmlObj;\n let textData = \"\";\n\n//function match(xmlData){\n for(let i=0; i< xmlData.length; i++){\n const ch = xmlData[i];\n if(ch === '<'){\n if( xmlData[i+1] === '/') {//Closing Tag\n const closeIndex = findClosingIndex(xmlData, \">\", i, \"Closing Tag is not closed.\")\n let tagName = xmlData.substring(i+2,closeIndex).trim();\n\n if(options.ignoreNameSpace){\n const colonIndex = tagName.indexOf(\":\");\n if(colonIndex !== -1){\n tagName = tagName.substr(colonIndex+1);\n }\n }\n\n /* if (currentNode.parent) {\n currentNode.parent.val = util.getValue(currentNode.parent.val) + '' + processTagValue2(tagName, textData , options);\n } */\n if(currentNode){\n if(currentNode.val){\n currentNode.val = util.getValue(currentNode.val) + '' + processTagValue(tagName, textData , options);\n }else{\n currentNode.val = processTagValue(tagName, textData , options);\n }\n }\n\n if (options.stopNodes.length && options.stopNodes.includes(currentNode.tagname)) {\n currentNode.child = []\n if (currentNode.attrsMap == undefined) { currentNode.attrsMap = {}}\n currentNode.val = xmlData.substr(currentNode.startIndex + 1, i - currentNode.startIndex - 1)\n }\n currentNode = currentNode.parent;\n textData = \"\";\n i = closeIndex;\n } else if( xmlData[i+1] === '?') {\n i = findClosingIndex(xmlData, \"?>\", i, \"Pi Tag is not closed.\")\n } else if(xmlData.substr(i + 1, 3) === '!--') {\n i = findClosingIndex(xmlData, \"-->\", i, \"Comment is not closed.\")\n } else if( xmlData.substr(i + 1, 2) === '!D') {\n const closeIndex = findClosingIndex(xmlData, \">\", i, \"DOCTYPE is not closed.\")\n const tagExp = xmlData.substring(i, closeIndex);\n if(tagExp.indexOf(\"[\") >= 0){\n i = xmlData.indexOf(\"]>\", i) + 1;\n }else{\n i = closeIndex;\n }\n }else if(xmlData.substr(i + 1, 2) === '![') {\n const closeIndex = findClosingIndex(xmlData, \"]]>\", i, \"CDATA is not closed.\") - 2\n const tagExp = xmlData.substring(i + 9,closeIndex);\n\n //considerations\n //1. CDATA will always have parent node\n //2. A tag with CDATA is not a leaf node so it's value would be string type.\n if(textData){\n currentNode.val = util.getValue(currentNode.val) + '' + processTagValue(currentNode.tagname, textData , options);\n textData = \"\";\n }\n\n if (options.cdataTagName) {\n //add cdata node\n const childNode = new xmlNode(options.cdataTagName, currentNode, tagExp);\n currentNode.addChild(childNode);\n //for backtracking\n currentNode.val = util.getValue(currentNode.val) + options.cdataPositionChar;\n //add rest value to parent node\n if (tagExp) {\n childNode.val = tagExp;\n }\n } else {\n currentNode.val = (currentNode.val || '') + (tagExp || '');\n }\n\n i = closeIndex + 2;\n }else {//Opening tag\n const result = closingIndexForOpeningTag(xmlData, i+1)\n let tagExp = result.data;\n const closeIndex = result.index;\n const separatorIndex = tagExp.indexOf(\" \");\n let tagName = tagExp;\n if(separatorIndex !== -1){\n tagName = tagExp.substr(0, separatorIndex).trimRight();\n tagExp = tagExp.substr(separatorIndex + 1);\n }\n\n if(options.ignoreNameSpace){\n const colonIndex = tagName.indexOf(\":\");\n if(colonIndex !== -1){\n tagName = tagName.substr(colonIndex+1);\n }\n }\n\n //save text to parent node\n if (currentNode && textData) {\n if(currentNode.tagname !== '!xml'){\n currentNode.val = util.getValue(currentNode.val) + '' + processTagValue( currentNode.tagname, textData, options);\n }\n }\n\n if(tagExp.length > 0 && tagExp.lastIndexOf(\"/\") === tagExp.length - 1){//selfClosing tag\n\n if(tagName[tagName.length - 1] === \"/\"){ //remove trailing '/'\n tagName = tagName.substr(0, tagName.length - 1);\n tagExp = tagName;\n }else{\n tagExp = tagExp.substr(0, tagExp.length - 1);\n }\n\n const childNode = new xmlNode(tagName, currentNode, '');\n if(tagName !== tagExp){\n childNode.attrsMap = buildAttributesMap(tagExp, options);\n }\n currentNode.addChild(childNode);\n }else{//opening tag\n\n const childNode = new xmlNode( tagName, currentNode );\n if (options.stopNodes.length && options.stopNodes.includes(childNode.tagname)) {\n childNode.startIndex=closeIndex;\n }\n if(tagName !== tagExp){\n childNode.attrsMap = buildAttributesMap(tagExp, options);\n }\n currentNode.addChild(childNode);\n currentNode = childNode;\n }\n textData = \"\";\n i = closeIndex;\n }\n }else{\n textData += xmlData[i];\n }\n }\n return xmlObj;\n}\n\nfunction closingIndexForOpeningTag(data, i){\n let attrBoundary;\n let tagExp = \"\";\n for (let index = i; index < data.length; index++) {\n let ch = data[index];\n if (attrBoundary) {\n if (ch === attrBoundary) attrBoundary = \"\";//reset\n } else if (ch === '\"' || ch === \"'\") {\n attrBoundary = ch;\n } else if (ch === '>') {\n return {\n data: tagExp,\n index: index\n }\n } else if (ch === '\\t') {\n ch = \" \"\n }\n tagExp += ch;\n }\n}\n\nfunction findClosingIndex(xmlData, str, i, errMsg){\n const closingIndex = xmlData.indexOf(str, i);\n if(closingIndex === -1){\n throw new Error(errMsg)\n }else{\n return closingIndex + str.length - 1;\n }\n}\n\nexports.getTraversalObj = getTraversalObj;\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\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","// 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/*<replacement>*/\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/*</replacement>*/\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});","// 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};","// 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/*<replacement>*/\n\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n/*<replacement>*/\n\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\n\n\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\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/*<replacement>*/\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/*</replacement>*/\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}","// 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}","// 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/* <replacement> */\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/* </replacement> */\n\n/*<replacement>*/\n\n\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n/*<replacement>*/\n\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\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';\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\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}();","'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};","// 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;","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;","'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};","module.exports = require('events').EventEmitter;\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","/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\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","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","'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","'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\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","'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","'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\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","'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","'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","'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';\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","'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","/*! https://mths.be/he v1.2.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\t// All astral symbols.\n\tvar regexAstralSymbols = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n\t// All ASCII symbols (not just printable ASCII) except those listed in the\n\t// first column of the overrides table.\n\t// https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides\n\tvar regexAsciiWhitelist = /[\\x01-\\x7F]/g;\n\t// All BMP symbols that are not ASCII newlines, printable ASCII symbols, or\n\t// code points listed in the first column of the overrides table on\n\t// https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides.\n\tvar regexBmpWhitelist = /[\\x01-\\t\\x0B\\f\\x0E-\\x1F\\x7F\\x81\\x8D\\x8F\\x90\\x9D\\xA0-\\uFFFF]/g;\n\n\tvar regexEncodeNonAscii = /<\\u20D2|=\\u20E5|>\\u20D2|\\u205F\\u200A|\\u219D\\u0338|\\u2202\\u0338|\\u2220\\u20D2|\\u2229\\uFE00|\\u222A\\uFE00|\\u223C\\u20D2|\\u223D\\u0331|\\u223E\\u0333|\\u2242\\u0338|\\u224B\\u0338|\\u224D\\u20D2|\\u224E\\u0338|\\u224F\\u0338|\\u2250\\u0338|\\u2261\\u20E5|\\u2264\\u20D2|\\u2265\\u20D2|\\u2266\\u0338|\\u2267\\u0338|\\u2268\\uFE00|\\u2269\\uFE00|\\u226A\\u0338|\\u226A\\u20D2|\\u226B\\u0338|\\u226B\\u20D2|\\u227F\\u0338|\\u2282\\u20D2|\\u2283\\u20D2|\\u228A\\uFE00|\\u228B\\uFE00|\\u228F\\u0338|\\u2290\\u0338|\\u2293\\uFE00|\\u2294\\uFE00|\\u22B4\\u20D2|\\u22B5\\u20D2|\\u22D8\\u0338|\\u22D9\\u0338|\\u22DA\\uFE00|\\u22DB\\uFE00|\\u22F5\\u0338|\\u22F9\\u0338|\\u2933\\u0338|\\u29CF\\u0338|\\u29D0\\u0338|\\u2A6D\\u0338|\\u2A70\\u0338|\\u2A7D\\u0338|\\u2A7E\\u0338|\\u2AA1\\u0338|\\u2AA2\\u0338|\\u2AAC\\uFE00|\\u2AAD\\uFE00|\\u2AAF\\u0338|\\u2AB0\\u0338|\\u2AC5\\u0338|\\u2AC6\\u0338|\\u2ACB\\uFE00|\\u2ACC\\uFE00|\\u2AFD\\u20E5|[\\xA0-\\u0113\\u0116-\\u0122\\u0124-\\u012B\\u012E-\\u014D\\u0150-\\u017E\\u0192\\u01B5\\u01F5\\u0237\\u02C6\\u02C7\\u02D8-\\u02DD\\u0311\\u0391-\\u03A1\\u03A3-\\u03A9\\u03B1-\\u03C9\\u03D1\\u03D2\\u03D5\\u03D6\\u03DC\\u03DD\\u03F0\\u03F1\\u03F5\\u03F6\\u0401-\\u040C\\u040E-\\u044F\\u0451-\\u045C\\u045E\\u045F\\u2002-\\u2005\\u2007-\\u2010\\u2013-\\u2016\\u2018-\\u201A\\u201C-\\u201E\\u2020-\\u2022\\u2025\\u2026\\u2030-\\u2035\\u2039\\u203A\\u203E\\u2041\\u2043\\u2044\\u204F\\u2057\\u205F-\\u2063\\u20AC\\u20DB\\u20DC\\u2102\\u2105\\u210A-\\u2113\\u2115-\\u211E\\u2122\\u2124\\u2127-\\u2129\\u212C\\u212D\\u212F-\\u2131\\u2133-\\u2138\\u2145-\\u2148\\u2153-\\u215E\\u2190-\\u219B\\u219D-\\u21A7\\u21A9-\\u21AE\\u21B0-\\u21B3\\u21B5-\\u21B7\\u21BA-\\u21DB\\u21DD\\u21E4\\u21E5\\u21F5\\u21FD-\\u2205\\u2207-\\u2209\\u220B\\u220C\\u220F-\\u2214\\u2216-\\u2218\\u221A\\u221D-\\u2238\\u223A-\\u2257\\u2259\\u225A\\u225C\\u225F-\\u2262\\u2264-\\u228B\\u228D-\\u229B\\u229D-\\u22A5\\u22A7-\\u22B0\\u22B2-\\u22BB\\u22BD-\\u22DB\\u22DE-\\u22E3\\u22E6-\\u22F7\\u22F9-\\u22FE\\u2305\\u2306\\u2308-\\u2310\\u2312\\u2313\\u2315\\u2316\\u231C-\\u231F\\u2322\\u2323\\u232D\\u232E\\u2336\\u233D\\u233F\\u237C\\u23B0\\u23B1\\u23B4-\\u23B6\\u23DC-\\u23DF\\u23E2\\u23E7\\u2423\\u24C8\\u2500\\u2502\\u250C\\u2510\\u2514\\u2518\\u251C\\u2524\\u252C\\u2534\\u253C\\u2550-\\u256C\\u2580\\u2584\\u2588\\u2591-\\u2593\\u25A1\\u25AA\\u25AB\\u25AD\\u25AE\\u25B1\\u25B3-\\u25B5\\u25B8\\u25B9\\u25BD-\\u25BF\\u25C2\\u25C3\\u25CA\\u25CB\\u25EC\\u25EF\\u25F8-\\u25FC\\u2605\\u2606\\u260E\\u2640\\u2642\\u2660\\u2663\\u2665\\u2666\\u266A\\u266D-\\u266F\\u2713\\u2717\\u2720\\u2736\\u2758\\u2772\\u2773\\u27C8\\u27C9\\u27E6-\\u27ED\\u27F5-\\u27FA\\u27FC\\u27FF\\u2902-\\u2905\\u290C-\\u2913\\u2916\\u2919-\\u2920\\u2923-\\u292A\\u2933\\u2935-\\u2939\\u293C\\u293D\\u2945\\u2948-\\u294B\\u294E-\\u2976\\u2978\\u2979\\u297B-\\u297F\\u2985\\u2986\\u298B-\\u2996\\u299A\\u299C\\u299D\\u29A4-\\u29B7\\u29B9\\u29BB\\u29BC\\u29BE-\\u29C5\\u29C9\\u29CD-\\u29D0\\u29DC-\\u29DE\\u29E3-\\u29E5\\u29EB\\u29F4\\u29F6\\u2A00-\\u2A02\\u2A04\\u2A06\\u2A0C\\u2A0D\\u2A10-\\u2A17\\u2A22-\\u2A27\\u2A29\\u2A2A\\u2A2D-\\u2A31\\u2A33-\\u2A3C\\u2A3F\\u2A40\\u2A42-\\u2A4D\\u2A50\\u2A53-\\u2A58\\u2A5A-\\u2A5D\\u2A5F\\u2A66\\u2A6A\\u2A6D-\\u2A75\\u2A77-\\u2A9A\\u2A9D-\\u2AA2\\u2AA4-\\u2AB0\\u2AB3-\\u2AC8\\u2ACB\\u2ACC\\u2ACF-\\u2ADB\\u2AE4\\u2AE6-\\u2AE9\\u2AEB-\\u2AF3\\u2AFD\\uFB00-\\uFB04]|\\uD835[\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDCCF\\uDD04\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDD6B]/g;\n\tvar encodeMap = {'\\xAD':'shy','\\u200C':'zwnj','\\u200D':'zwj','\\u200E':'lrm','\\u2063':'ic','\\u2062':'it','\\u2061':'af','\\u200F':'rlm','\\u200B':'ZeroWidthSpace','\\u2060':'NoBreak','\\u0311':'DownBreve','\\u20DB':'tdot','\\u20DC':'DotDot','\\t':'Tab','\\n':'NewLine','\\u2008':'puncsp','\\u205F':'MediumSpace','\\u2009':'thinsp','\\u200A':'hairsp','\\u2004':'emsp13','\\u2002':'ensp','\\u2005':'emsp14','\\u2003':'emsp','\\u2007':'numsp','\\xA0':'nbsp','\\u205F\\u200A':'ThickSpace','\\u203E':'oline','_':'lowbar','\\u2010':'dash','\\u2013':'ndash','\\u2014':'mdash','\\u2015':'horbar',',':'comma',';':'semi','\\u204F':'bsemi',':':'colon','\\u2A74':'Colone','!':'excl','\\xA1':'iexcl','?':'quest','\\xBF':'iquest','.':'period','\\u2025':'nldr','\\u2026':'mldr','\\xB7':'middot','\\'':'apos','\\u2018':'lsquo','\\u2019':'rsquo','\\u201A':'sbquo','\\u2039':'lsaquo','\\u203A':'rsaquo','\"':'quot','\\u201C':'ldquo','\\u201D':'rdquo','\\u201E':'bdquo','\\xAB':'laquo','\\xBB':'raquo','(':'lpar',')':'rpar','[':'lsqb',']':'rsqb','{':'lcub','}':'rcub','\\u2308':'lceil','\\u2309':'rceil','\\u230A':'lfloor','\\u230B':'rfloor','\\u2985':'lopar','\\u2986':'ropar','\\u298B':'lbrke','\\u298C':'rbrke','\\u298D':'lbrkslu','\\u298E':'rbrksld','\\u298F':'lbrksld','\\u2990':'rbrkslu','\\u2991':'langd','\\u2992':'rangd','\\u2993':'lparlt','\\u2994':'rpargt','\\u2995':'gtlPar','\\u2996':'ltrPar','\\u27E6':'lobrk','\\u27E7':'robrk','\\u27E8':'lang','\\u27E9':'rang','\\u27EA':'Lang','\\u27EB':'Rang','\\u27EC':'loang','\\u27ED':'roang','\\u2772':'lbbrk','\\u2773':'rbbrk','\\u2016':'Vert','\\xA7':'sect','\\xB6':'para','@':'commat','*':'ast','/':'sol','undefined':null,'&':'amp','#':'num','%':'percnt','\\u2030':'permil','\\u2031':'pertenk','\\u2020':'dagger','\\u2021':'Dagger','\\u2022':'bull','\\u2043':'hybull','\\u2032':'prime','\\u2033':'Prime','\\u2034':'tprime','\\u2057':'qprime','\\u2035':'bprime','\\u2041':'caret','`':'grave','\\xB4':'acute','\\u02DC':'tilde','^':'Hat','\\xAF':'macr','\\u02D8':'breve','\\u02D9':'dot','\\xA8':'die','\\u02DA':'ring','\\u02DD':'dblac','\\xB8':'cedil','\\u02DB':'ogon','\\u02C6':'circ','\\u02C7':'caron','\\xB0':'deg','\\xA9':'copy','\\xAE':'reg','\\u2117':'copysr','\\u2118':'wp','\\u211E':'rx','\\u2127':'mho','\\u2129':'iiota','\\u2190':'larr','\\u219A':'nlarr','\\u2192':'rarr','\\u219B':'nrarr','\\u2191':'uarr','\\u2193':'darr','\\u2194':'harr','\\u21AE':'nharr','\\u2195':'varr','\\u2196':'nwarr','\\u2197':'nearr','\\u2198':'searr','\\u2199':'swarr','\\u219D':'rarrw','\\u219D\\u0338':'nrarrw','\\u219E':'Larr','\\u219F':'Uarr','\\u21A0':'Rarr','\\u21A1':'Darr','\\u21A2':'larrtl','\\u21A3':'rarrtl','\\u21A4':'mapstoleft','\\u21A5':'mapstoup','\\u21A6':'map','\\u21A7':'mapstodown','\\u21A9':'larrhk','\\u21AA':'rarrhk','\\u21AB':'larrlp','\\u21AC':'rarrlp','\\u21AD':'harrw','\\u21B0':'lsh','\\u21B1':'rsh','\\u21B2':'ldsh','\\u21B3':'rdsh','\\u21B5':'crarr','\\u21B6':'cularr','\\u21B7':'curarr','\\u21BA':'olarr','\\u21BB':'orarr','\\u21BC':'lharu','\\u21BD':'lhard','\\u21BE':'uharr','\\u21BF':'uharl','\\u21C0':'rharu','\\u21C1':'rhard','\\u21C2':'dharr','\\u21C3':'dharl','\\u21C4':'rlarr','\\u21C5':'udarr','\\u21C6':'lrarr','\\u21C7':'llarr','\\u21C8':'uuarr','\\u21C9':'rrarr','\\u21CA':'ddarr','\\u21CB':'lrhar','\\u21CC':'rlhar','\\u21D0':'lArr','\\u21CD':'nlArr','\\u21D1':'uArr','\\u21D2':'rArr','\\u21CF':'nrArr','\\u21D3':'dArr','\\u21D4':'iff','\\u21CE':'nhArr','\\u21D5':'vArr','\\u21D6':'nwArr','\\u21D7':'neArr','\\u21D8':'seArr','\\u21D9':'swArr','\\u21DA':'lAarr','\\u21DB':'rAarr','\\u21DD':'zigrarr','\\u21E4':'larrb','\\u21E5':'rarrb','\\u21F5':'duarr','\\u21FD':'loarr','\\u21FE':'roarr','\\u21FF':'hoarr','\\u2200':'forall','\\u2201':'comp','\\u2202':'part','\\u2202\\u0338':'npart','\\u2203':'exist','\\u2204':'nexist','\\u2205':'empty','\\u2207':'Del','\\u2208':'in','\\u2209':'notin','\\u220B':'ni','\\u220C':'notni','\\u03F6':'bepsi','\\u220F':'prod','\\u2210':'coprod','\\u2211':'sum','+':'plus','\\xB1':'pm','\\xF7':'div','\\xD7':'times','<':'lt','\\u226E':'nlt','<\\u20D2':'nvlt','=':'equals','\\u2260':'ne','=\\u20E5':'bne','\\u2A75':'Equal','>':'gt','\\u226F':'ngt','>\\u20D2':'nvgt','\\xAC':'not','|':'vert','\\xA6':'brvbar','\\u2212':'minus','\\u2213':'mp','\\u2214':'plusdo','\\u2044':'frasl','\\u2216':'setmn','\\u2217':'lowast','\\u2218':'compfn','\\u221A':'Sqrt','\\u221D':'prop','\\u221E':'infin','\\u221F':'angrt','\\u2220':'ang','\\u2220\\u20D2':'nang','\\u2221':'angmsd','\\u2222':'angsph','\\u2223':'mid','\\u2224':'nmid','\\u2225':'par','\\u2226':'npar','\\u2227':'and','\\u2228':'or','\\u2229':'cap','\\u2229\\uFE00':'caps','\\u222A':'cup','\\u222A\\uFE00':'cups','\\u222B':'int','\\u222C':'Int','\\u222D':'tint','\\u2A0C':'qint','\\u222E':'oint','\\u222F':'Conint','\\u2230':'Cconint','\\u2231':'cwint','\\u2232':'cwconint','\\u2233':'awconint','\\u2234':'there4','\\u2235':'becaus','\\u2236':'ratio','\\u2237':'Colon','\\u2238':'minusd','\\u223A':'mDDot','\\u223B':'homtht','\\u223C':'sim','\\u2241':'nsim','\\u223C\\u20D2':'nvsim','\\u223D':'bsim','\\u223D\\u0331':'race','\\u223E':'ac','\\u223E\\u0333':'acE','\\u223F':'acd','\\u2240':'wr','\\u2242':'esim','\\u2242\\u0338':'nesim','\\u2243':'sime','\\u2244':'nsime','\\u2245':'cong','\\u2247':'ncong','\\u2246':'simne','\\u2248':'ap','\\u2249':'nap','\\u224A':'ape','\\u224B':'apid','\\u224B\\u0338':'napid','\\u224C':'bcong','\\u224D':'CupCap','\\u226D':'NotCupCap','\\u224D\\u20D2':'nvap','\\u224E':'bump','\\u224E\\u0338':'nbump','\\u224F':'bumpe','\\u224F\\u0338':'nbumpe','\\u2250':'doteq','\\u2250\\u0338':'nedot','\\u2251':'eDot','\\u2252':'efDot','\\u2253':'erDot','\\u2254':'colone','\\u2255':'ecolon','\\u2256':'ecir','\\u2257':'cire','\\u2259':'wedgeq','\\u225A':'veeeq','\\u225C':'trie','\\u225F':'equest','\\u2261':'equiv','\\u2262':'nequiv','\\u2261\\u20E5':'bnequiv','\\u2264':'le','\\u2270':'nle','\\u2264\\u20D2':'nvle','\\u2265':'ge','\\u2271':'nge','\\u2265\\u20D2':'nvge','\\u2266':'lE','\\u2266\\u0338':'nlE','\\u2267':'gE','\\u2267\\u0338':'ngE','\\u2268\\uFE00':'lvnE','\\u2268':'lnE','\\u2269':'gnE','\\u2269\\uFE00':'gvnE','\\u226A':'ll','\\u226A\\u0338':'nLtv','\\u226A\\u20D2':'nLt','\\u226B':'gg','\\u226B\\u0338':'nGtv','\\u226B\\u20D2':'nGt','\\u226C':'twixt','\\u2272':'lsim','\\u2274':'nlsim','\\u2273':'gsim','\\u2275':'ngsim','\\u2276':'lg','\\u2278':'ntlg','\\u2277':'gl','\\u2279':'ntgl','\\u227A':'pr','\\u2280':'npr','\\u227B':'sc','\\u2281':'nsc','\\u227C':'prcue','\\u22E0':'nprcue','\\u227D':'sccue','\\u22E1':'nsccue','\\u227E':'prsim','\\u227F':'scsim','\\u227F\\u0338':'NotSucceedsTilde','\\u2282':'sub','\\u2284':'nsub','\\u2282\\u20D2':'vnsub','\\u2283':'sup','\\u2285':'nsup','\\u2283\\u20D2':'vnsup','\\u2286':'sube','\\u2288':'nsube','\\u2287':'supe','\\u2289':'nsupe','\\u228A\\uFE00':'vsubne','\\u228A':'subne','\\u228B\\uFE00':'vsupne','\\u228B':'supne','\\u228D':'cupdot','\\u228E':'uplus','\\u228F':'sqsub','\\u228F\\u0338':'NotSquareSubset','\\u2290':'sqsup','\\u2290\\u0338':'NotSquareSuperset','\\u2291':'sqsube','\\u22E2':'nsqsube','\\u2292':'sqsupe','\\u22E3':'nsqsupe','\\u2293':'sqcap','\\u2293\\uFE00':'sqcaps','\\u2294':'sqcup','\\u2294\\uFE00':'sqcups','\\u2295':'oplus','\\u2296':'ominus','\\u2297':'otimes','\\u2298':'osol','\\u2299':'odot','\\u229A':'ocir','\\u229B':'oast','\\u229D':'odash','\\u229E':'plusb','\\u229F':'minusb','\\u22A0':'timesb','\\u22A1':'sdotb','\\u22A2':'vdash','\\u22AC':'nvdash','\\u22A3':'dashv','\\u22A4':'top','\\u22A5':'bot','\\u22A7':'models','\\u22A8':'vDash','\\u22AD':'nvDash','\\u22A9':'Vdash','\\u22AE':'nVdash','\\u22AA':'Vvdash','\\u22AB':'VDash','\\u22AF':'nVDash','\\u22B0':'prurel','\\u22B2':'vltri','\\u22EA':'nltri','\\u22B3':'vrtri','\\u22EB':'nrtri','\\u22B4':'ltrie','\\u22EC':'nltrie','\\u22B4\\u20D2':'nvltrie','\\u22B5':'rtrie','\\u22ED':'nrtrie','\\u22B5\\u20D2':'nvrtrie','\\u22B6':'origof','\\u22B7':'imof','\\u22B8':'mumap','\\u22B9':'hercon','\\u22BA':'intcal','\\u22BB':'veebar','\\u22BD':'barvee','\\u22BE':'angrtvb','\\u22BF':'lrtri','\\u22C0':'Wedge','\\u22C1':'Vee','\\u22C2':'xcap','\\u22C3':'xcup','\\u22C4':'diam','\\u22C5':'sdot','\\u22C6':'Star','\\u22C7':'divonx','\\u22C8':'bowtie','\\u22C9':'ltimes','\\u22CA':'rtimes','\\u22CB':'lthree','\\u22CC':'rthree','\\u22CD':'bsime','\\u22CE':'cuvee','\\u22CF':'cuwed','\\u22D0':'Sub','\\u22D1':'Sup','\\u22D2':'Cap','\\u22D3':'Cup','\\u22D4':'fork','\\u22D5':'epar','\\u22D6':'ltdot','\\u22D7':'gtdot','\\u22D8':'Ll','\\u22D8\\u0338':'nLl','\\u22D9':'Gg','\\u22D9\\u0338':'nGg','\\u22DA\\uFE00':'lesg','\\u22DA':'leg','\\u22DB':'gel','\\u22DB\\uFE00':'gesl','\\u22DE':'cuepr','\\u22DF':'cuesc','\\u22E6':'lnsim','\\u22E7':'gnsim','\\u22E8':'prnsim','\\u22E9':'scnsim','\\u22EE':'vellip','\\u22EF':'ctdot','\\u22F0':'utdot','\\u22F1':'dtdot','\\u22F2':'disin','\\u22F3':'isinsv','\\u22F4':'isins','\\u22F5':'isindot','\\u22F5\\u0338':'notindot','\\u22F6':'notinvc','\\u22F7':'notinvb','\\u22F9':'isinE','\\u22F9\\u0338':'notinE','\\u22FA':'nisd','\\u22FB':'xnis','\\u22FC':'nis','\\u22FD':'notnivc','\\u22FE':'notnivb','\\u2305':'barwed','\\u2306':'Barwed','\\u230C':'drcrop','\\u230D':'dlcrop','\\u230E':'urcrop','\\u230F':'ulcrop','\\u2310':'bnot','\\u2312':'profline','\\u2313':'profsurf','\\u2315':'telrec','\\u2316':'target','\\u231C':'ulcorn','\\u231D':'urcorn','\\u231E':'dlcorn','\\u231F':'drcorn','\\u2322':'frown','\\u2323':'smile','\\u232D':'cylcty','\\u232E':'profalar','\\u2336':'topbot','\\u233D':'ovbar','\\u233F':'solbar','\\u237C':'angzarr','\\u23B0':'lmoust','\\u23B1':'rmoust','\\u23B4':'tbrk','\\u23B5':'bbrk','\\u23B6':'bbrktbrk','\\u23DC':'OverParenthesis','\\u23DD':'UnderParenthesis','\\u23DE':'OverBrace','\\u23DF':'UnderBrace','\\u23E2':'trpezium','\\u23E7':'elinters','\\u2423':'blank','\\u2500':'boxh','\\u2502':'boxv','\\u250C':'boxdr','\\u2510':'boxdl','\\u2514':'boxur','\\u2518':'boxul','\\u251C':'boxvr','\\u2524':'boxvl','\\u252C':'boxhd','\\u2534':'boxhu','\\u253C':'boxvh','\\u2550':'boxH','\\u2551':'boxV','\\u2552':'boxdR','\\u2553':'boxDr','\\u2554':'boxDR','\\u2555':'boxdL','\\u2556':'boxDl','\\u2557':'boxDL','\\u2558':'boxuR','\\u2559':'boxUr','\\u255A':'boxUR','\\u255B':'boxuL','\\u255C':'boxUl','\\u255D':'boxUL','\\u255E':'boxvR','\\u255F':'boxVr','\\u2560':'boxVR','\\u2561':'boxvL','\\u2562':'boxVl','\\u2563':'boxVL','\\u2564':'boxHd','\\u2565':'boxhD','\\u2566':'boxHD','\\u2567':'boxHu','\\u2568':'boxhU','\\u2569':'boxHU','\\u256A':'boxvH','\\u256B':'boxVh','\\u256C':'boxVH','\\u2580':'uhblk','\\u2584':'lhblk','\\u2588':'block','\\u2591':'blk14','\\u2592':'blk12','\\u2593':'blk34','\\u25A1':'squ','\\u25AA':'squf','\\u25AB':'EmptyVerySmallSquare','\\u25AD':'rect','\\u25AE':'marker','\\u25B1':'fltns','\\u25B3':'xutri','\\u25B4':'utrif','\\u25B5':'utri','\\u25B8':'rtrif','\\u25B9':'rtri','\\u25BD':'xdtri','\\u25BE':'dtrif','\\u25BF':'dtri','\\u25C2':'ltrif','\\u25C3':'ltri','\\u25CA':'loz','\\u25CB':'cir','\\u25EC':'tridot','\\u25EF':'xcirc','\\u25F8':'ultri','\\u25F9':'urtri','\\u25FA':'lltri','\\u25FB':'EmptySmallSquare','\\u25FC':'FilledSmallSquare','\\u2605':'starf','\\u2606':'star','\\u260E':'phone','\\u2640':'female','\\u2642':'male','\\u2660':'spades','\\u2663':'clubs','\\u2665':'hearts','\\u2666':'diams','\\u266A':'sung','\\u2713':'check','\\u2717':'cross','\\u2720':'malt','\\u2736':'sext','\\u2758':'VerticalSeparator','\\u27C8':'bsolhsub','\\u27C9':'suphsol','\\u27F5':'xlarr','\\u27F6':'xrarr','\\u27F7':'xharr','\\u27F8':'xlArr','\\u27F9':'xrArr','\\u27FA':'xhArr','\\u27FC':'xmap','\\u27FF':'dzigrarr','\\u2902':'nvlArr','\\u2903':'nvrArr','\\u2904':'nvHarr','\\u2905':'Map','\\u290C':'lbarr','\\u290D':'rbarr','\\u290E':'lBarr','\\u290F':'rBarr','\\u2910':'RBarr','\\u2911':'DDotrahd','\\u2912':'UpArrowBar','\\u2913':'DownArrowBar','\\u2916':'Rarrtl','\\u2919':'latail','\\u291A':'ratail','\\u291B':'lAtail','\\u291C':'rAtail','\\u291D':'larrfs','\\u291E':'rarrfs','\\u291F':'larrbfs','\\u2920':'rarrbfs','\\u2923':'nwarhk','\\u2924':'nearhk','\\u2925':'searhk','\\u2926':'swarhk','\\u2927':'nwnear','\\u2928':'toea','\\u2929':'tosa','\\u292A':'swnwar','\\u2933':'rarrc','\\u2933\\u0338':'nrarrc','\\u2935':'cudarrr','\\u2936':'ldca','\\u2937':'rdca','\\u2938':'cudarrl','\\u2939':'larrpl','\\u293C':'curarrm','\\u293D':'cularrp','\\u2945':'rarrpl','\\u2948':'harrcir','\\u2949':'Uarrocir','\\u294A':'lurdshar','\\u294B':'ldrushar','\\u294E':'LeftRightVector','\\u294F':'RightUpDownVector','\\u2950':'DownLeftRightVector','\\u2951':'LeftUpDownVector','\\u2952':'LeftVectorBar','\\u2953':'RightVectorBar','\\u2954':'RightUpVectorBar','\\u2955':'RightDownVectorBar','\\u2956':'DownLeftVectorBar','\\u2957':'DownRightVectorBar','\\u2958':'LeftUpVectorBar','\\u2959':'LeftDownVectorBar','\\u295A':'LeftTeeVector','\\u295B':'RightTeeVector','\\u295C':'RightUpTeeVector','\\u295D':'RightDownTeeVector','\\u295E':'DownLeftTeeVector','\\u295F':'DownRightTeeVector','\\u2960':'LeftUpTeeVector','\\u2961':'LeftDownTeeVector','\\u2962':'lHar','\\u2963':'uHar','\\u2964':'rHar','\\u2965':'dHar','\\u2966':'luruhar','\\u2967':'ldrdhar','\\u2968':'ruluhar','\\u2969':'rdldhar','\\u296A':'lharul','\\u296B':'llhard','\\u296C':'rharul','\\u296D':'lrhard','\\u296E':'udhar','\\u296F':'duhar','\\u2970':'RoundImplies','\\u2971':'erarr','\\u2972':'simrarr','\\u2973':'larrsim','\\u2974':'rarrsim','\\u2975':'rarrap','\\u2976':'ltlarr','\\u2978':'gtrarr','\\u2979':'subrarr','\\u297B':'suplarr','\\u297C':'lfisht','\\u297D':'rfisht','\\u297E':'ufisht','\\u297F':'dfisht','\\u299A':'vzigzag','\\u299C':'vangrt','\\u299D':'angrtvbd','\\u29A4':'ange','\\u29A5':'range','\\u29A6':'dwangle','\\u29A7':'uwangle','\\u29A8':'angmsdaa','\\u29A9':'angmsdab','\\u29AA':'angmsdac','\\u29AB':'angmsdad','\\u29AC':'angmsdae','\\u29AD':'angmsdaf','\\u29AE':'angmsdag','\\u29AF':'angmsdah','\\u29B0':'bemptyv','\\u29B1':'demptyv','\\u29B2':'cemptyv','\\u29B3':'raemptyv','\\u29B4':'laemptyv','\\u29B5':'ohbar','\\u29B6':'omid','\\u29B7':'opar','\\u29B9':'operp','\\u29BB':'olcross','\\u29BC':'odsold','\\u29BE':'olcir','\\u29BF':'ofcir','\\u29C0':'olt','\\u29C1':'ogt','\\u29C2':'cirscir','\\u29C3':'cirE','\\u29C4':'solb','\\u29C5':'bsolb','\\u29C9':'boxbox','\\u29CD':'trisb','\\u29CE':'rtriltri','\\u29CF':'LeftTriangleBar','\\u29CF\\u0338':'NotLeftTriangleBar','\\u29D0':'RightTriangleBar','\\u29D0\\u0338':'NotRightTriangleBar','\\u29DC':'iinfin','\\u29DD':'infintie','\\u29DE':'nvinfin','\\u29E3':'eparsl','\\u29E4':'smeparsl','\\u29E5':'eqvparsl','\\u29EB':'lozf','\\u29F4':'RuleDelayed','\\u29F6':'dsol','\\u2A00':'xodot','\\u2A01':'xoplus','\\u2A02':'xotime','\\u2A04':'xuplus','\\u2A06':'xsqcup','\\u2A0D':'fpartint','\\u2A10':'cirfnint','\\u2A11':'awint','\\u2A12':'rppolint','\\u2A13':'scpolint','\\u2A14':'npolint','\\u2A15':'pointint','\\u2A16':'quatint','\\u2A17':'intlarhk','\\u2A22':'pluscir','\\u2A23':'plusacir','\\u2A24':'simplus','\\u2A25':'plusdu','\\u2A26':'plussim','\\u2A27':'plustwo','\\u2A29':'mcomma','\\u2A2A':'minusdu','\\u2A2D':'loplus','\\u2A2E':'roplus','\\u2A2F':'Cross','\\u2A30':'timesd','\\u2A31':'timesbar','\\u2A33':'smashp','\\u2A34':'lotimes','\\u2A35':'rotimes','\\u2A36':'otimesas','\\u2A37':'Otimes','\\u2A38':'odiv','\\u2A39':'triplus','\\u2A3A':'triminus','\\u2A3B':'tritime','\\u2A3C':'iprod','\\u2A3F':'amalg','\\u2A40':'capdot','\\u2A42':'ncup','\\u2A43':'ncap','\\u2A44':'capand','\\u2A45':'cupor','\\u2A46':'cupcap','\\u2A47':'capcup','\\u2A48':'cupbrcap','\\u2A49':'capbrcup','\\u2A4A':'cupcup','\\u2A4B':'capcap','\\u2A4C':'ccups','\\u2A4D':'ccaps','\\u2A50':'ccupssm','\\u2A53':'And','\\u2A54':'Or','\\u2A55':'andand','\\u2A56':'oror','\\u2A57':'orslope','\\u2A58':'andslope','\\u2A5A':'andv','\\u2A5B':'orv','\\u2A5C':'andd','\\u2A5D':'ord','\\u2A5F':'wedbar','\\u2A66':'sdote','\\u2A6A':'simdot','\\u2A6D':'congdot','\\u2A6D\\u0338':'ncongdot','\\u2A6E':'easter','\\u2A6F':'apacir','\\u2A70':'apE','\\u2A70\\u0338':'napE','\\u2A71':'eplus','\\u2A72':'pluse','\\u2A73':'Esim','\\u2A77':'eDDot','\\u2A78':'equivDD','\\u2A79':'ltcir','\\u2A7A':'gtcir','\\u2A7B':'ltquest','\\u2A7C':'gtquest','\\u2A7D':'les','\\u2A7D\\u0338':'nles','\\u2A7E':'ges','\\u2A7E\\u0338':'nges','\\u2A7F':'lesdot','\\u2A80':'gesdot','\\u2A81':'lesdoto','\\u2A82':'gesdoto','\\u2A83':'lesdotor','\\u2A84':'gesdotol','\\u2A85':'lap','\\u2A86':'gap','\\u2A87':'lne','\\u2A88':'gne','\\u2A89':'lnap','\\u2A8A':'gnap','\\u2A8B':'lEg','\\u2A8C':'gEl','\\u2A8D':'lsime','\\u2A8E':'gsime','\\u2A8F':'lsimg','\\u2A90':'gsiml','\\u2A91':'lgE','\\u2A92':'glE','\\u2A93':'lesges','\\u2A94':'gesles','\\u2A95':'els','\\u2A96':'egs','\\u2A97':'elsdot','\\u2A98':'egsdot','\\u2A99':'el','\\u2A9A':'eg','\\u2A9D':'siml','\\u2A9E':'simg','\\u2A9F':'simlE','\\u2AA0':'simgE','\\u2AA1':'LessLess','\\u2AA1\\u0338':'NotNestedLessLess','\\u2AA2':'GreaterGreater','\\u2AA2\\u0338':'NotNestedGreaterGreater','\\u2AA4':'glj','\\u2AA5':'gla','\\u2AA6':'ltcc','\\u2AA7':'gtcc','\\u2AA8':'lescc','\\u2AA9':'gescc','\\u2AAA':'smt','\\u2AAB':'lat','\\u2AAC':'smte','\\u2AAC\\uFE00':'smtes','\\u2AAD':'late','\\u2AAD\\uFE00':'lates','\\u2AAE':'bumpE','\\u2AAF':'pre','\\u2AAF\\u0338':'npre','\\u2AB0':'sce','\\u2AB0\\u0338':'nsce','\\u2AB3':'prE','\\u2AB4':'scE','\\u2AB5':'prnE','\\u2AB6':'scnE','\\u2AB7':'prap','\\u2AB8':'scap','\\u2AB9':'prnap','\\u2ABA':'scnap','\\u2ABB':'Pr','\\u2ABC':'Sc','\\u2ABD':'subdot','\\u2ABE':'supdot','\\u2ABF':'subplus','\\u2AC0':'supplus','\\u2AC1':'submult','\\u2AC2':'supmult','\\u2AC3':'subedot','\\u2AC4':'supedot','\\u2AC5':'subE','\\u2AC5\\u0338':'nsubE','\\u2AC6':'supE','\\u2AC6\\u0338':'nsupE','\\u2AC7':'subsim','\\u2AC8':'supsim','\\u2ACB\\uFE00':'vsubnE','\\u2ACB':'subnE','\\u2ACC\\uFE00':'vsupnE','\\u2ACC':'supnE','\\u2ACF':'csub','\\u2AD0':'csup','\\u2AD1':'csube','\\u2AD2':'csupe','\\u2AD3':'subsup','\\u2AD4':'supsub','\\u2AD5':'subsub','\\u2AD6':'supsup','\\u2AD7':'suphsub','\\u2AD8':'supdsub','\\u2AD9':'forkv','\\u2ADA':'topfork','\\u2ADB':'mlcp','\\u2AE4':'Dashv','\\u2AE6':'Vdashl','\\u2AE7':'Barv','\\u2AE8':'vBar','\\u2AE9':'vBarv','\\u2AEB':'Vbar','\\u2AEC':'Not','\\u2AED':'bNot','\\u2AEE':'rnmid','\\u2AEF':'cirmid','\\u2AF0':'midcir','\\u2AF1':'topcir','\\u2AF2':'nhpar','\\u2AF3':'parsim','\\u2AFD':'parsl','\\u2AFD\\u20E5':'nparsl','\\u266D':'flat','\\u266E':'natur','\\u266F':'sharp','\\xA4':'curren','\\xA2':'cent','$':'dollar','\\xA3':'pound','\\xA5':'yen','\\u20AC':'euro','\\xB9':'sup1','\\xBD':'half','\\u2153':'frac13','\\xBC':'frac14','\\u2155':'frac15','\\u2159':'frac16','\\u215B':'frac18','\\xB2':'sup2','\\u2154':'frac23','\\u2156':'frac25','\\xB3':'sup3','\\xBE':'frac34','\\u2157':'frac35','\\u215C':'frac38','\\u2158':'frac45','\\u215A':'frac56','\\u215D':'frac58','\\u215E':'frac78','\\uD835\\uDCB6':'ascr','\\uD835\\uDD52':'aopf','\\uD835\\uDD1E':'afr','\\uD835\\uDD38':'Aopf','\\uD835\\uDD04':'Afr','\\uD835\\uDC9C':'Ascr','\\xAA':'ordf','\\xE1':'aacute','\\xC1':'Aacute','\\xE0':'agrave','\\xC0':'Agrave','\\u0103':'abreve','\\u0102':'Abreve','\\xE2':'acirc','\\xC2':'Acirc','\\xE5':'aring','\\xC5':'angst','\\xE4':'auml','\\xC4':'Auml','\\xE3':'atilde','\\xC3':'Atilde','\\u0105':'aogon','\\u0104':'Aogon','\\u0101':'amacr','\\u0100':'Amacr','\\xE6':'aelig','\\xC6':'AElig','\\uD835\\uDCB7':'bscr','\\uD835\\uDD53':'bopf','\\uD835\\uDD1F':'bfr','\\uD835\\uDD39':'Bopf','\\u212C':'Bscr','\\uD835\\uDD05':'Bfr','\\uD835\\uDD20':'cfr','\\uD835\\uDCB8':'cscr','\\uD835\\uDD54':'copf','\\u212D':'Cfr','\\uD835\\uDC9E':'Cscr','\\u2102':'Copf','\\u0107':'cacute','\\u0106':'Cacute','\\u0109':'ccirc','\\u0108':'Ccirc','\\u010D':'ccaron','\\u010C':'Ccaron','\\u010B':'cdot','\\u010A':'Cdot','\\xE7':'ccedil','\\xC7':'Ccedil','\\u2105':'incare','\\uD835\\uDD21':'dfr','\\u2146':'dd','\\uD835\\uDD55':'dopf','\\uD835\\uDCB9':'dscr','\\uD835\\uDC9F':'Dscr','\\uD835\\uDD07':'Dfr','\\u2145':'DD','\\uD835\\uDD3B':'Dopf','\\u010F':'dcaron','\\u010E':'Dcaron','\\u0111':'dstrok','\\u0110':'Dstrok','\\xF0':'eth','\\xD0':'ETH','\\u2147':'ee','\\u212F':'escr','\\uD835\\uDD22':'efr','\\uD835\\uDD56':'eopf','\\u2130':'Escr','\\uD835\\uDD08':'Efr','\\uD835\\uDD3C':'Eopf','\\xE9':'eacute','\\xC9':'Eacute','\\xE8':'egrave','\\xC8':'Egrave','\\xEA':'ecirc','\\xCA':'Ecirc','\\u011B':'ecaron','\\u011A':'Ecaron','\\xEB':'euml','\\xCB':'Euml','\\u0117':'edot','\\u0116':'Edot','\\u0119':'eogon','\\u0118':'Eogon','\\u0113':'emacr','\\u0112':'Emacr','\\uD835\\uDD23':'ffr','\\uD835\\uDD57':'fopf','\\uD835\\uDCBB':'fscr','\\uD835\\uDD09':'Ffr','\\uD835\\uDD3D':'Fopf','\\u2131':'Fscr','\\uFB00':'fflig','\\uFB03':'ffilig','\\uFB04':'ffllig','\\uFB01':'filig','fj':'fjlig','\\uFB02':'fllig','\\u0192':'fnof','\\u210A':'gscr','\\uD835\\uDD58':'gopf','\\uD835\\uDD24':'gfr','\\uD835\\uDCA2':'Gscr','\\uD835\\uDD3E':'Gopf','\\uD835\\uDD0A':'Gfr','\\u01F5':'gacute','\\u011F':'gbreve','\\u011E':'Gbreve','\\u011D':'gcirc','\\u011C':'Gcirc','\\u0121':'gdot','\\u0120':'Gdot','\\u0122':'Gcedil','\\uD835\\uDD25':'hfr','\\u210E':'planckh','\\uD835\\uDCBD':'hscr','\\uD835\\uDD59':'hopf','\\u210B':'Hscr','\\u210C':'Hfr','\\u210D':'Hopf','\\u0125':'hcirc','\\u0124':'Hcirc','\\u210F':'hbar','\\u0127':'hstrok','\\u0126':'Hstrok','\\uD835\\uDD5A':'iopf','\\uD835\\uDD26':'ifr','\\uD835\\uDCBE':'iscr','\\u2148':'ii','\\uD835\\uDD40':'Iopf','\\u2110':'Iscr','\\u2111':'Im','\\xED':'iacute','\\xCD':'Iacute','\\xEC':'igrave','\\xCC':'Igrave','\\xEE':'icirc','\\xCE':'Icirc','\\xEF':'iuml','\\xCF':'Iuml','\\u0129':'itilde','\\u0128':'Itilde','\\u0130':'Idot','\\u012F':'iogon','\\u012E':'Iogon','\\u012B':'imacr','\\u012A':'Imacr','\\u0133':'ijlig','\\u0132':'IJlig','\\u0131':'imath','\\uD835\\uDCBF':'jscr','\\uD835\\uDD5B':'jopf','\\uD835\\uDD27':'jfr','\\uD835\\uDCA5':'Jscr','\\uD835\\uDD0D':'Jfr','\\uD835\\uDD41':'Jopf','\\u0135':'jcirc','\\u0134':'Jcirc','\\u0237':'jmath','\\uD835\\uDD5C':'kopf','\\uD835\\uDCC0':'kscr','\\uD835\\uDD28':'kfr','\\uD835\\uDCA6':'Kscr','\\uD835\\uDD42':'Kopf','\\uD835\\uDD0E':'Kfr','\\u0137':'kcedil','\\u0136':'Kcedil','\\uD835\\uDD29':'lfr','\\uD835\\uDCC1':'lscr','\\u2113':'ell','\\uD835\\uDD5D':'lopf','\\u2112':'Lscr','\\uD835\\uDD0F':'Lfr','\\uD835\\uDD43':'Lopf','\\u013A':'lacute','\\u0139':'Lacute','\\u013E':'lcaron','\\u013D':'Lcaron','\\u013C':'lcedil','\\u013B':'Lcedil','\\u0142':'lstrok','\\u0141':'Lstrok','\\u0140':'lmidot','\\u013F':'Lmidot','\\uD835\\uDD2A':'mfr','\\uD835\\uDD5E':'mopf','\\uD835\\uDCC2':'mscr','\\uD835\\uDD10':'Mfr','\\uD835\\uDD44':'Mopf','\\u2133':'Mscr','\\uD835\\uDD2B':'nfr','\\uD835\\uDD5F':'nopf','\\uD835\\uDCC3':'nscr','\\u2115':'Nopf','\\uD835\\uDCA9':'Nscr','\\uD835\\uDD11':'Nfr','\\u0144':'nacute','\\u0143':'Nacute','\\u0148':'ncaron','\\u0147':'Ncaron','\\xF1':'ntilde','\\xD1':'Ntilde','\\u0146':'ncedil','\\u0145':'Ncedil','\\u2116':'numero','\\u014B':'eng','\\u014A':'ENG','\\uD835\\uDD60':'oopf','\\uD835\\uDD2C':'ofr','\\u2134':'oscr','\\uD835\\uDCAA':'Oscr','\\uD835\\uDD12':'Ofr','\\uD835\\uDD46':'Oopf','\\xBA':'ordm','\\xF3':'oacute','\\xD3':'Oacute','\\xF2':'ograve','\\xD2':'Ograve','\\xF4':'ocirc','\\xD4':'Ocirc','\\xF6':'ouml','\\xD6':'Ouml','\\u0151':'odblac','\\u0150':'Odblac','\\xF5':'otilde','\\xD5':'Otilde','\\xF8':'oslash','\\xD8':'Oslash','\\u014D':'omacr','\\u014C':'Omacr','\\u0153':'oelig','\\u0152':'OElig','\\uD835\\uDD2D':'pfr','\\uD835\\uDCC5':'pscr','\\uD835\\uDD61':'popf','\\u2119':'Popf','\\uD835\\uDD13':'Pfr','\\uD835\\uDCAB':'Pscr','\\uD835\\uDD62':'qopf','\\uD835\\uDD2E':'qfr','\\uD835\\uDCC6':'qscr','\\uD835\\uDCAC':'Qscr','\\uD835\\uDD14':'Qfr','\\u211A':'Qopf','\\u0138':'kgreen','\\uD835\\uDD2F':'rfr','\\uD835\\uDD63':'ropf','\\uD835\\uDCC7':'rscr','\\u211B':'Rscr','\\u211C':'Re','\\u211D':'Ropf','\\u0155':'racute','\\u0154':'Racute','\\u0159':'rcaron','\\u0158':'Rcaron','\\u0157':'rcedil','\\u0156':'Rcedil','\\uD835\\uDD64':'sopf','\\uD835\\uDCC8':'sscr','\\uD835\\uDD30':'sfr','\\uD835\\uDD4A':'Sopf','\\uD835\\uDD16':'Sfr','\\uD835\\uDCAE':'Sscr','\\u24C8':'oS','\\u015B':'sacute','\\u015A':'Sacute','\\u015D':'scirc','\\u015C':'Scirc','\\u0161':'scaron','\\u0160':'Scaron','\\u015F':'scedil','\\u015E':'Scedil','\\xDF':'szlig','\\uD835\\uDD31':'tfr','\\uD835\\uDCC9':'tscr','\\uD835\\uDD65':'topf','\\uD835\\uDCAF':'Tscr','\\uD835\\uDD17':'Tfr','\\uD835\\uDD4B':'Topf','\\u0165':'tcaron','\\u0164':'Tcaron','\\u0163':'tcedil','\\u0162':'Tcedil','\\u2122':'trade','\\u0167':'tstrok','\\u0166':'Tstrok','\\uD835\\uDCCA':'uscr','\\uD835\\uDD66':'uopf','\\uD835\\uDD32':'ufr','\\uD835\\uDD4C':'Uopf','\\uD835\\uDD18':'Ufr','\\uD835\\uDCB0':'Uscr','\\xFA':'uacute','\\xDA':'Uacute','\\xF9':'ugrave','\\xD9':'Ugrave','\\u016D':'ubreve','\\u016C':'Ubreve','\\xFB':'ucirc','\\xDB':'Ucirc','\\u016F':'uring','\\u016E':'Uring','\\xFC':'uuml','\\xDC':'Uuml','\\u0171':'udblac','\\u0170':'Udblac','\\u0169':'utilde','\\u0168':'Utilde','\\u0173':'uogon','\\u0172':'Uogon','\\u016B':'umacr','\\u016A':'Umacr','\\uD835\\uDD33':'vfr','\\uD835\\uDD67':'vopf','\\uD835\\uDCCB':'vscr','\\uD835\\uDD19':'Vfr','\\uD835\\uDD4D':'Vopf','\\uD835\\uDCB1':'Vscr','\\uD835\\uDD68':'wopf','\\uD835\\uDCCC':'wscr','\\uD835\\uDD34':'wfr','\\uD835\\uDCB2':'Wscr','\\uD835\\uDD4E':'Wopf','\\uD835\\uDD1A':'Wfr','\\u0175':'wcirc','\\u0174':'Wcirc','\\uD835\\uDD35':'xfr','\\uD835\\uDCCD':'xscr','\\uD835\\uDD69':'xopf','\\uD835\\uDD4F':'Xopf','\\uD835\\uDD1B':'Xfr','\\uD835\\uDCB3':'Xscr','\\uD835\\uDD36':'yfr','\\uD835\\uDCCE':'yscr','\\uD835\\uDD6A':'yopf','\\uD835\\uDCB4':'Yscr','\\uD835\\uDD1C':'Yfr','\\uD835\\uDD50':'Yopf','\\xFD':'yacute','\\xDD':'Yacute','\\u0177':'ycirc','\\u0176':'Ycirc','\\xFF':'yuml','\\u0178':'Yuml','\\uD835\\uDCCF':'zscr','\\uD835\\uDD37':'zfr','\\uD835\\uDD6B':'zopf','\\u2128':'Zfr','\\u2124':'Zopf','\\uD835\\uDCB5':'Zscr','\\u017A':'zacute','\\u0179':'Zacute','\\u017E':'zcaron','\\u017D':'Zcaron','\\u017C':'zdot','\\u017B':'Zdot','\\u01B5':'imped','\\xFE':'thorn','\\xDE':'THORN','\\u0149':'napos','\\u03B1':'alpha','\\u0391':'Alpha','\\u03B2':'beta','\\u0392':'Beta','\\u03B3':'gamma','\\u0393':'Gamma','\\u03B4':'delta','\\u0394':'Delta','\\u03B5':'epsi','\\u03F5':'epsiv','\\u0395':'Epsilon','\\u03DD':'gammad','\\u03DC':'Gammad','\\u03B6':'zeta','\\u0396':'Zeta','\\u03B7':'eta','\\u0397':'Eta','\\u03B8':'theta','\\u03D1':'thetav','\\u0398':'Theta','\\u03B9':'iota','\\u0399':'Iota','\\u03BA':'kappa','\\u03F0':'kappav','\\u039A':'Kappa','\\u03BB':'lambda','\\u039B':'Lambda','\\u03BC':'mu','\\xB5':'micro','\\u039C':'Mu','\\u03BD':'nu','\\u039D':'Nu','\\u03BE':'xi','\\u039E':'Xi','\\u03BF':'omicron','\\u039F':'Omicron','\\u03C0':'pi','\\u03D6':'piv','\\u03A0':'Pi','\\u03C1':'rho','\\u03F1':'rhov','\\u03A1':'Rho','\\u03C3':'sigma','\\u03A3':'Sigma','\\u03C2':'sigmaf','\\u03C4':'tau','\\u03A4':'Tau','\\u03C5':'upsi','\\u03A5':'Upsilon','\\u03D2':'Upsi','\\u03C6':'phi','\\u03D5':'phiv','\\u03A6':'Phi','\\u03C7':'chi','\\u03A7':'Chi','\\u03C8':'psi','\\u03A8':'Psi','\\u03C9':'omega','\\u03A9':'ohm','\\u0430':'acy','\\u0410':'Acy','\\u0431':'bcy','\\u0411':'Bcy','\\u0432':'vcy','\\u0412':'Vcy','\\u0433':'gcy','\\u0413':'Gcy','\\u0453':'gjcy','\\u0403':'GJcy','\\u0434':'dcy','\\u0414':'Dcy','\\u0452':'djcy','\\u0402':'DJcy','\\u0435':'iecy','\\u0415':'IEcy','\\u0451':'iocy','\\u0401':'IOcy','\\u0454':'jukcy','\\u0404':'Jukcy','\\u0436':'zhcy','\\u0416':'ZHcy','\\u0437':'zcy','\\u0417':'Zcy','\\u0455':'dscy','\\u0405':'DScy','\\u0438':'icy','\\u0418':'Icy','\\u0456':'iukcy','\\u0406':'Iukcy','\\u0457':'yicy','\\u0407':'YIcy','\\u0439':'jcy','\\u0419':'Jcy','\\u0458':'jsercy','\\u0408':'Jsercy','\\u043A':'kcy','\\u041A':'Kcy','\\u045C':'kjcy','\\u040C':'KJcy','\\u043B':'lcy','\\u041B':'Lcy','\\u0459':'ljcy','\\u0409':'LJcy','\\u043C':'mcy','\\u041C':'Mcy','\\u043D':'ncy','\\u041D':'Ncy','\\u045A':'njcy','\\u040A':'NJcy','\\u043E':'ocy','\\u041E':'Ocy','\\u043F':'pcy','\\u041F':'Pcy','\\u0440':'rcy','\\u0420':'Rcy','\\u0441':'scy','\\u0421':'Scy','\\u0442':'tcy','\\u0422':'Tcy','\\u045B':'tshcy','\\u040B':'TSHcy','\\u0443':'ucy','\\u0423':'Ucy','\\u045E':'ubrcy','\\u040E':'Ubrcy','\\u0444':'fcy','\\u0424':'Fcy','\\u0445':'khcy','\\u0425':'KHcy','\\u0446':'tscy','\\u0426':'TScy','\\u0447':'chcy','\\u0427':'CHcy','\\u045F':'dzcy','\\u040F':'DZcy','\\u0448':'shcy','\\u0428':'SHcy','\\u0449':'shchcy','\\u0429':'SHCHcy','\\u044A':'hardcy','\\u042A':'HARDcy','\\u044B':'ycy','\\u042B':'Ycy','\\u044C':'softcy','\\u042C':'SOFTcy','\\u044D':'ecy','\\u042D':'Ecy','\\u044E':'yucy','\\u042E':'YUcy','\\u044F':'yacy','\\u042F':'YAcy','\\u2135':'aleph','\\u2136':'beth','\\u2137':'gimel','\\u2138':'daleth'};\n\n\tvar regexEscape = /[\"&'<>`]/g;\n\tvar escapeMap = {\n\t\t'\"': '&quot;',\n\t\t'&': '&amp;',\n\t\t'\\'': '&#x27;',\n\t\t'<': '&lt;',\n\t\t// See https://mathiasbynens.be/notes/ambiguous-ampersands: in HTML, the\n\t\t// following is not strictly necessary unless it’s part of a tag or an\n\t\t// unquoted attribute value. We’re only escaping it to support those\n\t\t// situations, and for XML support.\n\t\t'>': '&gt;',\n\t\t// In Internet Explorer ≤ 8, the backtick character can be used\n\t\t// to break out of (un)quoted attribute values or HTML comments.\n\t\t// See http://html5sec.org/#102, http://html5sec.org/#108, and\n\t\t// http://html5sec.org/#133.\n\t\t'`': '&#x60;'\n\t};\n\n\tvar regexInvalidEntity = /&#(?:[xX][^a-fA-F0-9]|[^0-9xX])/;\n\tvar regexInvalidRawCodePoint = /[\\0-\\x08\\x0B\\x0E-\\x1F\\x7F-\\x9F\\uFDD0-\\uFDEF\\uFFFE\\uFFFF]|[\\uD83F\\uD87F\\uD8BF\\uD8FF\\uD93F\\uD97F\\uD9BF\\uD9FF\\uDA3F\\uDA7F\\uDABF\\uDAFF\\uDB3F\\uDB7F\\uDBBF\\uDBFF][\\uDFFE\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/;\n\tvar regexDecode = /&(CounterClockwiseContourIntegral|DoubleLongLeftRightArrow|ClockwiseContourIntegral|NotNestedGreaterGreater|NotSquareSupersetEqual|DiacriticalDoubleAcute|NotRightTriangleEqual|NotSucceedsSlantEqual|NotPrecedesSlantEqual|CloseCurlyDoubleQuote|NegativeVeryThinSpace|DoubleContourIntegral|FilledVerySmallSquare|CapitalDifferentialD|OpenCurlyDoubleQuote|EmptyVerySmallSquare|NestedGreaterGreater|DoubleLongRightArrow|NotLeftTriangleEqual|NotGreaterSlantEqual|ReverseUpEquilibrium|DoubleLeftRightArrow|NotSquareSubsetEqual|NotDoubleVerticalBar|RightArrowLeftArrow|NotGreaterFullEqual|NotRightTriangleBar|SquareSupersetEqual|DownLeftRightVector|DoubleLongLeftArrow|leftrightsquigarrow|LeftArrowRightArrow|NegativeMediumSpace|blacktriangleright|RightDownVectorBar|PrecedesSlantEqual|RightDoubleBracket|SucceedsSlantEqual|NotLeftTriangleBar|RightTriangleEqual|SquareIntersection|RightDownTeeVector|ReverseEquilibrium|NegativeThickSpace|longleftrightarrow|Longleftrightarrow|LongLeftRightArrow|DownRightTeeVector|DownRightVectorBar|GreaterSlantEqual|SquareSubsetEqual|LeftDownVectorBar|LeftDoubleBracket|VerticalSeparator|rightleftharpoons|NotGreaterGreater|NotSquareSuperset|blacktriangleleft|blacktriangledown|NegativeThinSpace|LeftDownTeeVector|NotLessSlantEqual|leftrightharpoons|DoubleUpDownArrow|DoubleVerticalBar|LeftTriangleEqual|FilledSmallSquare|twoheadrightarrow|NotNestedLessLess|DownLeftTeeVector|DownLeftVectorBar|RightAngleBracket|NotTildeFullEqual|NotReverseElement|RightUpDownVector|DiacriticalTilde|NotSucceedsTilde|circlearrowright|NotPrecedesEqual|rightharpoondown|DoubleRightArrow|NotSucceedsEqual|NonBreakingSpace|NotRightTriangle|LessEqualGreater|RightUpTeeVector|LeftAngleBracket|GreaterFullEqual|DownArrowUpArrow|RightUpVectorBar|twoheadleftarrow|GreaterEqualLess|downharpoonright|RightTriangleBar|ntrianglerighteq|NotSupersetEqual|LeftUpDownVector|DiacriticalAcute|rightrightarrows|vartriangleright|UpArrowDownArrow|DiacriticalGrave|UnderParenthesis|EmptySmallSquare|LeftUpVectorBar|leftrightarrows|DownRightVector|downharpoonleft|trianglerighteq|ShortRightArrow|OverParenthesis|DoubleLeftArrow|DoubleDownArrow|NotSquareSubset|bigtriangledown|ntrianglelefteq|UpperRightArrow|curvearrowright|vartriangleleft|NotLeftTriangle|nleftrightarrow|LowerRightArrow|NotHumpDownHump|NotGreaterTilde|rightthreetimes|LeftUpTeeVector|NotGreaterEqual|straightepsilon|LeftTriangleBar|rightsquigarrow|ContourIntegral|rightleftarrows|CloseCurlyQuote|RightDownVector|LeftRightVector|nLeftrightarrow|leftharpoondown|circlearrowleft|SquareSuperset|OpenCurlyQuote|hookrightarrow|HorizontalLine|DiacriticalDot|NotLessGreater|ntriangleright|DoubleRightTee|InvisibleComma|InvisibleTimes|LowerLeftArrow|DownLeftVector|NotSubsetEqual|curvearrowleft|trianglelefteq|NotVerticalBar|TildeFullEqual|downdownarrows|NotGreaterLess|RightTeeVector|ZeroWidthSpace|looparrowright|LongRightArrow|doublebarwedge|ShortLeftArrow|ShortDownArrow|RightVectorBar|GreaterGreater|ReverseElement|rightharpoonup|LessSlantEqual|leftthreetimes|upharpoonright|rightarrowtail|LeftDownVector|Longrightarrow|NestedLessLess|UpperLeftArrow|nshortparallel|leftleftarrows|leftrightarrow|Leftrightarrow|LeftRightArrow|longrightarrow|upharpoonleft|RightArrowBar|ApplyFunction|LeftTeeVector|leftarrowtail|NotEqualTilde|varsubsetneqq|varsupsetneqq|RightTeeArrow|SucceedsEqual|SucceedsTilde|LeftVectorBar|SupersetEqual|hookleftarrow|DifferentialD|VerticalTilde|VeryThinSpace|blacktriangle|bigtriangleup|LessFullEqual|divideontimes|leftharpoonup|UpEquilibrium|ntriangleleft|RightTriangle|measuredangle|shortparallel|longleftarrow|Longleftarrow|LongLeftArrow|DoubleLeftTee|Poincareplane|PrecedesEqual|triangleright|DoubleUpArrow|RightUpVector|fallingdotseq|looparrowleft|PrecedesTilde|NotTildeEqual|NotTildeTilde|smallsetminus|Proportional|triangleleft|triangledown|UnderBracket|NotHumpEqual|exponentiale|ExponentialE|NotLessTilde|HilbertSpace|RightCeiling|blacklozenge|varsupsetneq|HumpDownHump|GreaterEqual|VerticalLine|LeftTeeArrow|NotLessEqual|DownTeeArrow|LeftTriangle|varsubsetneq|Intersection|NotCongruent|DownArrowBar|LeftUpVector|LeftArrowBar|risingdotseq|GreaterTilde|RoundImplies|SquareSubset|ShortUpArrow|NotSuperset|quaternions|precnapprox|backepsilon|preccurlyeq|OverBracket|blacksquare|MediumSpace|VerticalBar|circledcirc|circleddash|CircleMinus|CircleTimes|LessGreater|curlyeqprec|curlyeqsucc|diamondsuit|UpDownArrow|Updownarrow|RuleDelayed|Rrightarrow|updownarrow|RightVector|nRightarrow|nrightarrow|eqslantless|LeftCeiling|Equilibrium|SmallCircle|expectation|NotSucceeds|thickapprox|GreaterLess|SquareUnion|NotPrecedes|NotLessLess|straightphi|succnapprox|succcurlyeq|SubsetEqual|sqsupseteq|Proportion|Laplacetrf|ImaginaryI|supsetneqq|NotGreater|gtreqqless|NotElement|ThickSpace|TildeEqual|TildeTilde|Fouriertrf|rmoustache|EqualTilde|eqslantgtr|UnderBrace|LeftVector|UpArrowBar|nLeftarrow|nsubseteqq|subsetneqq|nsupseteqq|nleftarrow|succapprox|lessapprox|UpTeeArrow|upuparrows|curlywedge|lesseqqgtr|varepsilon|varnothing|RightFloor|complement|CirclePlus|sqsubseteq|Lleftarrow|circledast|RightArrow|Rightarrow|rightarrow|lmoustache|Bernoullis|precapprox|mapstoleft|mapstodown|longmapsto|dotsquare|downarrow|DoubleDot|nsubseteq|supsetneq|leftarrow|nsupseteq|subsetneq|ThinSpace|ngeqslant|subseteqq|HumpEqual|NotSubset|triangleq|NotCupCap|lesseqgtr|heartsuit|TripleDot|Leftarrow|Coproduct|Congruent|varpropto|complexes|gvertneqq|LeftArrow|LessTilde|supseteqq|MinusPlus|CircleDot|nleqslant|NotExists|gtreqless|nparallel|UnionPlus|LeftFloor|checkmark|CenterDot|centerdot|Mellintrf|gtrapprox|bigotimes|OverBrace|spadesuit|therefore|pitchfork|rationals|PlusMinus|Backslash|Therefore|DownBreve|backsimeq|backprime|DownArrow|nshortmid|Downarrow|lvertneqq|eqvparsl|imagline|imagpart|infintie|integers|Integral|intercal|LessLess|Uarrocir|intlarhk|sqsupset|angmsdaf|sqsubset|llcorner|vartheta|cupbrcap|lnapprox|Superset|SuchThat|succnsim|succneqq|angmsdag|biguplus|curlyvee|trpezium|Succeeds|NotTilde|bigwedge|angmsdah|angrtvbd|triminus|cwconint|fpartint|lrcorner|smeparsl|subseteq|urcorner|lurdshar|laemptyv|DDotrahd|approxeq|ldrushar|awconint|mapstoup|backcong|shortmid|triangle|geqslant|gesdotol|timesbar|circledR|circledS|setminus|multimap|naturals|scpolint|ncongdot|RightTee|boxminus|gnapprox|boxtimes|andslope|thicksim|angmsdaa|varsigma|cirfnint|rtriltri|angmsdab|rppolint|angmsdac|barwedge|drbkarow|clubsuit|thetasym|bsolhsub|capbrcup|dzigrarr|doteqdot|DotEqual|dotminus|UnderBar|NotEqual|realpart|otimesas|ulcorner|hksearow|hkswarow|parallel|PartialD|elinters|emptyset|plusacir|bbrktbrk|angmsdad|pointint|bigoplus|angmsdae|Precedes|bigsqcup|varkappa|notindot|supseteq|precneqq|precnsim|profalar|profline|profsurf|leqslant|lesdotor|raemptyv|subplus|notnivb|notnivc|subrarr|zigrarr|vzigzag|submult|subedot|Element|between|cirscir|larrbfs|larrsim|lotimes|lbrksld|lbrkslu|lozenge|ldrdhar|dbkarow|bigcirc|epsilon|simrarr|simplus|ltquest|Epsilon|luruhar|gtquest|maltese|npolint|eqcolon|npreceq|bigodot|ddagger|gtrless|bnequiv|harrcir|ddotseq|equivDD|backsim|demptyv|nsqsube|nsqsupe|Upsilon|nsubset|upsilon|minusdu|nsucceq|swarrow|nsupset|coloneq|searrow|boxplus|napprox|natural|asympeq|alefsym|congdot|nearrow|bigstar|diamond|supplus|tritime|LeftTee|nvinfin|triplus|NewLine|nvltrie|nvrtrie|nwarrow|nexists|Diamond|ruluhar|Implies|supmult|angzarr|suplarr|suphsub|questeq|because|digamma|Because|olcross|bemptyv|omicron|Omicron|rotimes|NoBreak|intprod|angrtvb|orderof|uwangle|suphsol|lesdoto|orslope|DownTee|realine|cudarrl|rdldhar|OverBar|supedot|lessdot|supdsub|topfork|succsim|rbrkslu|rbrksld|pertenk|cudarrr|isindot|planckh|lessgtr|pluscir|gesdoto|plussim|plustwo|lesssim|cularrp|rarrsim|Cayleys|notinva|notinvb|notinvc|UpArrow|Uparrow|uparrow|NotLess|dwangle|precsim|Product|curarrm|Cconint|dotplus|rarrbfs|ccupssm|Cedilla|cemptyv|notniva|quatint|frac35|frac38|frac45|frac56|frac58|frac78|tridot|xoplus|gacute|gammad|Gammad|lfisht|lfloor|bigcup|sqsupe|gbreve|Gbreve|lharul|sqsube|sqcups|Gcedil|apacir|llhard|lmidot|Lmidot|lmoust|andand|sqcaps|approx|Abreve|spades|circeq|tprime|divide|topcir|Assign|topbot|gesdot|divonx|xuplus|timesd|gesles|atilde|solbar|SOFTcy|loplus|timesb|lowast|lowbar|dlcorn|dlcrop|softcy|dollar|lparlt|thksim|lrhard|Atilde|lsaquo|smashp|bigvee|thinsp|wreath|bkarow|lsquor|lstrok|Lstrok|lthree|ltimes|ltlarr|DotDot|simdot|ltrPar|weierp|xsqcup|angmsd|sigmav|sigmaf|zeetrf|Zcaron|zcaron|mapsto|vsupne|thetav|cirmid|marker|mcomma|Zacute|vsubnE|there4|gtlPar|vsubne|bottom|gtrarr|SHCHcy|shchcy|midast|midcir|middot|minusb|minusd|gtrdot|bowtie|sfrown|mnplus|models|colone|seswar|Colone|mstpos|searhk|gtrsim|nacute|Nacute|boxbox|telrec|hairsp|Tcedil|nbumpe|scnsim|ncaron|Ncaron|ncedil|Ncedil|hamilt|Scedil|nearhk|hardcy|HARDcy|tcedil|Tcaron|commat|nequiv|nesear|tcaron|target|hearts|nexist|varrho|scedil|Scaron|scaron|hellip|Sacute|sacute|hercon|swnwar|compfn|rtimes|rthree|rsquor|rsaquo|zacute|wedgeq|homtht|barvee|barwed|Barwed|rpargt|horbar|conint|swarhk|roplus|nltrie|hslash|hstrok|Hstrok|rmoust|Conint|bprime|hybull|hyphen|iacute|Iacute|supsup|supsub|supsim|varphi|coprod|brvbar|agrave|Supset|supset|igrave|Igrave|notinE|Agrave|iiiint|iinfin|copysr|wedbar|Verbar|vangrt|becaus|incare|verbar|inodot|bullet|drcorn|intcal|drcrop|cularr|vellip|Utilde|bumpeq|cupcap|dstrok|Dstrok|CupCap|cupcup|cupdot|eacute|Eacute|supdot|iquest|easter|ecaron|Ecaron|ecolon|isinsv|utilde|itilde|Itilde|curarr|succeq|Bumpeq|cacute|ulcrop|nparsl|Cacute|nprcue|egrave|Egrave|nrarrc|nrarrw|subsup|subsub|nrtrie|jsercy|nsccue|Jsercy|kappav|kcedil|Kcedil|subsim|ulcorn|nsimeq|egsdot|veebar|kgreen|capand|elsdot|Subset|subset|curren|aacute|lacute|Lacute|emptyv|ntilde|Ntilde|lagran|lambda|Lambda|capcap|Ugrave|langle|subdot|emsp13|numero|emsp14|nvdash|nvDash|nVdash|nVDash|ugrave|ufisht|nvHarr|larrfs|nvlArr|larrhk|larrlp|larrpl|nvrArr|Udblac|nwarhk|larrtl|nwnear|oacute|Oacute|latail|lAtail|sstarf|lbrace|odblac|Odblac|lbrack|udblac|odsold|eparsl|lcaron|Lcaron|ograve|Ograve|lcedil|Lcedil|Aacute|ssmile|ssetmn|squarf|ldquor|capcup|ominus|cylcty|rharul|eqcirc|dagger|rfloor|rfisht|Dagger|daleth|equals|origof|capdot|equest|dcaron|Dcaron|rdquor|oslash|Oslash|otilde|Otilde|otimes|Otimes|urcrop|Ubreve|ubreve|Yacute|Uacute|uacute|Rcedil|rcedil|urcorn|parsim|Rcaron|Vdashl|rcaron|Tstrok|percnt|period|permil|Exists|yacute|rbrack|rbrace|phmmat|ccaron|Ccaron|planck|ccedil|plankv|tstrok|female|plusdo|plusdu|ffilig|plusmn|ffllig|Ccedil|rAtail|dfisht|bernou|ratail|Rarrtl|rarrtl|angsph|rarrpl|rarrlp|rarrhk|xwedge|xotime|forall|ForAll|Vvdash|vsupnE|preceq|bigcap|frac12|frac13|frac14|primes|rarrfs|prnsim|frac15|Square|frac16|square|lesdot|frac18|frac23|propto|prurel|rarrap|rangle|puncsp|frac25|Racute|qprime|racute|lesges|frac34|abreve|AElig|eqsim|utdot|setmn|urtri|Equal|Uring|seArr|uring|searr|dashv|Dashv|mumap|nabla|iogon|Iogon|sdote|sdotb|scsim|napid|napos|equiv|natur|Acirc|dblac|erarr|nbump|iprod|erDot|ucirc|awint|esdot|angrt|ncong|isinE|scnap|Scirc|scirc|ndash|isins|Ubrcy|nearr|neArr|isinv|nedot|ubrcy|acute|Ycirc|iukcy|Iukcy|xutri|nesim|caret|jcirc|Jcirc|caron|twixt|ddarr|sccue|exist|jmath|sbquo|ngeqq|angst|ccaps|lceil|ngsim|UpTee|delta|Delta|rtrif|nharr|nhArr|nhpar|rtrie|jukcy|Jukcy|kappa|rsquo|Kappa|nlarr|nlArr|TSHcy|rrarr|aogon|Aogon|fflig|xrarr|tshcy|ccirc|nleqq|filig|upsih|nless|dharl|nlsim|fjlig|ropar|nltri|dharr|robrk|roarr|fllig|fltns|roang|rnmid|subnE|subne|lAarr|trisb|Ccirc|acirc|ccups|blank|VDash|forkv|Vdash|langd|cedil|blk12|blk14|laquo|strns|diams|notin|vDash|larrb|blk34|block|disin|uplus|vdash|vBarv|aelig|starf|Wedge|check|xrArr|lates|lbarr|lBarr|notni|lbbrk|bcong|frasl|lbrke|frown|vrtri|vprop|vnsup|gamma|Gamma|wedge|xodot|bdquo|srarr|doteq|ldquo|boxdl|boxdL|gcirc|Gcirc|boxDl|boxDL|boxdr|boxdR|boxDr|TRADE|trade|rlhar|boxDR|vnsub|npart|vltri|rlarr|boxhd|boxhD|nprec|gescc|nrarr|nrArr|boxHd|boxHD|boxhu|boxhU|nrtri|boxHu|clubs|boxHU|times|colon|Colon|gimel|xlArr|Tilde|nsime|tilde|nsmid|nspar|THORN|thorn|xlarr|nsube|nsubE|thkap|xhArr|comma|nsucc|boxul|boxuL|nsupe|nsupE|gneqq|gnsim|boxUl|boxUL|grave|boxur|boxuR|boxUr|boxUR|lescc|angle|bepsi|boxvh|varpi|boxvH|numsp|Theta|gsime|gsiml|theta|boxVh|boxVH|boxvl|gtcir|gtdot|boxvL|boxVl|boxVL|crarr|cross|Cross|nvsim|boxvr|nwarr|nwArr|sqsup|dtdot|Uogon|lhard|lharu|dtrif|ocirc|Ocirc|lhblk|duarr|odash|sqsub|Hacek|sqcup|llarr|duhar|oelig|OElig|ofcir|boxvR|uogon|lltri|boxVr|csube|uuarr|ohbar|csupe|ctdot|olarr|olcir|harrw|oline|sqcap|omacr|Omacr|omega|Omega|boxVR|aleph|lneqq|lnsim|loang|loarr|rharu|lobrk|hcirc|operp|oplus|rhard|Hcirc|orarr|Union|order|ecirc|Ecirc|cuepr|szlig|cuesc|breve|reals|eDDot|Breve|hoarr|lopar|utrif|rdquo|Umacr|umacr|efDot|swArr|ultri|alpha|rceil|ovbar|swarr|Wcirc|wcirc|smtes|smile|bsemi|lrarr|aring|parsl|lrhar|bsime|uhblk|lrtri|cupor|Aring|uharr|uharl|slarr|rbrke|bsolb|lsime|rbbrk|RBarr|lsimg|phone|rBarr|rbarr|icirc|lsquo|Icirc|emacr|Emacr|ratio|simne|plusb|simlE|simgE|simeq|pluse|ltcir|ltdot|empty|xharr|xdtri|iexcl|Alpha|ltrie|rarrw|pound|ltrif|xcirc|bumpe|prcue|bumpE|asymp|amacr|cuvee|Sigma|sigma|iiint|udhar|iiota|ijlig|IJlig|supnE|imacr|Imacr|prime|Prime|image|prnap|eogon|Eogon|rarrc|mdash|mDDot|cuwed|imath|supne|imped|Amacr|udarr|prsim|micro|rarrb|cwint|raquo|infin|eplus|range|rangd|Ucirc|radic|minus|amalg|veeeq|rAarr|epsiv|ycirc|quest|sharp|quot|zwnj|Qscr|race|qscr|Qopf|qopf|qint|rang|Rang|Zscr|zscr|Zopf|zopf|rarr|rArr|Rarr|Pscr|pscr|prop|prod|prnE|prec|ZHcy|zhcy|prap|Zeta|zeta|Popf|popf|Zdot|plus|zdot|Yuml|yuml|phiv|YUcy|yucy|Yscr|yscr|perp|Yopf|yopf|part|para|YIcy|Ouml|rcub|yicy|YAcy|rdca|ouml|osol|Oscr|rdsh|yacy|real|oscr|xvee|andd|rect|andv|Xscr|oror|ordm|ordf|xscr|ange|aopf|Aopf|rHar|Xopf|opar|Oopf|xopf|xnis|rhov|oopf|omid|xmap|oint|apid|apos|ogon|ascr|Ascr|odot|odiv|xcup|xcap|ocir|oast|nvlt|nvle|nvgt|nvge|nvap|Wscr|wscr|auml|ntlg|ntgl|nsup|nsub|nsim|Nscr|nscr|nsce|Wopf|ring|npre|wopf|npar|Auml|Barv|bbrk|Nopf|nopf|nmid|nLtv|beta|ropf|Ropf|Beta|beth|nles|rpar|nleq|bnot|bNot|nldr|NJcy|rscr|Rscr|Vscr|vscr|rsqb|njcy|bopf|nisd|Bopf|rtri|Vopf|nGtv|ngtr|vopf|boxh|boxH|boxv|nges|ngeq|boxV|bscr|scap|Bscr|bsim|Vert|vert|bsol|bull|bump|caps|cdot|ncup|scnE|ncap|nbsp|napE|Cdot|cent|sdot|Vbar|nang|vBar|chcy|Mscr|mscr|sect|semi|CHcy|Mopf|mopf|sext|circ|cire|mldr|mlcp|cirE|comp|shcy|SHcy|vArr|varr|cong|copf|Copf|copy|COPY|malt|male|macr|lvnE|cscr|ltri|sime|ltcc|simg|Cscr|siml|csub|Uuml|lsqb|lsim|uuml|csup|Lscr|lscr|utri|smid|lpar|cups|smte|lozf|darr|Lopf|Uscr|solb|lopf|sopf|Sopf|lneq|uscr|spar|dArr|lnap|Darr|dash|Sqrt|LJcy|ljcy|lHar|dHar|Upsi|upsi|diam|lesg|djcy|DJcy|leqq|dopf|Dopf|dscr|Dscr|dscy|ldsh|ldca|squf|DScy|sscr|Sscr|dsol|lcub|late|star|Star|Uopf|Larr|lArr|larr|uopf|dtri|dzcy|sube|subE|Lang|lang|Kscr|kscr|Kopf|kopf|KJcy|kjcy|KHcy|khcy|DZcy|ecir|edot|eDot|Jscr|jscr|succ|Jopf|jopf|Edot|uHar|emsp|ensp|Iuml|iuml|eopf|isin|Iscr|iscr|Eopf|epar|sung|epsi|escr|sup1|sup2|sup3|Iota|iota|supe|supE|Iopf|iopf|IOcy|iocy|Escr|esim|Esim|imof|Uarr|QUOT|uArr|uarr|euml|IEcy|iecy|Idot|Euml|euro|excl|Hscr|hscr|Hopf|hopf|TScy|tscy|Tscr|hbar|tscr|flat|tbrk|fnof|hArr|harr|half|fopf|Fopf|tdot|gvnE|fork|trie|gtcc|fscr|Fscr|gdot|gsim|Gscr|gscr|Gopf|gopf|gneq|Gdot|tosa|gnap|Topf|topf|geqq|toea|GJcy|gjcy|tint|gesl|mid|Sfr|ggg|top|ges|gla|glE|glj|geq|gne|gEl|gel|gnE|Gcy|gcy|gap|Tfr|tfr|Tcy|tcy|Hat|Tau|Ffr|tau|Tab|hfr|Hfr|ffr|Fcy|fcy|icy|Icy|iff|ETH|eth|ifr|Ifr|Eta|eta|int|Int|Sup|sup|ucy|Ucy|Sum|sum|jcy|ENG|ufr|Ufr|eng|Jcy|jfr|els|ell|egs|Efr|efr|Jfr|uml|kcy|Kcy|Ecy|ecy|kfr|Kfr|lap|Sub|sub|lat|lcy|Lcy|leg|Dot|dot|lEg|leq|les|squ|div|die|lfr|Lfr|lgE|Dfr|dfr|Del|deg|Dcy|dcy|lne|lnE|sol|loz|smt|Cup|lrm|cup|lsh|Lsh|sim|shy|map|Map|mcy|Mcy|mfr|Mfr|mho|gfr|Gfr|sfr|cir|Chi|chi|nap|Cfr|vcy|Vcy|cfr|Scy|scy|ncy|Ncy|vee|Vee|Cap|cap|nfr|scE|sce|Nfr|nge|ngE|nGg|vfr|Vfr|ngt|bot|nGt|nis|niv|Rsh|rsh|nle|nlE|bne|Bfr|bfr|nLl|nlt|nLt|Bcy|bcy|not|Not|rlm|wfr|Wfr|npr|nsc|num|ocy|ast|Ocy|ofr|xfr|Xfr|Ofr|ogt|ohm|apE|olt|Rho|ape|rho|Rfr|rfr|ord|REG|ang|reg|orv|And|and|AMP|Rcy|amp|Afr|ycy|Ycy|yen|yfr|Yfr|rcy|par|pcy|Pcy|pfr|Pfr|phi|Phi|afr|Acy|acy|zcy|Zcy|piv|acE|acd|zfr|Zfr|pre|prE|psi|Psi|qfr|Qfr|zwj|Or|ge|Gg|gt|gg|el|oS|lt|Lt|LT|Re|lg|gl|eg|ne|Im|it|le|DD|wp|wr|nu|Nu|dd|lE|Sc|sc|pi|Pi|ee|af|ll|Ll|rx|gE|xi|pm|Xi|ic|pr|Pr|in|ni|mp|mu|ac|Mu|or|ap|Gt|GT|ii);|&(Aacute|Agrave|Atilde|Ccedil|Eacute|Egrave|Iacute|Igrave|Ntilde|Oacute|Ograve|Oslash|Otilde|Uacute|Ugrave|Yacute|aacute|agrave|atilde|brvbar|ccedil|curren|divide|eacute|egrave|frac12|frac14|frac34|iacute|igrave|iquest|middot|ntilde|oacute|ograve|oslash|otilde|plusmn|uacute|ugrave|yacute|AElig|Acirc|Aring|Ecirc|Icirc|Ocirc|THORN|Ucirc|acirc|acute|aelig|aring|cedil|ecirc|icirc|iexcl|laquo|micro|ocirc|pound|raquo|szlig|thorn|times|ucirc|Auml|COPY|Euml|Iuml|Ouml|QUOT|Uuml|auml|cent|copy|euml|iuml|macr|nbsp|ordf|ordm|ouml|para|quot|sect|sup1|sup2|sup3|uuml|yuml|AMP|ETH|REG|amp|deg|eth|not|reg|shy|uml|yen|GT|LT|gt|lt)(?!;)([=a-zA-Z0-9]?)|&#([0-9]+)(;?)|&#[xX]([a-fA-F0-9]+)(;?)|&([0-9a-zA-Z]+)/g;\n\tvar decodeMap = {'aacute':'\\xE1','Aacute':'\\xC1','abreve':'\\u0103','Abreve':'\\u0102','ac':'\\u223E','acd':'\\u223F','acE':'\\u223E\\u0333','acirc':'\\xE2','Acirc':'\\xC2','acute':'\\xB4','acy':'\\u0430','Acy':'\\u0410','aelig':'\\xE6','AElig':'\\xC6','af':'\\u2061','afr':'\\uD835\\uDD1E','Afr':'\\uD835\\uDD04','agrave':'\\xE0','Agrave':'\\xC0','alefsym':'\\u2135','aleph':'\\u2135','alpha':'\\u03B1','Alpha':'\\u0391','amacr':'\\u0101','Amacr':'\\u0100','amalg':'\\u2A3F','amp':'&','AMP':'&','and':'\\u2227','And':'\\u2A53','andand':'\\u2A55','andd':'\\u2A5C','andslope':'\\u2A58','andv':'\\u2A5A','ang':'\\u2220','ange':'\\u29A4','angle':'\\u2220','angmsd':'\\u2221','angmsdaa':'\\u29A8','angmsdab':'\\u29A9','angmsdac':'\\u29AA','angmsdad':'\\u29AB','angmsdae':'\\u29AC','angmsdaf':'\\u29AD','angmsdag':'\\u29AE','angmsdah':'\\u29AF','angrt':'\\u221F','angrtvb':'\\u22BE','angrtvbd':'\\u299D','angsph':'\\u2222','angst':'\\xC5','angzarr':'\\u237C','aogon':'\\u0105','Aogon':'\\u0104','aopf':'\\uD835\\uDD52','Aopf':'\\uD835\\uDD38','ap':'\\u2248','apacir':'\\u2A6F','ape':'\\u224A','apE':'\\u2A70','apid':'\\u224B','apos':'\\'','ApplyFunction':'\\u2061','approx':'\\u2248','approxeq':'\\u224A','aring':'\\xE5','Aring':'\\xC5','ascr':'\\uD835\\uDCB6','Ascr':'\\uD835\\uDC9C','Assign':'\\u2254','ast':'*','asymp':'\\u2248','asympeq':'\\u224D','atilde':'\\xE3','Atilde':'\\xC3','auml':'\\xE4','Auml':'\\xC4','awconint':'\\u2233','awint':'\\u2A11','backcong':'\\u224C','backepsilon':'\\u03F6','backprime':'\\u2035','backsim':'\\u223D','backsimeq':'\\u22CD','Backslash':'\\u2216','Barv':'\\u2AE7','barvee':'\\u22BD','barwed':'\\u2305','Barwed':'\\u2306','barwedge':'\\u2305','bbrk':'\\u23B5','bbrktbrk':'\\u23B6','bcong':'\\u224C','bcy':'\\u0431','Bcy':'\\u0411','bdquo':'\\u201E','becaus':'\\u2235','because':'\\u2235','Because':'\\u2235','bemptyv':'\\u29B0','bepsi':'\\u03F6','bernou':'\\u212C','Bernoullis':'\\u212C','beta':'\\u03B2','Beta':'\\u0392','beth':'\\u2136','between':'\\u226C','bfr':'\\uD835\\uDD1F','Bfr':'\\uD835\\uDD05','bigcap':'\\u22C2','bigcirc':'\\u25EF','bigcup':'\\u22C3','bigodot':'\\u2A00','bigoplus':'\\u2A01','bigotimes':'\\u2A02','bigsqcup':'\\u2A06','bigstar':'\\u2605','bigtriangledown':'\\u25BD','bigtriangleup':'\\u25B3','biguplus':'\\u2A04','bigvee':'\\u22C1','bigwedge':'\\u22C0','bkarow':'\\u290D','blacklozenge':'\\u29EB','blacksquare':'\\u25AA','blacktriangle':'\\u25B4','blacktriangledown':'\\u25BE','blacktriangleleft':'\\u25C2','blacktriangleright':'\\u25B8','blank':'\\u2423','blk12':'\\u2592','blk14':'\\u2591','blk34':'\\u2593','block':'\\u2588','bne':'=\\u20E5','bnequiv':'\\u2261\\u20E5','bnot':'\\u2310','bNot':'\\u2AED','bopf':'\\uD835\\uDD53','Bopf':'\\uD835\\uDD39','bot':'\\u22A5','bottom':'\\u22A5','bowtie':'\\u22C8','boxbox':'\\u29C9','boxdl':'\\u2510','boxdL':'\\u2555','boxDl':'\\u2556','boxDL':'\\u2557','boxdr':'\\u250C','boxdR':'\\u2552','boxDr':'\\u2553','boxDR':'\\u2554','boxh':'\\u2500','boxH':'\\u2550','boxhd':'\\u252C','boxhD':'\\u2565','boxHd':'\\u2564','boxHD':'\\u2566','boxhu':'\\u2534','boxhU':'\\u2568','boxHu':'\\u2567','boxHU':'\\u2569','boxminus':'\\u229F','boxplus':'\\u229E','boxtimes':'\\u22A0','boxul':'\\u2518','boxuL':'\\u255B','boxUl':'\\u255C','boxUL':'\\u255D','boxur':'\\u2514','boxuR':'\\u2558','boxUr':'\\u2559','boxUR':'\\u255A','boxv':'\\u2502','boxV':'\\u2551','boxvh':'\\u253C','boxvH':'\\u256A','boxVh':'\\u256B','boxVH':'\\u256C','boxvl':'\\u2524','boxvL':'\\u2561','boxVl':'\\u2562','boxVL':'\\u2563','boxvr':'\\u251C','boxvR':'\\u255E','boxVr':'\\u255F','boxVR':'\\u2560','bprime':'\\u2035','breve':'\\u02D8','Breve':'\\u02D8','brvbar':'\\xA6','bscr':'\\uD835\\uDCB7','Bscr':'\\u212C','bsemi':'\\u204F','bsim':'\\u223D','bsime':'\\u22CD','bsol':'\\\\','bsolb':'\\u29C5','bsolhsub':'\\u27C8','bull':'\\u2022','bullet':'\\u2022','bump':'\\u224E','bumpe':'\\u224F','bumpE':'\\u2AAE','bumpeq':'\\u224F','Bumpeq':'\\u224E','cacute':'\\u0107','Cacute':'\\u0106','cap':'\\u2229','Cap':'\\u22D2','capand':'\\u2A44','capbrcup':'\\u2A49','capcap':'\\u2A4B','capcup':'\\u2A47','capdot':'\\u2A40','CapitalDifferentialD':'\\u2145','caps':'\\u2229\\uFE00','caret':'\\u2041','caron':'\\u02C7','Cayleys':'\\u212D','ccaps':'\\u2A4D','ccaron':'\\u010D','Ccaron':'\\u010C','ccedil':'\\xE7','Ccedil':'\\xC7','ccirc':'\\u0109','Ccirc':'\\u0108','Cconint':'\\u2230','ccups':'\\u2A4C','ccupssm':'\\u2A50','cdot':'\\u010B','Cdot':'\\u010A','cedil':'\\xB8','Cedilla':'\\xB8','cemptyv':'\\u29B2','cent':'\\xA2','centerdot':'\\xB7','CenterDot':'\\xB7','cfr':'\\uD835\\uDD20','Cfr':'\\u212D','chcy':'\\u0447','CHcy':'\\u0427','check':'\\u2713','checkmark':'\\u2713','chi':'\\u03C7','Chi':'\\u03A7','cir':'\\u25CB','circ':'\\u02C6','circeq':'\\u2257','circlearrowleft':'\\u21BA','circlearrowright':'\\u21BB','circledast':'\\u229B','circledcirc':'\\u229A','circleddash':'\\u229D','CircleDot':'\\u2299','circledR':'\\xAE','circledS':'\\u24C8','CircleMinus':'\\u2296','CirclePlus':'\\u2295','CircleTimes':'\\u2297','cire':'\\u2257','cirE':'\\u29C3','cirfnint':'\\u2A10','cirmid':'\\u2AEF','cirscir':'\\u29C2','ClockwiseContourIntegral':'\\u2232','CloseCurlyDoubleQuote':'\\u201D','CloseCurlyQuote':'\\u2019','clubs':'\\u2663','clubsuit':'\\u2663','colon':':','Colon':'\\u2237','colone':'\\u2254','Colone':'\\u2A74','coloneq':'\\u2254','comma':',','commat':'@','comp':'\\u2201','compfn':'\\u2218','complement':'\\u2201','complexes':'\\u2102','cong':'\\u2245','congdot':'\\u2A6D','Congruent':'\\u2261','conint':'\\u222E','Conint':'\\u222F','ContourIntegral':'\\u222E','copf':'\\uD835\\uDD54','Copf':'\\u2102','coprod':'\\u2210','Coproduct':'\\u2210','copy':'\\xA9','COPY':'\\xA9','copysr':'\\u2117','CounterClockwiseContourIntegral':'\\u2233','crarr':'\\u21B5','cross':'\\u2717','Cross':'\\u2A2F','cscr':'\\uD835\\uDCB8','Cscr':'\\uD835\\uDC9E','csub':'\\u2ACF','csube':'\\u2AD1','csup':'\\u2AD0','csupe':'\\u2AD2','ctdot':'\\u22EF','cudarrl':'\\u2938','cudarrr':'\\u2935','cuepr':'\\u22DE','cuesc':'\\u22DF','cularr':'\\u21B6','cularrp':'\\u293D','cup':'\\u222A','Cup':'\\u22D3','cupbrcap':'\\u2A48','cupcap':'\\u2A46','CupCap':'\\u224D','cupcup':'\\u2A4A','cupdot':'\\u228D','cupor':'\\u2A45','cups':'\\u222A\\uFE00','curarr':'\\u21B7','curarrm':'\\u293C','curlyeqprec':'\\u22DE','curlyeqsucc':'\\u22DF','curlyvee':'\\u22CE','curlywedge':'\\u22CF','curren':'\\xA4','curvearrowleft':'\\u21B6','curvearrowright':'\\u21B7','cuvee':'\\u22CE','cuwed':'\\u22CF','cwconint':'\\u2232','cwint':'\\u2231','cylcty':'\\u232D','dagger':'\\u2020','Dagger':'\\u2021','daleth':'\\u2138','darr':'\\u2193','dArr':'\\u21D3','Darr':'\\u21A1','dash':'\\u2010','dashv':'\\u22A3','Dashv':'\\u2AE4','dbkarow':'\\u290F','dblac':'\\u02DD','dcaron':'\\u010F','Dcaron':'\\u010E','dcy':'\\u0434','Dcy':'\\u0414','dd':'\\u2146','DD':'\\u2145','ddagger':'\\u2021','ddarr':'\\u21CA','DDotrahd':'\\u2911','ddotseq':'\\u2A77','deg':'\\xB0','Del':'\\u2207','delta':'\\u03B4','Delta':'\\u0394','demptyv':'\\u29B1','dfisht':'\\u297F','dfr':'\\uD835\\uDD21','Dfr':'\\uD835\\uDD07','dHar':'\\u2965','dharl':'\\u21C3','dharr':'\\u21C2','DiacriticalAcute':'\\xB4','DiacriticalDot':'\\u02D9','DiacriticalDoubleAcute':'\\u02DD','DiacriticalGrave':'`','DiacriticalTilde':'\\u02DC','diam':'\\u22C4','diamond':'\\u22C4','Diamond':'\\u22C4','diamondsuit':'\\u2666','diams':'\\u2666','die':'\\xA8','DifferentialD':'\\u2146','digamma':'\\u03DD','disin':'\\u22F2','div':'\\xF7','divide':'\\xF7','divideontimes':'\\u22C7','divonx':'\\u22C7','djcy':'\\u0452','DJcy':'\\u0402','dlcorn':'\\u231E','dlcrop':'\\u230D','dollar':'$','dopf':'\\uD835\\uDD55','Dopf':'\\uD835\\uDD3B','dot':'\\u02D9','Dot':'\\xA8','DotDot':'\\u20DC','doteq':'\\u2250','doteqdot':'\\u2251','DotEqual':'\\u2250','dotminus':'\\u2238','dotplus':'\\u2214','dotsquare':'\\u22A1','doublebarwedge':'\\u2306','DoubleContourIntegral':'\\u222F','DoubleDot':'\\xA8','DoubleDownArrow':'\\u21D3','DoubleLeftArrow':'\\u21D0','DoubleLeftRightArrow':'\\u21D4','DoubleLeftTee':'\\u2AE4','DoubleLongLeftArrow':'\\u27F8','DoubleLongLeftRightArrow':'\\u27FA','DoubleLongRightArrow':'\\u27F9','DoubleRightArrow':'\\u21D2','DoubleRightTee':'\\u22A8','DoubleUpArrow':'\\u21D1','DoubleUpDownArrow':'\\u21D5','DoubleVerticalBar':'\\u2225','downarrow':'\\u2193','Downarrow':'\\u21D3','DownArrow':'\\u2193','DownArrowBar':'\\u2913','DownArrowUpArrow':'\\u21F5','DownBreve':'\\u0311','downdownarrows':'\\u21CA','downharpoonleft':'\\u21C3','downharpoonright':'\\u21C2','DownLeftRightVector':'\\u2950','DownLeftTeeVector':'\\u295E','DownLeftVector':'\\u21BD','DownLeftVectorBar':'\\u2956','DownRightTeeVector':'\\u295F','DownRightVector':'\\u21C1','DownRightVectorBar':'\\u2957','DownTee':'\\u22A4','DownTeeArrow':'\\u21A7','drbkarow':'\\u2910','drcorn':'\\u231F','drcrop':'\\u230C','dscr':'\\uD835\\uDCB9','Dscr':'\\uD835\\uDC9F','dscy':'\\u0455','DScy':'\\u0405','dsol':'\\u29F6','dstrok':'\\u0111','Dstrok':'\\u0110','dtdot':'\\u22F1','dtri':'\\u25BF','dtrif':'\\u25BE','duarr':'\\u21F5','duhar':'\\u296F','dwangle':'\\u29A6','dzcy':'\\u045F','DZcy':'\\u040F','dzigrarr':'\\u27FF','eacute':'\\xE9','Eacute':'\\xC9','easter':'\\u2A6E','ecaron':'\\u011B','Ecaron':'\\u011A','ecir':'\\u2256','ecirc':'\\xEA','Ecirc':'\\xCA','ecolon':'\\u2255','ecy':'\\u044D','Ecy':'\\u042D','eDDot':'\\u2A77','edot':'\\u0117','eDot':'\\u2251','Edot':'\\u0116','ee':'\\u2147','efDot':'\\u2252','efr':'\\uD835\\uDD22','Efr':'\\uD835\\uDD08','eg':'\\u2A9A','egrave':'\\xE8','Egrave':'\\xC8','egs':'\\u2A96','egsdot':'\\u2A98','el':'\\u2A99','Element':'\\u2208','elinters':'\\u23E7','ell':'\\u2113','els':'\\u2A95','elsdot':'\\u2A97','emacr':'\\u0113','Emacr':'\\u0112','empty':'\\u2205','emptyset':'\\u2205','EmptySmallSquare':'\\u25FB','emptyv':'\\u2205','EmptyVerySmallSquare':'\\u25AB','emsp':'\\u2003','emsp13':'\\u2004','emsp14':'\\u2005','eng':'\\u014B','ENG':'\\u014A','ensp':'\\u2002','eogon':'\\u0119','Eogon':'\\u0118','eopf':'\\uD835\\uDD56','Eopf':'\\uD835\\uDD3C','epar':'\\u22D5','eparsl':'\\u29E3','eplus':'\\u2A71','epsi':'\\u03B5','epsilon':'\\u03B5','Epsilon':'\\u0395','epsiv':'\\u03F5','eqcirc':'\\u2256','eqcolon':'\\u2255','eqsim':'\\u2242','eqslantgtr':'\\u2A96','eqslantless':'\\u2A95','Equal':'\\u2A75','equals':'=','EqualTilde':'\\u2242','equest':'\\u225F','Equilibrium':'\\u21CC','equiv':'\\u2261','equivDD':'\\u2A78','eqvparsl':'\\u29E5','erarr':'\\u2971','erDot':'\\u2253','escr':'\\u212F','Escr':'\\u2130','esdot':'\\u2250','esim':'\\u2242','Esim':'\\u2A73','eta':'\\u03B7','Eta':'\\u0397','eth':'\\xF0','ETH':'\\xD0','euml':'\\xEB','Euml':'\\xCB','euro':'\\u20AC','excl':'!','exist':'\\u2203','Exists':'\\u2203','expectation':'\\u2130','exponentiale':'\\u2147','ExponentialE':'\\u2147','fallingdotseq':'\\u2252','fcy':'\\u0444','Fcy':'\\u0424','female':'\\u2640','ffilig':'\\uFB03','fflig':'\\uFB00','ffllig':'\\uFB04','ffr':'\\uD835\\uDD23','Ffr':'\\uD835\\uDD09','filig':'\\uFB01','FilledSmallSquare':'\\u25FC','FilledVerySmallSquare':'\\u25AA','fjlig':'fj','flat':'\\u266D','fllig':'\\uFB02','fltns':'\\u25B1','fnof':'\\u0192','fopf':'\\uD835\\uDD57','Fopf':'\\uD835\\uDD3D','forall':'\\u2200','ForAll':'\\u2200','fork':'\\u22D4','forkv':'\\u2AD9','Fouriertrf':'\\u2131','fpartint':'\\u2A0D','frac12':'\\xBD','frac13':'\\u2153','frac14':'\\xBC','frac15':'\\u2155','frac16':'\\u2159','frac18':'\\u215B','frac23':'\\u2154','frac25':'\\u2156','frac34':'\\xBE','frac35':'\\u2157','frac38':'\\u215C','frac45':'\\u2158','frac56':'\\u215A','frac58':'\\u215D','frac78':'\\u215E','frasl':'\\u2044','frown':'\\u2322','fscr':'\\uD835\\uDCBB','Fscr':'\\u2131','gacute':'\\u01F5','gamma':'\\u03B3','Gamma':'\\u0393','gammad':'\\u03DD','Gammad':'\\u03DC','gap':'\\u2A86','gbreve':'\\u011F','Gbreve':'\\u011E','Gcedil':'\\u0122','gcirc':'\\u011D','Gcirc':'\\u011C','gcy':'\\u0433','Gcy':'\\u0413','gdot':'\\u0121','Gdot':'\\u0120','ge':'\\u2265','gE':'\\u2267','gel':'\\u22DB','gEl':'\\u2A8C','geq':'\\u2265','geqq':'\\u2267','geqslant':'\\u2A7E','ges':'\\u2A7E','gescc':'\\u2AA9','gesdot':'\\u2A80','gesdoto':'\\u2A82','gesdotol':'\\u2A84','gesl':'\\u22DB\\uFE00','gesles':'\\u2A94','gfr':'\\uD835\\uDD24','Gfr':'\\uD835\\uDD0A','gg':'\\u226B','Gg':'\\u22D9','ggg':'\\u22D9','gimel':'\\u2137','gjcy':'\\u0453','GJcy':'\\u0403','gl':'\\u2277','gla':'\\u2AA5','glE':'\\u2A92','glj':'\\u2AA4','gnap':'\\u2A8A','gnapprox':'\\u2A8A','gne':'\\u2A88','gnE':'\\u2269','gneq':'\\u2A88','gneqq':'\\u2269','gnsim':'\\u22E7','gopf':'\\uD835\\uDD58','Gopf':'\\uD835\\uDD3E','grave':'`','GreaterEqual':'\\u2265','GreaterEqualLess':'\\u22DB','GreaterFullEqual':'\\u2267','GreaterGreater':'\\u2AA2','GreaterLess':'\\u2277','GreaterSlantEqual':'\\u2A7E','GreaterTilde':'\\u2273','gscr':'\\u210A','Gscr':'\\uD835\\uDCA2','gsim':'\\u2273','gsime':'\\u2A8E','gsiml':'\\u2A90','gt':'>','Gt':'\\u226B','GT':'>','gtcc':'\\u2AA7','gtcir':'\\u2A7A','gtdot':'\\u22D7','gtlPar':'\\u2995','gtquest':'\\u2A7C','gtrapprox':'\\u2A86','gtrarr':'\\u2978','gtrdot':'\\u22D7','gtreqless':'\\u22DB','gtreqqless':'\\u2A8C','gtrless':'\\u2277','gtrsim':'\\u2273','gvertneqq':'\\u2269\\uFE00','gvnE':'\\u2269\\uFE00','Hacek':'\\u02C7','hairsp':'\\u200A','half':'\\xBD','hamilt':'\\u210B','hardcy':'\\u044A','HARDcy':'\\u042A','harr':'\\u2194','hArr':'\\u21D4','harrcir':'\\u2948','harrw':'\\u21AD','Hat':'^','hbar':'\\u210F','hcirc':'\\u0125','Hcirc':'\\u0124','hearts':'\\u2665','heartsuit':'\\u2665','hellip':'\\u2026','hercon':'\\u22B9','hfr':'\\uD835\\uDD25','Hfr':'\\u210C','HilbertSpace':'\\u210B','hksearow':'\\u2925','hkswarow':'\\u2926','hoarr':'\\u21FF','homtht':'\\u223B','hookleftarrow':'\\u21A9','hookrightarrow':'\\u21AA','hopf':'\\uD835\\uDD59','Hopf':'\\u210D','horbar':'\\u2015','HorizontalLine':'\\u2500','hscr':'\\uD835\\uDCBD','Hscr':'\\u210B','hslash':'\\u210F','hstrok':'\\u0127','Hstrok':'\\u0126','HumpDownHump':'\\u224E','HumpEqual':'\\u224F','hybull':'\\u2043','hyphen':'\\u2010','iacute':'\\xED','Iacute':'\\xCD','ic':'\\u2063','icirc':'\\xEE','Icirc':'\\xCE','icy':'\\u0438','Icy':'\\u0418','Idot':'\\u0130','iecy':'\\u0435','IEcy':'\\u0415','iexcl':'\\xA1','iff':'\\u21D4','ifr':'\\uD835\\uDD26','Ifr':'\\u2111','igrave':'\\xEC','Igrave':'\\xCC','ii':'\\u2148','iiiint':'\\u2A0C','iiint':'\\u222D','iinfin':'\\u29DC','iiota':'\\u2129','ijlig':'\\u0133','IJlig':'\\u0132','Im':'\\u2111','imacr':'\\u012B','Imacr':'\\u012A','image':'\\u2111','ImaginaryI':'\\u2148','imagline':'\\u2110','imagpart':'\\u2111','imath':'\\u0131','imof':'\\u22B7','imped':'\\u01B5','Implies':'\\u21D2','in':'\\u2208','incare':'\\u2105','infin':'\\u221E','infintie':'\\u29DD','inodot':'\\u0131','int':'\\u222B','Int':'\\u222C','intcal':'\\u22BA','integers':'\\u2124','Integral':'\\u222B','intercal':'\\u22BA','Intersection':'\\u22C2','intlarhk':'\\u2A17','intprod':'\\u2A3C','InvisibleComma':'\\u2063','InvisibleTimes':'\\u2062','iocy':'\\u0451','IOcy':'\\u0401','iogon':'\\u012F','Iogon':'\\u012E','iopf':'\\uD835\\uDD5A','Iopf':'\\uD835\\uDD40','iota':'\\u03B9','Iota':'\\u0399','iprod':'\\u2A3C','iquest':'\\xBF','iscr':'\\uD835\\uDCBE','Iscr':'\\u2110','isin':'\\u2208','isindot':'\\u22F5','isinE':'\\u22F9','isins':'\\u22F4','isinsv':'\\u22F3','isinv':'\\u2208','it':'\\u2062','itilde':'\\u0129','Itilde':'\\u0128','iukcy':'\\u0456','Iukcy':'\\u0406','iuml':'\\xEF','Iuml':'\\xCF','jcirc':'\\u0135','Jcirc':'\\u0134','jcy':'\\u0439','Jcy':'\\u0419','jfr':'\\uD835\\uDD27','Jfr':'\\uD835\\uDD0D','jmath':'\\u0237','jopf':'\\uD835\\uDD5B','Jopf':'\\uD835\\uDD41','jscr':'\\uD835\\uDCBF','Jscr':'\\uD835\\uDCA5','jsercy':'\\u0458','Jsercy':'\\u0408','jukcy':'\\u0454','Jukcy':'\\u0404','kappa':'\\u03BA','Kappa':'\\u039A','kappav':'\\u03F0','kcedil':'\\u0137','Kcedil':'\\u0136','kcy':'\\u043A','Kcy':'\\u041A','kfr':'\\uD835\\uDD28','Kfr':'\\uD835\\uDD0E','kgreen':'\\u0138','khcy':'\\u0445','KHcy':'\\u0425','kjcy':'\\u045C','KJcy':'\\u040C','kopf':'\\uD835\\uDD5C','Kopf':'\\uD835\\uDD42','kscr':'\\uD835\\uDCC0','Kscr':'\\uD835\\uDCA6','lAarr':'\\u21DA','lacute':'\\u013A','Lacute':'\\u0139','laemptyv':'\\u29B4','lagran':'\\u2112','lambda':'\\u03BB','Lambda':'\\u039B','lang':'\\u27E8','Lang':'\\u27EA','langd':'\\u2991','langle':'\\u27E8','lap':'\\u2A85','Laplacetrf':'\\u2112','laquo':'\\xAB','larr':'\\u2190','lArr':'\\u21D0','Larr':'\\u219E','larrb':'\\u21E4','larrbfs':'\\u291F','larrfs':'\\u291D','larrhk':'\\u21A9','larrlp':'\\u21AB','larrpl':'\\u2939','larrsim':'\\u2973','larrtl':'\\u21A2','lat':'\\u2AAB','latail':'\\u2919','lAtail':'\\u291B','late':'\\u2AAD','lates':'\\u2AAD\\uFE00','lbarr':'\\u290C','lBarr':'\\u290E','lbbrk':'\\u2772','lbrace':'{','lbrack':'[','lbrke':'\\u298B','lbrksld':'\\u298F','lbrkslu':'\\u298D','lcaron':'\\u013E','Lcaron':'\\u013D','lcedil':'\\u013C','Lcedil':'\\u013B','lceil':'\\u2308','lcub':'{','lcy':'\\u043B','Lcy':'\\u041B','ldca':'\\u2936','ldquo':'\\u201C','ldquor':'\\u201E','ldrdhar':'\\u2967','ldrushar':'\\u294B','ldsh':'\\u21B2','le':'\\u2264','lE':'\\u2266','LeftAngleBracket':'\\u27E8','leftarrow':'\\u2190','Leftarrow':'\\u21D0','LeftArrow':'\\u2190','LeftArrowBar':'\\u21E4','LeftArrowRightArrow':'\\u21C6','leftarrowtail':'\\u21A2','LeftCeiling':'\\u2308','LeftDoubleBracket':'\\u27E6','LeftDownTeeVector':'\\u2961','LeftDownVector':'\\u21C3','LeftDownVectorBar':'\\u2959','LeftFloor':'\\u230A','leftharpoondown':'\\u21BD','leftharpoonup':'\\u21BC','leftleftarrows':'\\u21C7','leftrightarrow':'\\u2194','Leftrightarrow':'\\u21D4','LeftRightArrow':'\\u2194','leftrightarrows':'\\u21C6','leftrightharpoons':'\\u21CB','leftrightsquigarrow':'\\u21AD','LeftRightVector':'\\u294E','LeftTee':'\\u22A3','LeftTeeArrow':'\\u21A4','LeftTeeVector':'\\u295A','leftthreetimes':'\\u22CB','LeftTriangle':'\\u22B2','LeftTriangleBar':'\\u29CF','LeftTriangleEqual':'\\u22B4','LeftUpDownVector':'\\u2951','LeftUpTeeVector':'\\u2960','LeftUpVector':'\\u21BF','LeftUpVectorBar':'\\u2958','LeftVector':'\\u21BC','LeftVectorBar':'\\u2952','leg':'\\u22DA','lEg':'\\u2A8B','leq':'\\u2264','leqq':'\\u2266','leqslant':'\\u2A7D','les':'\\u2A7D','lescc':'\\u2AA8','lesdot':'\\u2A7F','lesdoto':'\\u2A81','lesdotor':'\\u2A83','lesg':'\\u22DA\\uFE00','lesges':'\\u2A93','lessapprox':'\\u2A85','lessdot':'\\u22D6','lesseqgtr':'\\u22DA','lesseqqgtr':'\\u2A8B','LessEqualGreater':'\\u22DA','LessFullEqual':'\\u2266','LessGreater':'\\u2276','lessgtr':'\\u2276','LessLess':'\\u2AA1','lesssim':'\\u2272','LessSlantEqual':'\\u2A7D','LessTilde':'\\u2272','lfisht':'\\u297C','lfloor':'\\u230A','lfr':'\\uD835\\uDD29','Lfr':'\\uD835\\uDD0F','lg':'\\u2276','lgE':'\\u2A91','lHar':'\\u2962','lhard':'\\u21BD','lharu':'\\u21BC','lharul':'\\u296A','lhblk':'\\u2584','ljcy':'\\u0459','LJcy':'\\u0409','ll':'\\u226A','Ll':'\\u22D8','llarr':'\\u21C7','llcorner':'\\u231E','Lleftarrow':'\\u21DA','llhard':'\\u296B','lltri':'\\u25FA','lmidot':'\\u0140','Lmidot':'\\u013F','lmoust':'\\u23B0','lmoustache':'\\u23B0','lnap':'\\u2A89','lnapprox':'\\u2A89','lne':'\\u2A87','lnE':'\\u2268','lneq':'\\u2A87','lneqq':'\\u2268','lnsim':'\\u22E6','loang':'\\u27EC','loarr':'\\u21FD','lobrk':'\\u27E6','longleftarrow':'\\u27F5','Longleftarrow':'\\u27F8','LongLeftArrow':'\\u27F5','longleftrightarrow':'\\u27F7','Longleftrightarrow':'\\u27FA','LongLeftRightArrow':'\\u27F7','longmapsto':'\\u27FC','longrightarrow':'\\u27F6','Longrightarrow':'\\u27F9','LongRightArrow':'\\u27F6','looparrowleft':'\\u21AB','looparrowright':'\\u21AC','lopar':'\\u2985','lopf':'\\uD835\\uDD5D','Lopf':'\\uD835\\uDD43','loplus':'\\u2A2D','lotimes':'\\u2A34','lowast':'\\u2217','lowbar':'_','LowerLeftArrow':'\\u2199','LowerRightArrow':'\\u2198','loz':'\\u25CA','lozenge':'\\u25CA','lozf':'\\u29EB','lpar':'(','lparlt':'\\u2993','lrarr':'\\u21C6','lrcorner':'\\u231F','lrhar':'\\u21CB','lrhard':'\\u296D','lrm':'\\u200E','lrtri':'\\u22BF','lsaquo':'\\u2039','lscr':'\\uD835\\uDCC1','Lscr':'\\u2112','lsh':'\\u21B0','Lsh':'\\u21B0','lsim':'\\u2272','lsime':'\\u2A8D','lsimg':'\\u2A8F','lsqb':'[','lsquo':'\\u2018','lsquor':'\\u201A','lstrok':'\\u0142','Lstrok':'\\u0141','lt':'<','Lt':'\\u226A','LT':'<','ltcc':'\\u2AA6','ltcir':'\\u2A79','ltdot':'\\u22D6','lthree':'\\u22CB','ltimes':'\\u22C9','ltlarr':'\\u2976','ltquest':'\\u2A7B','ltri':'\\u25C3','ltrie':'\\u22B4','ltrif':'\\u25C2','ltrPar':'\\u2996','lurdshar':'\\u294A','luruhar':'\\u2966','lvertneqq':'\\u2268\\uFE00','lvnE':'\\u2268\\uFE00','macr':'\\xAF','male':'\\u2642','malt':'\\u2720','maltese':'\\u2720','map':'\\u21A6','Map':'\\u2905','mapsto':'\\u21A6','mapstodown':'\\u21A7','mapstoleft':'\\u21A4','mapstoup':'\\u21A5','marker':'\\u25AE','mcomma':'\\u2A29','mcy':'\\u043C','Mcy':'\\u041C','mdash':'\\u2014','mDDot':'\\u223A','measuredangle':'\\u2221','MediumSpace':'\\u205F','Mellintrf':'\\u2133','mfr':'\\uD835\\uDD2A','Mfr':'\\uD835\\uDD10','mho':'\\u2127','micro':'\\xB5','mid':'\\u2223','midast':'*','midcir':'\\u2AF0','middot':'\\xB7','minus':'\\u2212','minusb':'\\u229F','minusd':'\\u2238','minusdu':'\\u2A2A','MinusPlus':'\\u2213','mlcp':'\\u2ADB','mldr':'\\u2026','mnplus':'\\u2213','models':'\\u22A7','mopf':'\\uD835\\uDD5E','Mopf':'\\uD835\\uDD44','mp':'\\u2213','mscr':'\\uD835\\uDCC2','Mscr':'\\u2133','mstpos':'\\u223E','mu':'\\u03BC','Mu':'\\u039C','multimap':'\\u22B8','mumap':'\\u22B8','nabla':'\\u2207','nacute':'\\u0144','Nacute':'\\u0143','nang':'\\u2220\\u20D2','nap':'\\u2249','napE':'\\u2A70\\u0338','napid':'\\u224B\\u0338','napos':'\\u0149','napprox':'\\u2249','natur':'\\u266E','natural':'\\u266E','naturals':'\\u2115','nbsp':'\\xA0','nbump':'\\u224E\\u0338','nbumpe':'\\u224F\\u0338','ncap':'\\u2A43','ncaron':'\\u0148','Ncaron':'\\u0147','ncedil':'\\u0146','Ncedil':'\\u0145','ncong':'\\u2247','ncongdot':'\\u2A6D\\u0338','ncup':'\\u2A42','ncy':'\\u043D','Ncy':'\\u041D','ndash':'\\u2013','ne':'\\u2260','nearhk':'\\u2924','nearr':'\\u2197','neArr':'\\u21D7','nearrow':'\\u2197','nedot':'\\u2250\\u0338','NegativeMediumSpace':'\\u200B','NegativeThickSpace':'\\u200B','NegativeThinSpace':'\\u200B','NegativeVeryThinSpace':'\\u200B','nequiv':'\\u2262','nesear':'\\u2928','nesim':'\\u2242\\u0338','NestedGreaterGreater':'\\u226B','NestedLessLess':'\\u226A','NewLine':'\\n','nexist':'\\u2204','nexists':'\\u2204','nfr':'\\uD835\\uDD2B','Nfr':'\\uD835\\uDD11','nge':'\\u2271','ngE':'\\u2267\\u0338','ngeq':'\\u2271','ngeqq':'\\u2267\\u0338','ngeqslant':'\\u2A7E\\u0338','nges':'\\u2A7E\\u0338','nGg':'\\u22D9\\u0338','ngsim':'\\u2275','ngt':'\\u226F','nGt':'\\u226B\\u20D2','ngtr':'\\u226F','nGtv':'\\u226B\\u0338','nharr':'\\u21AE','nhArr':'\\u21CE','nhpar':'\\u2AF2','ni':'\\u220B','nis':'\\u22FC','nisd':'\\u22FA','niv':'\\u220B','njcy':'\\u045A','NJcy':'\\u040A','nlarr':'\\u219A','nlArr':'\\u21CD','nldr':'\\u2025','nle':'\\u2270','nlE':'\\u2266\\u0338','nleftarrow':'\\u219A','nLeftarrow':'\\u21CD','nleftrightarrow':'\\u21AE','nLeftrightarrow':'\\u21CE','nleq':'\\u2270','nleqq':'\\u2266\\u0338','nleqslant':'\\u2A7D\\u0338','nles':'\\u2A7D\\u0338','nless':'\\u226E','nLl':'\\u22D8\\u0338','nlsim':'\\u2274','nlt':'\\u226E','nLt':'\\u226A\\u20D2','nltri':'\\u22EA','nltrie':'\\u22EC','nLtv':'\\u226A\\u0338','nmid':'\\u2224','NoBreak':'\\u2060','NonBreakingSpace':'\\xA0','nopf':'\\uD835\\uDD5F','Nopf':'\\u2115','not':'\\xAC','Not':'\\u2AEC','NotCongruent':'\\u2262','NotCupCap':'\\u226D','NotDoubleVerticalBar':'\\u2226','NotElement':'\\u2209','NotEqual':'\\u2260','NotEqualTilde':'\\u2242\\u0338','NotExists':'\\u2204','NotGreater':'\\u226F','NotGreaterEqual':'\\u2271','NotGreaterFullEqual':'\\u2267\\u0338','NotGreaterGreater':'\\u226B\\u0338','NotGreaterLess':'\\u2279','NotGreaterSlantEqual':'\\u2A7E\\u0338','NotGreaterTilde':'\\u2275','NotHumpDownHump':'\\u224E\\u0338','NotHumpEqual':'\\u224F\\u0338','notin':'\\u2209','notindot':'\\u22F5\\u0338','notinE':'\\u22F9\\u0338','notinva':'\\u2209','notinvb':'\\u22F7','notinvc':'\\u22F6','NotLeftTriangle':'\\u22EA','NotLeftTriangleBar':'\\u29CF\\u0338','NotLeftTriangleEqual':'\\u22EC','NotLess':'\\u226E','NotLessEqual':'\\u2270','NotLessGreater':'\\u2278','NotLessLess':'\\u226A\\u0338','NotLessSlantEqual':'\\u2A7D\\u0338','NotLessTilde':'\\u2274','NotNestedGreaterGreater':'\\u2AA2\\u0338','NotNestedLessLess':'\\u2AA1\\u0338','notni':'\\u220C','notniva':'\\u220C','notnivb':'\\u22FE','notnivc':'\\u22FD','NotPrecedes':'\\u2280','NotPrecedesEqual':'\\u2AAF\\u0338','NotPrecedesSlantEqual':'\\u22E0','NotReverseElement':'\\u220C','NotRightTriangle':'\\u22EB','NotRightTriangleBar':'\\u29D0\\u0338','NotRightTriangleEqual':'\\u22ED','NotSquareSubset':'\\u228F\\u0338','NotSquareSubsetEqual':'\\u22E2','NotSquareSuperset':'\\u2290\\u0338','NotSquareSupersetEqual':'\\u22E3','NotSubset':'\\u2282\\u20D2','NotSubsetEqual':'\\u2288','NotSucceeds':'\\u2281','NotSucceedsEqual':'\\u2AB0\\u0338','NotSucceedsSlantEqual':'\\u22E1','NotSucceedsTilde':'\\u227F\\u0338','NotSuperset':'\\u2283\\u20D2','NotSupersetEqual':'\\u2289','NotTilde':'\\u2241','NotTildeEqual':'\\u2244','NotTildeFullEqual':'\\u2247','NotTildeTilde':'\\u2249','NotVerticalBar':'\\u2224','npar':'\\u2226','nparallel':'\\u2226','nparsl':'\\u2AFD\\u20E5','npart':'\\u2202\\u0338','npolint':'\\u2A14','npr':'\\u2280','nprcue':'\\u22E0','npre':'\\u2AAF\\u0338','nprec':'\\u2280','npreceq':'\\u2AAF\\u0338','nrarr':'\\u219B','nrArr':'\\u21CF','nrarrc':'\\u2933\\u0338','nrarrw':'\\u219D\\u0338','nrightarrow':'\\u219B','nRightarrow':'\\u21CF','nrtri':'\\u22EB','nrtrie':'\\u22ED','nsc':'\\u2281','nsccue':'\\u22E1','nsce':'\\u2AB0\\u0338','nscr':'\\uD835\\uDCC3','Nscr':'\\uD835\\uDCA9','nshortmid':'\\u2224','nshortparallel':'\\u2226','nsim':'\\u2241','nsime':'\\u2244','nsimeq':'\\u2244','nsmid':'\\u2224','nspar':'\\u2226','nsqsube':'\\u22E2','nsqsupe':'\\u22E3','nsub':'\\u2284','nsube':'\\u2288','nsubE':'\\u2AC5\\u0338','nsubset':'\\u2282\\u20D2','nsubseteq':'\\u2288','nsubseteqq':'\\u2AC5\\u0338','nsucc':'\\u2281','nsucceq':'\\u2AB0\\u0338','nsup':'\\u2285','nsupe':'\\u2289','nsupE':'\\u2AC6\\u0338','nsupset':'\\u2283\\u20D2','nsupseteq':'\\u2289','nsupseteqq':'\\u2AC6\\u0338','ntgl':'\\u2279','ntilde':'\\xF1','Ntilde':'\\xD1','ntlg':'\\u2278','ntriangleleft':'\\u22EA','ntrianglelefteq':'\\u22EC','ntriangleright':'\\u22EB','ntrianglerighteq':'\\u22ED','nu':'\\u03BD','Nu':'\\u039D','num':'#','numero':'\\u2116','numsp':'\\u2007','nvap':'\\u224D\\u20D2','nvdash':'\\u22AC','nvDash':'\\u22AD','nVdash':'\\u22AE','nVDash':'\\u22AF','nvge':'\\u2265\\u20D2','nvgt':'>\\u20D2','nvHarr':'\\u2904','nvinfin':'\\u29DE','nvlArr':'\\u2902','nvle':'\\u2264\\u20D2','nvlt':'<\\u20D2','nvltrie':'\\u22B4\\u20D2','nvrArr':'\\u2903','nvrtrie':'\\u22B5\\u20D2','nvsim':'\\u223C\\u20D2','nwarhk':'\\u2923','nwarr':'\\u2196','nwArr':'\\u21D6','nwarrow':'\\u2196','nwnear':'\\u2927','oacute':'\\xF3','Oacute':'\\xD3','oast':'\\u229B','ocir':'\\u229A','ocirc':'\\xF4','Ocirc':'\\xD4','ocy':'\\u043E','Ocy':'\\u041E','odash':'\\u229D','odblac':'\\u0151','Odblac':'\\u0150','odiv':'\\u2A38','odot':'\\u2299','odsold':'\\u29BC','oelig':'\\u0153','OElig':'\\u0152','ofcir':'\\u29BF','ofr':'\\uD835\\uDD2C','Ofr':'\\uD835\\uDD12','ogon':'\\u02DB','ograve':'\\xF2','Ograve':'\\xD2','ogt':'\\u29C1','ohbar':'\\u29B5','ohm':'\\u03A9','oint':'\\u222E','olarr':'\\u21BA','olcir':'\\u29BE','olcross':'\\u29BB','oline':'\\u203E','olt':'\\u29C0','omacr':'\\u014D','Omacr':'\\u014C','omega':'\\u03C9','Omega':'\\u03A9','omicron':'\\u03BF','Omicron':'\\u039F','omid':'\\u29B6','ominus':'\\u2296','oopf':'\\uD835\\uDD60','Oopf':'\\uD835\\uDD46','opar':'\\u29B7','OpenCurlyDoubleQuote':'\\u201C','OpenCurlyQuote':'\\u2018','operp':'\\u29B9','oplus':'\\u2295','or':'\\u2228','Or':'\\u2A54','orarr':'\\u21BB','ord':'\\u2A5D','order':'\\u2134','orderof':'\\u2134','ordf':'\\xAA','ordm':'\\xBA','origof':'\\u22B6','oror':'\\u2A56','orslope':'\\u2A57','orv':'\\u2A5B','oS':'\\u24C8','oscr':'\\u2134','Oscr':'\\uD835\\uDCAA','oslash':'\\xF8','Oslash':'\\xD8','osol':'\\u2298','otilde':'\\xF5','Otilde':'\\xD5','otimes':'\\u2297','Otimes':'\\u2A37','otimesas':'\\u2A36','ouml':'\\xF6','Ouml':'\\xD6','ovbar':'\\u233D','OverBar':'\\u203E','OverBrace':'\\u23DE','OverBracket':'\\u23B4','OverParenthesis':'\\u23DC','par':'\\u2225','para':'\\xB6','parallel':'\\u2225','parsim':'\\u2AF3','parsl':'\\u2AFD','part':'\\u2202','PartialD':'\\u2202','pcy':'\\u043F','Pcy':'\\u041F','percnt':'%','period':'.','permil':'\\u2030','perp':'\\u22A5','pertenk':'\\u2031','pfr':'\\uD835\\uDD2D','Pfr':'\\uD835\\uDD13','phi':'\\u03C6','Phi':'\\u03A6','phiv':'\\u03D5','phmmat':'\\u2133','phone':'\\u260E','pi':'\\u03C0','Pi':'\\u03A0','pitchfork':'\\u22D4','piv':'\\u03D6','planck':'\\u210F','planckh':'\\u210E','plankv':'\\u210F','plus':'+','plusacir':'\\u2A23','plusb':'\\u229E','pluscir':'\\u2A22','plusdo':'\\u2214','plusdu':'\\u2A25','pluse':'\\u2A72','PlusMinus':'\\xB1','plusmn':'\\xB1','plussim':'\\u2A26','plustwo':'\\u2A27','pm':'\\xB1','Poincareplane':'\\u210C','pointint':'\\u2A15','popf':'\\uD835\\uDD61','Popf':'\\u2119','pound':'\\xA3','pr':'\\u227A','Pr':'\\u2ABB','prap':'\\u2AB7','prcue':'\\u227C','pre':'\\u2AAF','prE':'\\u2AB3','prec':'\\u227A','precapprox':'\\u2AB7','preccurlyeq':'\\u227C','Precedes':'\\u227A','PrecedesEqual':'\\u2AAF','PrecedesSlantEqual':'\\u227C','PrecedesTilde':'\\u227E','preceq':'\\u2AAF','precnapprox':'\\u2AB9','precneqq':'\\u2AB5','precnsim':'\\u22E8','precsim':'\\u227E','prime':'\\u2032','Prime':'\\u2033','primes':'\\u2119','prnap':'\\u2AB9','prnE':'\\u2AB5','prnsim':'\\u22E8','prod':'\\u220F','Product':'\\u220F','profalar':'\\u232E','profline':'\\u2312','profsurf':'\\u2313','prop':'\\u221D','Proportion':'\\u2237','Proportional':'\\u221D','propto':'\\u221D','prsim':'\\u227E','prurel':'\\u22B0','pscr':'\\uD835\\uDCC5','Pscr':'\\uD835\\uDCAB','psi':'\\u03C8','Psi':'\\u03A8','puncsp':'\\u2008','qfr':'\\uD835\\uDD2E','Qfr':'\\uD835\\uDD14','qint':'\\u2A0C','qopf':'\\uD835\\uDD62','Qopf':'\\u211A','qprime':'\\u2057','qscr':'\\uD835\\uDCC6','Qscr':'\\uD835\\uDCAC','quaternions':'\\u210D','quatint':'\\u2A16','quest':'?','questeq':'\\u225F','quot':'\"','QUOT':'\"','rAarr':'\\u21DB','race':'\\u223D\\u0331','racute':'\\u0155','Racute':'\\u0154','radic':'\\u221A','raemptyv':'\\u29B3','rang':'\\u27E9','Rang':'\\u27EB','rangd':'\\u2992','range':'\\u29A5','rangle':'\\u27E9','raquo':'\\xBB','rarr':'\\u2192','rArr':'\\u21D2','Rarr':'\\u21A0','rarrap':'\\u2975','rarrb':'\\u21E5','rarrbfs':'\\u2920','rarrc':'\\u2933','rarrfs':'\\u291E','rarrhk':'\\u21AA','rarrlp':'\\u21AC','rarrpl':'\\u2945','rarrsim':'\\u2974','rarrtl':'\\u21A3','Rarrtl':'\\u2916','rarrw':'\\u219D','ratail':'\\u291A','rAtail':'\\u291C','ratio':'\\u2236','rationals':'\\u211A','rbarr':'\\u290D','rBarr':'\\u290F','RBarr':'\\u2910','rbbrk':'\\u2773','rbrace':'}','rbrack':']','rbrke':'\\u298C','rbrksld':'\\u298E','rbrkslu':'\\u2990','rcaron':'\\u0159','Rcaron':'\\u0158','rcedil':'\\u0157','Rcedil':'\\u0156','rceil':'\\u2309','rcub':'}','rcy':'\\u0440','Rcy':'\\u0420','rdca':'\\u2937','rdldhar':'\\u2969','rdquo':'\\u201D','rdquor':'\\u201D','rdsh':'\\u21B3','Re':'\\u211C','real':'\\u211C','realine':'\\u211B','realpart':'\\u211C','reals':'\\u211D','rect':'\\u25AD','reg':'\\xAE','REG':'\\xAE','ReverseElement':'\\u220B','ReverseEquilibrium':'\\u21CB','ReverseUpEquilibrium':'\\u296F','rfisht':'\\u297D','rfloor':'\\u230B','rfr':'\\uD835\\uDD2F','Rfr':'\\u211C','rHar':'\\u2964','rhard':'\\u21C1','rharu':'\\u21C0','rharul':'\\u296C','rho':'\\u03C1','Rho':'\\u03A1','rhov':'\\u03F1','RightAngleBracket':'\\u27E9','rightarrow':'\\u2192','Rightarrow':'\\u21D2','RightArrow':'\\u2192','RightArrowBar':'\\u21E5','RightArrowLeftArrow':'\\u21C4','rightarrowtail':'\\u21A3','RightCeiling':'\\u2309','RightDoubleBracket':'\\u27E7','RightDownTeeVector':'\\u295D','RightDownVector':'\\u21C2','RightDownVectorBar':'\\u2955','RightFloor':'\\u230B','rightharpoondown':'\\u21C1','rightharpoonup':'\\u21C0','rightleftarrows':'\\u21C4','rightleftharpoons':'\\u21CC','rightrightarrows':'\\u21C9','rightsquigarrow':'\\u219D','RightTee':'\\u22A2','RightTeeArrow':'\\u21A6','RightTeeVector':'\\u295B','rightthreetimes':'\\u22CC','RightTriangle':'\\u22B3','RightTriangleBar':'\\u29D0','RightTriangleEqual':'\\u22B5','RightUpDownVector':'\\u294F','RightUpTeeVector':'\\u295C','RightUpVector':'\\u21BE','RightUpVectorBar':'\\u2954','RightVector':'\\u21C0','RightVectorBar':'\\u2953','ring':'\\u02DA','risingdotseq':'\\u2253','rlarr':'\\u21C4','rlhar':'\\u21CC','rlm':'\\u200F','rmoust':'\\u23B1','rmoustache':'\\u23B1','rnmid':'\\u2AEE','roang':'\\u27ED','roarr':'\\u21FE','robrk':'\\u27E7','ropar':'\\u2986','ropf':'\\uD835\\uDD63','Ropf':'\\u211D','roplus':'\\u2A2E','rotimes':'\\u2A35','RoundImplies':'\\u2970','rpar':')','rpargt':'\\u2994','rppolint':'\\u2A12','rrarr':'\\u21C9','Rrightarrow':'\\u21DB','rsaquo':'\\u203A','rscr':'\\uD835\\uDCC7','Rscr':'\\u211B','rsh':'\\u21B1','Rsh':'\\u21B1','rsqb':']','rsquo':'\\u2019','rsquor':'\\u2019','rthree':'\\u22CC','rtimes':'\\u22CA','rtri':'\\u25B9','rtrie':'\\u22B5','rtrif':'\\u25B8','rtriltri':'\\u29CE','RuleDelayed':'\\u29F4','ruluhar':'\\u2968','rx':'\\u211E','sacute':'\\u015B','Sacute':'\\u015A','sbquo':'\\u201A','sc':'\\u227B','Sc':'\\u2ABC','scap':'\\u2AB8','scaron':'\\u0161','Scaron':'\\u0160','sccue':'\\u227D','sce':'\\u2AB0','scE':'\\u2AB4','scedil':'\\u015F','Scedil':'\\u015E','scirc':'\\u015D','Scirc':'\\u015C','scnap':'\\u2ABA','scnE':'\\u2AB6','scnsim':'\\u22E9','scpolint':'\\u2A13','scsim':'\\u227F','scy':'\\u0441','Scy':'\\u0421','sdot':'\\u22C5','sdotb':'\\u22A1','sdote':'\\u2A66','searhk':'\\u2925','searr':'\\u2198','seArr':'\\u21D8','searrow':'\\u2198','sect':'\\xA7','semi':';','seswar':'\\u2929','setminus':'\\u2216','setmn':'\\u2216','sext':'\\u2736','sfr':'\\uD835\\uDD30','Sfr':'\\uD835\\uDD16','sfrown':'\\u2322','sharp':'\\u266F','shchcy':'\\u0449','SHCHcy':'\\u0429','shcy':'\\u0448','SHcy':'\\u0428','ShortDownArrow':'\\u2193','ShortLeftArrow':'\\u2190','shortmid':'\\u2223','shortparallel':'\\u2225','ShortRightArrow':'\\u2192','ShortUpArrow':'\\u2191','shy':'\\xAD','sigma':'\\u03C3','Sigma':'\\u03A3','sigmaf':'\\u03C2','sigmav':'\\u03C2','sim':'\\u223C','simdot':'\\u2A6A','sime':'\\u2243','simeq':'\\u2243','simg':'\\u2A9E','simgE':'\\u2AA0','siml':'\\u2A9D','simlE':'\\u2A9F','simne':'\\u2246','simplus':'\\u2A24','simrarr':'\\u2972','slarr':'\\u2190','SmallCircle':'\\u2218','smallsetminus':'\\u2216','smashp':'\\u2A33','smeparsl':'\\u29E4','smid':'\\u2223','smile':'\\u2323','smt':'\\u2AAA','smte':'\\u2AAC','smtes':'\\u2AAC\\uFE00','softcy':'\\u044C','SOFTcy':'\\u042C','sol':'/','solb':'\\u29C4','solbar':'\\u233F','sopf':'\\uD835\\uDD64','Sopf':'\\uD835\\uDD4A','spades':'\\u2660','spadesuit':'\\u2660','spar':'\\u2225','sqcap':'\\u2293','sqcaps':'\\u2293\\uFE00','sqcup':'\\u2294','sqcups':'\\u2294\\uFE00','Sqrt':'\\u221A','sqsub':'\\u228F','sqsube':'\\u2291','sqsubset':'\\u228F','sqsubseteq':'\\u2291','sqsup':'\\u2290','sqsupe':'\\u2292','sqsupset':'\\u2290','sqsupseteq':'\\u2292','squ':'\\u25A1','square':'\\u25A1','Square':'\\u25A1','SquareIntersection':'\\u2293','SquareSubset':'\\u228F','SquareSubsetEqual':'\\u2291','SquareSuperset':'\\u2290','SquareSupersetEqual':'\\u2292','SquareUnion':'\\u2294','squarf':'\\u25AA','squf':'\\u25AA','srarr':'\\u2192','sscr':'\\uD835\\uDCC8','Sscr':'\\uD835\\uDCAE','ssetmn':'\\u2216','ssmile':'\\u2323','sstarf':'\\u22C6','star':'\\u2606','Star':'\\u22C6','starf':'\\u2605','straightepsilon':'\\u03F5','straightphi':'\\u03D5','strns':'\\xAF','sub':'\\u2282','Sub':'\\u22D0','subdot':'\\u2ABD','sube':'\\u2286','subE':'\\u2AC5','subedot':'\\u2AC3','submult':'\\u2AC1','subne':'\\u228A','subnE':'\\u2ACB','subplus':'\\u2ABF','subrarr':'\\u2979','subset':'\\u2282','Subset':'\\u22D0','subseteq':'\\u2286','subseteqq':'\\u2AC5','SubsetEqual':'\\u2286','subsetneq':'\\u228A','subsetneqq':'\\u2ACB','subsim':'\\u2AC7','subsub':'\\u2AD5','subsup':'\\u2AD3','succ':'\\u227B','succapprox':'\\u2AB8','succcurlyeq':'\\u227D','Succeeds':'\\u227B','SucceedsEqual':'\\u2AB0','SucceedsSlantEqual':'\\u227D','SucceedsTilde':'\\u227F','succeq':'\\u2AB0','succnapprox':'\\u2ABA','succneqq':'\\u2AB6','succnsim':'\\u22E9','succsim':'\\u227F','SuchThat':'\\u220B','sum':'\\u2211','Sum':'\\u2211','sung':'\\u266A','sup':'\\u2283','Sup':'\\u22D1','sup1':'\\xB9','sup2':'\\xB2','sup3':'\\xB3','supdot':'\\u2ABE','supdsub':'\\u2AD8','supe':'\\u2287','supE':'\\u2AC6','supedot':'\\u2AC4','Superset':'\\u2283','SupersetEqual':'\\u2287','suphsol':'\\u27C9','suphsub':'\\u2AD7','suplarr':'\\u297B','supmult':'\\u2AC2','supne':'\\u228B','supnE':'\\u2ACC','supplus':'\\u2AC0','supset':'\\u2283','Supset':'\\u22D1','supseteq':'\\u2287','supseteqq':'\\u2AC6','supsetneq':'\\u228B','supsetneqq':'\\u2ACC','supsim':'\\u2AC8','supsub':'\\u2AD4','supsup':'\\u2AD6','swarhk':'\\u2926','swarr':'\\u2199','swArr':'\\u21D9','swarrow':'\\u2199','swnwar':'\\u292A','szlig':'\\xDF','Tab':'\\t','target':'\\u2316','tau':'\\u03C4','Tau':'\\u03A4','tbrk':'\\u23B4','tcaron':'\\u0165','Tcaron':'\\u0164','tcedil':'\\u0163','Tcedil':'\\u0162','tcy':'\\u0442','Tcy':'\\u0422','tdot':'\\u20DB','telrec':'\\u2315','tfr':'\\uD835\\uDD31','Tfr':'\\uD835\\uDD17','there4':'\\u2234','therefore':'\\u2234','Therefore':'\\u2234','theta':'\\u03B8','Theta':'\\u0398','thetasym':'\\u03D1','thetav':'\\u03D1','thickapprox':'\\u2248','thicksim':'\\u223C','ThickSpace':'\\u205F\\u200A','thinsp':'\\u2009','ThinSpace':'\\u2009','thkap':'\\u2248','thksim':'\\u223C','thorn':'\\xFE','THORN':'\\xDE','tilde':'\\u02DC','Tilde':'\\u223C','TildeEqual':'\\u2243','TildeFullEqual':'\\u2245','TildeTilde':'\\u2248','times':'\\xD7','timesb':'\\u22A0','timesbar':'\\u2A31','timesd':'\\u2A30','tint':'\\u222D','toea':'\\u2928','top':'\\u22A4','topbot':'\\u2336','topcir':'\\u2AF1','topf':'\\uD835\\uDD65','Topf':'\\uD835\\uDD4B','topfork':'\\u2ADA','tosa':'\\u2929','tprime':'\\u2034','trade':'\\u2122','TRADE':'\\u2122','triangle':'\\u25B5','triangledown':'\\u25BF','triangleleft':'\\u25C3','trianglelefteq':'\\u22B4','triangleq':'\\u225C','triangleright':'\\u25B9','trianglerighteq':'\\u22B5','tridot':'\\u25EC','trie':'\\u225C','triminus':'\\u2A3A','TripleDot':'\\u20DB','triplus':'\\u2A39','trisb':'\\u29CD','tritime':'\\u2A3B','trpezium':'\\u23E2','tscr':'\\uD835\\uDCC9','Tscr':'\\uD835\\uDCAF','tscy':'\\u0446','TScy':'\\u0426','tshcy':'\\u045B','TSHcy':'\\u040B','tstrok':'\\u0167','Tstrok':'\\u0166','twixt':'\\u226C','twoheadleftarrow':'\\u219E','twoheadrightarrow':'\\u21A0','uacute':'\\xFA','Uacute':'\\xDA','uarr':'\\u2191','uArr':'\\u21D1','Uarr':'\\u219F','Uarrocir':'\\u2949','ubrcy':'\\u045E','Ubrcy':'\\u040E','ubreve':'\\u016D','Ubreve':'\\u016C','ucirc':'\\xFB','Ucirc':'\\xDB','ucy':'\\u0443','Ucy':'\\u0423','udarr':'\\u21C5','udblac':'\\u0171','Udblac':'\\u0170','udhar':'\\u296E','ufisht':'\\u297E','ufr':'\\uD835\\uDD32','Ufr':'\\uD835\\uDD18','ugrave':'\\xF9','Ugrave':'\\xD9','uHar':'\\u2963','uharl':'\\u21BF','uharr':'\\u21BE','uhblk':'\\u2580','ulcorn':'\\u231C','ulcorner':'\\u231C','ulcrop':'\\u230F','ultri':'\\u25F8','umacr':'\\u016B','Umacr':'\\u016A','uml':'\\xA8','UnderBar':'_','UnderBrace':'\\u23DF','UnderBracket':'\\u23B5','UnderParenthesis':'\\u23DD','Union':'\\u22C3','UnionPlus':'\\u228E','uogon':'\\u0173','Uogon':'\\u0172','uopf':'\\uD835\\uDD66','Uopf':'\\uD835\\uDD4C','uparrow':'\\u2191','Uparrow':'\\u21D1','UpArrow':'\\u2191','UpArrowBar':'\\u2912','UpArrowDownArrow':'\\u21C5','updownarrow':'\\u2195','Updownarrow':'\\u21D5','UpDownArrow':'\\u2195','UpEquilibrium':'\\u296E','upharpoonleft':'\\u21BF','upharpoonright':'\\u21BE','uplus':'\\u228E','UpperLeftArrow':'\\u2196','UpperRightArrow':'\\u2197','upsi':'\\u03C5','Upsi':'\\u03D2','upsih':'\\u03D2','upsilon':'\\u03C5','Upsilon':'\\u03A5','UpTee':'\\u22A5','UpTeeArrow':'\\u21A5','upuparrows':'\\u21C8','urcorn':'\\u231D','urcorner':'\\u231D','urcrop':'\\u230E','uring':'\\u016F','Uring':'\\u016E','urtri':'\\u25F9','uscr':'\\uD835\\uDCCA','Uscr':'\\uD835\\uDCB0','utdot':'\\u22F0','utilde':'\\u0169','Utilde':'\\u0168','utri':'\\u25B5','utrif':'\\u25B4','uuarr':'\\u21C8','uuml':'\\xFC','Uuml':'\\xDC','uwangle':'\\u29A7','vangrt':'\\u299C','varepsilon':'\\u03F5','varkappa':'\\u03F0','varnothing':'\\u2205','varphi':'\\u03D5','varpi':'\\u03D6','varpropto':'\\u221D','varr':'\\u2195','vArr':'\\u21D5','varrho':'\\u03F1','varsigma':'\\u03C2','varsubsetneq':'\\u228A\\uFE00','varsubsetneqq':'\\u2ACB\\uFE00','varsupsetneq':'\\u228B\\uFE00','varsupsetneqq':'\\u2ACC\\uFE00','vartheta':'\\u03D1','vartriangleleft':'\\u22B2','vartriangleright':'\\u22B3','vBar':'\\u2AE8','Vbar':'\\u2AEB','vBarv':'\\u2AE9','vcy':'\\u0432','Vcy':'\\u0412','vdash':'\\u22A2','vDash':'\\u22A8','Vdash':'\\u22A9','VDash':'\\u22AB','Vdashl':'\\u2AE6','vee':'\\u2228','Vee':'\\u22C1','veebar':'\\u22BB','veeeq':'\\u225A','vellip':'\\u22EE','verbar':'|','Verbar':'\\u2016','vert':'|','Vert':'\\u2016','VerticalBar':'\\u2223','VerticalLine':'|','VerticalSeparator':'\\u2758','VerticalTilde':'\\u2240','VeryThinSpace':'\\u200A','vfr':'\\uD835\\uDD33','Vfr':'\\uD835\\uDD19','vltri':'\\u22B2','vnsub':'\\u2282\\u20D2','vnsup':'\\u2283\\u20D2','vopf':'\\uD835\\uDD67','Vopf':'\\uD835\\uDD4D','vprop':'\\u221D','vrtri':'\\u22B3','vscr':'\\uD835\\uDCCB','Vscr':'\\uD835\\uDCB1','vsubne':'\\u228A\\uFE00','vsubnE':'\\u2ACB\\uFE00','vsupne':'\\u228B\\uFE00','vsupnE':'\\u2ACC\\uFE00','Vvdash':'\\u22AA','vzigzag':'\\u299A','wcirc':'\\u0175','Wcirc':'\\u0174','wedbar':'\\u2A5F','wedge':'\\u2227','Wedge':'\\u22C0','wedgeq':'\\u2259','weierp':'\\u2118','wfr':'\\uD835\\uDD34','Wfr':'\\uD835\\uDD1A','wopf':'\\uD835\\uDD68','Wopf':'\\uD835\\uDD4E','wp':'\\u2118','wr':'\\u2240','wreath':'\\u2240','wscr':'\\uD835\\uDCCC','Wscr':'\\uD835\\uDCB2','xcap':'\\u22C2','xcirc':'\\u25EF','xcup':'\\u22C3','xdtri':'\\u25BD','xfr':'\\uD835\\uDD35','Xfr':'\\uD835\\uDD1B','xharr':'\\u27F7','xhArr':'\\u27FA','xi':'\\u03BE','Xi':'\\u039E','xlarr':'\\u27F5','xlArr':'\\u27F8','xmap':'\\u27FC','xnis':'\\u22FB','xodot':'\\u2A00','xopf':'\\uD835\\uDD69','Xopf':'\\uD835\\uDD4F','xoplus':'\\u2A01','xotime':'\\u2A02','xrarr':'\\u27F6','xrArr':'\\u27F9','xscr':'\\uD835\\uDCCD','Xscr':'\\uD835\\uDCB3','xsqcup':'\\u2A06','xuplus':'\\u2A04','xutri':'\\u25B3','xvee':'\\u22C1','xwedge':'\\u22C0','yacute':'\\xFD','Yacute':'\\xDD','yacy':'\\u044F','YAcy':'\\u042F','ycirc':'\\u0177','Ycirc':'\\u0176','ycy':'\\u044B','Ycy':'\\u042B','yen':'\\xA5','yfr':'\\uD835\\uDD36','Yfr':'\\uD835\\uDD1C','yicy':'\\u0457','YIcy':'\\u0407','yopf':'\\uD835\\uDD6A','Yopf':'\\uD835\\uDD50','yscr':'\\uD835\\uDCCE','Yscr':'\\uD835\\uDCB4','yucy':'\\u044E','YUcy':'\\u042E','yuml':'\\xFF','Yuml':'\\u0178','zacute':'\\u017A','Zacute':'\\u0179','zcaron':'\\u017E','Zcaron':'\\u017D','zcy':'\\u0437','Zcy':'\\u0417','zdot':'\\u017C','Zdot':'\\u017B','zeetrf':'\\u2128','ZeroWidthSpace':'\\u200B','zeta':'\\u03B6','Zeta':'\\u0396','zfr':'\\uD835\\uDD37','Zfr':'\\u2128','zhcy':'\\u0436','ZHcy':'\\u0416','zigrarr':'\\u21DD','zopf':'\\uD835\\uDD6B','Zopf':'\\u2124','zscr':'\\uD835\\uDCCF','Zscr':'\\uD835\\uDCB5','zwj':'\\u200D','zwnj':'\\u200C'};\n\tvar decodeMapLegacy = {'aacute':'\\xE1','Aacute':'\\xC1','acirc':'\\xE2','Acirc':'\\xC2','acute':'\\xB4','aelig':'\\xE6','AElig':'\\xC6','agrave':'\\xE0','Agrave':'\\xC0','amp':'&','AMP':'&','aring':'\\xE5','Aring':'\\xC5','atilde':'\\xE3','Atilde':'\\xC3','auml':'\\xE4','Auml':'\\xC4','brvbar':'\\xA6','ccedil':'\\xE7','Ccedil':'\\xC7','cedil':'\\xB8','cent':'\\xA2','copy':'\\xA9','COPY':'\\xA9','curren':'\\xA4','deg':'\\xB0','divide':'\\xF7','eacute':'\\xE9','Eacute':'\\xC9','ecirc':'\\xEA','Ecirc':'\\xCA','egrave':'\\xE8','Egrave':'\\xC8','eth':'\\xF0','ETH':'\\xD0','euml':'\\xEB','Euml':'\\xCB','frac12':'\\xBD','frac14':'\\xBC','frac34':'\\xBE','gt':'>','GT':'>','iacute':'\\xED','Iacute':'\\xCD','icirc':'\\xEE','Icirc':'\\xCE','iexcl':'\\xA1','igrave':'\\xEC','Igrave':'\\xCC','iquest':'\\xBF','iuml':'\\xEF','Iuml':'\\xCF','laquo':'\\xAB','lt':'<','LT':'<','macr':'\\xAF','micro':'\\xB5','middot':'\\xB7','nbsp':'\\xA0','not':'\\xAC','ntilde':'\\xF1','Ntilde':'\\xD1','oacute':'\\xF3','Oacute':'\\xD3','ocirc':'\\xF4','Ocirc':'\\xD4','ograve':'\\xF2','Ograve':'\\xD2','ordf':'\\xAA','ordm':'\\xBA','oslash':'\\xF8','Oslash':'\\xD8','otilde':'\\xF5','Otilde':'\\xD5','ouml':'\\xF6','Ouml':'\\xD6','para':'\\xB6','plusmn':'\\xB1','pound':'\\xA3','quot':'\"','QUOT':'\"','raquo':'\\xBB','reg':'\\xAE','REG':'\\xAE','sect':'\\xA7','shy':'\\xAD','sup1':'\\xB9','sup2':'\\xB2','sup3':'\\xB3','szlig':'\\xDF','thorn':'\\xFE','THORN':'\\xDE','times':'\\xD7','uacute':'\\xFA','Uacute':'\\xDA','ucirc':'\\xFB','Ucirc':'\\xDB','ugrave':'\\xF9','Ugrave':'\\xD9','uml':'\\xA8','uuml':'\\xFC','Uuml':'\\xDC','yacute':'\\xFD','Yacute':'\\xDD','yen':'\\xA5','yuml':'\\xFF'};\n\tvar decodeMapNumeric = {'0':'\\uFFFD','128':'\\u20AC','130':'\\u201A','131':'\\u0192','132':'\\u201E','133':'\\u2026','134':'\\u2020','135':'\\u2021','136':'\\u02C6','137':'\\u2030','138':'\\u0160','139':'\\u2039','140':'\\u0152','142':'\\u017D','145':'\\u2018','146':'\\u2019','147':'\\u201C','148':'\\u201D','149':'\\u2022','150':'\\u2013','151':'\\u2014','152':'\\u02DC','153':'\\u2122','154':'\\u0161','155':'\\u203A','156':'\\u0153','158':'\\u017E','159':'\\u0178'};\n\tvar invalidReferenceCodePoints = [1,2,3,4,5,6,7,8,11,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,64976,64977,64978,64979,64980,64981,64982,64983,64984,64985,64986,64987,64988,64989,64990,64991,64992,64993,64994,64995,64996,64997,64998,64999,65000,65001,65002,65003,65004,65005,65006,65007,65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1048574,1048575,1114110,1114111];\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\tvar object = {};\n\tvar hasOwnProperty = object.hasOwnProperty;\n\tvar has = function(object, propertyName) {\n\t\treturn hasOwnProperty.call(object, propertyName);\n\t};\n\n\tvar contains = function(array, value) {\n\t\tvar index = -1;\n\t\tvar length = array.length;\n\t\twhile (++index < length) {\n\t\t\tif (array[index] == value) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t};\n\n\tvar merge = function(options, defaults) {\n\t\tif (!options) {\n\t\t\treturn defaults;\n\t\t}\n\t\tvar result = {};\n\t\tvar key;\n\t\tfor (key in defaults) {\n\t\t\t// A `hasOwnProperty` check is not needed here, since only recognized\n\t\t\t// option names are used anyway. Any others are ignored.\n\t\t\tresult[key] = has(options, key) ? options[key] : defaults[key];\n\t\t}\n\t\treturn result;\n\t};\n\n\t// Modified version of `ucs2encode`; see https://mths.be/punycode.\n\tvar codePointToSymbol = function(codePoint, strict) {\n\t\tvar output = '';\n\t\tif ((codePoint >= 0xD800 && codePoint <= 0xDFFF) || codePoint > 0x10FFFF) {\n\t\t\t// See issue #4:\n\t\t\t// “Otherwise, if the number is in the range 0xD800 to 0xDFFF or is\n\t\t\t// greater than 0x10FFFF, then this is a parse error. Return a U+FFFD\n\t\t\t// REPLACEMENT CHARACTER.”\n\t\t\tif (strict) {\n\t\t\t\tparseError('character reference outside the permissible Unicode range');\n\t\t\t}\n\t\t\treturn '\\uFFFD';\n\t\t}\n\t\tif (has(decodeMapNumeric, codePoint)) {\n\t\t\tif (strict) {\n\t\t\t\tparseError('disallowed character reference');\n\t\t\t}\n\t\t\treturn decodeMapNumeric[codePoint];\n\t\t}\n\t\tif (strict && contains(invalidReferenceCodePoints, codePoint)) {\n\t\t\tparseError('disallowed character reference');\n\t\t}\n\t\tif (codePoint > 0xFFFF) {\n\t\t\tcodePoint -= 0x10000;\n\t\t\toutput += stringFromCharCode(codePoint >>> 10 & 0x3FF | 0xD800);\n\t\t\tcodePoint = 0xDC00 | codePoint & 0x3FF;\n\t\t}\n\t\toutput += stringFromCharCode(codePoint);\n\t\treturn output;\n\t};\n\n\tvar hexEscape = function(codePoint) {\n\t\treturn '&#x' + codePoint.toString(16).toUpperCase() + ';';\n\t};\n\n\tvar decEscape = function(codePoint) {\n\t\treturn '&#' + codePoint + ';';\n\t};\n\n\tvar parseError = function(message) {\n\t\tthrow Error('Parse error: ' + message);\n\t};\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar encode = function(string, options) {\n\t\toptions = merge(options, encode.options);\n\t\tvar strict = options.strict;\n\t\tif (strict && regexInvalidRawCodePoint.test(string)) {\n\t\t\tparseError('forbidden code point');\n\t\t}\n\t\tvar encodeEverything = options.encodeEverything;\n\t\tvar useNamedReferences = options.useNamedReferences;\n\t\tvar allowUnsafeSymbols = options.allowUnsafeSymbols;\n\t\tvar escapeCodePoint = options.decimal ? decEscape : hexEscape;\n\n\t\tvar escapeBmpSymbol = function(symbol) {\n\t\t\treturn escapeCodePoint(symbol.charCodeAt(0));\n\t\t};\n\n\t\tif (encodeEverything) {\n\t\t\t// Encode ASCII symbols.\n\t\t\tstring = string.replace(regexAsciiWhitelist, function(symbol) {\n\t\t\t\t// Use named references if requested & possible.\n\t\t\t\tif (useNamedReferences && has(encodeMap, symbol)) {\n\t\t\t\t\treturn '&' + encodeMap[symbol] + ';';\n\t\t\t\t}\n\t\t\t\treturn escapeBmpSymbol(symbol);\n\t\t\t});\n\t\t\t// Shorten a few escapes that represent two symbols, of which at least one\n\t\t\t// is within the ASCII range.\n\t\t\tif (useNamedReferences) {\n\t\t\t\tstring = string\n\t\t\t\t\t.replace(/&gt;\\u20D2/g, '&nvgt;')\n\t\t\t\t\t.replace(/&lt;\\u20D2/g, '&nvlt;')\n\t\t\t\t\t.replace(/&#x66;&#x6A;/g, '&fjlig;');\n\t\t\t}\n\t\t\t// Encode non-ASCII symbols.\n\t\t\tif (useNamedReferences) {\n\t\t\t\t// Encode non-ASCII symbols that can be replaced with a named reference.\n\t\t\t\tstring = string.replace(regexEncodeNonAscii, function(string) {\n\t\t\t\t\t// Note: there is no need to check `has(encodeMap, string)` here.\n\t\t\t\t\treturn '&' + encodeMap[string] + ';';\n\t\t\t\t});\n\t\t\t}\n\t\t\t// Note: any remaining non-ASCII symbols are handled outside of the `if`.\n\t\t} else if (useNamedReferences) {\n\t\t\t// Apply named character references.\n\t\t\t// Encode `<>\"'&` using named character references.\n\t\t\tif (!allowUnsafeSymbols) {\n\t\t\t\tstring = string.replace(regexEscape, function(string) {\n\t\t\t\t\treturn '&' + encodeMap[string] + ';'; // no need to check `has()` here\n\t\t\t\t});\n\t\t\t}\n\t\t\t// Shorten escapes that represent two symbols, of which at least one is\n\t\t\t// `<>\"'&`.\n\t\t\tstring = string\n\t\t\t\t.replace(/&gt;\\u20D2/g, '&nvgt;')\n\t\t\t\t.replace(/&lt;\\u20D2/g, '&nvlt;');\n\t\t\t// Encode non-ASCII symbols that can be replaced with a named reference.\n\t\t\tstring = string.replace(regexEncodeNonAscii, function(string) {\n\t\t\t\t// Note: there is no need to check `has(encodeMap, string)` here.\n\t\t\t\treturn '&' + encodeMap[string] + ';';\n\t\t\t});\n\t\t} else if (!allowUnsafeSymbols) {\n\t\t\t// Encode `<>\"'&` using hexadecimal escapes, now that they’re not handled\n\t\t\t// using named character references.\n\t\t\tstring = string.replace(regexEscape, escapeBmpSymbol);\n\t\t}\n\t\treturn string\n\t\t\t// Encode astral symbols.\n\t\t\t.replace(regexAstralSymbols, function($0) {\n\t\t\t\t// https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n\t\t\t\tvar high = $0.charCodeAt(0);\n\t\t\t\tvar low = $0.charCodeAt(1);\n\t\t\t\tvar codePoint = (high - 0xD800) * 0x400 + low - 0xDC00 + 0x10000;\n\t\t\t\treturn escapeCodePoint(codePoint);\n\t\t\t})\n\t\t\t// Encode any remaining BMP symbols that are not printable ASCII symbols\n\t\t\t// using a hexadecimal escape.\n\t\t\t.replace(regexBmpWhitelist, escapeBmpSymbol);\n\t};\n\t// Expose default options (so they can be overridden globally).\n\tencode.options = {\n\t\t'allowUnsafeSymbols': false,\n\t\t'encodeEverything': false,\n\t\t'strict': false,\n\t\t'useNamedReferences': false,\n\t\t'decimal' : false\n\t};\n\n\tvar decode = function(html, options) {\n\t\toptions = merge(options, decode.options);\n\t\tvar strict = options.strict;\n\t\tif (strict && regexInvalidEntity.test(html)) {\n\t\t\tparseError('malformed character reference');\n\t\t}\n\t\treturn html.replace(regexDecode, function($0, $1, $2, $3, $4, $5, $6, $7, $8) {\n\t\t\tvar codePoint;\n\t\t\tvar semicolon;\n\t\t\tvar decDigits;\n\t\t\tvar hexDigits;\n\t\t\tvar reference;\n\t\t\tvar next;\n\n\t\t\tif ($1) {\n\t\t\t\treference = $1;\n\t\t\t\t// Note: there is no need to check `has(decodeMap, reference)`.\n\t\t\t\treturn decodeMap[reference];\n\t\t\t}\n\n\t\t\tif ($2) {\n\t\t\t\t// Decode named character references without trailing `;`, e.g. `&amp`.\n\t\t\t\t// This is only a parse error if it gets converted to `&`, or if it is\n\t\t\t\t// followed by `=` in an attribute context.\n\t\t\t\treference = $2;\n\t\t\t\tnext = $3;\n\t\t\t\tif (next && options.isAttributeValue) {\n\t\t\t\t\tif (strict && next == '=') {\n\t\t\t\t\t\tparseError('`&` did not start a character reference');\n\t\t\t\t\t}\n\t\t\t\t\treturn $0;\n\t\t\t\t} else {\n\t\t\t\t\tif (strict) {\n\t\t\t\t\t\tparseError(\n\t\t\t\t\t\t\t'named character reference was not terminated by a semicolon'\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\t// Note: there is no need to check `has(decodeMapLegacy, reference)`.\n\t\t\t\t\treturn decodeMapLegacy[reference] + (next || '');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ($4) {\n\t\t\t\t// Decode decimal escapes, e.g. `&#119558;`.\n\t\t\t\tdecDigits = $4;\n\t\t\t\tsemicolon = $5;\n\t\t\t\tif (strict && !semicolon) {\n\t\t\t\t\tparseError('character reference was not terminated by a semicolon');\n\t\t\t\t}\n\t\t\t\tcodePoint = parseInt(decDigits, 10);\n\t\t\t\treturn codePointToSymbol(codePoint, strict);\n\t\t\t}\n\n\t\t\tif ($6) {\n\t\t\t\t// Decode hexadecimal escapes, e.g. `&#x1D306;`.\n\t\t\t\thexDigits = $6;\n\t\t\t\tsemicolon = $7;\n\t\t\t\tif (strict && !semicolon) {\n\t\t\t\t\tparseError('character reference was not terminated by a semicolon');\n\t\t\t\t}\n\t\t\t\tcodePoint = parseInt(hexDigits, 16);\n\t\t\t\treturn codePointToSymbol(codePoint, strict);\n\t\t\t}\n\n\t\t\t// If we’re still here, `if ($7)` is implied; it’s an ambiguous\n\t\t\t// ampersand for sure. https://mths.be/notes/ambiguous-ampersands\n\t\t\tif (strict) {\n\t\t\t\tparseError(\n\t\t\t\t\t'named character reference was not terminated by a semicolon'\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn $0;\n\t\t});\n\t};\n\t// Expose default options (so they can be overridden globally).\n\tdecode.options = {\n\t\t'isAttributeValue': false,\n\t\t'strict': false\n\t};\n\n\tvar escape = function(string) {\n\t\treturn string.replace(regexEscape, function($0) {\n\t\t\t// Note: there is no need to check `has(escapeMap, $0)` here.\n\t\t\treturn escapeMap[$0];\n\t\t});\n\t};\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar he = {\n\t\t'version': '1.2.0',\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'escape': escape,\n\t\t'unescape': decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn he;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js, io.js, or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = he;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in he) {\n\t\t\t\thas(he, key) && (freeExports[key] = he[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.he = he;\n\t}\n\n}(this));\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","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\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","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","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n 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","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","'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","module.exports = minimatch\nminimatch.Minimatch = Minimatch\n\nvar path = { sep: '/' }\ntry {\n path = require('path')\n} catch (er) {}\n\nvar GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {}\nvar expand = require('brace-expansion')\n\nvar plTypes = {\n '!': { open: '(?:(?!(?:', close: '))[^/]*?)'},\n '?': { open: '(?:', close: ')?' },\n '+': { open: '(?:', close: ')+' },\n '*': { open: '(?:', close: ')*' },\n '@': { open: '(?:', close: ')' }\n}\n\n// any single thing other than /\n// don't need to escape / when using new RegExp()\nvar qmark = '[^/]'\n\n// * => any number of characters\nvar star = qmark + '*?'\n\n// ** when dots are allowed. Anything goes, except .. and .\n// not (^ or / followed by one or two dots followed by $ or /),\n// followed by anything, any number of times.\nvar twoStarDot = '(?:(?!(?:\\\\\\/|^)(?:\\\\.{1,2})($|\\\\\\/)).)*?'\n\n// not a ^ or / followed by a dot,\n// followed by anything, any number of times.\nvar twoStarNoDot = '(?:(?!(?:\\\\\\/|^)\\\\.).)*?'\n\n// characters that need to be escaped in RegExp.\nvar reSpecials = charSet('().*{}+?[]^$\\\\!')\n\n// \"abc\" -> { a:true, b:true, c:true }\nfunction charSet (s) {\n return s.split('').reduce(function (set, c) {\n set[c] = true\n return set\n }, {})\n}\n\n// normalizes slashes.\nvar slashSplit = /\\/+/\n\nminimatch.filter = filter\nfunction filter (pattern, options) {\n options = options || {}\n return function (p, i, list) {\n return minimatch(p, pattern, options)\n }\n}\n\nfunction ext (a, b) {\n a = a || {}\n b = b || {}\n var t = {}\n Object.keys(b).forEach(function (k) {\n t[k] = b[k]\n })\n Object.keys(a).forEach(function (k) {\n t[k] = a[k]\n })\n return t\n}\n\nminimatch.defaults = function (def) {\n if (!def || !Object.keys(def).length) return minimatch\n\n var orig = minimatch\n\n var m = function minimatch (p, pattern, options) {\n return orig.minimatch(p, pattern, ext(def, options))\n }\n\n m.Minimatch = function Minimatch (pattern, options) {\n return new orig.Minimatch(pattern, ext(def, options))\n }\n\n return m\n}\n\nMinimatch.defaults = function (def) {\n if (!def || !Object.keys(def).length) return Minimatch\n return minimatch.defaults(def).Minimatch\n}\n\nfunction minimatch (p, pattern, options) {\n if (typeof pattern !== 'string') {\n throw new TypeError('glob pattern string required')\n }\n\n if (!options) options = {}\n\n // shortcut: comments match nothing.\n if (!options.nocomment && pattern.charAt(0) === '#') {\n return false\n }\n\n // \"\" only matches \"\"\n if (pattern.trim() === '') return p === ''\n\n return new Minimatch(pattern, options).match(p)\n}\n\nfunction Minimatch (pattern, options) {\n if (!(this instanceof Minimatch)) {\n return new Minimatch(pattern, options)\n }\n\n if (typeof pattern !== 'string') {\n throw new TypeError('glob pattern string required')\n }\n\n if (!options) options = {}\n pattern = pattern.trim()\n\n // windows support: need to use /, not \\\n if (path.sep !== '/') {\n pattern = pattern.split(path.sep).join('/')\n }\n\n this.options = options\n this.set = []\n this.pattern = pattern\n this.regexp = null\n this.negate = false\n this.comment = false\n this.empty = false\n\n // make the set of regexps etc.\n this.make()\n}\n\nMinimatch.prototype.debug = function () {}\n\nMinimatch.prototype.make = make\nfunction make () {\n // don't do it more than once.\n if (this._made) return\n\n var pattern = this.pattern\n var options = this.options\n\n // empty patterns and comments match nothing.\n if (!options.nocomment && pattern.charAt(0) === '#') {\n this.comment = true\n return\n }\n if (!pattern) {\n this.empty = true\n return\n }\n\n // step 1: figure out negation, etc.\n this.parseNegate()\n\n // step 2: expand braces\n var set = this.globSet = this.braceExpand()\n\n if (options.debug) this.debug = console.error\n\n this.debug(this.pattern, set)\n\n // step 3: now we have a set, so turn each one into a series of path-portion\n // matching patterns.\n // These will be regexps, except in the case of \"**\", which is\n // set to the GLOBSTAR object for globstar behavior,\n // and will not contain any / characters\n set = this.globParts = set.map(function (s) {\n return s.split(slashSplit)\n })\n\n this.debug(this.pattern, set)\n\n // glob --> regexps\n set = set.map(function (s, si, set) {\n return s.map(this.parse, this)\n }, this)\n\n this.debug(this.pattern, set)\n\n // filter out everything that didn't compile properly.\n set = set.filter(function (s) {\n return s.indexOf(false) === -1\n })\n\n this.debug(this.pattern, set)\n\n this.set = set\n}\n\nMinimatch.prototype.parseNegate = parseNegate\nfunction parseNegate () {\n var pattern = this.pattern\n var negate = false\n var options = this.options\n var negateOffset = 0\n\n if (options.nonegate) return\n\n for (var i = 0, l = pattern.length\n ; i < l && pattern.charAt(i) === '!'\n ; i++) {\n negate = !negate\n negateOffset++\n }\n\n if (negateOffset) this.pattern = pattern.substr(negateOffset)\n this.negate = negate\n}\n\n// Brace expansion:\n// a{b,c}d -> abd acd\n// a{b,}c -> abc ac\n// a{0..3}d -> a0d a1d a2d a3d\n// a{b,c{d,e}f}g -> abg acdfg acefg\n// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg\n//\n// Invalid sets are not expanded.\n// a{2..}b -> a{2..}b\n// a{b}c -> a{b}c\nminimatch.braceExpand = function (pattern, options) {\n return braceExpand(pattern, options)\n}\n\nMinimatch.prototype.braceExpand = braceExpand\n\nfunction braceExpand (pattern, options) {\n if (!options) {\n if (this instanceof Minimatch) {\n options = this.options\n } else {\n options = {}\n }\n }\n\n pattern = typeof pattern === 'undefined'\n ? this.pattern : pattern\n\n if (typeof pattern === 'undefined') {\n throw new TypeError('undefined pattern')\n }\n\n if (options.nobrace ||\n !pattern.match(/\\{.*\\}/)) {\n // shortcut. no need to expand.\n return [pattern]\n }\n\n return expand(pattern)\n}\n\n// parse a component of the expanded set.\n// At this point, no pattern may contain \"/\" in it\n// so we're going to return a 2d array, where each entry is the full\n// pattern, split on '/', and then turned into a regular expression.\n// A regexp is made at the end which joins each array with an\n// escaped /, and another full one which joins each regexp with |.\n//\n// Following the lead of Bash 4.1, note that \"**\" only has special meaning\n// when it is the *only* thing in a path portion. Otherwise, any series\n// of * is equivalent to a single *. Globstar behavior is enabled by\n// default, and can be disabled by setting options.noglobstar.\nMinimatch.prototype.parse = parse\nvar SUBPARSE = {}\nfunction parse (pattern, isSub) {\n if (pattern.length > 1024 * 64) {\n throw new TypeError('pattern is too long')\n }\n\n var options = this.options\n\n // shortcuts\n if (!options.noglobstar && pattern === '**') return GLOBSTAR\n if (pattern === '') return ''\n\n var re = ''\n var hasMagic = !!options.nocase\n var escaping = false\n // ? => one single character\n var patternListStack = []\n var negativeLists = []\n var stateChar\n var inClass = false\n var reClassStart = -1\n var classStart = -1\n // . and .. never match anything that doesn't start with .,\n // even when options.dot is set.\n var patternStart = pattern.charAt(0) === '.' ? '' // anything\n // not (start or / followed by . or .. followed by / or end)\n : options.dot ? '(?!(?:^|\\\\\\/)\\\\.{1,2}(?:$|\\\\\\/))'\n : '(?!\\\\.)'\n var self = this\n\n function clearStateChar () {\n if (stateChar) {\n // we had some state-tracking character\n // that wasn't consumed by this pass.\n switch (stateChar) {\n case '*':\n re += star\n hasMagic = true\n break\n case '?':\n re += qmark\n hasMagic = true\n break\n default:\n re += '\\\\' + stateChar\n break\n }\n self.debug('clearStateChar %j %j', stateChar, re)\n stateChar = false\n }\n }\n\n for (var i = 0, len = pattern.length, c\n ; (i < len) && (c = pattern.charAt(i))\n ; i++) {\n this.debug('%s\\t%s %s %j', pattern, i, re, c)\n\n // skip over any that are escaped.\n if (escaping && reSpecials[c]) {\n re += '\\\\' + c\n escaping = false\n continue\n }\n\n switch (c) {\n case '/':\n // completely not allowed, even escaped.\n // Should already be path-split by now.\n return false\n\n case '\\\\':\n clearStateChar()\n escaping = true\n continue\n\n // the various stateChar values\n // for the \"extglob\" stuff.\n case '?':\n case '*':\n case '+':\n case '@':\n case '!':\n this.debug('%s\\t%s %s %j <-- stateChar', pattern, i, re, c)\n\n // all of those are literals inside a class, except that\n // the glob [!a] means [^a] in regexp\n if (inClass) {\n this.debug(' in class')\n if (c === '!' && i === classStart + 1) c = '^'\n re += c\n continue\n }\n\n // if we already have a stateChar, then it means\n // that there was something like ** or +? in there.\n // Handle the stateChar, then proceed with this one.\n self.debug('call clearStateChar %j', stateChar)\n clearStateChar()\n stateChar = c\n // if extglob is disabled, then +(asdf|foo) isn't a thing.\n // just clear the statechar *now*, rather than even diving into\n // the patternList stuff.\n if (options.noext) clearStateChar()\n continue\n\n case '(':\n if (inClass) {\n re += '('\n continue\n }\n\n if (!stateChar) {\n re += '\\\\('\n continue\n }\n\n patternListStack.push({\n type: stateChar,\n start: i - 1,\n reStart: re.length,\n open: plTypes[stateChar].open,\n close: plTypes[stateChar].close\n })\n // negation is (?:(?!js)[^/]*)\n re += stateChar === '!' ? '(?:(?!(?:' : '(?:'\n this.debug('plType %j %j', stateChar, re)\n stateChar = false\n continue\n\n case ')':\n if (inClass || !patternListStack.length) {\n re += '\\\\)'\n continue\n }\n\n clearStateChar()\n hasMagic = true\n var pl = patternListStack.pop()\n // negation is (?:(?!js)[^/]*)\n // The others are (?:<pattern>)<type>\n re += pl.close\n if (pl.type === '!') {\n negativeLists.push(pl)\n }\n pl.reEnd = re.length\n continue\n\n case '|':\n if (inClass || !patternListStack.length || escaping) {\n re += '\\\\|'\n escaping = false\n continue\n }\n\n clearStateChar()\n re += '|'\n continue\n\n // these are mostly the same in regexp and glob\n case '[':\n // swallow any state-tracking char before the [\n clearStateChar()\n\n if (inClass) {\n re += '\\\\' + c\n continue\n }\n\n inClass = true\n classStart = i\n reClassStart = re.length\n re += c\n continue\n\n case ']':\n // a right bracket shall lose its special\n // meaning and represent itself in\n // a bracket expression if it occurs\n // first in the list. -- POSIX.2 2.8.3.2\n if (i === classStart + 1 || !inClass) {\n re += '\\\\' + c\n escaping = false\n continue\n }\n\n // handle the case where we left a class open.\n // \"[z-a]\" is valid, equivalent to \"\\[z-a\\]\"\n if (inClass) {\n // split where the last [ was, make sure we don't have\n // an invalid re. if so, re-walk the contents of the\n // would-be class to re-translate any characters that\n // were passed through as-is\n // TODO: It would probably be faster to determine this\n // without a try/catch and a new RegExp, but it's tricky\n // to do safely. For now, this is safe and works.\n var cs = pattern.substring(classStart + 1, i)\n try {\n RegExp('[' + cs + ']')\n } catch (er) {\n // not a valid class!\n var sp = this.parse(cs, SUBPARSE)\n re = re.substr(0, reClassStart) + '\\\\[' + sp[0] + '\\\\]'\n hasMagic = hasMagic || sp[1]\n inClass = false\n continue\n }\n }\n\n // finish up the class.\n hasMagic = true\n inClass = false\n re += c\n continue\n\n default:\n // swallow any state char that wasn't consumed\n clearStateChar()\n\n if (escaping) {\n // no need\n escaping = false\n } else if (reSpecials[c]\n && !(c === '^' && inClass)) {\n re += '\\\\'\n }\n\n re += c\n\n } // switch\n } // for\n\n // handle the case where we left a class open.\n // \"[abc\" is valid, equivalent to \"\\[abc\"\n if (inClass) {\n // split where the last [ was, and escape it\n // this is a huge pita. We now have to re-walk\n // the contents of the would-be class to re-translate\n // any characters that were passed through as-is\n cs = pattern.substr(classStart + 1)\n sp = this.parse(cs, SUBPARSE)\n re = re.substr(0, reClassStart) + '\\\\[' + sp[0]\n hasMagic = hasMagic || sp[1]\n }\n\n // handle the case where we had a +( thing at the *end*\n // of the pattern.\n // each pattern list stack adds 3 chars, and we need to go through\n // and escape any | chars that were passed through as-is for the regexp.\n // Go through and escape them, taking care not to double-escape any\n // | chars that were already escaped.\n for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) {\n var tail = re.slice(pl.reStart + pl.open.length)\n this.debug('setting tail', re, pl)\n // maybe some even number of \\, then maybe 1 \\, followed by a |\n tail = tail.replace(/((?:\\\\{2}){0,64})(\\\\?)\\|/g, function (_, $1, $2) {\n if (!$2) {\n // the | isn't already escaped, so escape it.\n $2 = '\\\\'\n }\n\n // need to escape all those slashes *again*, without escaping the\n // one that we need for escaping the | character. As it works out,\n // escaping an even number of slashes can be done by simply repeating\n // it exactly after itself. That's why this trick works.\n //\n // I am sorry that you have to see this.\n return $1 + $1 + $2 + '|'\n })\n\n this.debug('tail=%j\\n %s', tail, tail, pl, re)\n var t = pl.type === '*' ? star\n : pl.type === '?' ? qmark\n : '\\\\' + pl.type\n\n hasMagic = true\n re = re.slice(0, pl.reStart) + t + '\\\\(' + tail\n }\n\n // handle trailing things that only matter at the very end.\n clearStateChar()\n if (escaping) {\n // trailing \\\\\n re += '\\\\\\\\'\n }\n\n // only need to apply the nodot start if the re starts with\n // something that could conceivably capture a dot\n var addPatternStart = false\n switch (re.charAt(0)) {\n case '.':\n case '[':\n case '(': addPatternStart = true\n }\n\n // Hack to work around lack of negative lookbehind in JS\n // A pattern like: *.!(x).!(y|z) needs to ensure that a name\n // like 'a.xyz.yz' doesn't match. So, the first negative\n // lookahead, has to look ALL the way ahead, to the end of\n // the pattern.\n for (var n = negativeLists.length - 1; n > -1; n--) {\n var nl = negativeLists[n]\n\n var nlBefore = re.slice(0, nl.reStart)\n var nlFirst = re.slice(nl.reStart, nl.reEnd - 8)\n var nlLast = re.slice(nl.reEnd - 8, nl.reEnd)\n var nlAfter = re.slice(nl.reEnd)\n\n nlLast += nlAfter\n\n // Handle nested stuff like *(*.js|!(*.json)), where open parens\n // mean that we should *not* include the ) in the bit that is considered\n // \"after\" the negated section.\n var openParensBefore = nlBefore.split('(').length - 1\n var cleanAfter = nlAfter\n for (i = 0; i < openParensBefore; i++) {\n cleanAfter = cleanAfter.replace(/\\)[+*?]?/, '')\n }\n nlAfter = cleanAfter\n\n var dollar = ''\n if (nlAfter === '' && isSub !== SUBPARSE) {\n dollar = '$'\n }\n var newRe = nlBefore + nlFirst + nlAfter + dollar + nlLast\n re = newRe\n }\n\n // if the re is not \"\" at this point, then we need to make sure\n // it doesn't match against an empty path part.\n // Otherwise a/* will match a/, which it should not.\n if (re !== '' && hasMagic) {\n re = '(?=.)' + re\n }\n\n if (addPatternStart) {\n re = patternStart + re\n }\n\n // parsing just a piece of a larger pattern.\n if (isSub === SUBPARSE) {\n return [re, hasMagic]\n }\n\n // skip the regexp for non-magical patterns\n // unescape anything in it, though, so that it'll be\n // an exact match against a file etc.\n if (!hasMagic) {\n return globUnescape(pattern)\n }\n\n var flags = options.nocase ? 'i' : ''\n try {\n var regExp = new RegExp('^' + re + '$', flags)\n } catch (er) {\n // If it was an invalid regular expression, then it can't match\n // anything. This trick looks for a character after the end of\n // the string, which is of course impossible, except in multi-line\n // mode, but it's not a /m regex.\n return new RegExp('$.')\n }\n\n regExp._glob = pattern\n regExp._src = re\n\n return regExp\n}\n\nminimatch.makeRe = function (pattern, options) {\n return new Minimatch(pattern, options || {}).makeRe()\n}\n\nMinimatch.prototype.makeRe = makeRe\nfunction makeRe () {\n if (this.regexp || this.regexp === false) return this.regexp\n\n // at this point, this.set is a 2d array of partial\n // pattern strings, or \"**\".\n //\n // It's better to use .match(). This function shouldn't\n // be used, really, but it's pretty convenient sometimes,\n // when you just want to work with a regex.\n var set = this.set\n\n if (!set.length) {\n this.regexp = false\n return this.regexp\n }\n var options = this.options\n\n var twoStar = options.noglobstar ? star\n : options.dot ? twoStarDot\n : twoStarNoDot\n var flags = options.nocase ? 'i' : ''\n\n var re = set.map(function (pattern) {\n return pattern.map(function (p) {\n return (p === GLOBSTAR) ? twoStar\n : (typeof p === 'string') ? regExpEscape(p)\n : p._src\n }).join('\\\\\\/')\n }).join('|')\n\n // must match entire pattern\n // ending in a * or ** will make it less strict.\n re = '^(?:' + re + ')$'\n\n // can match anything, as long as it's not this.\n if (this.negate) re = '^(?!' + re + ').*$'\n\n try {\n this.regexp = new RegExp(re, flags)\n } catch (ex) {\n this.regexp = false\n }\n return this.regexp\n}\n\nminimatch.match = function (list, pattern, options) {\n options = options || {}\n var mm = new Minimatch(pattern, options)\n list = list.filter(function (f) {\n return mm.match(f)\n })\n if (mm.options.nonull && !list.length) {\n list.push(pattern)\n }\n return list\n}\n\nMinimatch.prototype.match = match\nfunction match (f, partial) {\n this.debug('match', f, this.pattern)\n // short-circuit in the case of busted things.\n // comments, etc.\n if (this.comment) return false\n if (this.empty) return f === ''\n\n if (f === '/' && partial) return true\n\n var options = this.options\n\n // windows: need to use /, not \\\n if (path.sep !== '/') {\n f = f.split(path.sep).join('/')\n }\n\n // treat the test path as a set of pathparts.\n f = f.split(slashSplit)\n this.debug(this.pattern, 'split', f)\n\n // just ONE of the pattern sets in this.set needs to match\n // in order for it to be valid. If negating, then just one\n // match means that we have failed.\n // Either way, return on the first hit.\n\n var set = this.set\n this.debug(this.pattern, 'set', set)\n\n // Find the basename of the path by looking for the last non-empty segment\n var filename\n var i\n for (i = f.length - 1; i >= 0; i--) {\n filename = f[i]\n if (filename) break\n }\n\n for (i = 0; i < set.length; i++) {\n var pattern = set[i]\n var file = f\n if (options.matchBase && pattern.length === 1) {\n file = [filename]\n }\n var hit = this.matchOne(file, pattern, partial)\n if (hit) {\n if (options.flipNegate) return true\n return !this.negate\n }\n }\n\n // didn't get any hits. this is success if it's a negative\n // pattern, failure otherwise.\n if (options.flipNegate) return false\n return this.negate\n}\n\n// set partial to true to test if, for example,\n// \"/a/b\" matches the start of \"/*/b/*/d\"\n// Partial means, if you run out of file before you run\n// out of pattern, then that's fine, as long as all\n// the parts match.\nMinimatch.prototype.matchOne = function (file, pattern, partial) {\n var options = this.options\n\n this.debug('matchOne',\n { 'this': this, file: file, pattern: pattern })\n\n this.debug('matchOne', file.length, pattern.length)\n\n for (var fi = 0,\n pi = 0,\n fl = file.length,\n pl = pattern.length\n ; (fi < fl) && (pi < pl)\n ; fi++, pi++) {\n this.debug('matchOne loop')\n var p = pattern[pi]\n var f = file[fi]\n\n this.debug(pattern, p, f)\n\n // should be impossible.\n // some invalid regexp stuff in the set.\n if (p === false) return false\n\n if (p === GLOBSTAR) {\n this.debug('GLOBSTAR', [pattern, p, f])\n\n // \"**\"\n // a/**/b/**/c would match the following:\n // a/b/x/y/z/c\n // a/x/y/z/b/c\n // a/b/x/b/x/c\n // a/b/c\n // To do this, take the rest of the pattern after\n // the **, and see if it would match the file remainder.\n // If so, return success.\n // If not, the ** \"swallows\" a segment, and try again.\n // This is recursively awful.\n //\n // a/**/b/**/c matching a/b/x/y/z/c\n // - a matches a\n // - doublestar\n // - matchOne(b/x/y/z/c, b/**/c)\n // - b matches b\n // - doublestar\n // - matchOne(x/y/z/c, c) -> no\n // - matchOne(y/z/c, c) -> no\n // - matchOne(z/c, c) -> no\n // - matchOne(c, c) yes, hit\n var fr = fi\n var pr = pi + 1\n if (pr === pl) {\n this.debug('** at the end')\n // a ** at the end will just swallow the rest.\n // We have found a match.\n // however, it will not swallow /.x, unless\n // options.dot is set.\n // . and .. are *never* matched by **, for explosively\n // exponential reasons.\n for (; fi < fl; fi++) {\n if (file[fi] === '.' || file[fi] === '..' ||\n (!options.dot && file[fi].charAt(0) === '.')) return false\n }\n return true\n }\n\n // ok, let's see if we can swallow whatever we can.\n while (fr < fl) {\n var swallowee = file[fr]\n\n this.debug('\\nglobstar while', file, fr, pattern, pr, swallowee)\n\n // XXX remove this slice. Just pass the start index.\n if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) {\n this.debug('globstar found match!', fr, fl, swallowee)\n // found a match.\n return true\n } else {\n // can't swallow \".\" or \"..\" ever.\n // can only swallow \".foo\" when explicitly asked.\n if (swallowee === '.' || swallowee === '..' ||\n (!options.dot && swallowee.charAt(0) === '.')) {\n this.debug('dot detected!', file, fr, pattern, pr)\n break\n }\n\n // ** swallows a segment, and continue.\n this.debug('globstar swallow a segment, and continue')\n fr++\n }\n }\n\n // no match was found.\n // However, in partial mode, we can't say this is necessarily over.\n // If there's more *pattern* left, then\n if (partial) {\n // ran out of file\n this.debug('\\n>>> no match, partial?', file, fr, pattern, pr)\n if (fr === fl) return true\n }\n return false\n }\n\n // something other than **\n // non-magic patterns just have to match exactly\n // patterns with magic have been turned into regexps.\n var hit\n if (typeof p === 'string') {\n if (options.nocase) {\n hit = f.toLowerCase() === p.toLowerCase()\n } else {\n hit = f === p\n }\n this.debug('string match', p, f, hit)\n } else {\n hit = f.match(p)\n this.debug('pattern match', p, f, hit)\n }\n\n if (!hit) return false\n }\n\n // Note: ending in / means that we'll get a final \"\"\n // at the end of the pattern. This can only match a\n // corresponding \"\" at the end of the file.\n // If the file ends in /, then it can only match a\n // a pattern that ends in /, unless the pattern just\n // doesn't have any more for it. But, a/b/ should *not*\n // match \"a/b/*\", even though \"\" matches against the\n // [^/]*? pattern, except in partial mode, where it might\n // simply not be reached yet.\n // However, a/b/ should still satisfy a/*\n\n // now either we fell off the end of the pattern, or we're done.\n if (fi === fl && pi === pl) {\n // ran out of pattern and filename at the same time.\n // an exact hit!\n return true\n } else if (fi === fl) {\n // ran out of file, but still had pattern left.\n // this is ok if we're doing the match as part of\n // a glob fs traversal.\n return partial\n } else if (pi === pl) {\n // ran out of pattern, still have file left.\n // this is only acceptable if we're on the very last\n // empty segment of a file with a trailing slash.\n // a/* should match a/b/\n var emptyFileEnd = (fi === fl - 1) && (file[fi] === '')\n return emptyFileEnd\n }\n\n // should be unreachable.\n throw new Error('wtf?')\n}\n\n// replace stuff like \\* with *\nfunction globUnescape (s) {\n return s.replace(/\\\\(.)/g, '$1')\n}\n\nfunction regExpEscape (s) {\n return s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&')\n}\n","/**\n* @license nested-property https://github.com/cosmosio/nested-property\n*\n* The MIT License (MIT)\n*\n* Copyright (c) 2014-2020 Olivier Scherrer <pode.fr@gmail.com>\n*/\n\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, 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\nvar ARRAY_WILDCARD = \"+\";\nvar PATH_DELIMITER = \".\";\n\nvar ObjectPrototypeMutationError = /*#__PURE__*/function (_Error) {\n _inherits(ObjectPrototypeMutationError, _Error);\n\n function ObjectPrototypeMutationError(params) {\n var _this;\n\n _classCallCheck(this, ObjectPrototypeMutationError);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(ObjectPrototypeMutationError).call(this, params));\n _this.name = \"ObjectPrototypeMutationError\";\n return _this;\n }\n\n return ObjectPrototypeMutationError;\n}(_wrapNativeSuper(Error));\n\nmodule.exports = {\n set: setNestedProperty,\n get: getNestedProperty,\n has: hasNestedProperty,\n hasOwn: function hasOwn(object, property, options) {\n return this.has(object, property, options || {\n own: true\n });\n },\n isIn: isInNestedProperty,\n ObjectPrototypeMutationError: ObjectPrototypeMutationError\n};\n/**\n * Get the property of an object nested in one or more objects or array\n * Given an object such as a.b.c.d = 5, getNestedProperty(a, \"b.c.d\") will return 5.\n * It also works through arrays. Given a nested array such as a[0].b = 5, getNestedProperty(a, \"0.b\") will return 5.\n * For accessing nested properties through all items in an array, you may use the array wildcard \"+\".\n * For instance, getNestedProperty([{a:1}, {a:2}, {a:3}], \"+.a\") will return [1, 2, 3]\n * @param {Object} object the object to get the property from\n * @param {String} property the path to the property as a string\n * @returns the object or the the property value if found\n */\n\nfunction getNestedProperty(object, property) {\n if (_typeof(object) != \"object\" || object === null) {\n return object;\n }\n\n if (typeof property == \"undefined\") {\n return object;\n }\n\n if (typeof property == \"number\") {\n return object[property];\n }\n\n try {\n return traverse(object, property, function _getNestedProperty(currentObject, currentProperty) {\n return currentObject[currentProperty];\n });\n } catch (err) {\n return object;\n }\n}\n/**\n * Tell if a nested object has a given property (or array a given index)\n * given an object such as a.b.c.d = 5, hasNestedProperty(a, \"b.c.d\") will return true.\n * It also returns true if the property is in the prototype chain.\n * @param {Object} object the object to get the property from\n * @param {String} property the path to the property as a string\n * @param {Object} options:\n * - own: set to reject properties from the prototype\n * @returns true if has (property in object), false otherwise\n */\n\n\nfunction hasNestedProperty(object, property) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (_typeof(object) != \"object\" || object === null) {\n return false;\n }\n\n if (typeof property == \"undefined\") {\n return false;\n }\n\n if (typeof property == \"number\") {\n return property in object;\n }\n\n try {\n var has = false;\n traverse(object, property, function _hasNestedProperty(currentObject, currentProperty, segments, index) {\n if (isLastSegment(segments, index)) {\n if (options.own) {\n has = currentObject.hasOwnProperty(currentProperty);\n } else {\n has = currentProperty in currentObject;\n }\n } else {\n return currentObject && currentObject[currentProperty];\n }\n });\n return has;\n } catch (err) {\n return false;\n }\n}\n/**\n * Set the property of an object nested in one or more objects\n * If the property doesn't exist, it gets created.\n * @param {Object} object\n * @param {String} property\n * @param value the value to set\n * @returns object if no assignment was made or the value if the assignment was made\n */\n\n\nfunction setNestedProperty(object, property, value) {\n if (_typeof(object) != \"object\" || object === null) {\n return object;\n }\n\n if (typeof property == \"undefined\") {\n return object;\n }\n\n if (typeof property == \"number\") {\n object[property] = value;\n return object[property];\n }\n\n try {\n return traverse(object, property, function _setNestedProperty(currentObject, currentProperty, segments, index) {\n if (currentObject === Reflect.getPrototypeOf({})) {\n throw new ObjectPrototypeMutationError(\"Attempting to mutate Object.prototype\");\n }\n\n if (!currentObject[currentProperty]) {\n var nextPropIsNumber = Number.isInteger(Number(segments[index + 1]));\n var nextPropIsArrayWildcard = segments[index + 1] === ARRAY_WILDCARD;\n\n if (nextPropIsNumber || nextPropIsArrayWildcard) {\n currentObject[currentProperty] = [];\n } else {\n currentObject[currentProperty] = {};\n }\n }\n\n if (isLastSegment(segments, index)) {\n currentObject[currentProperty] = value;\n }\n\n return currentObject[currentProperty];\n });\n } catch (err) {\n if (err instanceof ObjectPrototypeMutationError) {\n // rethrow\n throw err;\n } else {\n return object;\n }\n }\n}\n/**\n * Tell if an object is on the path to a nested property\n * If the object is on the path, and the path exists, it returns true, and false otherwise.\n * @param {Object} object to get the nested property from\n * @param {String} property name of the nested property\n * @param {Object} objectInPath the object to check\n * @param {Object} options:\n * - validPath: return false if the path is invalid, even if the object is in the path\n * @returns {boolean} true if the object is on the path\n */\n\n\nfunction isInNestedProperty(object, property, objectInPath) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n\n if (_typeof(object) != \"object\" || object === null) {\n return false;\n }\n\n if (typeof property == \"undefined\") {\n return false;\n }\n\n try {\n var isIn = false,\n pathExists = false;\n traverse(object, property, function _isInNestedProperty(currentObject, currentProperty, segments, index) {\n isIn = isIn || currentObject === objectInPath || !!currentObject && currentObject[currentProperty] === objectInPath;\n pathExists = isLastSegment(segments, index) && _typeof(currentObject) === \"object\" && currentProperty in currentObject;\n return currentObject && currentObject[currentProperty];\n });\n\n if (options.validPath) {\n return isIn && pathExists;\n } else {\n return isIn;\n }\n } catch (err) {\n return false;\n }\n}\n\nfunction traverse(object, path) {\n var callback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () {};\n var segments = path.split(PATH_DELIMITER);\n var length = segments.length;\n\n var _loop = function _loop(idx) {\n var currentSegment = segments[idx];\n\n if (!object) {\n return {\n v: void 0\n };\n }\n\n if (currentSegment === ARRAY_WILDCARD) {\n if (Array.isArray(object)) {\n return {\n v: object.map(function (value, index) {\n var remainingSegments = segments.slice(idx + 1);\n\n if (remainingSegments.length > 0) {\n return traverse(value, remainingSegments.join(PATH_DELIMITER), callback);\n } else {\n return callback(object, index, segments, idx);\n }\n })\n };\n } else {\n var pathToHere = segments.slice(0, idx).join(PATH_DELIMITER);\n throw new Error(\"Object at wildcard (\".concat(pathToHere, \") is not an array\"));\n }\n } else {\n object = callback(object, currentSegment, segments, idx);\n }\n };\n\n for (var idx = 0; idx < length; idx++) {\n var _ret = _loop(idx);\n\n if (_typeof(_ret) === \"object\") return _ret.v;\n }\n\n return object;\n}\n\nfunction isLastSegment(segments, index) {\n return segments.length === index + 1;\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","// 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","// 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","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","// 'path' module extracted from Node.js v8.11.1 (only the posix part)\n// transplited with Babel\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\nfunction assertPath(path) {\n if (typeof path !== 'string') {\n throw new TypeError('Path must be a string. Received ' + JSON.stringify(path));\n }\n}\n\n// Resolves . and .. elements in a path with directory names\nfunction normalizeStringPosix(path, allowAboveRoot) {\n var res = '';\n var lastSegmentLength = 0;\n var lastSlash = -1;\n var dots = 0;\n var code;\n for (var i = 0; i <= path.length; ++i) {\n if (i < path.length)\n code = path.charCodeAt(i);\n else if (code === 47 /*/*/)\n break;\n else\n code = 47 /*/*/;\n if (code === 47 /*/*/) {\n if (lastSlash === i - 1 || dots === 1) {\n // NOOP\n } else if (lastSlash !== i - 1 && dots === 2) {\n if (res.length < 2 || lastSegmentLength !== 2 || res.charCodeAt(res.length - 1) !== 46 /*.*/ || res.charCodeAt(res.length - 2) !== 46 /*.*/) {\n if (res.length > 2) {\n var lastSlashIndex = res.lastIndexOf('/');\n if (lastSlashIndex !== res.length - 1) {\n if (lastSlashIndex === -1) {\n res = '';\n lastSegmentLength = 0;\n } else {\n res = res.slice(0, lastSlashIndex);\n lastSegmentLength = res.length - 1 - res.lastIndexOf('/');\n }\n lastSlash = i;\n dots = 0;\n continue;\n }\n } else if (res.length === 2 || res.length === 1) {\n res = '';\n lastSegmentLength = 0;\n lastSlash = i;\n dots = 0;\n continue;\n }\n }\n if (allowAboveRoot) {\n if (res.length > 0)\n res += '/..';\n else\n res = '..';\n lastSegmentLength = 2;\n }\n } else {\n if (res.length > 0)\n res += '/' + path.slice(lastSlash + 1, i);\n else\n res = path.slice(lastSlash + 1, i);\n lastSegmentLength = i - lastSlash - 1;\n }\n lastSlash = i;\n dots = 0;\n } else if (code === 46 /*.*/ && dots !== -1) {\n ++dots;\n } else {\n dots = -1;\n }\n }\n return res;\n}\n\nfunction _format(sep, pathObject) {\n var dir = pathObject.dir || pathObject.root;\n var base = pathObject.base || (pathObject.name || '') + (pathObject.ext || '');\n if (!dir) {\n return base;\n }\n if (dir === pathObject.root) {\n return dir + base;\n }\n return dir + sep + base;\n}\n\nvar posix = {\n // path.resolve([from ...], to)\n resolve: function resolve() {\n var resolvedPath = '';\n var resolvedAbsolute = false;\n var cwd;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path;\n if (i >= 0)\n path = arguments[i];\n else {\n if (cwd === undefined)\n cwd = process.cwd();\n path = cwd;\n }\n\n assertPath(path);\n\n // Skip empty entries\n if (path.length === 0) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charCodeAt(0) === 47 /*/*/;\n }\n\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n\n // Normalize the path\n resolvedPath = normalizeStringPosix(resolvedPath, !resolvedAbsolute);\n\n if (resolvedAbsolute) {\n if (resolvedPath.length > 0)\n return '/' + resolvedPath;\n else\n return '/';\n } else if (resolvedPath.length > 0) {\n return resolvedPath;\n } else {\n return '.';\n }\n },\n\n normalize: function normalize(path) {\n assertPath(path);\n\n if (path.length === 0) return '.';\n\n var isAbsolute = path.charCodeAt(0) === 47 /*/*/;\n var trailingSeparator = path.charCodeAt(path.length - 1) === 47 /*/*/;\n\n // Normalize the path\n path = normalizeStringPosix(path, !isAbsolute);\n\n if (path.length === 0 && !isAbsolute) path = '.';\n if (path.length > 0 && trailingSeparator) path += '/';\n\n if (isAbsolute) return '/' + path;\n return path;\n },\n\n isAbsolute: function isAbsolute(path) {\n assertPath(path);\n return path.length > 0 && path.charCodeAt(0) === 47 /*/*/;\n },\n\n join: function join() {\n if (arguments.length === 0)\n return '.';\n var joined;\n for (var i = 0; i < arguments.length; ++i) {\n var arg = arguments[i];\n assertPath(arg);\n if (arg.length > 0) {\n if (joined === undefined)\n joined = arg;\n else\n joined += '/' + arg;\n }\n }\n if (joined === undefined)\n return '.';\n return posix.normalize(joined);\n },\n\n relative: function relative(from, to) {\n assertPath(from);\n assertPath(to);\n\n if (from === to) return '';\n\n from = posix.resolve(from);\n to = posix.resolve(to);\n\n if (from === to) return '';\n\n // Trim any leading backslashes\n var fromStart = 1;\n for (; fromStart < from.length; ++fromStart) {\n if (from.charCodeAt(fromStart) !== 47 /*/*/)\n break;\n }\n var fromEnd = from.length;\n var fromLen = fromEnd - fromStart;\n\n // Trim any leading backslashes\n var toStart = 1;\n for (; toStart < to.length; ++toStart) {\n if (to.charCodeAt(toStart) !== 47 /*/*/)\n break;\n }\n var toEnd = to.length;\n var toLen = toEnd - toStart;\n\n // Compare paths to find the longest common path from root\n var length = fromLen < toLen ? fromLen : toLen;\n var lastCommonSep = -1;\n var i = 0;\n for (; i <= length; ++i) {\n if (i === length) {\n if (toLen > length) {\n if (to.charCodeAt(toStart + i) === 47 /*/*/) {\n // We get here if `from` is the exact base path for `to`.\n // For example: from='/foo/bar'; to='/foo/bar/baz'\n return to.slice(toStart + i + 1);\n } else if (i === 0) {\n // We get here if `from` is the root\n // For example: from='/'; to='/foo'\n return to.slice(toStart + i);\n }\n } else if (fromLen > length) {\n if (from.charCodeAt(fromStart + i) === 47 /*/*/) {\n // We get here if `to` is the exact base path for `from`.\n // For example: from='/foo/bar/baz'; to='/foo/bar'\n lastCommonSep = i;\n } else if (i === 0) {\n // We get here if `to` is the root.\n // For example: from='/foo'; to='/'\n lastCommonSep = 0;\n }\n }\n break;\n }\n var fromCode = from.charCodeAt(fromStart + i);\n var toCode = to.charCodeAt(toStart + i);\n if (fromCode !== toCode)\n break;\n else if (fromCode === 47 /*/*/)\n lastCommonSep = i;\n }\n\n var out = '';\n // Generate the relative path based on the path difference between `to`\n // and `from`\n for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) {\n if (i === fromEnd || from.charCodeAt(i) === 47 /*/*/) {\n if (out.length === 0)\n out += '..';\n else\n out += '/..';\n }\n }\n\n // Lastly, append the rest of the destination (`to`) path that comes after\n // the common path parts\n if (out.length > 0)\n return out + to.slice(toStart + lastCommonSep);\n else {\n toStart += lastCommonSep;\n if (to.charCodeAt(toStart) === 47 /*/*/)\n ++toStart;\n return to.slice(toStart);\n }\n },\n\n _makeLong: function _makeLong(path) {\n return path;\n },\n\n dirname: function dirname(path) {\n assertPath(path);\n if (path.length === 0) return '.';\n var code = path.charCodeAt(0);\n var hasRoot = code === 47 /*/*/;\n var end = -1;\n var matchedSlash = true;\n for (var i = path.length - 1; i >= 1; --i) {\n code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n if (!matchedSlash) {\n end = i;\n break;\n }\n } else {\n // We saw the first non-path separator\n matchedSlash = false;\n }\n }\n\n if (end === -1) return hasRoot ? '/' : '.';\n if (hasRoot && end === 1) return '//';\n return path.slice(0, end);\n },\n\n basename: function basename(path, ext) {\n if (ext !== undefined && typeof ext !== 'string') throw new TypeError('\"ext\" argument must be a string');\n assertPath(path);\n\n var start = 0;\n var end = -1;\n var matchedSlash = true;\n var i;\n\n if (ext !== undefined && ext.length > 0 && ext.length <= path.length) {\n if (ext.length === path.length && ext === path) return '';\n var extIdx = ext.length - 1;\n var firstNonSlashEnd = -1;\n for (i = path.length - 1; i >= 0; --i) {\n var code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else {\n if (firstNonSlashEnd === -1) {\n // We saw the first non-path separator, remember this index in case\n // we need it if the extension ends up not matching\n matchedSlash = false;\n firstNonSlashEnd = i + 1;\n }\n if (extIdx >= 0) {\n // Try to match the explicit extension\n if (code === ext.charCodeAt(extIdx)) {\n if (--extIdx === -1) {\n // We matched the extension, so mark this as the end of our path\n // component\n end = i;\n }\n } else {\n // Extension does not match, so our result is the entire path\n // component\n extIdx = -1;\n end = firstNonSlashEnd;\n }\n }\n }\n }\n\n if (start === end) end = firstNonSlashEnd;else if (end === -1) end = path.length;\n return path.slice(start, end);\n } else {\n for (i = path.length - 1; i >= 0; --i) {\n if (path.charCodeAt(i) === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // path component\n matchedSlash = false;\n end = i + 1;\n }\n }\n\n if (end === -1) return '';\n return path.slice(start, end);\n }\n },\n\n extname: function extname(path) {\n assertPath(path);\n var startDot = -1;\n var startPart = 0;\n var end = -1;\n var matchedSlash = true;\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n var preDotState = 0;\n for (var i = path.length - 1; i >= 0; --i) {\n var code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (code === 46 /*.*/) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1)\n startDot = i;\n else if (preDotState !== 1)\n preDotState = 1;\n } else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n\n if (startDot === -1 || end === -1 ||\n // We saw a non-dot character immediately before the dot\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly '..'\n preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n return '';\n }\n return path.slice(startDot, end);\n },\n\n format: function format(pathObject) {\n if (pathObject === null || typeof pathObject !== 'object') {\n throw new TypeError('The \"pathObject\" argument must be of type Object. Received type ' + typeof pathObject);\n }\n return _format('/', pathObject);\n },\n\n parse: function parse(path) {\n assertPath(path);\n\n var ret = { root: '', dir: '', base: '', ext: '', name: '' };\n if (path.length === 0) return ret;\n var code = path.charCodeAt(0);\n var isAbsolute = code === 47 /*/*/;\n var start;\n if (isAbsolute) {\n ret.root = '/';\n start = 1;\n } else {\n start = 0;\n }\n var startDot = -1;\n var startPart = 0;\n var end = -1;\n var matchedSlash = true;\n var i = path.length - 1;\n\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n var preDotState = 0;\n\n // Get non-dir info\n for (; i >= start; --i) {\n code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (code === 46 /*.*/) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1) startDot = i;else if (preDotState !== 1) preDotState = 1;\n } else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n\n if (startDot === -1 || end === -1 ||\n // We saw a non-dot character immediately before the dot\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly '..'\n preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n if (end !== -1) {\n if (startPart === 0 && isAbsolute) ret.base = ret.name = path.slice(1, end);else ret.base = ret.name = path.slice(startPart, end);\n }\n } else {\n if (startPart === 0 && isAbsolute) {\n ret.name = path.slice(1, startDot);\n ret.base = path.slice(1, end);\n } else {\n ret.name = path.slice(startPart, startDot);\n ret.base = path.slice(startPart, end);\n }\n ret.ext = path.slice(startDot, end);\n }\n\n if (startPart > 0) ret.dir = path.slice(0, startPart - 1);else if (isAbsolute) ret.dir = '/';\n\n return ret;\n },\n\n sep: '/',\n delimiter: ':',\n win32: null,\n posix: null\n};\n\nposix.posix = posix;\n\nmodule.exports = posix;\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';\nvar util = require('util');\nvar isString = function (x) {\n return typeof x === 'string';\n};\n\n\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n var res = [];\n for (var i = 0; i < parts.length; i++) {\n var p = parts[i];\n\n // ignore empty parts\n if (!p || p === '.')\n continue;\n\n if (p === '..') {\n if (res.length && res[res.length - 1] !== '..') {\n res.pop();\n } else if (allowAboveRoot) {\n res.push('..');\n }\n } else {\n res.push(p);\n }\n }\n\n return res;\n}\n\n// Split a filename into [root, dir, basename, ext], unix version\n// 'root' is just a slash, or nothing.\nvar splitPathRe =\n /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\nvar posix = {};\n\n\nfunction posixSplitPath(filename) {\n return splitPathRe.exec(filename).slice(1);\n}\n\n\n// path.resolve([from ...], to)\n// posix version\nposix.resolve = function() {\n var resolvedPath = '',\n resolvedAbsolute = false;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path = (i >= 0) ? arguments[i] : process.cwd();\n\n // Skip empty and invalid entries\n if (!isString(path)) {\n throw new TypeError('Arguments to path.resolve must be strings');\n } else if (!path) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charAt(0) === '/';\n }\n\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n\n // Normalize the path\n resolvedPath = normalizeArray(resolvedPath.split('/'),\n !resolvedAbsolute).join('/');\n\n return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\n};\n\n// path.normalize(path)\n// posix version\nposix.normalize = function(path) {\n var isAbsolute = posix.isAbsolute(path),\n trailingSlash = path.substr(-1) === '/';\n\n // Normalize the path\n path = normalizeArray(path.split('/'), !isAbsolute).join('/');\n\n if (!path && !isAbsolute) {\n path = '.';\n }\n if (path && trailingSlash) {\n path += '/';\n }\n\n return (isAbsolute ? '/' : '') + path;\n};\n\n// posix version\nposix.isAbsolute = function(path) {\n return path.charAt(0) === '/';\n};\n\n// posix version\nposix.join = function() {\n var path = '';\n for (var i = 0; i < arguments.length; i++) {\n var segment = arguments[i];\n if (!isString(segment)) {\n throw new TypeError('Arguments to path.join must be strings');\n }\n if (segment) {\n if (!path) {\n path += segment;\n } else {\n path += '/' + segment;\n }\n }\n }\n return posix.normalize(path);\n};\n\n\n// path.relative(from, to)\n// posix version\nposix.relative = function(from, to) {\n from = posix.resolve(from).substr(1);\n to = posix.resolve(to).substr(1);\n\n function trim(arr) {\n var start = 0;\n for (; start < arr.length; start++) {\n if (arr[start] !== '') break;\n }\n\n var end = arr.length - 1;\n for (; end >= 0; end--) {\n if (arr[end] !== '') break;\n }\n\n if (start > end) return [];\n return arr.slice(start, end + 1);\n }\n\n var fromParts = trim(from.split('/'));\n var toParts = trim(to.split('/'));\n\n var length = Math.min(fromParts.length, toParts.length);\n var samePartsLength = length;\n for (var i = 0; i < length; i++) {\n if (fromParts[i] !== toParts[i]) {\n samePartsLength = i;\n break;\n }\n }\n\n var outputParts = [];\n for (var i = samePartsLength; i < fromParts.length; i++) {\n outputParts.push('..');\n }\n\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n return outputParts.join('/');\n};\n\n\nposix._makeLong = function(path) {\n return path;\n};\n\n\nposix.dirname = function(path) {\n var result = posixSplitPath(path),\n root = result[0],\n dir = result[1];\n\n if (!root && !dir) {\n // No dirname whatsoever\n return '.';\n }\n\n if (dir) {\n // It has a dirname, strip trailing slash\n dir = dir.substr(0, dir.length - 1);\n }\n\n return root + dir;\n};\n\n\nposix.basename = function(path, ext) {\n var f = posixSplitPath(path)[2];\n // TODO: make this comparison case-insensitive on windows?\n if (ext && f.substr(-1 * ext.length) === ext) {\n f = f.substr(0, f.length - ext.length);\n }\n return f;\n};\n\n\nposix.extname = function(path) {\n return posixSplitPath(path)[3];\n};\n\n\nposix.format = function(pathObject) {\n if (!util.isObject(pathObject)) {\n throw new TypeError(\n \"Parameter 'pathObject' must be an object, not \" + typeof pathObject\n );\n }\n\n var root = pathObject.root || '';\n\n if (!isString(root)) {\n throw new TypeError(\n \"'pathObject.root' must be a string or undefined, not \" +\n typeof pathObject.root\n );\n }\n\n var dir = pathObject.dir ? pathObject.dir + posix.sep : '';\n var base = pathObject.base || '';\n return dir + base;\n};\n\n\nposix.parse = function(pathString) {\n if (!isString(pathString)) {\n throw new TypeError(\n \"Parameter 'pathString' must be a string, not \" + typeof pathString\n );\n }\n var allParts = posixSplitPath(pathString);\n if (!allParts || allParts.length !== 4) {\n throw new TypeError(\"Invalid path '\" + pathString + \"'\");\n }\n allParts[1] = allParts[1] || '';\n allParts[2] = allParts[2] || '';\n allParts[3] = allParts[3] || '';\n\n return {\n root: allParts[0],\n dir: allParts[0] + allParts[1].slice(0, allParts[1].length - 1),\n base: allParts[2],\n ext: allParts[3],\n name: allParts[2].slice(0, allParts[2].length - allParts[3].length)\n };\n};\n\n\nposix.sep = '/';\nposix.delimiter = ':';\n\n module.exports = posix;\n","exports.pbkdf2 = require('./lib/async')\nexports.pbkdf2Sync = require('./lib/sync')\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}\nvar nextTick\nfunction getNextTick () {\n if (nextTick) {\n return nextTick\n }\n if (global.process && global.process.nextTick) {\n nextTick = global.process.nextTick\n } else if (global.queueMicrotask) {\n nextTick = global.queueMicrotask\n } else if (global.setImmediate) {\n nextTick = global.setImmediate\n } else {\n nextTick = global.setTimeout\n }\n return nextTick\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 getNextTick()(function () {\n callback(null, out)\n })\n }, function (e) {\n getNextTick()(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 getNextTick()(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 return\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","var defaultEncoding\n/* istanbul ignore next */\nif (global.process && global.process.browser) {\n defaultEncoding = 'utf-8'\n} else if (global.process && global.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","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","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 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","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","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","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n 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 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","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","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","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\nvar has = Object.prototype.hasOwnProperty\n , undef;\n\n/**\n * Decode a URI encoded string.\n *\n * @param {String} input The URI encoded string.\n * @returns {String|Null} The decoded string.\n * @api private\n */\nfunction decode(input) {\n try {\n return decodeURIComponent(input.replace(/\\+/g, ' '));\n } catch (e) {\n return null;\n }\n}\n\n/**\n * Attempts to encode a given input.\n *\n * @param {String} input The string that needs to be encoded.\n * @returns {String|Null} The encoded string.\n * @api private\n */\nfunction encode(input) {\n try {\n return encodeURIComponent(input);\n } catch (e) {\n return null;\n }\n}\n\n/**\n * Simple query string parser.\n *\n * @param {String} query The query string that needs to be parsed.\n * @returns {Object}\n * @api public\n */\nfunction querystring(query) {\n var parser = /([^=?#&]+)=?([^&]*)/g\n , result = {}\n , part;\n\n while (part = parser.exec(query)) {\n var key = decode(part[1])\n , value = decode(part[2]);\n\n //\n // Prevent overriding of existing properties. This ensures that build-in\n // methods like `toString` or __proto__ are not overriden by malicious\n // querystrings.\n //\n // In the case if failed decoding, we want to omit the key/value pairs\n // from the result.\n //\n if (key === null || value === null || key in result) continue;\n result[key] = value;\n }\n\n return result;\n}\n\n/**\n * Transform a query string to an object.\n *\n * @param {Object} obj Object that should be transformed.\n * @param {String} prefix Optional prefix.\n * @returns {String}\n * @api public\n */\nfunction querystringify(obj, prefix) {\n prefix = prefix || '';\n\n var pairs = []\n , value\n , key;\n\n //\n // Optionally prefix with a '?' if needed\n //\n if ('string' !== typeof prefix) prefix = '?';\n\n for (key in obj) {\n if (has.call(obj, key)) {\n value = obj[key];\n\n //\n // Edge cases where we actually want to encode the value to an empty\n // string instead of the stringified value.\n //\n if (!value && (value === null || value === undef || isNaN(value))) {\n value = '';\n }\n\n key = encode(key);\n value = encode(value);\n\n //\n // If we failed to encode the strings, we should bail out as we don't\n // want to add invalid strings to the query.\n //\n if (key === null || value === null) continue;\n pairs.push(key +'='+ value);\n }\n }\n\n return pairs.length ? prefix + pairs.join('&') : '';\n}\n\n//\n// Expose the module.\n//\nexports.stringify = querystringify;\nexports.parse = querystring;\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\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\n/**\n * Check if we're required to add a port number.\n *\n * @see https://url.spec.whatwg.org/#default-port\n * @param {Number|String} port Port number we need to check\n * @param {String} protocol Protocol we need to check against.\n * @returns {Boolean} Is it a default port for the given protocol\n * @api private\n */\nmodule.exports = function required(port, protocol) {\n protocol = protocol.split(':')[0];\n port = +port;\n\n if (!port) return false;\n\n switch (protocol) {\n case 'http':\n case 'ws':\n return port !== 80;\n\n case 'https':\n case 'wss':\n return port !== 443;\n\n case 'ftp':\n return port !== 21;\n\n case 'gopher':\n return port !== 70;\n\n case 'file':\n return false;\n }\n\n return port !== 0;\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","/* 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","/* 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","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 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","/*\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","/*\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","/**\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","/**\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","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","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","// 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/lib/_stream_readable.js');\nStream.Writable = require('readable-stream/lib/_stream_writable.js');\nStream.Duplex = require('readable-stream/lib/_stream_duplex.js');\nStream.Transform = require('readable-stream/lib/_stream_transform.js');\nStream.PassThrough = require('readable-stream/lib/_stream_passthrough.js');\nStream.finished = require('readable-stream/lib/internal/streams/end-of-stream.js')\nStream.pipeline = require('readable-stream/lib/internal/streams/pipeline.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","'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","// 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/*<replacement>*/\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/*</replacement>*/\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});","// 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};","// 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/*<replacement>*/\n\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n/*<replacement>*/\n\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\n\n\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\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/*<replacement>*/\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/*</replacement>*/\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}","// 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}","// 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/* <replacement> */\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/* </replacement> */\n\n/*<replacement>*/\n\n\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n/*<replacement>*/\n\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\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';\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\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}();","'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};","// 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;","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;","'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};","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\n'use strict';\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\n/*</replacement>*/\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}","(function (name, context, definition) {\n if (typeof module !== 'undefined' && module.exports) module.exports = definition();\n else if (typeof define === 'function' && define.amd) define(definition);\n else context[name] = definition();\n})('urljoin', this, function () {\n\n function normalize (strArray) {\n var resultArray = [];\n if (strArray.length === 0) { return ''; }\n\n if (typeof strArray[0] !== 'string') {\n throw new TypeError('Url must be a string. Received ' + strArray[0]);\n }\n\n // If the first part is a plain protocol, we combine it with the next part.\n if (strArray[0].match(/^[^/:]+:\\/*$/) && strArray.length > 1) {\n var first = strArray.shift();\n strArray[0] = first + strArray[0];\n }\n\n // There must be two or three slashes in the file protocol, two slashes in anything else.\n if (strArray[0].match(/^file:\\/\\/\\//)) {\n strArray[0] = strArray[0].replace(/^([^/:]+):\\/*/, '$1:///');\n } else {\n strArray[0] = strArray[0].replace(/^([^/:]+):\\/*/, '$1://');\n }\n\n for (var i = 0; i < strArray.length; i++) {\n var component = strArray[i];\n\n if (typeof component !== 'string') {\n throw new TypeError('Url must be a string. Received ' + component);\n }\n\n if (component === '') { continue; }\n\n if (i > 0) {\n // Removing the starting slashes for each component but the first.\n component = component.replace(/^[\\/]+/, '');\n }\n if (i < strArray.length - 1) {\n // Removing the ending slashes for each component but the last.\n component = component.replace(/[\\/]+$/, '');\n } else {\n // For the last component we will combine multiple slashes to a single one.\n component = component.replace(/[\\/]+$/, '/');\n }\n\n resultArray.push(component);\n\n }\n\n var str = resultArray.join('/');\n // Each input component is now separated by a single slash except the possible first plain protocol part.\n\n // remove trailing slash before parameters or hash\n str = str.replace(/\\/(\\?|&|#[^!])/g, '$1');\n\n // replace ? in parameters with &\n var parts = str.split('?');\n str = parts.shift() + (parts.length > 0 ? '?': '') + parts.join('&');\n\n return str;\n }\n\n return function () {\n var input;\n\n if (typeof arguments[0] === 'object') {\n input = arguments[0];\n } else {\n input = [].slice.call(arguments);\n }\n\n return normalize(input);\n };\n\n});\n","'use strict';\n\nvar required = require('requires-port')\n , qs = require('querystringify')\n , controlOrWhitespace = /^[\\x00-\\x20\\u00a0\\u1680\\u2000-\\u200a\\u2028\\u2029\\u202f\\u205f\\u3000\\ufeff]+/\n , CRHTLF = /[\\n\\r\\t]/g\n , slashes = /^[A-Za-z][A-Za-z0-9+-.]*:\\/\\//\n , port = /:\\d+$/\n , protocolre = /^([a-z][a-z0-9.+-]*:)?(\\/\\/)?([\\\\/]+)?([\\S\\s]*)/i\n , windowsDriveLetter = /^[a-zA-Z]:/;\n\n/**\n * Remove control characters and whitespace from the beginning of a string.\n *\n * @param {Object|String} str String to trim.\n * @returns {String} A new string representing `str` stripped of control\n * characters and whitespace from its beginning.\n * @public\n */\nfunction trimLeft(str) {\n return (str ? str : '').toString().replace(controlOrWhitespace, '');\n}\n\n/**\n * These are the parse rules for the URL parser, it informs the parser\n * about:\n *\n * 0. The char it Needs to parse, if it's a string it should be done using\n * indexOf, RegExp using exec and NaN means set as current value.\n * 1. The property we should set when parsing this value.\n * 2. Indication if it's backwards or forward parsing, when set as number it's\n * the value of extra chars that should be split off.\n * 3. Inherit from location if non existing in the parser.\n * 4. `toLowerCase` the resulting value.\n */\nvar rules = [\n ['#', 'hash'], // Extract from the back.\n ['?', 'query'], // Extract from the back.\n function sanitize(address, url) { // Sanitize what is left of the address\n return isSpecial(url.protocol) ? address.replace(/\\\\/g, '/') : address;\n },\n ['/', 'pathname'], // Extract from the back.\n ['@', 'auth', 1], // Extract from the front.\n [NaN, 'host', undefined, 1, 1], // Set left over value.\n [/:(\\d*)$/, 'port', undefined, 1], // RegExp the back.\n [NaN, 'hostname', undefined, 1, 1] // Set left over.\n];\n\n/**\n * These properties should not be copied or inherited from. This is only needed\n * for all non blob URL's as a blob URL does not include a hash, only the\n * origin.\n *\n * @type {Object}\n * @private\n */\nvar ignore = { hash: 1, query: 1 };\n\n/**\n * The location object differs when your code is loaded through a normal page,\n * Worker or through a worker using a blob. And with the blobble begins the\n * trouble as the location object will contain the URL of the blob, not the\n * location of the page where our code is loaded in. The actual origin is\n * encoded in the `pathname` so we can thankfully generate a good \"default\"\n * location from it so we can generate proper relative URL's again.\n *\n * @param {Object|String} loc Optional default location object.\n * @returns {Object} lolcation object.\n * @public\n */\nfunction lolcation(loc) {\n var globalVar;\n\n if (typeof window !== 'undefined') globalVar = window;\n else if (typeof global !== 'undefined') globalVar = global;\n else if (typeof self !== 'undefined') globalVar = self;\n else globalVar = {};\n\n var location = globalVar.location || {};\n loc = loc || location;\n\n var finaldestination = {}\n , type = typeof loc\n , key;\n\n if ('blob:' === loc.protocol) {\n finaldestination = new Url(unescape(loc.pathname), {});\n } else if ('string' === type) {\n finaldestination = new Url(loc, {});\n for (key in ignore) delete finaldestination[key];\n } else if ('object' === type) {\n for (key in loc) {\n if (key in ignore) continue;\n finaldestination[key] = loc[key];\n }\n\n if (finaldestination.slashes === undefined) {\n finaldestination.slashes = slashes.test(loc.href);\n }\n }\n\n return finaldestination;\n}\n\n/**\n * Check whether a protocol scheme is special.\n *\n * @param {String} The protocol scheme of the URL\n * @return {Boolean} `true` if the protocol scheme is special, else `false`\n * @private\n */\nfunction isSpecial(scheme) {\n return (\n scheme === 'file:' ||\n scheme === 'ftp:' ||\n scheme === 'http:' ||\n scheme === 'https:' ||\n scheme === 'ws:' ||\n scheme === 'wss:'\n );\n}\n\n/**\n * @typedef ProtocolExtract\n * @type Object\n * @property {String} protocol Protocol matched in the URL, in lowercase.\n * @property {Boolean} slashes `true` if protocol is followed by \"//\", else `false`.\n * @property {String} rest Rest of the URL that is not part of the protocol.\n */\n\n/**\n * Extract protocol information from a URL with/without double slash (\"//\").\n *\n * @param {String} address URL we want to extract from.\n * @param {Object} location\n * @return {ProtocolExtract} Extracted information.\n * @private\n */\nfunction extractProtocol(address, location) {\n address = trimLeft(address);\n address = address.replace(CRHTLF, '');\n location = location || {};\n\n var match = protocolre.exec(address);\n var protocol = match[1] ? match[1].toLowerCase() : '';\n var forwardSlashes = !!match[2];\n var otherSlashes = !!match[3];\n var slashesCount = 0;\n var rest;\n\n if (forwardSlashes) {\n if (otherSlashes) {\n rest = match[2] + match[3] + match[4];\n slashesCount = match[2].length + match[3].length;\n } else {\n rest = match[2] + match[4];\n slashesCount = match[2].length;\n }\n } else {\n if (otherSlashes) {\n rest = match[3] + match[4];\n slashesCount = match[3].length;\n } else {\n rest = match[4]\n }\n }\n\n if (protocol === 'file:') {\n if (slashesCount >= 2) {\n rest = rest.slice(2);\n }\n } else if (isSpecial(protocol)) {\n rest = match[4];\n } else if (protocol) {\n if (forwardSlashes) {\n rest = rest.slice(2);\n }\n } else if (slashesCount >= 2 && isSpecial(location.protocol)) {\n rest = match[4];\n }\n\n return {\n protocol: protocol,\n slashes: forwardSlashes || isSpecial(protocol),\n slashesCount: slashesCount,\n rest: rest\n };\n}\n\n/**\n * Resolve a relative URL pathname against a base URL pathname.\n *\n * @param {String} relative Pathname of the relative URL.\n * @param {String} base Pathname of the base URL.\n * @return {String} Resolved pathname.\n * @private\n */\nfunction resolve(relative, base) {\n if (relative === '') return base;\n\n var path = (base || '/').split('/').slice(0, -1).concat(relative.split('/'))\n , i = path.length\n , last = path[i - 1]\n , unshift = false\n , up = 0;\n\n while (i--) {\n if (path[i] === '.') {\n path.splice(i, 1);\n } else if (path[i] === '..') {\n path.splice(i, 1);\n up++;\n } else if (up) {\n if (i === 0) unshift = true;\n path.splice(i, 1);\n up--;\n }\n }\n\n if (unshift) path.unshift('');\n if (last === '.' || last === '..') path.push('');\n\n return path.join('/');\n}\n\n/**\n * The actual URL instance. Instead of returning an object we've opted-in to\n * create an actual constructor as it's much more memory efficient and\n * faster and it pleases my OCD.\n *\n * It is worth noting that we should not use `URL` as class name to prevent\n * clashes with the global URL instance that got introduced in browsers.\n *\n * @constructor\n * @param {String} address URL we want to parse.\n * @param {Object|String} [location] Location defaults for relative paths.\n * @param {Boolean|Function} [parser] Parser for the query string.\n * @private\n */\nfunction Url(address, location, parser) {\n address = trimLeft(address);\n address = address.replace(CRHTLF, '');\n\n if (!(this instanceof Url)) {\n return new Url(address, location, parser);\n }\n\n var relative, extracted, parse, instruction, index, key\n , instructions = rules.slice()\n , type = typeof location\n , url = this\n , i = 0;\n\n //\n // The following if statements allows this module two have compatibility with\n // 2 different API:\n //\n // 1. Node.js's `url.parse` api which accepts a URL, boolean as arguments\n // where the boolean indicates that the query string should also be parsed.\n //\n // 2. The `URL` interface of the browser which accepts a URL, object as\n // arguments. The supplied object will be used as default values / fall-back\n // for relative paths.\n //\n if ('object' !== type && 'string' !== type) {\n parser = location;\n location = null;\n }\n\n if (parser && 'function' !== typeof parser) parser = qs.parse;\n\n location = lolcation(location);\n\n //\n // Extract protocol information before running the instructions.\n //\n extracted = extractProtocol(address || '', location);\n relative = !extracted.protocol && !extracted.slashes;\n url.slashes = extracted.slashes || relative && location.slashes;\n url.protocol = extracted.protocol || location.protocol || '';\n address = extracted.rest;\n\n //\n // When the authority component is absent the URL starts with a path\n // component.\n //\n if (\n extracted.protocol === 'file:' && (\n extracted.slashesCount !== 2 || windowsDriveLetter.test(address)) ||\n (!extracted.slashes &&\n (extracted.protocol ||\n extracted.slashesCount < 2 ||\n !isSpecial(url.protocol)))\n ) {\n instructions[3] = [/(.*)/, 'pathname'];\n }\n\n for (; i < instructions.length; i++) {\n instruction = instructions[i];\n\n if (typeof instruction === 'function') {\n address = instruction(address, url);\n continue;\n }\n\n parse = instruction[0];\n key = instruction[1];\n\n if (parse !== parse) {\n url[key] = address;\n } else if ('string' === typeof parse) {\n index = parse === '@'\n ? address.lastIndexOf(parse)\n : address.indexOf(parse);\n\n if (~index) {\n if ('number' === typeof instruction[2]) {\n url[key] = address.slice(0, index);\n address = address.slice(index + instruction[2]);\n } else {\n url[key] = address.slice(index);\n address = address.slice(0, index);\n }\n }\n } else if ((index = parse.exec(address))) {\n url[key] = index[1];\n address = address.slice(0, index.index);\n }\n\n url[key] = url[key] || (\n relative && instruction[3] ? location[key] || '' : ''\n );\n\n //\n // Hostname, host and protocol should be lowercased so they can be used to\n // create a proper `origin`.\n //\n if (instruction[4]) url[key] = url[key].toLowerCase();\n }\n\n //\n // Also parse the supplied query string in to an object. If we're supplied\n // with a custom parser as function use that instead of the default build-in\n // parser.\n //\n if (parser) url.query = parser(url.query);\n\n //\n // If the URL is relative, resolve the pathname against the base URL.\n //\n if (\n relative\n && location.slashes\n && url.pathname.charAt(0) !== '/'\n && (url.pathname !== '' || location.pathname !== '')\n ) {\n url.pathname = resolve(url.pathname, location.pathname);\n }\n\n //\n // Default to a / for pathname if none exists. This normalizes the URL\n // to always have a /\n //\n if (url.pathname.charAt(0) !== '/' && isSpecial(url.protocol)) {\n url.pathname = '/' + url.pathname;\n }\n\n //\n // We should not add port numbers if they are already the default port number\n // for a given protocol. As the host also contains the port number we're going\n // override it with the hostname which contains no port number.\n //\n if (!required(url.port, url.protocol)) {\n url.host = url.hostname;\n url.port = '';\n }\n\n //\n // Parse down the `auth` for the username and password.\n //\n url.username = url.password = '';\n\n if (url.auth) {\n index = url.auth.indexOf(':');\n\n if (~index) {\n url.username = url.auth.slice(0, index);\n url.username = encodeURIComponent(decodeURIComponent(url.username));\n\n url.password = url.auth.slice(index + 1);\n url.password = encodeURIComponent(decodeURIComponent(url.password))\n } else {\n url.username = encodeURIComponent(decodeURIComponent(url.auth));\n }\n\n url.auth = url.password ? url.username +':'+ url.password : url.username;\n }\n\n url.origin = url.protocol !== 'file:' && isSpecial(url.protocol) && url.host\n ? url.protocol +'//'+ url.host\n : 'null';\n\n //\n // The href is just the compiled result.\n //\n url.href = url.toString();\n}\n\n/**\n * This is convenience method for changing properties in the URL instance to\n * insure that they all propagate correctly.\n *\n * @param {String} part Property we need to adjust.\n * @param {Mixed} value The newly assigned value.\n * @param {Boolean|Function} fn When setting the query, it will be the function\n * used to parse the query.\n * When setting the protocol, double slash will be\n * removed from the final url if it is true.\n * @returns {URL} URL instance for chaining.\n * @public\n */\nfunction set(part, value, fn) {\n var url = this;\n\n switch (part) {\n case 'query':\n if ('string' === typeof value && value.length) {\n value = (fn || qs.parse)(value);\n }\n\n url[part] = value;\n break;\n\n case 'port':\n url[part] = value;\n\n if (!required(value, url.protocol)) {\n url.host = url.hostname;\n url[part] = '';\n } else if (value) {\n url.host = url.hostname +':'+ value;\n }\n\n break;\n\n case 'hostname':\n url[part] = value;\n\n if (url.port) value += ':'+ url.port;\n url.host = value;\n break;\n\n case 'host':\n url[part] = value;\n\n if (port.test(value)) {\n value = value.split(':');\n url.port = value.pop();\n url.hostname = value.join(':');\n } else {\n url.hostname = value;\n url.port = '';\n }\n\n break;\n\n case 'protocol':\n url.protocol = value.toLowerCase();\n url.slashes = !fn;\n break;\n\n case 'pathname':\n case 'hash':\n if (value) {\n var char = part === 'pathname' ? '/' : '#';\n url[part] = value.charAt(0) !== char ? char + value : value;\n } else {\n url[part] = value;\n }\n break;\n\n case 'username':\n case 'password':\n url[part] = encodeURIComponent(value);\n break;\n\n case 'auth':\n var index = value.indexOf(':');\n\n if (~index) {\n url.username = value.slice(0, index);\n url.username = encodeURIComponent(decodeURIComponent(url.username));\n\n url.password = value.slice(index + 1);\n url.password = encodeURIComponent(decodeURIComponent(url.password));\n } else {\n url.username = encodeURIComponent(decodeURIComponent(value));\n }\n }\n\n for (var i = 0; i < rules.length; i++) {\n var ins = rules[i];\n\n if (ins[4]) url[ins[1]] = url[ins[1]].toLowerCase();\n }\n\n url.auth = url.password ? url.username +':'+ url.password : url.username;\n\n url.origin = url.protocol !== 'file:' && isSpecial(url.protocol) && url.host\n ? url.protocol +'//'+ url.host\n : 'null';\n\n url.href = url.toString();\n\n return url;\n}\n\n/**\n * Transform the properties back in to a valid and full URL string.\n *\n * @param {Function} stringify Optional query stringify function.\n * @returns {String} Compiled version of the URL.\n * @public\n */\nfunction toString(stringify) {\n if (!stringify || 'function' !== typeof stringify) stringify = qs.stringify;\n\n var query\n , url = this\n , host = url.host\n , protocol = url.protocol;\n\n if (protocol && protocol.charAt(protocol.length - 1) !== ':') protocol += ':';\n\n var result =\n protocol +\n ((url.protocol && url.slashes) || isSpecial(url.protocol) ? '//' : '');\n\n if (url.username) {\n result += url.username;\n if (url.password) result += ':'+ url.password;\n result += '@';\n } else if (url.password) {\n result += ':'+ url.password;\n result += '@';\n } else if (\n url.protocol !== 'file:' &&\n isSpecial(url.protocol) &&\n !host &&\n url.pathname !== '/'\n ) {\n //\n // Add back the empty userinfo, otherwise the original invalid URL\n // might be transformed into a valid one with `url.pathname` as host.\n //\n result += '@';\n }\n\n //\n // Trailing colon is removed from `url.host` when it is parsed. If it still\n // ends with a colon, then add back the trailing colon that was removed. This\n // prevents an invalid URL from being transformed into a valid one.\n //\n if (host[host.length - 1] === ':' || (port.test(url.hostname) && !url.port)) {\n host += ':';\n }\n\n result += host + url.pathname;\n\n query = 'object' === typeof url.query ? stringify(url.query) : url.query;\n if (query) result += '?' !== query.charAt(0) ? '?'+ query : query;\n\n if (url.hash) result += url.hash;\n\n return result;\n}\n\nUrl.prototype = { set: set, toString: toString };\n\n//\n// Expose the URL parser and some additional properties that might be useful for\n// others or testing.\n//\nUrl.extractProtocol = extractProtocol;\nUrl.location = lolcation;\nUrl.trimLeft = trimLeft;\nUrl.qs = qs;\n\nmodule.exports = Url;\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"],"sourceRoot":""} \ No newline at end of file