{"version":3,"file":"vendors-640e94a9.xxxxxxxx.bundle.js","mappings":"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","sources":["webpack://iadviser/./node_modules/base64-js/index.js","webpack://iadviser/./node_modules/broadcast-channel/dist/es/util.js","webpack://iadviser/./node_modules/broadcast-channel/dist/es/methods/native.js","webpack://iadviser/./node_modules/broadcast-channel/dist/es/options.js","webpack://iadviser/./node_modules/broadcast-channel/dist/es/methods/indexed-db.js","webpack://iadviser/./node_modules/broadcast-channel/dist/es/methods/localstorage.js","webpack://iadviser/./node_modules/broadcast-channel/dist/es/methods/simulate.js","webpack://iadviser/./node_modules/broadcast-channel/dist/es/method-chooser.js","webpack://iadviser/./node_modules/broadcast-channel/dist/es/broadcast-channel.js","webpack://iadviser/./node_modules/buffer/index.js","webpack://iadviser/./node_modules/bignumber.js/bignumber.mjs"],"sourcesContent":["'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","/**\n * returns true if the given object is a promise\n */\nexport function isPromise(obj) {\n if (obj && typeof obj.then === 'function') {\n return true;\n } else {\n return false;\n }\n}\nexport function sleep(time) {\n if (!time) time = 0;\n return new Promise(function (res) {\n return setTimeout(res, time);\n });\n}\nexport function randomInt(min, max) {\n return Math.floor(Math.random() * (max - min + 1) + min);\n}\n/**\n * https://stackoverflow.com/a/8084248\n */\n\nexport function randomToken() {\n return Math.random().toString(36).substring(2);\n}\nvar lastMs = 0;\nvar additional = 0;\n/**\n * returns the current time in micro-seconds,\n * WARNING: This is a pseudo-function\n * Performance.now is not reliable in webworkers, so we just make sure to never return the same time.\n * This is enough in browsers, and this function will not be used in nodejs.\n * The main reason for this hack is to ensure that BroadcastChannel behaves equal to production when it is used in fast-running unit tests.\n */\n\nexport function microSeconds() {\n var ms = new Date().getTime();\n\n if (ms === lastMs) {\n additional++;\n return ms * 1000 + additional;\n } else {\n lastMs = ms;\n additional = 0;\n return ms * 1000;\n }\n}\n/**\n * copied from the 'detect-node' npm module\n * We cannot use the module directly because it causes problems with rollup\n * @link https://github.com/iliakan/detect-node/blob/master/index.js\n */\n\nexport var isNode = Object.prototype.toString.call(typeof process !== 'undefined' ? process : 0) === '[object process]';","import { microSeconds as micro, isNode } from '../util';\nexport var microSeconds = micro;\nexport var type = 'native';\nexport function create(channelName) {\n var state = {\n messagesCallback: null,\n bc: new BroadcastChannel(channelName),\n subFns: [] // subscriberFunctions\n\n };\n\n state.bc.onmessage = function (msg) {\n if (state.messagesCallback) {\n state.messagesCallback(msg.data);\n }\n };\n\n return state;\n}\nexport function close(channelState) {\n channelState.bc.close();\n channelState.subFns = [];\n}\nexport function postMessage(channelState, messageJson) {\n try {\n channelState.bc.postMessage(messageJson, false);\n return Promise.resolve();\n } catch (err) {\n return Promise.reject(err);\n }\n}\nexport function onMessage(channelState, fn) {\n channelState.messagesCallback = fn;\n}\nexport function canBeUsed() {\n /**\n * in the electron-renderer, isNode will be true even if we are in browser-context\n * so we also check if window is undefined\n */\n if (isNode && typeof window === 'undefined') return false;\n\n if (typeof BroadcastChannel === 'function') {\n if (BroadcastChannel._pubkey) {\n throw new Error('BroadcastChannel: Do not overwrite window.BroadcastChannel with this module, this is not a polyfill');\n }\n\n return true;\n } else return false;\n}\nexport function averageResponseTime() {\n return 150;\n}\nexport default {\n create: create,\n close: close,\n onMessage: onMessage,\n postMessage: postMessage,\n canBeUsed: canBeUsed,\n type: type,\n averageResponseTime: averageResponseTime,\n microSeconds: microSeconds\n};","export function fillOptionsWithDefaults() {\n var originalOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var options = JSON.parse(JSON.stringify(originalOptions)); // main\n\n if (typeof options.webWorkerSupport === 'undefined') options.webWorkerSupport = true; // indexed-db\n\n if (!options.idb) options.idb = {}; // after this time the messages get deleted\n\n if (!options.idb.ttl) options.idb.ttl = 1000 * 45;\n if (!options.idb.fallbackInterval) options.idb.fallbackInterval = 150; // handles abrupt db onclose events.\n\n if (originalOptions.idb && typeof originalOptions.idb.onclose === 'function') options.idb.onclose = originalOptions.idb.onclose; // localstorage\n\n if (!options.localstorage) options.localstorage = {};\n if (!options.localstorage.removeTimeout) options.localstorage.removeTimeout = 1000 * 60; // custom methods\n\n if (originalOptions.methods) options.methods = originalOptions.methods; // node\n\n if (!options.node) options.node = {};\n if (!options.node.ttl) options.node.ttl = 1000 * 60 * 2; // 2 minutes;\n\n if (typeof options.node.useFastPath === 'undefined') options.node.useFastPath = true;\n return options;\n}","/**\n * this method uses indexeddb to store the messages\n * There is currently no observerAPI for idb\n * @link https://github.com/w3c/IndexedDB/issues/51\n */\nimport { sleep, randomInt, randomToken, microSeconds as micro, isNode } from '../util.js';\nexport var microSeconds = micro;\nimport { ObliviousSet } from 'oblivious-set';\nimport { fillOptionsWithDefaults } from '../options';\nvar DB_PREFIX = 'pubkey.broadcast-channel-0-';\nvar OBJECT_STORE_ID = 'messages';\nexport var type = 'idb';\nexport function getIdb() {\n if (typeof indexedDB !== 'undefined') return indexedDB;\n\n if (typeof window !== 'undefined') {\n if (typeof window.mozIndexedDB !== 'undefined') return window.mozIndexedDB;\n if (typeof window.webkitIndexedDB !== 'undefined') return window.webkitIndexedDB;\n if (typeof window.msIndexedDB !== 'undefined') return window.msIndexedDB;\n }\n\n return false;\n}\nexport function createDatabase(channelName) {\n var IndexedDB = getIdb(); // create table\n\n var dbName = DB_PREFIX + channelName;\n var openRequest = IndexedDB.open(dbName, 1);\n\n openRequest.onupgradeneeded = function (ev) {\n var db = ev.target.result;\n db.createObjectStore(OBJECT_STORE_ID, {\n keyPath: 'id',\n autoIncrement: true\n });\n };\n\n var dbPromise = new Promise(function (res, rej) {\n openRequest.onerror = function (ev) {\n return rej(ev);\n };\n\n openRequest.onsuccess = function () {\n res(openRequest.result);\n };\n });\n return dbPromise;\n}\n/**\n * writes the new message to the database\n * so other readers can find it\n */\n\nexport function writeMessage(db, readerUuid, messageJson) {\n var time = new Date().getTime();\n var writeObject = {\n uuid: readerUuid,\n time: time,\n data: messageJson\n };\n var transaction = db.transaction([OBJECT_STORE_ID], 'readwrite');\n return new Promise(function (res, rej) {\n transaction.oncomplete = function () {\n return res();\n };\n\n transaction.onerror = function (ev) {\n return rej(ev);\n };\n\n var objectStore = transaction.objectStore(OBJECT_STORE_ID);\n objectStore.add(writeObject);\n });\n}\nexport function getAllMessages(db) {\n var objectStore = db.transaction(OBJECT_STORE_ID).objectStore(OBJECT_STORE_ID);\n var ret = [];\n return new Promise(function (res) {\n objectStore.openCursor().onsuccess = function (ev) {\n var cursor = ev.target.result;\n\n if (cursor) {\n ret.push(cursor.value); //alert(\"Name for SSN \" + cursor.key + \" is \" + cursor.value.name);\n\n cursor[\"continue\"]();\n } else {\n res(ret);\n }\n };\n });\n}\nexport function getMessagesHigherThan(db, lastCursorId) {\n var objectStore = db.transaction(OBJECT_STORE_ID).objectStore(OBJECT_STORE_ID);\n var ret = [];\n\n function openCursor() {\n // Occasionally Safari will fail on IDBKeyRange.bound, this\n // catches that error, having it open the cursor to the first\n // item. When it gets data it will advance to the desired key.\n try {\n var keyRangeValue = IDBKeyRange.bound(lastCursorId + 1, Infinity);\n return objectStore.openCursor(keyRangeValue);\n } catch (e) {\n return objectStore.openCursor();\n }\n }\n\n return new Promise(function (res) {\n openCursor().onsuccess = function (ev) {\n var cursor = ev.target.result;\n\n if (cursor) {\n if (cursor.value.id < lastCursorId + 1) {\n cursor[\"continue\"](lastCursorId + 1);\n } else {\n ret.push(cursor.value);\n cursor[\"continue\"]();\n }\n } else {\n res(ret);\n }\n };\n });\n}\nexport function removeMessageById(db, id) {\n var request = db.transaction([OBJECT_STORE_ID], 'readwrite').objectStore(OBJECT_STORE_ID)[\"delete\"](id);\n return new Promise(function (res) {\n request.onsuccess = function () {\n return res();\n };\n });\n}\nexport function getOldMessages(db, ttl) {\n var olderThen = new Date().getTime() - ttl;\n var objectStore = db.transaction(OBJECT_STORE_ID).objectStore(OBJECT_STORE_ID);\n var ret = [];\n return new Promise(function (res) {\n objectStore.openCursor().onsuccess = function (ev) {\n var cursor = ev.target.result;\n\n if (cursor) {\n var msgObk = cursor.value;\n\n if (msgObk.time < olderThen) {\n ret.push(msgObk); //alert(\"Name for SSN \" + cursor.key + \" is \" + cursor.value.name);\n\n cursor[\"continue\"]();\n } else {\n // no more old messages,\n res(ret);\n return;\n }\n } else {\n res(ret);\n }\n };\n });\n}\nexport function cleanOldMessages(db, ttl) {\n return getOldMessages(db, ttl).then(function (tooOld) {\n return Promise.all(tooOld.map(function (msgObj) {\n return removeMessageById(db, msgObj.id);\n }));\n });\n}\nexport function create(channelName, options) {\n options = fillOptionsWithDefaults(options);\n return createDatabase(channelName).then(function (db) {\n var state = {\n closed: false,\n lastCursorId: 0,\n channelName: channelName,\n options: options,\n uuid: randomToken(),\n\n /**\n * emittedMessagesIds\n * contains all messages that have been emitted before\n * @type {ObliviousSet}\n */\n eMIs: new ObliviousSet(options.idb.ttl * 2),\n // ensures we do not read messages in parrallel\n writeBlockPromise: Promise.resolve(),\n messagesCallback: null,\n readQueuePromises: [],\n db: db\n };\n /**\n * Handle abrupt closes that do not originate from db.close().\n * This could happen, for example, if the underlying storage is\n * removed or if the user clears the database in the browser's\n * history preferences.\n */\n\n db.onclose = function () {\n state.closed = true;\n if (options.idb.onclose) options.idb.onclose();\n };\n /**\n * if service-workers are used,\n * we have no 'storage'-event if they post a message,\n * therefore we also have to set an interval\n */\n\n\n _readLoop(state);\n\n return state;\n });\n}\n\nfunction _readLoop(state) {\n if (state.closed) return;\n readNewMessages(state).then(function () {\n return sleep(state.options.idb.fallbackInterval);\n }).then(function () {\n return _readLoop(state);\n });\n}\n\nfunction _filterMessage(msgObj, state) {\n if (msgObj.uuid === state.uuid) return false; // send by own\n\n if (state.eMIs.has(msgObj.id)) return false; // already emitted\n\n if (msgObj.data.time < state.messagesCallbackTime) return false; // older then onMessageCallback\n\n return true;\n}\n/**\n * reads all new messages from the database and emits them\n */\n\n\nfunction readNewMessages(state) {\n // channel already closed\n if (state.closed) return Promise.resolve(); // if no one is listening, we do not need to scan for new messages\n\n if (!state.messagesCallback) return Promise.resolve();\n return getMessagesHigherThan(state.db, state.lastCursorId).then(function (newerMessages) {\n var useMessages = newerMessages\n /**\n * there is a bug in iOS where the msgObj can be undefined some times\n * so we filter them out\n * @link https://github.com/pubkey/broadcast-channel/issues/19\n */\n .filter(function (msgObj) {\n return !!msgObj;\n }).map(function (msgObj) {\n if (msgObj.id > state.lastCursorId) {\n state.lastCursorId = msgObj.id;\n }\n\n return msgObj;\n }).filter(function (msgObj) {\n return _filterMessage(msgObj, state);\n }).sort(function (msgObjA, msgObjB) {\n return msgObjA.time - msgObjB.time;\n }); // sort by time\n\n useMessages.forEach(function (msgObj) {\n if (state.messagesCallback) {\n state.eMIs.add(msgObj.id);\n state.messagesCallback(msgObj.data);\n }\n });\n return Promise.resolve();\n });\n}\n\nexport function close(channelState) {\n channelState.closed = true;\n channelState.db.close();\n}\nexport function postMessage(channelState, messageJson) {\n channelState.writeBlockPromise = channelState.writeBlockPromise.then(function () {\n return writeMessage(channelState.db, channelState.uuid, messageJson);\n }).then(function () {\n if (randomInt(0, 10) === 0) {\n /* await (do not await) */\n cleanOldMessages(channelState.db, channelState.options.idb.ttl);\n }\n });\n return channelState.writeBlockPromise;\n}\nexport function onMessage(channelState, fn, time) {\n channelState.messagesCallbackTime = time;\n channelState.messagesCallback = fn;\n readNewMessages(channelState);\n}\nexport function canBeUsed() {\n if (isNode) return false;\n var idb = getIdb();\n if (!idb) return false;\n return true;\n}\nexport function averageResponseTime(options) {\n return options.idb.fallbackInterval * 2;\n}\nexport default {\n create: create,\n close: close,\n onMessage: onMessage,\n postMessage: postMessage,\n canBeUsed: canBeUsed,\n type: type,\n averageResponseTime: averageResponseTime,\n microSeconds: microSeconds\n};","/**\n * A localStorage-only method which uses localstorage and its 'storage'-event\n * This does not work inside of webworkers because they have no access to locastorage\n * This is basically implemented to support IE9 or your grandmothers toaster.\n * @link https://caniuse.com/#feat=namevalue-storage\n * @link https://caniuse.com/#feat=indexeddb\n */\nimport { ObliviousSet } from 'oblivious-set';\nimport { fillOptionsWithDefaults } from '../options';\nimport { sleep, randomToken, microSeconds as micro, isNode } from '../util';\nexport var microSeconds = micro;\nvar KEY_PREFIX = 'pubkey.broadcastChannel-';\nexport var type = 'localstorage';\n/**\n * copied from crosstab\n * @link https://github.com/tejacques/crosstab/blob/master/src/crosstab.js#L32\n */\n\nexport function getLocalStorage() {\n var localStorage;\n if (typeof window === 'undefined') return null;\n\n try {\n localStorage = window.localStorage;\n localStorage = window['ie8-eventlistener/storage'] || window.localStorage;\n } catch (e) {// New versions of Firefox throw a Security exception\n // if cookies are disabled. See\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1028153\n }\n\n return localStorage;\n}\nexport function storageKey(channelName) {\n return KEY_PREFIX + channelName;\n}\n/**\n* writes the new message to the storage\n* and fires the storage-event so other readers can find it\n*/\n\nexport function postMessage(channelState, messageJson) {\n return new Promise(function (res) {\n sleep().then(function () {\n var key = storageKey(channelState.channelName);\n var writeObj = {\n token: randomToken(),\n time: new Date().getTime(),\n data: messageJson,\n uuid: channelState.uuid\n };\n var value = JSON.stringify(writeObj);\n getLocalStorage().setItem(key, value);\n /**\n * StorageEvent does not fire the 'storage' event\n * in the window that changes the state of the local storage.\n * So we fire it manually\n */\n\n var ev = document.createEvent('Event');\n ev.initEvent('storage', true, true);\n ev.key = key;\n ev.newValue = value;\n window.dispatchEvent(ev);\n res();\n });\n });\n}\nexport function addStorageEventListener(channelName, fn) {\n var key = storageKey(channelName);\n\n var listener = function listener(ev) {\n if (ev.key === key) {\n fn(JSON.parse(ev.newValue));\n }\n };\n\n window.addEventListener('storage', listener);\n return listener;\n}\nexport function removeStorageEventListener(listener) {\n window.removeEventListener('storage', listener);\n}\nexport function create(channelName, options) {\n options = fillOptionsWithDefaults(options);\n\n if (!canBeUsed()) {\n throw new Error('BroadcastChannel: localstorage cannot be used');\n }\n\n var uuid = randomToken();\n /**\n * eMIs\n * contains all messages that have been emitted before\n * @type {ObliviousSet}\n */\n\n var eMIs = new ObliviousSet(options.localstorage.removeTimeout);\n var state = {\n channelName: channelName,\n uuid: uuid,\n eMIs: eMIs // emittedMessagesIds\n\n };\n state.listener = addStorageEventListener(channelName, function (msgObj) {\n if (!state.messagesCallback) return; // no listener\n\n if (msgObj.uuid === uuid) return; // own message\n\n if (!msgObj.token || eMIs.has(msgObj.token)) return; // already emitted\n\n if (msgObj.data.time && msgObj.data.time < state.messagesCallbackTime) return; // too old\n\n eMIs.add(msgObj.token);\n state.messagesCallback(msgObj.data);\n });\n return state;\n}\nexport function close(channelState) {\n removeStorageEventListener(channelState.listener);\n}\nexport function onMessage(channelState, fn, time) {\n channelState.messagesCallbackTime = time;\n channelState.messagesCallback = fn;\n}\nexport function canBeUsed() {\n if (isNode) return false;\n var ls = getLocalStorage();\n if (!ls) return false;\n\n try {\n var key = '__broadcastchannel_check';\n ls.setItem(key, 'works');\n ls.removeItem(key);\n } catch (e) {\n // Safari 10 in private mode will not allow write access to local\n // storage and fail with a QuotaExceededError. See\n // https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API#Private_Browsing_Incognito_modes\n return false;\n }\n\n return true;\n}\nexport function averageResponseTime() {\n var defaultTime = 120;\n var userAgent = navigator.userAgent.toLowerCase();\n\n if (userAgent.includes('safari') && !userAgent.includes('chrome')) {\n // safari is much slower so this time is higher\n return defaultTime * 2;\n }\n\n return defaultTime;\n}\nexport default {\n create: create,\n close: close,\n onMessage: onMessage,\n postMessage: postMessage,\n canBeUsed: canBeUsed,\n type: type,\n averageResponseTime: averageResponseTime,\n microSeconds: microSeconds\n};","import { microSeconds as micro } from '../util';\nexport var microSeconds = micro;\nexport var type = 'simulate';\nvar SIMULATE_CHANNELS = new Set();\nexport function create(channelName) {\n var state = {\n name: channelName,\n messagesCallback: null\n };\n SIMULATE_CHANNELS.add(state);\n return state;\n}\nexport function close(channelState) {\n SIMULATE_CHANNELS[\"delete\"](channelState);\n}\nexport function postMessage(channelState, messageJson) {\n return new Promise(function (res) {\n return setTimeout(function () {\n var channelArray = Array.from(SIMULATE_CHANNELS);\n channelArray.filter(function (channel) {\n return channel.name === channelState.name;\n }).filter(function (channel) {\n return channel !== channelState;\n }).filter(function (channel) {\n return !!channel.messagesCallback;\n }).forEach(function (channel) {\n return channel.messagesCallback(messageJson);\n });\n res();\n }, 5);\n });\n}\nexport function onMessage(channelState, fn) {\n channelState.messagesCallback = fn;\n}\nexport function canBeUsed() {\n return true;\n}\nexport function averageResponseTime() {\n return 5;\n}\nexport default {\n create: create,\n close: close,\n onMessage: onMessage,\n postMessage: postMessage,\n canBeUsed: canBeUsed,\n type: type,\n averageResponseTime: averageResponseTime,\n microSeconds: microSeconds\n};","import NativeMethod from './methods/native.js';\nimport IndexeDbMethod from './methods/indexed-db.js';\nimport LocalstorageMethod from './methods/localstorage.js';\nimport SimulateMethod from './methods/simulate.js';\nimport { isNode } from './util'; // order is important\n\nvar METHODS = [NativeMethod, // fastest\nIndexeDbMethod, LocalstorageMethod];\n/**\n * The NodeMethod is loaded lazy\n * so it will not get bundled in browser-builds\n */\n\nif (isNode) {\n /**\n * we use the non-transpiled code for nodejs\n * because it runs faster\n */\n var NodeMethod = require('../../src/methods/' + // use this hack so that browserify and others\n // do not import the node-method by default\n // when bundling.\n 'node.js');\n /**\n * this will be false for webpackbuilds\n * which will shim the node-method with an empty object {}\n */\n\n\n if (typeof NodeMethod.canBeUsed === 'function') {\n METHODS.push(NodeMethod);\n }\n}\n\nexport function chooseMethod(options) {\n var chooseMethods = [].concat(options.methods, METHODS).filter(Boolean); // directly chosen\n\n if (options.type) {\n if (options.type === 'simulate') {\n // only use simulate-method if directly chosen\n return SimulateMethod;\n }\n\n var ret = chooseMethods.find(function (m) {\n return m.type === options.type;\n });\n if (!ret) throw new Error('method-type ' + options.type + ' not found');else return ret;\n }\n /**\n * if no webworker support is needed,\n * remove idb from the list so that localstorage is been chosen\n */\n\n\n if (!options.webWorkerSupport && !isNode) {\n chooseMethods = chooseMethods.filter(function (m) {\n return m.type !== 'idb';\n });\n }\n\n var useMethod = chooseMethods.find(function (method) {\n return method.canBeUsed();\n });\n if (!useMethod) throw new Error('No useable methode found:' + JSON.stringify(METHODS.map(function (m) {\n return m.type;\n })));else return useMethod;\n}","import { isPromise } from './util.js';\nimport { chooseMethod } from './method-chooser.js';\nimport { fillOptionsWithDefaults } from './options.js';\nexport var BroadcastChannel = function BroadcastChannel(name, options) {\n this.name = name;\n\n if (ENFORCED_OPTIONS) {\n options = ENFORCED_OPTIONS;\n }\n\n this.options = fillOptionsWithDefaults(options);\n this.method = chooseMethod(this.options); // isListening\n\n this._iL = false;\n /**\n * _onMessageListener\n * setting onmessage twice,\n * will overwrite the first listener\n */\n\n this._onML = null;\n /**\n * _addEventListeners\n */\n\n this._addEL = {\n message: [],\n internal: []\n };\n /**\n * Unsend message promises\n * where the sending is still in progress\n * @type {Set}\n */\n\n this._uMP = new Set();\n /**\n * _beforeClose\n * array of promises that will be awaited\n * before the channel is closed\n */\n\n this._befC = [];\n /**\n * _preparePromise\n */\n\n this._prepP = null;\n\n _prepareChannel(this);\n}; // STATICS\n\n/**\n * used to identify if someone overwrites\n * window.BroadcastChannel with this\n * See methods/native.js\n */\n\nBroadcastChannel._pubkey = true;\n/**\n * clears the tmp-folder if is node\n * @return {Promise} true if has run, false if not node\n */\n\nexport function clearNodeFolder(options) {\n options = fillOptionsWithDefaults(options);\n var method = chooseMethod(options);\n\n if (method.type === 'node') {\n return method.clearNodeFolder().then(function () {\n return true;\n });\n } else {\n return Promise.resolve(false);\n }\n}\n/**\n * if set, this method is enforced,\n * no mather what the options are\n */\n\nvar ENFORCED_OPTIONS;\nexport function enforceOptions(options) {\n ENFORCED_OPTIONS = options;\n} // PROTOTYPE\n\nBroadcastChannel.prototype = {\n postMessage: function postMessage(msg) {\n if (this.closed) {\n throw new Error('BroadcastChannel.postMessage(): ' + 'Cannot post message after channel has closed');\n }\n\n return _post(this, 'message', msg);\n },\n postInternal: function postInternal(msg) {\n return _post(this, 'internal', msg);\n },\n\n set onmessage(fn) {\n var time = this.method.microSeconds();\n var listenObj = {\n time: time,\n fn: fn\n };\n\n _removeListenerObject(this, 'message', this._onML);\n\n if (fn && typeof fn === 'function') {\n this._onML = listenObj;\n\n _addListenerObject(this, 'message', listenObj);\n } else {\n this._onML = null;\n }\n },\n\n addEventListener: function addEventListener(type, fn) {\n var time = this.method.microSeconds();\n var listenObj = {\n time: time,\n fn: fn\n };\n\n _addListenerObject(this, type, listenObj);\n },\n removeEventListener: function removeEventListener(type, fn) {\n var obj = this._addEL[type].find(function (obj) {\n return obj.fn === fn;\n });\n\n _removeListenerObject(this, type, obj);\n },\n close: function close() {\n var _this = this;\n\n if (this.closed) {\n return;\n }\n\n this.closed = true;\n var awaitPrepare = this._prepP ? this._prepP : Promise.resolve();\n this._onML = null;\n this._addEL.message = [];\n return awaitPrepare // wait until all current sending are processed\n .then(function () {\n return Promise.all(Array.from(_this._uMP));\n }) // run before-close hooks\n .then(function () {\n return Promise.all(_this._befC.map(function (fn) {\n return fn();\n }));\n }) // close the channel\n .then(function () {\n return _this.method.close(_this._state);\n });\n },\n\n get type() {\n return this.method.type;\n },\n\n get isClosed() {\n return this.closed;\n }\n\n};\n/**\n * Post a message over the channel\n * @returns {Promise} that resolved when the message sending is done\n */\n\nfunction _post(broadcastChannel, type, msg) {\n var time = broadcastChannel.method.microSeconds();\n var msgObj = {\n time: time,\n type: type,\n data: msg\n };\n var awaitPrepare = broadcastChannel._prepP ? broadcastChannel._prepP : Promise.resolve();\n return awaitPrepare.then(function () {\n var sendPromise = broadcastChannel.method.postMessage(broadcastChannel._state, msgObj); // add/remove to unsend messages list\n\n broadcastChannel._uMP.add(sendPromise);\n\n sendPromise[\"catch\"]().then(function () {\n return broadcastChannel._uMP[\"delete\"](sendPromise);\n });\n return sendPromise;\n });\n}\n\nfunction _prepareChannel(channel) {\n var maybePromise = channel.method.create(channel.name, channel.options);\n\n if (isPromise(maybePromise)) {\n channel._prepP = maybePromise;\n maybePromise.then(function (s) {\n // used in tests to simulate slow runtime\n\n /*if (channel.options.prepareDelay) {\n await new Promise(res => setTimeout(res, this.options.prepareDelay));\n }*/\n channel._state = s;\n });\n } else {\n channel._state = maybePromise;\n }\n}\n\nfunction _hasMessageListeners(channel) {\n if (channel._addEL.message.length > 0) return true;\n if (channel._addEL.internal.length > 0) return true;\n return false;\n}\n\nfunction _addListenerObject(channel, type, obj) {\n channel._addEL[type].push(obj);\n\n _startListening(channel);\n}\n\nfunction _removeListenerObject(channel, type, obj) {\n channel._addEL[type] = channel._addEL[type].filter(function (o) {\n return o !== obj;\n });\n\n _stopListening(channel);\n}\n\nfunction _startListening(channel) {\n if (!channel._iL && _hasMessageListeners(channel)) {\n // someone is listening, start subscribing\n var listenerFn = function listenerFn(msgObj) {\n channel._addEL[msgObj.type].forEach(function (obj) {\n if (msgObj.time >= obj.time) {\n obj.fn(msgObj.data);\n }\n });\n };\n\n var time = channel.method.microSeconds();\n\n if (channel._prepP) {\n channel._prepP.then(function () {\n channel._iL = true;\n channel.method.onMessage(channel._state, listenerFn, time);\n });\n } else {\n channel._iL = true;\n channel.method.onMessage(channel._state, listenerFn, time);\n }\n }\n}\n\nfunction _stopListening(channel) {\n if (channel._iL && !_hasMessageListeners(channel)) {\n // noone is listening, stop subscribing\n channel._iL = false;\n var time = channel.method.microSeconds();\n channel.method.onMessage(channel._state, null, time);\n }\n}","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar 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\nvar 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 var arr = new Uint8Array(1)\n var 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 var 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 var valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n var 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(\n value[Symbol.toPrimitive]('string'), encodingOrOffset, length\n )\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 var length = byteLength(string, encoding) | 0\n var buf = createBuffer(length)\n\n var 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 var length = array.length < 0 ? 0 : checked(array.length) | 0\n var buf = createBuffer(length)\n for (var 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 var 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 var 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 var len = checked(obj.length) | 0\n var 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 var x = a.length\n var y = b.length\n\n for (var 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 var 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 var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n Buffer.from(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 var len = string.length\n var mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n var 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 var 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 var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var 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 var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var 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 var 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 var str = ''\n var 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 ''\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 var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var 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 var indexSize = 1\n var arrLength = arr.length\n var 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 var i\n if (dir) {\n var 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 var found = true\n for (var 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 var 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 var strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var 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 var 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 var 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 var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var 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\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var 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 var res = ''\n var 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 var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (var 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 var 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 var 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 var val = this[offset]\n var mul = 1\n var 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 var val = this[offset + --byteLength]\n var 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.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var 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 var i = byteLength\n var mul = 1\n var 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 var 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 var 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.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 var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var 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 var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var 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\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n var limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var 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 var limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var 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\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 var 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 var 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 var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n var 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// HELPER FUNCTIONS\n// ================\n\nvar 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 var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var 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 var byteArray = []\n for (var 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 var c, hi, lo\n var byteArray = []\n for (var 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 for (var 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\nvar hexSliceLookupTable = (function () {\n var alphabet = '0123456789abcdef'\n var table = new Array(256)\n for (var i = 0; i < 16; ++i) {\n var i16 = i * 16\n for (var j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n","/*\r\n * bignumber.js v9.1.1\r\n * A JavaScript library for arbitrary-precision arithmetic.\r\n * https://github.com/MikeMcl/bignumber.js\r\n * Copyright (c) 2022 Michael Mclaughlin \r\n * MIT Licensed.\r\n *\r\n * BigNumber.prototype methods | BigNumber methods\r\n * |\r\n * absoluteValue abs | clone\r\n * comparedTo | config set\r\n * decimalPlaces dp | DECIMAL_PLACES\r\n * dividedBy div | ROUNDING_MODE\r\n * dividedToIntegerBy idiv | EXPONENTIAL_AT\r\n * exponentiatedBy pow | RANGE\r\n * integerValue | CRYPTO\r\n * isEqualTo eq | MODULO_MODE\r\n * isFinite | POW_PRECISION\r\n * isGreaterThan gt | FORMAT\r\n * isGreaterThanOrEqualTo gte | ALPHABET\r\n * isInteger | isBigNumber\r\n * isLessThan lt | maximum max\r\n * isLessThanOrEqualTo lte | minimum min\r\n * isNaN | random\r\n * isNegative | sum\r\n * isPositive |\r\n * isZero |\r\n * minus |\r\n * modulo mod |\r\n * multipliedBy times |\r\n * negated |\r\n * plus |\r\n * precision sd |\r\n * shiftedBy |\r\n * squareRoot sqrt |\r\n * toExponential |\r\n * toFixed |\r\n * toFormat |\r\n * toFraction |\r\n * toJSON |\r\n * toNumber |\r\n * toPrecision |\r\n * toString |\r\n * valueOf |\r\n *\r\n */\r\n\r\n\r\nvar\r\n isNumeric = /^-?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?$/i,\r\n mathceil = Math.ceil,\r\n mathfloor = Math.floor,\r\n\r\n bignumberError = '[BigNumber Error] ',\r\n tooManyDigits = bignumberError + 'Number primitive has more than 15 significant digits: ',\r\n\r\n BASE = 1e14,\r\n LOG_BASE = 14,\r\n MAX_SAFE_INTEGER = 0x1fffffffffffff, // 2^53 - 1\r\n // MAX_INT32 = 0x7fffffff, // 2^31 - 1\r\n POWS_TEN = [1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13],\r\n SQRT_BASE = 1e7,\r\n\r\n // EDITABLE\r\n // The limit on the value of DECIMAL_PLACES, TO_EXP_NEG, TO_EXP_POS, MIN_EXP, MAX_EXP, and\r\n // the arguments to toExponential, toFixed, toFormat, and toPrecision.\r\n MAX = 1E9; // 0 to MAX_INT32\r\n\r\n\r\n/*\r\n * Create and return a BigNumber constructor.\r\n */\r\nfunction clone(configObject) {\r\n var div, convertBase, parseNumeric,\r\n P = BigNumber.prototype = { constructor: BigNumber, toString: null, valueOf: null },\r\n ONE = new BigNumber(1),\r\n\r\n\r\n //----------------------------- EDITABLE CONFIG DEFAULTS -------------------------------\r\n\r\n\r\n // The default values below must be integers within the inclusive ranges stated.\r\n // The values can also be changed at run-time using BigNumber.set.\r\n\r\n // The maximum number of decimal places for operations involving division.\r\n DECIMAL_PLACES = 20, // 0 to MAX\r\n\r\n // The rounding mode used when rounding to the above decimal places, and when using\r\n // toExponential, toFixed, toFormat and toPrecision, and round (default value).\r\n // UP 0 Away from zero.\r\n // DOWN 1 Towards zero.\r\n // CEIL 2 Towards +Infinity.\r\n // FLOOR 3 Towards -Infinity.\r\n // HALF_UP 4 Towards nearest neighbour. If equidistant, up.\r\n // HALF_DOWN 5 Towards nearest neighbour. If equidistant, down.\r\n // HALF_EVEN 6 Towards nearest neighbour. If equidistant, towards even neighbour.\r\n // HALF_CEIL 7 Towards nearest neighbour. If equidistant, towards +Infinity.\r\n // HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity.\r\n ROUNDING_MODE = 4, // 0 to 8\r\n\r\n // EXPONENTIAL_AT : [TO_EXP_NEG , TO_EXP_POS]\r\n\r\n // The exponent value at and beneath which toString returns exponential notation.\r\n // Number type: -7\r\n TO_EXP_NEG = -7, // 0 to -MAX\r\n\r\n // The exponent value at and above which toString returns exponential notation.\r\n // Number type: 21\r\n TO_EXP_POS = 21, // 0 to MAX\r\n\r\n // RANGE : [MIN_EXP, MAX_EXP]\r\n\r\n // The minimum exponent value, beneath which underflow to zero occurs.\r\n // Number type: -324 (5e-324)\r\n MIN_EXP = -1e7, // -1 to -MAX\r\n\r\n // The maximum exponent value, above which overflow to Infinity occurs.\r\n // Number type: 308 (1.7976931348623157e+308)\r\n // For MAX_EXP > 1e7, e.g. new BigNumber('1e100000000').plus(1) may be slow.\r\n MAX_EXP = 1e7, // 1 to MAX\r\n\r\n // Whether to use cryptographically-secure random number generation, if available.\r\n CRYPTO = false, // true or false\r\n\r\n // The modulo mode used when calculating the modulus: a mod n.\r\n // The quotient (q = a / n) is calculated according to the corresponding rounding mode.\r\n // The remainder (r) is calculated as: r = a - n * q.\r\n //\r\n // UP 0 The remainder is positive if the dividend is negative, else is negative.\r\n // DOWN 1 The remainder has the same sign as the dividend.\r\n // This modulo mode is commonly known as 'truncated division' and is\r\n // equivalent to (a % n) in JavaScript.\r\n // FLOOR 3 The remainder has the same sign as the divisor (Python %).\r\n // HALF_EVEN 6 This modulo mode implements the IEEE 754 remainder function.\r\n // EUCLID 9 Euclidian division. q = sign(n) * floor(a / abs(n)).\r\n // The remainder is always positive.\r\n //\r\n // The truncated division, floored division, Euclidian division and IEEE 754 remainder\r\n // modes are commonly used for the modulus operation.\r\n // Although the other rounding modes can also be used, they may not give useful results.\r\n MODULO_MODE = 1, // 0 to 9\r\n\r\n // The maximum number of significant digits of the result of the exponentiatedBy operation.\r\n // If POW_PRECISION is 0, there will be unlimited significant digits.\r\n POW_PRECISION = 0, // 0 to MAX\r\n\r\n // The format specification used by the BigNumber.prototype.toFormat method.\r\n FORMAT = {\r\n prefix: '',\r\n groupSize: 3,\r\n secondaryGroupSize: 0,\r\n groupSeparator: ',',\r\n decimalSeparator: '.',\r\n fractionGroupSize: 0,\r\n fractionGroupSeparator: '\\xA0', // non-breaking space\r\n suffix: ''\r\n },\r\n\r\n // The alphabet used for base conversion. It must be at least 2 characters long, with no '+',\r\n // '-', '.', whitespace, or repeated character.\r\n // '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_'\r\n ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyz',\r\n alphabetHasNormalDecimalDigits = true;\r\n\r\n\r\n //------------------------------------------------------------------------------------------\r\n\r\n\r\n // CONSTRUCTOR\r\n\r\n\r\n /*\r\n * The BigNumber constructor and exported function.\r\n * Create and return a new instance of a BigNumber object.\r\n *\r\n * v {number|string|BigNumber} A numeric value.\r\n * [b] {number} The base of v. Integer, 2 to ALPHABET.length inclusive.\r\n */\r\n function BigNumber(v, b) {\r\n var alphabet, c, caseChanged, e, i, isNum, len, str,\r\n x = this;\r\n\r\n // Enable constructor call without `new`.\r\n if (!(x instanceof BigNumber)) return new BigNumber(v, b);\r\n\r\n if (b == null) {\r\n\r\n if (v && v._isBigNumber === true) {\r\n x.s = v.s;\r\n\r\n if (!v.c || v.e > MAX_EXP) {\r\n x.c = x.e = null;\r\n } else if (v.e < MIN_EXP) {\r\n x.c = [x.e = 0];\r\n } else {\r\n x.e = v.e;\r\n x.c = v.c.slice();\r\n }\r\n\r\n return;\r\n }\r\n\r\n if ((isNum = typeof v == 'number') && v * 0 == 0) {\r\n\r\n // Use `1 / n` to handle minus zero also.\r\n x.s = 1 / v < 0 ? (v = -v, -1) : 1;\r\n\r\n // Fast path for integers, where n < 2147483648 (2**31).\r\n if (v === ~~v) {\r\n for (e = 0, i = v; i >= 10; i /= 10, e++);\r\n\r\n if (e > MAX_EXP) {\r\n x.c = x.e = null;\r\n } else {\r\n x.e = e;\r\n x.c = [v];\r\n }\r\n\r\n return;\r\n }\r\n\r\n str = String(v);\r\n } else {\r\n\r\n if (!isNumeric.test(str = String(v))) return parseNumeric(x, str, isNum);\r\n\r\n x.s = str.charCodeAt(0) == 45 ? (str = str.slice(1), -1) : 1;\r\n }\r\n\r\n // Decimal point?\r\n if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');\r\n\r\n // Exponential form?\r\n if ((i = str.search(/e/i)) > 0) {\r\n\r\n // Determine exponent.\r\n if (e < 0) e = i;\r\n e += +str.slice(i + 1);\r\n str = str.substring(0, i);\r\n } else if (e < 0) {\r\n\r\n // Integer.\r\n e = str.length;\r\n }\r\n\r\n } else {\r\n\r\n // '[BigNumber Error] Base {not a primitive number|not an integer|out of range}: {b}'\r\n intCheck(b, 2, ALPHABET.length, 'Base');\r\n\r\n // Allow exponential notation to be used with base 10 argument, while\r\n // also rounding to DECIMAL_PLACES as with other bases.\r\n if (b == 10 && alphabetHasNormalDecimalDigits) {\r\n x = new BigNumber(v);\r\n return round(x, DECIMAL_PLACES + x.e + 1, ROUNDING_MODE);\r\n }\r\n\r\n str = String(v);\r\n\r\n if (isNum = typeof v == 'number') {\r\n\r\n // Avoid potential interpretation of Infinity and NaN as base 44+ values.\r\n if (v * 0 != 0) return parseNumeric(x, str, isNum, b);\r\n\r\n x.s = 1 / v < 0 ? (str = str.slice(1), -1) : 1;\r\n\r\n // '[BigNumber Error] Number primitive has more than 15 significant digits: {n}'\r\n if (BigNumber.DEBUG && str.replace(/^0\\.0*|\\./, '').length > 15) {\r\n throw Error\r\n (tooManyDigits + v);\r\n }\r\n } else {\r\n x.s = str.charCodeAt(0) === 45 ? (str = str.slice(1), -1) : 1;\r\n }\r\n\r\n alphabet = ALPHABET.slice(0, b);\r\n e = i = 0;\r\n\r\n // Check that str is a valid base b number.\r\n // Don't use RegExp, so alphabet can contain special characters.\r\n for (len = str.length; i < len; i++) {\r\n if (alphabet.indexOf(c = str.charAt(i)) < 0) {\r\n if (c == '.') {\r\n\r\n // If '.' is not the first character and it has not be found before.\r\n if (i > e) {\r\n e = len;\r\n continue;\r\n }\r\n } else if (!caseChanged) {\r\n\r\n // Allow e.g. hexadecimal 'FF' as well as 'ff'.\r\n if (str == str.toUpperCase() && (str = str.toLowerCase()) ||\r\n str == str.toLowerCase() && (str = str.toUpperCase())) {\r\n caseChanged = true;\r\n i = -1;\r\n e = 0;\r\n continue;\r\n }\r\n }\r\n\r\n return parseNumeric(x, String(v), isNum, b);\r\n }\r\n }\r\n\r\n // Prevent later check for length on converted number.\r\n isNum = false;\r\n str = convertBase(str, b, 10, x.s);\r\n\r\n // Decimal point?\r\n if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');\r\n else e = str.length;\r\n }\r\n\r\n // Determine leading zeros.\r\n for (i = 0; str.charCodeAt(i) === 48; i++);\r\n\r\n // Determine trailing zeros.\r\n for (len = str.length; str.charCodeAt(--len) === 48;);\r\n\r\n if (str = str.slice(i, ++len)) {\r\n len -= i;\r\n\r\n // '[BigNumber Error] Number primitive has more than 15 significant digits: {n}'\r\n if (isNum && BigNumber.DEBUG &&\r\n len > 15 && (v > MAX_SAFE_INTEGER || v !== mathfloor(v))) {\r\n throw Error\r\n (tooManyDigits + (x.s * v));\r\n }\r\n\r\n // Overflow?\r\n if ((e = e - i - 1) > MAX_EXP) {\r\n\r\n // Infinity.\r\n x.c = x.e = null;\r\n\r\n // Underflow?\r\n } else if (e < MIN_EXP) {\r\n\r\n // Zero.\r\n x.c = [x.e = 0];\r\n } else {\r\n x.e = e;\r\n x.c = [];\r\n\r\n // Transform base\r\n\r\n // e is the base 10 exponent.\r\n // i is where to slice str to get the first element of the coefficient array.\r\n i = (e + 1) % LOG_BASE;\r\n if (e < 0) i += LOG_BASE; // i < 1\r\n\r\n if (i < len) {\r\n if (i) x.c.push(+str.slice(0, i));\r\n\r\n for (len -= LOG_BASE; i < len;) {\r\n x.c.push(+str.slice(i, i += LOG_BASE));\r\n }\r\n\r\n i = LOG_BASE - (str = str.slice(i)).length;\r\n } else {\r\n i -= len;\r\n }\r\n\r\n for (; i--; str += '0');\r\n x.c.push(+str);\r\n }\r\n } else {\r\n\r\n // Zero.\r\n x.c = [x.e = 0];\r\n }\r\n }\r\n\r\n\r\n // CONSTRUCTOR PROPERTIES\r\n\r\n\r\n BigNumber.clone = clone;\r\n\r\n BigNumber.ROUND_UP = 0;\r\n BigNumber.ROUND_DOWN = 1;\r\n BigNumber.ROUND_CEIL = 2;\r\n BigNumber.ROUND_FLOOR = 3;\r\n BigNumber.ROUND_HALF_UP = 4;\r\n BigNumber.ROUND_HALF_DOWN = 5;\r\n BigNumber.ROUND_HALF_EVEN = 6;\r\n BigNumber.ROUND_HALF_CEIL = 7;\r\n BigNumber.ROUND_HALF_FLOOR = 8;\r\n BigNumber.EUCLID = 9;\r\n\r\n\r\n /*\r\n * Configure infrequently-changing library-wide settings.\r\n *\r\n * Accept an object with the following optional properties (if the value of a property is\r\n * a number, it must be an integer within the inclusive range stated):\r\n *\r\n * DECIMAL_PLACES {number} 0 to MAX\r\n * ROUNDING_MODE {number} 0 to 8\r\n * EXPONENTIAL_AT {number|number[]} -MAX to MAX or [-MAX to 0, 0 to MAX]\r\n * RANGE {number|number[]} -MAX to MAX (not zero) or [-MAX to -1, 1 to MAX]\r\n * CRYPTO {boolean} true or false\r\n * MODULO_MODE {number} 0 to 9\r\n * POW_PRECISION {number} 0 to MAX\r\n * ALPHABET {string} A string of two or more unique characters which does\r\n * not contain '.'.\r\n * FORMAT {object} An object with some of the following properties:\r\n * prefix {string}\r\n * groupSize {number}\r\n * secondaryGroupSize {number}\r\n * groupSeparator {string}\r\n * decimalSeparator {string}\r\n * fractionGroupSize {number}\r\n * fractionGroupSeparator {string}\r\n * suffix {string}\r\n *\r\n * (The values assigned to the above FORMAT object properties are not checked for validity.)\r\n *\r\n * E.g.\r\n * BigNumber.config({ DECIMAL_PLACES : 20, ROUNDING_MODE : 4 })\r\n *\r\n * Ignore properties/parameters set to null or undefined, except for ALPHABET.\r\n *\r\n * Return an object with the properties current values.\r\n */\r\n BigNumber.config = BigNumber.set = function (obj) {\r\n var p, v;\r\n\r\n if (obj != null) {\r\n\r\n if (typeof obj == 'object') {\r\n\r\n // DECIMAL_PLACES {number} Integer, 0 to MAX inclusive.\r\n // '[BigNumber Error] DECIMAL_PLACES {not a primitive number|not an integer|out of range}: {v}'\r\n if (obj.hasOwnProperty(p = 'DECIMAL_PLACES')) {\r\n v = obj[p];\r\n intCheck(v, 0, MAX, p);\r\n DECIMAL_PLACES = v;\r\n }\r\n\r\n // ROUNDING_MODE {number} Integer, 0 to 8 inclusive.\r\n // '[BigNumber Error] ROUNDING_MODE {not a primitive number|not an integer|out of range}: {v}'\r\n if (obj.hasOwnProperty(p = 'ROUNDING_MODE')) {\r\n v = obj[p];\r\n intCheck(v, 0, 8, p);\r\n ROUNDING_MODE = v;\r\n }\r\n\r\n // EXPONENTIAL_AT {number|number[]}\r\n // Integer, -MAX to MAX inclusive or\r\n // [integer -MAX to 0 inclusive, 0 to MAX inclusive].\r\n // '[BigNumber Error] EXPONENTIAL_AT {not a primitive number|not an integer|out of range}: {v}'\r\n if (obj.hasOwnProperty(p = 'EXPONENTIAL_AT')) {\r\n v = obj[p];\r\n if (v && v.pop) {\r\n intCheck(v[0], -MAX, 0, p);\r\n intCheck(v[1], 0, MAX, p);\r\n TO_EXP_NEG = v[0];\r\n TO_EXP_POS = v[1];\r\n } else {\r\n intCheck(v, -MAX, MAX, p);\r\n TO_EXP_NEG = -(TO_EXP_POS = v < 0 ? -v : v);\r\n }\r\n }\r\n\r\n // RANGE {number|number[]} Non-zero integer, -MAX to MAX inclusive or\r\n // [integer -MAX to -1 inclusive, integer 1 to MAX inclusive].\r\n // '[BigNumber Error] RANGE {not a primitive number|not an integer|out of range|cannot be zero}: {v}'\r\n if (obj.hasOwnProperty(p = 'RANGE')) {\r\n v = obj[p];\r\n if (v && v.pop) {\r\n intCheck(v[0], -MAX, -1, p);\r\n intCheck(v[1], 1, MAX, p);\r\n MIN_EXP = v[0];\r\n MAX_EXP = v[1];\r\n } else {\r\n intCheck(v, -MAX, MAX, p);\r\n if (v) {\r\n MIN_EXP = -(MAX_EXP = v < 0 ? -v : v);\r\n } else {\r\n throw Error\r\n (bignumberError + p + ' cannot be zero: ' + v);\r\n }\r\n }\r\n }\r\n\r\n // CRYPTO {boolean} true or false.\r\n // '[BigNumber Error] CRYPTO not true or false: {v}'\r\n // '[BigNumber Error] crypto unavailable'\r\n if (obj.hasOwnProperty(p = 'CRYPTO')) {\r\n v = obj[p];\r\n if (v === !!v) {\r\n if (v) {\r\n if (typeof crypto != 'undefined' && crypto &&\r\n (crypto.getRandomValues || crypto.randomBytes)) {\r\n CRYPTO = v;\r\n } else {\r\n CRYPTO = !v;\r\n throw Error\r\n (bignumberError + 'crypto unavailable');\r\n }\r\n } else {\r\n CRYPTO = v;\r\n }\r\n } else {\r\n throw Error\r\n (bignumberError + p + ' not true or false: ' + v);\r\n }\r\n }\r\n\r\n // MODULO_MODE {number} Integer, 0 to 9 inclusive.\r\n // '[BigNumber Error] MODULO_MODE {not a primitive number|not an integer|out of range}: {v}'\r\n if (obj.hasOwnProperty(p = 'MODULO_MODE')) {\r\n v = obj[p];\r\n intCheck(v, 0, 9, p);\r\n MODULO_MODE = v;\r\n }\r\n\r\n // POW_PRECISION {number} Integer, 0 to MAX inclusive.\r\n // '[BigNumber Error] POW_PRECISION {not a primitive number|not an integer|out of range}: {v}'\r\n if (obj.hasOwnProperty(p = 'POW_PRECISION')) {\r\n v = obj[p];\r\n intCheck(v, 0, MAX, p);\r\n POW_PRECISION = v;\r\n }\r\n\r\n // FORMAT {object}\r\n // '[BigNumber Error] FORMAT not an object: {v}'\r\n if (obj.hasOwnProperty(p = 'FORMAT')) {\r\n v = obj[p];\r\n if (typeof v == 'object') FORMAT = v;\r\n else throw Error\r\n (bignumberError + p + ' not an object: ' + v);\r\n }\r\n\r\n // ALPHABET {string}\r\n // '[BigNumber Error] ALPHABET invalid: {v}'\r\n if (obj.hasOwnProperty(p = 'ALPHABET')) {\r\n v = obj[p];\r\n\r\n // Disallow if less than two characters,\r\n // or if it contains '+', '-', '.', whitespace, or a repeated character.\r\n if (typeof v == 'string' && !/^.?$|[+\\-.\\s]|(.).*\\1/.test(v)) {\r\n alphabetHasNormalDecimalDigits = v.slice(0, 10) == '0123456789';\r\n ALPHABET = v;\r\n } else {\r\n throw Error\r\n (bignumberError + p + ' invalid: ' + v);\r\n }\r\n }\r\n\r\n } else {\r\n\r\n // '[BigNumber Error] Object expected: {v}'\r\n throw Error\r\n (bignumberError + 'Object expected: ' + obj);\r\n }\r\n }\r\n\r\n return {\r\n DECIMAL_PLACES: DECIMAL_PLACES,\r\n ROUNDING_MODE: ROUNDING_MODE,\r\n EXPONENTIAL_AT: [TO_EXP_NEG, TO_EXP_POS],\r\n RANGE: [MIN_EXP, MAX_EXP],\r\n CRYPTO: CRYPTO,\r\n MODULO_MODE: MODULO_MODE,\r\n POW_PRECISION: POW_PRECISION,\r\n FORMAT: FORMAT,\r\n ALPHABET: ALPHABET\r\n };\r\n };\r\n\r\n\r\n /*\r\n * Return true if v is a BigNumber instance, otherwise return false.\r\n *\r\n * If BigNumber.DEBUG is true, throw if a BigNumber instance is not well-formed.\r\n *\r\n * v {any}\r\n *\r\n * '[BigNumber Error] Invalid BigNumber: {v}'\r\n */\r\n BigNumber.isBigNumber = function (v) {\r\n if (!v || v._isBigNumber !== true) return false;\r\n if (!BigNumber.DEBUG) return true;\r\n\r\n var i, n,\r\n c = v.c,\r\n e = v.e,\r\n s = v.s;\r\n\r\n out: if ({}.toString.call(c) == '[object Array]') {\r\n\r\n if ((s === 1 || s === -1) && e >= -MAX && e <= MAX && e === mathfloor(e)) {\r\n\r\n // If the first element is zero, the BigNumber value must be zero.\r\n if (c[0] === 0) {\r\n if (e === 0 && c.length === 1) return true;\r\n break out;\r\n }\r\n\r\n // Calculate number of digits that c[0] should have, based on the exponent.\r\n i = (e + 1) % LOG_BASE;\r\n if (i < 1) i += LOG_BASE;\r\n\r\n // Calculate number of digits of c[0].\r\n //if (Math.ceil(Math.log(c[0] + 1) / Math.LN10) == i) {\r\n if (String(c[0]).length == i) {\r\n\r\n for (i = 0; i < c.length; i++) {\r\n n = c[i];\r\n if (n < 0 || n >= BASE || n !== mathfloor(n)) break out;\r\n }\r\n\r\n // Last element cannot be zero, unless it is the only element.\r\n if (n !== 0) return true;\r\n }\r\n }\r\n\r\n // Infinity/NaN\r\n } else if (c === null && e === null && (s === null || s === 1 || s === -1)) {\r\n return true;\r\n }\r\n\r\n throw Error\r\n (bignumberError + 'Invalid BigNumber: ' + v);\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the maximum of the arguments.\r\n *\r\n * arguments {number|string|BigNumber}\r\n */\r\n BigNumber.maximum = BigNumber.max = function () {\r\n return maxOrMin(arguments, P.lt);\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the minimum of the arguments.\r\n *\r\n * arguments {number|string|BigNumber}\r\n */\r\n BigNumber.minimum = BigNumber.min = function () {\r\n return maxOrMin(arguments, P.gt);\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber with a random value equal to or greater than 0 and less than 1,\r\n * and with dp, or DECIMAL_PLACES if dp is omitted, decimal places (or less if trailing\r\n * zeros are produced).\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp}'\r\n * '[BigNumber Error] crypto unavailable'\r\n */\r\n BigNumber.random = (function () {\r\n var pow2_53 = 0x20000000000000;\r\n\r\n // Return a 53 bit integer n, where 0 <= n < 9007199254740992.\r\n // Check if Math.random() produces more than 32 bits of randomness.\r\n // If it does, assume at least 53 bits are produced, otherwise assume at least 30 bits.\r\n // 0x40000000 is 2^30, 0x800000 is 2^23, 0x1fffff is 2^21 - 1.\r\n var random53bitInt = (Math.random() * pow2_53) & 0x1fffff\r\n ? function () { return mathfloor(Math.random() * pow2_53); }\r\n : function () { return ((Math.random() * 0x40000000 | 0) * 0x800000) +\r\n (Math.random() * 0x800000 | 0); };\r\n\r\n return function (dp) {\r\n var a, b, e, k, v,\r\n i = 0,\r\n c = [],\r\n rand = new BigNumber(ONE);\r\n\r\n if (dp == null) dp = DECIMAL_PLACES;\r\n else intCheck(dp, 0, MAX);\r\n\r\n k = mathceil(dp / LOG_BASE);\r\n\r\n if (CRYPTO) {\r\n\r\n // Browsers supporting crypto.getRandomValues.\r\n if (crypto.getRandomValues) {\r\n\r\n a = crypto.getRandomValues(new Uint32Array(k *= 2));\r\n\r\n for (; i < k;) {\r\n\r\n // 53 bits:\r\n // ((Math.pow(2, 32) - 1) * Math.pow(2, 21)).toString(2)\r\n // 11111 11111111 11111111 11111111 11100000 00000000 00000000\r\n // ((Math.pow(2, 32) - 1) >>> 11).toString(2)\r\n // 11111 11111111 11111111\r\n // 0x20000 is 2^21.\r\n v = a[i] * 0x20000 + (a[i + 1] >>> 11);\r\n\r\n // Rejection sampling:\r\n // 0 <= v < 9007199254740992\r\n // Probability that v >= 9e15, is\r\n // 7199254740992 / 9007199254740992 ~= 0.0008, i.e. 1 in 1251\r\n if (v >= 9e15) {\r\n b = crypto.getRandomValues(new Uint32Array(2));\r\n a[i] = b[0];\r\n a[i + 1] = b[1];\r\n } else {\r\n\r\n // 0 <= v <= 8999999999999999\r\n // 0 <= (v % 1e14) <= 99999999999999\r\n c.push(v % 1e14);\r\n i += 2;\r\n }\r\n }\r\n i = k / 2;\r\n\r\n // Node.js supporting crypto.randomBytes.\r\n } else if (crypto.randomBytes) {\r\n\r\n // buffer\r\n a = crypto.randomBytes(k *= 7);\r\n\r\n for (; i < k;) {\r\n\r\n // 0x1000000000000 is 2^48, 0x10000000000 is 2^40\r\n // 0x100000000 is 2^32, 0x1000000 is 2^24\r\n // 11111 11111111 11111111 11111111 11111111 11111111 11111111\r\n // 0 <= v < 9007199254740992\r\n v = ((a[i] & 31) * 0x1000000000000) + (a[i + 1] * 0x10000000000) +\r\n (a[i + 2] * 0x100000000) + (a[i + 3] * 0x1000000) +\r\n (a[i + 4] << 16) + (a[i + 5] << 8) + a[i + 6];\r\n\r\n if (v >= 9e15) {\r\n crypto.randomBytes(7).copy(a, i);\r\n } else {\r\n\r\n // 0 <= (v % 1e14) <= 99999999999999\r\n c.push(v % 1e14);\r\n i += 7;\r\n }\r\n }\r\n i = k / 7;\r\n } else {\r\n CRYPTO = false;\r\n throw Error\r\n (bignumberError + 'crypto unavailable');\r\n }\r\n }\r\n\r\n // Use Math.random.\r\n if (!CRYPTO) {\r\n\r\n for (; i < k;) {\r\n v = random53bitInt();\r\n if (v < 9e15) c[i++] = v % 1e14;\r\n }\r\n }\r\n\r\n k = c[--i];\r\n dp %= LOG_BASE;\r\n\r\n // Convert trailing digits to zeros according to dp.\r\n if (k && dp) {\r\n v = POWS_TEN[LOG_BASE - dp];\r\n c[i] = mathfloor(k / v) * v;\r\n }\r\n\r\n // Remove trailing elements which are zero.\r\n for (; c[i] === 0; c.pop(), i--);\r\n\r\n // Zero?\r\n if (i < 0) {\r\n c = [e = 0];\r\n } else {\r\n\r\n // Remove leading elements which are zero and adjust exponent accordingly.\r\n for (e = -1 ; c[0] === 0; c.splice(0, 1), e -= LOG_BASE);\r\n\r\n // Count the digits of the first element of c to determine leading zeros, and...\r\n for (i = 1, v = c[0]; v >= 10; v /= 10, i++);\r\n\r\n // adjust the exponent accordingly.\r\n if (i < LOG_BASE) e -= LOG_BASE - i;\r\n }\r\n\r\n rand.e = e;\r\n rand.c = c;\r\n return rand;\r\n };\r\n })();\r\n\r\n\r\n /*\r\n * Return a BigNumber whose value is the sum of the arguments.\r\n *\r\n * arguments {number|string|BigNumber}\r\n */\r\n BigNumber.sum = function () {\r\n var i = 1,\r\n args = arguments,\r\n sum = new BigNumber(args[0]);\r\n for (; i < args.length;) sum = sum.plus(args[i++]);\r\n return sum;\r\n };\r\n\r\n\r\n // PRIVATE FUNCTIONS\r\n\r\n\r\n // Called by BigNumber and BigNumber.prototype.toString.\r\n convertBase = (function () {\r\n var decimal = '0123456789';\r\n\r\n /*\r\n * Convert string of baseIn to an array of numbers of baseOut.\r\n * Eg. toBaseOut('255', 10, 16) returns [15, 15].\r\n * Eg. toBaseOut('ff', 16, 10) returns [2, 5, 5].\r\n */\r\n function toBaseOut(str, baseIn, baseOut, alphabet) {\r\n var j,\r\n arr = [0],\r\n arrL,\r\n i = 0,\r\n len = str.length;\r\n\r\n for (; i < len;) {\r\n for (arrL = arr.length; arrL--; arr[arrL] *= baseIn);\r\n\r\n arr[0] += alphabet.indexOf(str.charAt(i++));\r\n\r\n for (j = 0; j < arr.length; j++) {\r\n\r\n if (arr[j] > baseOut - 1) {\r\n if (arr[j + 1] == null) arr[j + 1] = 0;\r\n arr[j + 1] += arr[j] / baseOut | 0;\r\n arr[j] %= baseOut;\r\n }\r\n }\r\n }\r\n\r\n return arr.reverse();\r\n }\r\n\r\n // Convert a numeric string of baseIn to a numeric string of baseOut.\r\n // If the caller is toString, we are converting from base 10 to baseOut.\r\n // If the caller is BigNumber, we are converting from baseIn to base 10.\r\n return function (str, baseIn, baseOut, sign, callerIsToString) {\r\n var alphabet, d, e, k, r, x, xc, y,\r\n i = str.indexOf('.'),\r\n dp = DECIMAL_PLACES,\r\n rm = ROUNDING_MODE;\r\n\r\n // Non-integer.\r\n if (i >= 0) {\r\n k = POW_PRECISION;\r\n\r\n // Unlimited precision.\r\n POW_PRECISION = 0;\r\n str = str.replace('.', '');\r\n y = new BigNumber(baseIn);\r\n x = y.pow(str.length - i);\r\n POW_PRECISION = k;\r\n\r\n // Convert str as if an integer, then restore the fraction part by dividing the\r\n // result by its base raised to a power.\r\n\r\n y.c = toBaseOut(toFixedPoint(coeffToString(x.c), x.e, '0'),\r\n 10, baseOut, decimal);\r\n y.e = y.c.length;\r\n }\r\n\r\n // Convert the number as integer.\r\n\r\n xc = toBaseOut(str, baseIn, baseOut, callerIsToString\r\n ? (alphabet = ALPHABET, decimal)\r\n : (alphabet = decimal, ALPHABET));\r\n\r\n // xc now represents str as an integer and converted to baseOut. e is the exponent.\r\n e = k = xc.length;\r\n\r\n // Remove trailing zeros.\r\n for (; xc[--k] == 0; xc.pop());\r\n\r\n // Zero?\r\n if (!xc[0]) return alphabet.charAt(0);\r\n\r\n // Does str represent an integer? If so, no need for the division.\r\n if (i < 0) {\r\n --e;\r\n } else {\r\n x.c = xc;\r\n x.e = e;\r\n\r\n // The sign is needed for correct rounding.\r\n x.s = sign;\r\n x = div(x, y, dp, rm, baseOut);\r\n xc = x.c;\r\n r = x.r;\r\n e = x.e;\r\n }\r\n\r\n // xc now represents str converted to baseOut.\r\n\r\n // THe index of the rounding digit.\r\n d = e + dp + 1;\r\n\r\n // The rounding digit: the digit to the right of the digit that may be rounded up.\r\n i = xc[d];\r\n\r\n // Look at the rounding digits and mode to determine whether to round up.\r\n\r\n k = baseOut / 2;\r\n r = r || d < 0 || xc[d + 1] != null;\r\n\r\n r = rm < 4 ? (i != null || r) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))\r\n : i > k || i == k &&(rm == 4 || r || rm == 6 && xc[d - 1] & 1 ||\r\n rm == (x.s < 0 ? 8 : 7));\r\n\r\n // If the index of the rounding digit is not greater than zero, or xc represents\r\n // zero, then the result of the base conversion is zero or, if rounding up, a value\r\n // such as 0.00001.\r\n if (d < 1 || !xc[0]) {\r\n\r\n // 1^-dp or 0\r\n str = r ? toFixedPoint(alphabet.charAt(1), -dp, alphabet.charAt(0)) : alphabet.charAt(0);\r\n } else {\r\n\r\n // Truncate xc to the required number of decimal places.\r\n xc.length = d;\r\n\r\n // Round up?\r\n if (r) {\r\n\r\n // Rounding up may mean the previous digit has to be rounded up and so on.\r\n for (--baseOut; ++xc[--d] > baseOut;) {\r\n xc[d] = 0;\r\n\r\n if (!d) {\r\n ++e;\r\n xc = [1].concat(xc);\r\n }\r\n }\r\n }\r\n\r\n // Determine trailing zeros.\r\n for (k = xc.length; !xc[--k];);\r\n\r\n // E.g. [4, 11, 15] becomes 4bf.\r\n for (i = 0, str = ''; i <= k; str += alphabet.charAt(xc[i++]));\r\n\r\n // Add leading zeros, decimal point and trailing zeros as required.\r\n str = toFixedPoint(str, e, alphabet.charAt(0));\r\n }\r\n\r\n // The caller will add the sign.\r\n return str;\r\n };\r\n })();\r\n\r\n\r\n // Perform division in the specified base. Called by div and convertBase.\r\n div = (function () {\r\n\r\n // Assume non-zero x and k.\r\n function multiply(x, k, base) {\r\n var m, temp, xlo, xhi,\r\n carry = 0,\r\n i = x.length,\r\n klo = k % SQRT_BASE,\r\n khi = k / SQRT_BASE | 0;\r\n\r\n for (x = x.slice(); i--;) {\r\n xlo = x[i] % SQRT_BASE;\r\n xhi = x[i] / SQRT_BASE | 0;\r\n m = khi * xlo + xhi * klo;\r\n temp = klo * xlo + ((m % SQRT_BASE) * SQRT_BASE) + carry;\r\n carry = (temp / base | 0) + (m / SQRT_BASE | 0) + khi * xhi;\r\n x[i] = temp % base;\r\n }\r\n\r\n if (carry) x = [carry].concat(x);\r\n\r\n return x;\r\n }\r\n\r\n function compare(a, b, aL, bL) {\r\n var i, cmp;\r\n\r\n if (aL != bL) {\r\n cmp = aL > bL ? 1 : -1;\r\n } else {\r\n\r\n for (i = cmp = 0; i < aL; i++) {\r\n\r\n if (a[i] != b[i]) {\r\n cmp = a[i] > b[i] ? 1 : -1;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return cmp;\r\n }\r\n\r\n function subtract(a, b, aL, base) {\r\n var i = 0;\r\n\r\n // Subtract b from a.\r\n for (; aL--;) {\r\n a[aL] -= i;\r\n i = a[aL] < b[aL] ? 1 : 0;\r\n a[aL] = i * base + a[aL] - b[aL];\r\n }\r\n\r\n // Remove leading zeros.\r\n for (; !a[0] && a.length > 1; a.splice(0, 1));\r\n }\r\n\r\n // x: dividend, y: divisor.\r\n return function (x, y, dp, rm, base) {\r\n var cmp, e, i, more, n, prod, prodL, q, qc, rem, remL, rem0, xi, xL, yc0,\r\n yL, yz,\r\n s = x.s == y.s ? 1 : -1,\r\n xc = x.c,\r\n yc = y.c;\r\n\r\n // Either NaN, Infinity or 0?\r\n if (!xc || !xc[0] || !yc || !yc[0]) {\r\n\r\n return new BigNumber(\r\n\r\n // Return NaN if either NaN, or both Infinity or 0.\r\n !x.s || !y.s || (xc ? yc && xc[0] == yc[0] : !yc) ? NaN :\r\n\r\n // Return ±0 if x is ±0 or y is ±Infinity, or return ±Infinity as y is ±0.\r\n xc && xc[0] == 0 || !yc ? s * 0 : s / 0\r\n );\r\n }\r\n\r\n q = new BigNumber(s);\r\n qc = q.c = [];\r\n e = x.e - y.e;\r\n s = dp + e + 1;\r\n\r\n if (!base) {\r\n base = BASE;\r\n e = bitFloor(x.e / LOG_BASE) - bitFloor(y.e / LOG_BASE);\r\n s = s / LOG_BASE | 0;\r\n }\r\n\r\n // Result exponent may be one less then the current value of e.\r\n // The coefficients of the BigNumbers from convertBase may have trailing zeros.\r\n for (i = 0; yc[i] == (xc[i] || 0); i++);\r\n\r\n if (yc[i] > (xc[i] || 0)) e--;\r\n\r\n if (s < 0) {\r\n qc.push(1);\r\n more = true;\r\n } else {\r\n xL = xc.length;\r\n yL = yc.length;\r\n i = 0;\r\n s += 2;\r\n\r\n // Normalise xc and yc so highest order digit of yc is >= base / 2.\r\n\r\n n = mathfloor(base / (yc[0] + 1));\r\n\r\n // Not necessary, but to handle odd bases where yc[0] == (base / 2) - 1.\r\n // if (n > 1 || n++ == 1 && yc[0] < base / 2) {\r\n if (n > 1) {\r\n yc = multiply(yc, n, base);\r\n xc = multiply(xc, n, base);\r\n yL = yc.length;\r\n xL = xc.length;\r\n }\r\n\r\n xi = yL;\r\n rem = xc.slice(0, yL);\r\n remL = rem.length;\r\n\r\n // Add zeros to make remainder as long as divisor.\r\n for (; remL < yL; rem[remL++] = 0);\r\n yz = yc.slice();\r\n yz = [0].concat(yz);\r\n yc0 = yc[0];\r\n if (yc[1] >= base / 2) yc0++;\r\n // Not necessary, but to prevent trial digit n > base, when using base 3.\r\n // else if (base == 3 && yc0 == 1) yc0 = 1 + 1e-15;\r\n\r\n do {\r\n n = 0;\r\n\r\n // Compare divisor and remainder.\r\n cmp = compare(yc, rem, yL, remL);\r\n\r\n // If divisor < remainder.\r\n if (cmp < 0) {\r\n\r\n // Calculate trial digit, n.\r\n\r\n rem0 = rem[0];\r\n if (yL != remL) rem0 = rem0 * base + (rem[1] || 0);\r\n\r\n // n is how many times the divisor goes into the current remainder.\r\n n = mathfloor(rem0 / yc0);\r\n\r\n // Algorithm:\r\n // product = divisor multiplied by trial digit (n).\r\n // Compare product and remainder.\r\n // If product is greater than remainder:\r\n // Subtract divisor from product, decrement trial digit.\r\n // Subtract product from remainder.\r\n // If product was less than remainder at the last compare:\r\n // Compare new remainder and divisor.\r\n // If remainder is greater than divisor:\r\n // Subtract divisor from remainder, increment trial digit.\r\n\r\n if (n > 1) {\r\n\r\n // n may be > base only when base is 3.\r\n if (n >= base) n = base - 1;\r\n\r\n // product = divisor * trial digit.\r\n prod = multiply(yc, n, base);\r\n prodL = prod.length;\r\n remL = rem.length;\r\n\r\n // Compare product and remainder.\r\n // If product > remainder then trial digit n too high.\r\n // n is 1 too high about 5% of the time, and is not known to have\r\n // ever been more than 1 too high.\r\n while (compare(prod, rem, prodL, remL) == 1) {\r\n n--;\r\n\r\n // Subtract divisor from product.\r\n subtract(prod, yL < prodL ? yz : yc, prodL, base);\r\n prodL = prod.length;\r\n cmp = 1;\r\n }\r\n } else {\r\n\r\n // n is 0 or 1, cmp is -1.\r\n // If n is 0, there is no need to compare yc and rem again below,\r\n // so change cmp to 1 to avoid it.\r\n // If n is 1, leave cmp as -1, so yc and rem are compared again.\r\n if (n == 0) {\r\n\r\n // divisor < remainder, so n must be at least 1.\r\n cmp = n = 1;\r\n }\r\n\r\n // product = divisor\r\n prod = yc.slice();\r\n prodL = prod.length;\r\n }\r\n\r\n if (prodL < remL) prod = [0].concat(prod);\r\n\r\n // Subtract product from remainder.\r\n subtract(rem, prod, remL, base);\r\n remL = rem.length;\r\n\r\n // If product was < remainder.\r\n if (cmp == -1) {\r\n\r\n // Compare divisor and new remainder.\r\n // If divisor < new remainder, subtract divisor from remainder.\r\n // Trial digit n too low.\r\n // n is 1 too low about 5% of the time, and very rarely 2 too low.\r\n while (compare(yc, rem, yL, remL) < 1) {\r\n n++;\r\n\r\n // Subtract divisor from remainder.\r\n subtract(rem, yL < remL ? yz : yc, remL, base);\r\n remL = rem.length;\r\n }\r\n }\r\n } else if (cmp === 0) {\r\n n++;\r\n rem = [0];\r\n } // else cmp === 1 and n will be 0\r\n\r\n // Add the next digit, n, to the result array.\r\n qc[i++] = n;\r\n\r\n // Update the remainder.\r\n if (rem[0]) {\r\n rem[remL++] = xc[xi] || 0;\r\n } else {\r\n rem = [xc[xi]];\r\n remL = 1;\r\n }\r\n } while ((xi++ < xL || rem[0] != null) && s--);\r\n\r\n more = rem[0] != null;\r\n\r\n // Leading zero?\r\n if (!qc[0]) qc.splice(0, 1);\r\n }\r\n\r\n if (base == BASE) {\r\n\r\n // To calculate q.e, first get the number of digits of qc[0].\r\n for (i = 1, s = qc[0]; s >= 10; s /= 10, i++);\r\n\r\n round(q, dp + (q.e = i + e * LOG_BASE - 1) + 1, rm, more);\r\n\r\n // Caller is convertBase.\r\n } else {\r\n q.e = e;\r\n q.r = +more;\r\n }\r\n\r\n return q;\r\n };\r\n })();\r\n\r\n\r\n /*\r\n * Return a string representing the value of BigNumber n in fixed-point or exponential\r\n * notation rounded to the specified decimal places or significant digits.\r\n *\r\n * n: a BigNumber.\r\n * i: the index of the last digit required (i.e. the digit that may be rounded up).\r\n * rm: the rounding mode.\r\n * id: 1 (toExponential) or 2 (toPrecision).\r\n */\r\n function format(n, i, rm, id) {\r\n var c0, e, ne, len, str;\r\n\r\n if (rm == null) rm = ROUNDING_MODE;\r\n else intCheck(rm, 0, 8);\r\n\r\n if (!n.c) return n.toString();\r\n\r\n c0 = n.c[0];\r\n ne = n.e;\r\n\r\n if (i == null) {\r\n str = coeffToString(n.c);\r\n str = id == 1 || id == 2 && (ne <= TO_EXP_NEG || ne >= TO_EXP_POS)\r\n ? toExponential(str, ne)\r\n : toFixedPoint(str, ne, '0');\r\n } else {\r\n n = round(new BigNumber(n), i, rm);\r\n\r\n // n.e may have changed if the value was rounded up.\r\n e = n.e;\r\n\r\n str = coeffToString(n.c);\r\n len = str.length;\r\n\r\n // toPrecision returns exponential notation if the number of significant digits\r\n // specified is less than the number of digits necessary to represent the integer\r\n // part of the value in fixed-point notation.\r\n\r\n // Exponential notation.\r\n if (id == 1 || id == 2 && (i <= e || e <= TO_EXP_NEG)) {\r\n\r\n // Append zeros?\r\n for (; len < i; str += '0', len++);\r\n str = toExponential(str, e);\r\n\r\n // Fixed-point notation.\r\n } else {\r\n i -= ne;\r\n str = toFixedPoint(str, e, '0');\r\n\r\n // Append zeros?\r\n if (e + 1 > len) {\r\n if (--i > 0) for (str += '.'; i--; str += '0');\r\n } else {\r\n i += e - len;\r\n if (i > 0) {\r\n if (e + 1 == len) str += '.';\r\n for (; i--; str += '0');\r\n }\r\n }\r\n }\r\n }\r\n\r\n return n.s < 0 && c0 ? '-' + str : str;\r\n }\r\n\r\n\r\n // Handle BigNumber.max and BigNumber.min.\r\n function maxOrMin(args, method) {\r\n var n,\r\n i = 1,\r\n m = new BigNumber(args[0]);\r\n\r\n for (; i < args.length; i++) {\r\n n = new BigNumber(args[i]);\r\n\r\n // If any number is NaN, return NaN.\r\n if (!n.s) {\r\n m = n;\r\n break;\r\n } else if (method.call(m, n)) {\r\n m = n;\r\n }\r\n }\r\n\r\n return m;\r\n }\r\n\r\n\r\n /*\r\n * Strip trailing zeros, calculate base 10 exponent and check against MIN_EXP and MAX_EXP.\r\n * Called by minus, plus and times.\r\n */\r\n function normalise(n, c, e) {\r\n var i = 1,\r\n j = c.length;\r\n\r\n // Remove trailing zeros.\r\n for (; !c[--j]; c.pop());\r\n\r\n // Calculate the base 10 exponent. First get the number of digits of c[0].\r\n for (j = c[0]; j >= 10; j /= 10, i++);\r\n\r\n // Overflow?\r\n if ((e = i + e * LOG_BASE - 1) > MAX_EXP) {\r\n\r\n // Infinity.\r\n n.c = n.e = null;\r\n\r\n // Underflow?\r\n } else if (e < MIN_EXP) {\r\n\r\n // Zero.\r\n n.c = [n.e = 0];\r\n } else {\r\n n.e = e;\r\n n.c = c;\r\n }\r\n\r\n return n;\r\n }\r\n\r\n\r\n // Handle values that fail the validity test in BigNumber.\r\n parseNumeric = (function () {\r\n var basePrefix = /^(-?)0([xbo])(?=\\w[\\w.]*$)/i,\r\n dotAfter = /^([^.]+)\\.$/,\r\n dotBefore = /^\\.([^.]+)$/,\r\n isInfinityOrNaN = /^-?(Infinity|NaN)$/,\r\n whitespaceOrPlus = /^\\s*\\+(?=[\\w.])|^\\s+|\\s+$/g;\r\n\r\n return function (x, str, isNum, b) {\r\n var base,\r\n s = isNum ? str : str.replace(whitespaceOrPlus, '');\r\n\r\n // No exception on ±Infinity or NaN.\r\n if (isInfinityOrNaN.test(s)) {\r\n x.s = isNaN(s) ? null : s < 0 ? -1 : 1;\r\n } else {\r\n if (!isNum) {\r\n\r\n // basePrefix = /^(-?)0([xbo])(?=\\w[\\w.]*$)/i\r\n s = s.replace(basePrefix, function (m, p1, p2) {\r\n base = (p2 = p2.toLowerCase()) == 'x' ? 16 : p2 == 'b' ? 2 : 8;\r\n return !b || b == base ? p1 : m;\r\n });\r\n\r\n if (b) {\r\n base = b;\r\n\r\n // E.g. '1.' to '1', '.1' to '0.1'\r\n s = s.replace(dotAfter, '$1').replace(dotBefore, '0.$1');\r\n }\r\n\r\n if (str != s) return new BigNumber(s, base);\r\n }\r\n\r\n // '[BigNumber Error] Not a number: {n}'\r\n // '[BigNumber Error] Not a base {b} number: {n}'\r\n if (BigNumber.DEBUG) {\r\n throw Error\r\n (bignumberError + 'Not a' + (b ? ' base ' + b : '') + ' number: ' + str);\r\n }\r\n\r\n // NaN\r\n x.s = null;\r\n }\r\n\r\n x.c = x.e = null;\r\n }\r\n })();\r\n\r\n\r\n /*\r\n * Round x to sd significant digits using rounding mode rm. Check for over/under-flow.\r\n * If r is truthy, it is known that there are more digits after the rounding digit.\r\n */\r\n function round(x, sd, rm, r) {\r\n var d, i, j, k, n, ni, rd,\r\n xc = x.c,\r\n pows10 = POWS_TEN;\r\n\r\n // if x is not Infinity or NaN...\r\n if (xc) {\r\n\r\n // rd is the rounding digit, i.e. the digit after the digit that may be rounded up.\r\n // n is a base 1e14 number, the value of the element of array x.c containing rd.\r\n // ni is the index of n within x.c.\r\n // d is the number of digits of n.\r\n // i is the index of rd within n including leading zeros.\r\n // j is the actual index of rd within n (if < 0, rd is a leading zero).\r\n out: {\r\n\r\n // Get the number of digits of the first element of xc.\r\n for (d = 1, k = xc[0]; k >= 10; k /= 10, d++);\r\n i = sd - d;\r\n\r\n // If the rounding digit is in the first element of xc...\r\n if (i < 0) {\r\n i += LOG_BASE;\r\n j = sd;\r\n n = xc[ni = 0];\r\n\r\n // Get the rounding digit at index j of n.\r\n rd = n / pows10[d - j - 1] % 10 | 0;\r\n } else {\r\n ni = mathceil((i + 1) / LOG_BASE);\r\n\r\n if (ni >= xc.length) {\r\n\r\n if (r) {\r\n\r\n // Needed by sqrt.\r\n for (; xc.length <= ni; xc.push(0));\r\n n = rd = 0;\r\n d = 1;\r\n i %= LOG_BASE;\r\n j = i - LOG_BASE + 1;\r\n } else {\r\n break out;\r\n }\r\n } else {\r\n n = k = xc[ni];\r\n\r\n // Get the number of digits of n.\r\n for (d = 1; k >= 10; k /= 10, d++);\r\n\r\n // Get the index of rd within n.\r\n i %= LOG_BASE;\r\n\r\n // Get the index of rd within n, adjusted for leading zeros.\r\n // The number of leading zeros of n is given by LOG_BASE - d.\r\n j = i - LOG_BASE + d;\r\n\r\n // Get the rounding digit at index j of n.\r\n rd = j < 0 ? 0 : n / pows10[d - j - 1] % 10 | 0;\r\n }\r\n }\r\n\r\n r = r || sd < 0 ||\r\n\r\n // Are there any non-zero digits after the rounding digit?\r\n // The expression n % pows10[d - j - 1] returns all digits of n to the right\r\n // of the digit at j, e.g. if n is 908714 and j is 2, the expression gives 714.\r\n xc[ni + 1] != null || (j < 0 ? n : n % pows10[d - j - 1]);\r\n\r\n r = rm < 4\r\n ? (rd || r) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))\r\n : rd > 5 || rd == 5 && (rm == 4 || r || rm == 6 &&\r\n\r\n // Check whether the digit to the left of the rounding digit is odd.\r\n ((i > 0 ? j > 0 ? n / pows10[d - j] : 0 : xc[ni - 1]) % 10) & 1 ||\r\n rm == (x.s < 0 ? 8 : 7));\r\n\r\n if (sd < 1 || !xc[0]) {\r\n xc.length = 0;\r\n\r\n if (r) {\r\n\r\n // Convert sd to decimal places.\r\n sd -= x.e + 1;\r\n\r\n // 1, 0.1, 0.01, 0.001, 0.0001 etc.\r\n xc[0] = pows10[(LOG_BASE - sd % LOG_BASE) % LOG_BASE];\r\n x.e = -sd || 0;\r\n } else {\r\n\r\n // Zero.\r\n xc[0] = x.e = 0;\r\n }\r\n\r\n return x;\r\n }\r\n\r\n // Remove excess digits.\r\n if (i == 0) {\r\n xc.length = ni;\r\n k = 1;\r\n ni--;\r\n } else {\r\n xc.length = ni + 1;\r\n k = pows10[LOG_BASE - i];\r\n\r\n // E.g. 56700 becomes 56000 if 7 is the rounding digit.\r\n // j > 0 means i > number of leading zeros of n.\r\n xc[ni] = j > 0 ? mathfloor(n / pows10[d - j] % pows10[j]) * k : 0;\r\n }\r\n\r\n // Round up?\r\n if (r) {\r\n\r\n for (; ;) {\r\n\r\n // If the digit to be rounded up is in the first element of xc...\r\n if (ni == 0) {\r\n\r\n // i will be the length of xc[0] before k is added.\r\n for (i = 1, j = xc[0]; j >= 10; j /= 10, i++);\r\n j = xc[0] += k;\r\n for (k = 1; j >= 10; j /= 10, k++);\r\n\r\n // if i != k the length has increased.\r\n if (i != k) {\r\n x.e++;\r\n if (xc[0] == BASE) xc[0] = 1;\r\n }\r\n\r\n break;\r\n } else {\r\n xc[ni] += k;\r\n if (xc[ni] != BASE) break;\r\n xc[ni--] = 0;\r\n k = 1;\r\n }\r\n }\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (i = xc.length; xc[--i] === 0; xc.pop());\r\n }\r\n\r\n // Overflow? Infinity.\r\n if (x.e > MAX_EXP) {\r\n x.c = x.e = null;\r\n\r\n // Underflow? Zero.\r\n } else if (x.e < MIN_EXP) {\r\n x.c = [x.e = 0];\r\n }\r\n }\r\n\r\n return x;\r\n }\r\n\r\n\r\n function valueOf(n) {\r\n var str,\r\n e = n.e;\r\n\r\n if (e === null) return n.toString();\r\n\r\n str = coeffToString(n.c);\r\n\r\n str = e <= TO_EXP_NEG || e >= TO_EXP_POS\r\n ? toExponential(str, e)\r\n : toFixedPoint(str, e, '0');\r\n\r\n return n.s < 0 ? '-' + str : str;\r\n }\r\n\r\n\r\n // PROTOTYPE/INSTANCE METHODS\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the absolute value of this BigNumber.\r\n */\r\n P.absoluteValue = P.abs = function () {\r\n var x = new BigNumber(this);\r\n if (x.s < 0) x.s = 1;\r\n return x;\r\n };\r\n\r\n\r\n /*\r\n * Return\r\n * 1 if the value of this BigNumber is greater than the value of BigNumber(y, b),\r\n * -1 if the value of this BigNumber is less than the value of BigNumber(y, b),\r\n * 0 if they have the same value,\r\n * or null if the value of either is NaN.\r\n */\r\n P.comparedTo = function (y, b) {\r\n return compare(this, new BigNumber(y, b));\r\n };\r\n\r\n\r\n /*\r\n * If dp is undefined or null or true or false, return the number of decimal places of the\r\n * value of this BigNumber, or null if the value of this BigNumber is ±Infinity or NaN.\r\n *\r\n * Otherwise, if dp is a number, return a new BigNumber whose value is the value of this\r\n * BigNumber rounded to a maximum of dp decimal places using rounding mode rm, or\r\n * ROUNDING_MODE if rm is omitted.\r\n *\r\n * [dp] {number} Decimal places: integer, 0 to MAX inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n */\r\n P.decimalPlaces = P.dp = function (dp, rm) {\r\n var c, n, v,\r\n x = this;\r\n\r\n if (dp != null) {\r\n intCheck(dp, 0, MAX);\r\n if (rm == null) rm = ROUNDING_MODE;\r\n else intCheck(rm, 0, 8);\r\n\r\n return round(new BigNumber(x), dp + x.e + 1, rm);\r\n }\r\n\r\n if (!(c = x.c)) return null;\r\n n = ((v = c.length - 1) - bitFloor(this.e / LOG_BASE)) * LOG_BASE;\r\n\r\n // Subtract the number of trailing zeros of the last number.\r\n if (v = c[v]) for (; v % 10 == 0; v /= 10, n--);\r\n if (n < 0) n = 0;\r\n\r\n return n;\r\n };\r\n\r\n\r\n /*\r\n * n / 0 = I\r\n * n / N = N\r\n * n / I = 0\r\n * 0 / n = 0\r\n * 0 / 0 = N\r\n * 0 / N = N\r\n * 0 / I = 0\r\n * N / n = N\r\n * N / 0 = N\r\n * N / N = N\r\n * N / I = N\r\n * I / n = I\r\n * I / 0 = I\r\n * I / N = N\r\n * I / I = N\r\n *\r\n * Return a new BigNumber whose value is the value of this BigNumber divided by the value of\r\n * BigNumber(y, b), rounded according to DECIMAL_PLACES and ROUNDING_MODE.\r\n */\r\n P.dividedBy = P.div = function (y, b) {\r\n return div(this, new BigNumber(y, b), DECIMAL_PLACES, ROUNDING_MODE);\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the integer part of dividing the value of this\r\n * BigNumber by the value of BigNumber(y, b).\r\n */\r\n P.dividedToIntegerBy = P.idiv = function (y, b) {\r\n return div(this, new BigNumber(y, b), 0, 1);\r\n };\r\n\r\n\r\n /*\r\n * Return a BigNumber whose value is the value of this BigNumber exponentiated by n.\r\n *\r\n * If m is present, return the result modulo m.\r\n * If n is negative round according to DECIMAL_PLACES and ROUNDING_MODE.\r\n * If POW_PRECISION is non-zero and m is not present, round to POW_PRECISION using ROUNDING_MODE.\r\n *\r\n * The modular power operation works efficiently when x, n, and m are integers, otherwise it\r\n * is equivalent to calculating x.exponentiatedBy(n).modulo(m) with a POW_PRECISION of 0.\r\n *\r\n * n {number|string|BigNumber} The exponent. An integer.\r\n * [m] {number|string|BigNumber} The modulus.\r\n *\r\n * '[BigNumber Error] Exponent not an integer: {n}'\r\n */\r\n P.exponentiatedBy = P.pow = function (n, m) {\r\n var half, isModExp, i, k, more, nIsBig, nIsNeg, nIsOdd, y,\r\n x = this;\r\n\r\n n = new BigNumber(n);\r\n\r\n // Allow NaN and ±Infinity, but not other non-integers.\r\n if (n.c && !n.isInteger()) {\r\n throw Error\r\n (bignumberError + 'Exponent not an integer: ' + valueOf(n));\r\n }\r\n\r\n if (m != null) m = new BigNumber(m);\r\n\r\n // Exponent of MAX_SAFE_INTEGER is 15.\r\n nIsBig = n.e > 14;\r\n\r\n // If x is NaN, ±Infinity, ±0 or ±1, or n is ±Infinity, NaN or ±0.\r\n if (!x.c || !x.c[0] || x.c[0] == 1 && !x.e && x.c.length == 1 || !n.c || !n.c[0]) {\r\n\r\n // The sign of the result of pow when x is negative depends on the evenness of n.\r\n // If +n overflows to ±Infinity, the evenness of n would be not be known.\r\n y = new BigNumber(Math.pow(+valueOf(x), nIsBig ? n.s * (2 - isOdd(n)) : +valueOf(n)));\r\n return m ? y.mod(m) : y;\r\n }\r\n\r\n nIsNeg = n.s < 0;\r\n\r\n if (m) {\r\n\r\n // x % m returns NaN if abs(m) is zero, or m is NaN.\r\n if (m.c ? !m.c[0] : !m.s) return new BigNumber(NaN);\r\n\r\n isModExp = !nIsNeg && x.isInteger() && m.isInteger();\r\n\r\n if (isModExp) x = x.mod(m);\r\n\r\n // Overflow to ±Infinity: >=2**1e10 or >=1.0000024**1e15.\r\n // Underflow to ±0: <=0.79**1e10 or <=0.9999975**1e15.\r\n } else if (n.e > 9 && (x.e > 0 || x.e < -1 || (x.e == 0\r\n // [1, 240000000]\r\n ? x.c[0] > 1 || nIsBig && x.c[1] >= 24e7\r\n // [80000000000000] [99999750000000]\r\n : x.c[0] < 8e13 || nIsBig && x.c[0] <= 9999975e7))) {\r\n\r\n // If x is negative and n is odd, k = -0, else k = 0.\r\n k = x.s < 0 && isOdd(n) ? -0 : 0;\r\n\r\n // If x >= 1, k = ±Infinity.\r\n if (x.e > -1) k = 1 / k;\r\n\r\n // If n is negative return ±0, else return ±Infinity.\r\n return new BigNumber(nIsNeg ? 1 / k : k);\r\n\r\n } else if (POW_PRECISION) {\r\n\r\n // Truncating each coefficient array to a length of k after each multiplication\r\n // equates to truncating significant digits to POW_PRECISION + [28, 41],\r\n // i.e. there will be a minimum of 28 guard digits retained.\r\n k = mathceil(POW_PRECISION / LOG_BASE + 2);\r\n }\r\n\r\n if (nIsBig) {\r\n half = new BigNumber(0.5);\r\n if (nIsNeg) n.s = 1;\r\n nIsOdd = isOdd(n);\r\n } else {\r\n i = Math.abs(+valueOf(n));\r\n nIsOdd = i % 2;\r\n }\r\n\r\n y = new BigNumber(ONE);\r\n\r\n // Performs 54 loop iterations for n of 9007199254740991.\r\n for (; ;) {\r\n\r\n if (nIsOdd) {\r\n y = y.times(x);\r\n if (!y.c) break;\r\n\r\n if (k) {\r\n if (y.c.length > k) y.c.length = k;\r\n } else if (isModExp) {\r\n y = y.mod(m); //y = y.minus(div(y, m, 0, MODULO_MODE).times(m));\r\n }\r\n }\r\n\r\n if (i) {\r\n i = mathfloor(i / 2);\r\n if (i === 0) break;\r\n nIsOdd = i % 2;\r\n } else {\r\n n = n.times(half);\r\n round(n, n.e + 1, 1);\r\n\r\n if (n.e > 14) {\r\n nIsOdd = isOdd(n);\r\n } else {\r\n i = +valueOf(n);\r\n if (i === 0) break;\r\n nIsOdd = i % 2;\r\n }\r\n }\r\n\r\n x = x.times(x);\r\n\r\n if (k) {\r\n if (x.c && x.c.length > k) x.c.length = k;\r\n } else if (isModExp) {\r\n x = x.mod(m); //x = x.minus(div(x, m, 0, MODULO_MODE).times(m));\r\n }\r\n }\r\n\r\n if (isModExp) return y;\r\n if (nIsNeg) y = ONE.div(y);\r\n\r\n return m ? y.mod(m) : k ? round(y, POW_PRECISION, ROUNDING_MODE, more) : y;\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the value of this BigNumber rounded to an integer\r\n * using rounding mode rm, or ROUNDING_MODE if rm is omitted.\r\n *\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {rm}'\r\n */\r\n P.integerValue = function (rm) {\r\n var n = new BigNumber(this);\r\n if (rm == null) rm = ROUNDING_MODE;\r\n else intCheck(rm, 0, 8);\r\n return round(n, n.e + 1, rm);\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is equal to the value of BigNumber(y, b),\r\n * otherwise return false.\r\n */\r\n P.isEqualTo = P.eq = function (y, b) {\r\n return compare(this, new BigNumber(y, b)) === 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is a finite number, otherwise return false.\r\n */\r\n P.isFinite = function () {\r\n return !!this.c;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is greater than the value of BigNumber(y, b),\r\n * otherwise return false.\r\n */\r\n P.isGreaterThan = P.gt = function (y, b) {\r\n return compare(this, new BigNumber(y, b)) > 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is greater than or equal to the value of\r\n * BigNumber(y, b), otherwise return false.\r\n */\r\n P.isGreaterThanOrEqualTo = P.gte = function (y, b) {\r\n return (b = compare(this, new BigNumber(y, b))) === 1 || b === 0;\r\n\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is an integer, otherwise return false.\r\n */\r\n P.isInteger = function () {\r\n return !!this.c && bitFloor(this.e / LOG_BASE) > this.c.length - 2;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is less than the value of BigNumber(y, b),\r\n * otherwise return false.\r\n */\r\n P.isLessThan = P.lt = function (y, b) {\r\n return compare(this, new BigNumber(y, b)) < 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is less than or equal to the value of\r\n * BigNumber(y, b), otherwise return false.\r\n */\r\n P.isLessThanOrEqualTo = P.lte = function (y, b) {\r\n return (b = compare(this, new BigNumber(y, b))) === -1 || b === 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is NaN, otherwise return false.\r\n */\r\n P.isNaN = function () {\r\n return !this.s;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is negative, otherwise return false.\r\n */\r\n P.isNegative = function () {\r\n return this.s < 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is positive, otherwise return false.\r\n */\r\n P.isPositive = function () {\r\n return this.s > 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is 0 or -0, otherwise return false.\r\n */\r\n P.isZero = function () {\r\n return !!this.c && this.c[0] == 0;\r\n };\r\n\r\n\r\n /*\r\n * n - 0 = n\r\n * n - N = N\r\n * n - I = -I\r\n * 0 - n = -n\r\n * 0 - 0 = 0\r\n * 0 - N = N\r\n * 0 - I = -I\r\n * N - n = N\r\n * N - 0 = N\r\n * N - N = N\r\n * N - I = N\r\n * I - n = I\r\n * I - 0 = I\r\n * I - N = N\r\n * I - I = N\r\n *\r\n * Return a new BigNumber whose value is the value of this BigNumber minus the value of\r\n * BigNumber(y, b).\r\n */\r\n P.minus = function (y, b) {\r\n var i, j, t, xLTy,\r\n x = this,\r\n a = x.s;\r\n\r\n y = new BigNumber(y, b);\r\n b = y.s;\r\n\r\n // Either NaN?\r\n if (!a || !b) return new BigNumber(NaN);\r\n\r\n // Signs differ?\r\n if (a != b) {\r\n y.s = -b;\r\n return x.plus(y);\r\n }\r\n\r\n var xe = x.e / LOG_BASE,\r\n ye = y.e / LOG_BASE,\r\n xc = x.c,\r\n yc = y.c;\r\n\r\n if (!xe || !ye) {\r\n\r\n // Either Infinity?\r\n if (!xc || !yc) return xc ? (y.s = -b, y) : new BigNumber(yc ? x : NaN);\r\n\r\n // Either zero?\r\n if (!xc[0] || !yc[0]) {\r\n\r\n // Return y if y is non-zero, x if x is non-zero, or zero if both are zero.\r\n return yc[0] ? (y.s = -b, y) : new BigNumber(xc[0] ? x :\r\n\r\n // IEEE 754 (2008) 6.3: n - n = -0 when rounding to -Infinity\r\n ROUNDING_MODE == 3 ? -0 : 0);\r\n }\r\n }\r\n\r\n xe = bitFloor(xe);\r\n ye = bitFloor(ye);\r\n xc = xc.slice();\r\n\r\n // Determine which is the bigger number.\r\n if (a = xe - ye) {\r\n\r\n if (xLTy = a < 0) {\r\n a = -a;\r\n t = xc;\r\n } else {\r\n ye = xe;\r\n t = yc;\r\n }\r\n\r\n t.reverse();\r\n\r\n // Prepend zeros to equalise exponents.\r\n for (b = a; b--; t.push(0));\r\n t.reverse();\r\n } else {\r\n\r\n // Exponents equal. Check digit by digit.\r\n j = (xLTy = (a = xc.length) < (b = yc.length)) ? a : b;\r\n\r\n for (a = b = 0; b < j; b++) {\r\n\r\n if (xc[b] != yc[b]) {\r\n xLTy = xc[b] < yc[b];\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // x < y? Point xc to the array of the bigger number.\r\n if (xLTy) t = xc, xc = yc, yc = t, y.s = -y.s;\r\n\r\n b = (j = yc.length) - (i = xc.length);\r\n\r\n // Append zeros to xc if shorter.\r\n // No need to add zeros to yc if shorter as subtract only needs to start at yc.length.\r\n if (b > 0) for (; b--; xc[i++] = 0);\r\n b = BASE - 1;\r\n\r\n // Subtract yc from xc.\r\n for (; j > a;) {\r\n\r\n if (xc[--j] < yc[j]) {\r\n for (i = j; i && !xc[--i]; xc[i] = b);\r\n --xc[i];\r\n xc[j] += BASE;\r\n }\r\n\r\n xc[j] -= yc[j];\r\n }\r\n\r\n // Remove leading zeros and adjust exponent accordingly.\r\n for (; xc[0] == 0; xc.splice(0, 1), --ye);\r\n\r\n // Zero?\r\n if (!xc[0]) {\r\n\r\n // Following IEEE 754 (2008) 6.3,\r\n // n - n = +0 but n - n = -0 when rounding towards -Infinity.\r\n y.s = ROUNDING_MODE == 3 ? -1 : 1;\r\n y.c = [y.e = 0];\r\n return y;\r\n }\r\n\r\n // No need to check for Infinity as +x - +y != Infinity && -x - -y != Infinity\r\n // for finite x and y.\r\n return normalise(y, xc, ye);\r\n };\r\n\r\n\r\n /*\r\n * n % 0 = N\r\n * n % N = N\r\n * n % I = n\r\n * 0 % n = 0\r\n * -0 % n = -0\r\n * 0 % 0 = N\r\n * 0 % N = N\r\n * 0 % I = 0\r\n * N % n = N\r\n * N % 0 = N\r\n * N % N = N\r\n * N % I = N\r\n * I % n = N\r\n * I % 0 = N\r\n * I % N = N\r\n * I % I = N\r\n *\r\n * Return a new BigNumber whose value is the value of this BigNumber modulo the value of\r\n * BigNumber(y, b). The result depends on the value of MODULO_MODE.\r\n */\r\n P.modulo = P.mod = function (y, b) {\r\n var q, s,\r\n x = this;\r\n\r\n y = new BigNumber(y, b);\r\n\r\n // Return NaN if x is Infinity or NaN, or y is NaN or zero.\r\n if (!x.c || !y.s || y.c && !y.c[0]) {\r\n return new BigNumber(NaN);\r\n\r\n // Return x if y is Infinity or x is zero.\r\n } else if (!y.c || x.c && !x.c[0]) {\r\n return new BigNumber(x);\r\n }\r\n\r\n if (MODULO_MODE == 9) {\r\n\r\n // Euclidian division: q = sign(y) * floor(x / abs(y))\r\n // r = x - qy where 0 <= r < abs(y)\r\n s = y.s;\r\n y.s = 1;\r\n q = div(x, y, 0, 3);\r\n y.s = s;\r\n q.s *= s;\r\n } else {\r\n q = div(x, y, 0, MODULO_MODE);\r\n }\r\n\r\n y = x.minus(q.times(y));\r\n\r\n // To match JavaScript %, ensure sign of zero is sign of dividend.\r\n if (!y.c[0] && MODULO_MODE == 1) y.s = x.s;\r\n\r\n return y;\r\n };\r\n\r\n\r\n /*\r\n * n * 0 = 0\r\n * n * N = N\r\n * n * I = I\r\n * 0 * n = 0\r\n * 0 * 0 = 0\r\n * 0 * N = N\r\n * 0 * I = N\r\n * N * n = N\r\n * N * 0 = N\r\n * N * N = N\r\n * N * I = N\r\n * I * n = I\r\n * I * 0 = N\r\n * I * N = N\r\n * I * I = I\r\n *\r\n * Return a new BigNumber whose value is the value of this BigNumber multiplied by the value\r\n * of BigNumber(y, b).\r\n */\r\n P.multipliedBy = P.times = function (y, b) {\r\n var c, e, i, j, k, m, xcL, xlo, xhi, ycL, ylo, yhi, zc,\r\n base, sqrtBase,\r\n x = this,\r\n xc = x.c,\r\n yc = (y = new BigNumber(y, b)).c;\r\n\r\n // Either NaN, ±Infinity or ±0?\r\n if (!xc || !yc || !xc[0] || !yc[0]) {\r\n\r\n // Return NaN if either is NaN, or one is 0 and the other is Infinity.\r\n if (!x.s || !y.s || xc && !xc[0] && !yc || yc && !yc[0] && !xc) {\r\n y.c = y.e = y.s = null;\r\n } else {\r\n y.s *= x.s;\r\n\r\n // Return ±Infinity if either is ±Infinity.\r\n if (!xc || !yc) {\r\n y.c = y.e = null;\r\n\r\n // Return ±0 if either is ±0.\r\n } else {\r\n y.c = [0];\r\n y.e = 0;\r\n }\r\n }\r\n\r\n return y;\r\n }\r\n\r\n e = bitFloor(x.e / LOG_BASE) + bitFloor(y.e / LOG_BASE);\r\n y.s *= x.s;\r\n xcL = xc.length;\r\n ycL = yc.length;\r\n\r\n // Ensure xc points to longer array and xcL to its length.\r\n if (xcL < ycL) zc = xc, xc = yc, yc = zc, i = xcL, xcL = ycL, ycL = i;\r\n\r\n // Initialise the result array with zeros.\r\n for (i = xcL + ycL, zc = []; i--; zc.push(0));\r\n\r\n base = BASE;\r\n sqrtBase = SQRT_BASE;\r\n\r\n for (i = ycL; --i >= 0;) {\r\n c = 0;\r\n ylo = yc[i] % sqrtBase;\r\n yhi = yc[i] / sqrtBase | 0;\r\n\r\n for (k = xcL, j = i + k; j > i;) {\r\n xlo = xc[--k] % sqrtBase;\r\n xhi = xc[k] / sqrtBase | 0;\r\n m = yhi * xlo + xhi * ylo;\r\n xlo = ylo * xlo + ((m % sqrtBase) * sqrtBase) + zc[j] + c;\r\n c = (xlo / base | 0) + (m / sqrtBase | 0) + yhi * xhi;\r\n zc[j--] = xlo % base;\r\n }\r\n\r\n zc[j] = c;\r\n }\r\n\r\n if (c) {\r\n ++e;\r\n } else {\r\n zc.splice(0, 1);\r\n }\r\n\r\n return normalise(y, zc, e);\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the value of this BigNumber negated,\r\n * i.e. multiplied by -1.\r\n */\r\n P.negated = function () {\r\n var x = new BigNumber(this);\r\n x.s = -x.s || null;\r\n return x;\r\n };\r\n\r\n\r\n /*\r\n * n + 0 = n\r\n * n + N = N\r\n * n + I = I\r\n * 0 + n = n\r\n * 0 + 0 = 0\r\n * 0 + N = N\r\n * 0 + I = I\r\n * N + n = N\r\n * N + 0 = N\r\n * N + N = N\r\n * N + I = N\r\n * I + n = I\r\n * I + 0 = I\r\n * I + N = N\r\n * I + I = I\r\n *\r\n * Return a new BigNumber whose value is the value of this BigNumber plus the value of\r\n * BigNumber(y, b).\r\n */\r\n P.plus = function (y, b) {\r\n var t,\r\n x = this,\r\n a = x.s;\r\n\r\n y = new BigNumber(y, b);\r\n b = y.s;\r\n\r\n // Either NaN?\r\n if (!a || !b) return new BigNumber(NaN);\r\n\r\n // Signs differ?\r\n if (a != b) {\r\n y.s = -b;\r\n return x.minus(y);\r\n }\r\n\r\n var xe = x.e / LOG_BASE,\r\n ye = y.e / LOG_BASE,\r\n xc = x.c,\r\n yc = y.c;\r\n\r\n if (!xe || !ye) {\r\n\r\n // Return ±Infinity if either ±Infinity.\r\n if (!xc || !yc) return new BigNumber(a / 0);\r\n\r\n // Either zero?\r\n // Return y if y is non-zero, x if x is non-zero, or zero if both are zero.\r\n if (!xc[0] || !yc[0]) return yc[0] ? y : new BigNumber(xc[0] ? x : a * 0);\r\n }\r\n\r\n xe = bitFloor(xe);\r\n ye = bitFloor(ye);\r\n xc = xc.slice();\r\n\r\n // Prepend zeros to equalise exponents. Faster to use reverse then do unshifts.\r\n if (a = xe - ye) {\r\n if (a > 0) {\r\n ye = xe;\r\n t = yc;\r\n } else {\r\n a = -a;\r\n t = xc;\r\n }\r\n\r\n t.reverse();\r\n for (; a--; t.push(0));\r\n t.reverse();\r\n }\r\n\r\n a = xc.length;\r\n b = yc.length;\r\n\r\n // Point xc to the longer array, and b to the shorter length.\r\n if (a - b < 0) t = yc, yc = xc, xc = t, b = a;\r\n\r\n // Only start adding at yc.length - 1 as the further digits of xc can be ignored.\r\n for (a = 0; b;) {\r\n a = (xc[--b] = xc[b] + yc[b] + a) / BASE | 0;\r\n xc[b] = BASE === xc[b] ? 0 : xc[b] % BASE;\r\n }\r\n\r\n if (a) {\r\n xc = [a].concat(xc);\r\n ++ye;\r\n }\r\n\r\n // No need to check for zero, as +x + +y != 0 && -x + -y != 0\r\n // ye = MAX_EXP + 1 possible\r\n return normalise(y, xc, ye);\r\n };\r\n\r\n\r\n /*\r\n * If sd is undefined or null or true or false, return the number of significant digits of\r\n * the value of this BigNumber, or null if the value of this BigNumber is ±Infinity or NaN.\r\n * If sd is true include integer-part trailing zeros in the count.\r\n *\r\n * Otherwise, if sd is a number, return a new BigNumber whose value is the value of this\r\n * BigNumber rounded to a maximum of sd significant digits using rounding mode rm, or\r\n * ROUNDING_MODE if rm is omitted.\r\n *\r\n * sd {number|boolean} number: significant digits: integer, 1 to MAX inclusive.\r\n * boolean: whether to count integer-part trailing zeros: true or false.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {sd|rm}'\r\n */\r\n P.precision = P.sd = function (sd, rm) {\r\n var c, n, v,\r\n x = this;\r\n\r\n if (sd != null && sd !== !!sd) {\r\n intCheck(sd, 1, MAX);\r\n if (rm == null) rm = ROUNDING_MODE;\r\n else intCheck(rm, 0, 8);\r\n\r\n return round(new BigNumber(x), sd, rm);\r\n }\r\n\r\n if (!(c = x.c)) return null;\r\n v = c.length - 1;\r\n n = v * LOG_BASE + 1;\r\n\r\n if (v = c[v]) {\r\n\r\n // Subtract the number of trailing zeros of the last element.\r\n for (; v % 10 == 0; v /= 10, n--);\r\n\r\n // Add the number of digits of the first element.\r\n for (v = c[0]; v >= 10; v /= 10, n++);\r\n }\r\n\r\n if (sd && x.e + 1 > n) n = x.e + 1;\r\n\r\n return n;\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the value of this BigNumber shifted by k places\r\n * (powers of 10). Shift to the right if n > 0, and to the left if n < 0.\r\n *\r\n * k {number} Integer, -MAX_SAFE_INTEGER to MAX_SAFE_INTEGER inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {k}'\r\n */\r\n P.shiftedBy = function (k) {\r\n intCheck(k, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER);\r\n return this.times('1e' + k);\r\n };\r\n\r\n\r\n /*\r\n * sqrt(-n) = N\r\n * sqrt(N) = N\r\n * sqrt(-I) = N\r\n * sqrt(I) = I\r\n * sqrt(0) = 0\r\n * sqrt(-0) = -0\r\n *\r\n * Return a new BigNumber whose value is the square root of the value of this BigNumber,\r\n * rounded according to DECIMAL_PLACES and ROUNDING_MODE.\r\n */\r\n P.squareRoot = P.sqrt = function () {\r\n var m, n, r, rep, t,\r\n x = this,\r\n c = x.c,\r\n s = x.s,\r\n e = x.e,\r\n dp = DECIMAL_PLACES + 4,\r\n half = new BigNumber('0.5');\r\n\r\n // Negative/NaN/Infinity/zero?\r\n if (s !== 1 || !c || !c[0]) {\r\n return new BigNumber(!s || s < 0 && (!c || c[0]) ? NaN : c ? x : 1 / 0);\r\n }\r\n\r\n // Initial estimate.\r\n s = Math.sqrt(+valueOf(x));\r\n\r\n // Math.sqrt underflow/overflow?\r\n // Pass x to Math.sqrt as integer, then adjust the exponent of the result.\r\n if (s == 0 || s == 1 / 0) {\r\n n = coeffToString(c);\r\n if ((n.length + e) % 2 == 0) n += '0';\r\n s = Math.sqrt(+n);\r\n e = bitFloor((e + 1) / 2) - (e < 0 || e % 2);\r\n\r\n if (s == 1 / 0) {\r\n n = '5e' + e;\r\n } else {\r\n n = s.toExponential();\r\n n = n.slice(0, n.indexOf('e') + 1) + e;\r\n }\r\n\r\n r = new BigNumber(n);\r\n } else {\r\n r = new BigNumber(s + '');\r\n }\r\n\r\n // Check for zero.\r\n // r could be zero if MIN_EXP is changed after the this value was created.\r\n // This would cause a division by zero (x/t) and hence Infinity below, which would cause\r\n // coeffToString to throw.\r\n if (r.c[0]) {\r\n e = r.e;\r\n s = e + dp;\r\n if (s < 3) s = 0;\r\n\r\n // Newton-Raphson iteration.\r\n for (; ;) {\r\n t = r;\r\n r = half.times(t.plus(div(x, t, dp, 1)));\r\n\r\n if (coeffToString(t.c).slice(0, s) === (n = coeffToString(r.c)).slice(0, s)) {\r\n\r\n // The exponent of r may here be one less than the final result exponent,\r\n // e.g 0.0009999 (e-4) --> 0.001 (e-3), so adjust s so the rounding digits\r\n // are indexed correctly.\r\n if (r.e < e) --s;\r\n n = n.slice(s - 3, s + 1);\r\n\r\n // The 4th rounding digit may be in error by -1 so if the 4 rounding digits\r\n // are 9999 or 4999 (i.e. approaching a rounding boundary) continue the\r\n // iteration.\r\n if (n == '9999' || !rep && n == '4999') {\r\n\r\n // On the first iteration only, check to see if rounding up gives the\r\n // exact result as the nines may infinitely repeat.\r\n if (!rep) {\r\n round(t, t.e + DECIMAL_PLACES + 2, 0);\r\n\r\n if (t.times(t).eq(x)) {\r\n r = t;\r\n break;\r\n }\r\n }\r\n\r\n dp += 4;\r\n s += 4;\r\n rep = 1;\r\n } else {\r\n\r\n // If rounding digits are null, 0{0,4} or 50{0,3}, check for exact\r\n // result. If not, then there are further digits and m will be truthy.\r\n if (!+n || !+n.slice(1) && n.charAt(0) == '5') {\r\n\r\n // Truncate to the first rounding digit.\r\n round(r, r.e + DECIMAL_PLACES + 2, 1);\r\n m = !r.times(r).eq(x);\r\n }\r\n\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return round(r, r.e + DECIMAL_PLACES + 1, ROUNDING_MODE, m);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this BigNumber in exponential notation and\r\n * rounded using ROUNDING_MODE to dp fixed decimal places.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n */\r\n P.toExponential = function (dp, rm) {\r\n if (dp != null) {\r\n intCheck(dp, 0, MAX);\r\n dp++;\r\n }\r\n return format(this, dp, rm, 1);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this BigNumber in fixed-point notation rounding\r\n * to dp fixed decimal places using rounding mode rm, or ROUNDING_MODE if rm is omitted.\r\n *\r\n * Note: as with JavaScript's number type, (-0).toFixed(0) is '0',\r\n * but e.g. (-0.00001).toFixed(0) is '-0'.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n */\r\n P.toFixed = function (dp, rm) {\r\n if (dp != null) {\r\n intCheck(dp, 0, MAX);\r\n dp = dp + this.e + 1;\r\n }\r\n return format(this, dp, rm);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this BigNumber in fixed-point notation rounded\r\n * using rm or ROUNDING_MODE to dp decimal places, and formatted according to the properties\r\n * of the format or FORMAT object (see BigNumber.set).\r\n *\r\n * The formatting object may contain some or all of the properties shown below.\r\n *\r\n * FORMAT = {\r\n * prefix: '',\r\n * groupSize: 3,\r\n * secondaryGroupSize: 0,\r\n * groupSeparator: ',',\r\n * decimalSeparator: '.',\r\n * fractionGroupSize: 0,\r\n * fractionGroupSeparator: '\\xA0', // non-breaking space\r\n * suffix: ''\r\n * };\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n * [format] {object} Formatting options. See FORMAT pbject above.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n * '[BigNumber Error] Argument not an object: {format}'\r\n */\r\n P.toFormat = function (dp, rm, format) {\r\n var str,\r\n x = this;\r\n\r\n if (format == null) {\r\n if (dp != null && rm && typeof rm == 'object') {\r\n format = rm;\r\n rm = null;\r\n } else if (dp && typeof dp == 'object') {\r\n format = dp;\r\n dp = rm = null;\r\n } else {\r\n format = FORMAT;\r\n }\r\n } else if (typeof format != 'object') {\r\n throw Error\r\n (bignumberError + 'Argument not an object: ' + format);\r\n }\r\n\r\n str = x.toFixed(dp, rm);\r\n\r\n if (x.c) {\r\n var i,\r\n arr = str.split('.'),\r\n g1 = +format.groupSize,\r\n g2 = +format.secondaryGroupSize,\r\n groupSeparator = format.groupSeparator || '',\r\n intPart = arr[0],\r\n fractionPart = arr[1],\r\n isNeg = x.s < 0,\r\n intDigits = isNeg ? intPart.slice(1) : intPart,\r\n len = intDigits.length;\r\n\r\n if (g2) i = g1, g1 = g2, g2 = i, len -= i;\r\n\r\n if (g1 > 0 && len > 0) {\r\n i = len % g1 || g1;\r\n intPart = intDigits.substr(0, i);\r\n for (; i < len; i += g1) intPart += groupSeparator + intDigits.substr(i, g1);\r\n if (g2 > 0) intPart += groupSeparator + intDigits.slice(i);\r\n if (isNeg) intPart = '-' + intPart;\r\n }\r\n\r\n str = fractionPart\r\n ? intPart + (format.decimalSeparator || '') + ((g2 = +format.fractionGroupSize)\r\n ? fractionPart.replace(new RegExp('\\\\d{' + g2 + '}\\\\B', 'g'),\r\n '$&' + (format.fractionGroupSeparator || ''))\r\n : fractionPart)\r\n : intPart;\r\n }\r\n\r\n return (format.prefix || '') + str + (format.suffix || '');\r\n };\r\n\r\n\r\n /*\r\n * Return an array of two BigNumbers representing the value of this BigNumber as a simple\r\n * fraction with an integer numerator and an integer denominator.\r\n * The denominator will be a positive non-zero value less than or equal to the specified\r\n * maximum denominator. If a maximum denominator is not specified, the denominator will be\r\n * the lowest value necessary to represent the number exactly.\r\n *\r\n * [md] {number|string|BigNumber} Integer >= 1, or Infinity. The maximum denominator.\r\n *\r\n * '[BigNumber Error] Argument {not an integer|out of range} : {md}'\r\n */\r\n P.toFraction = function (md) {\r\n var d, d0, d1, d2, e, exp, n, n0, n1, q, r, s,\r\n x = this,\r\n xc = x.c;\r\n\r\n if (md != null) {\r\n n = new BigNumber(md);\r\n\r\n // Throw if md is less than one or is not an integer, unless it is Infinity.\r\n if (!n.isInteger() && (n.c || n.s !== 1) || n.lt(ONE)) {\r\n throw Error\r\n (bignumberError + 'Argument ' +\r\n (n.isInteger() ? 'out of range: ' : 'not an integer: ') + valueOf(n));\r\n }\r\n }\r\n\r\n if (!xc) return new BigNumber(x);\r\n\r\n d = new BigNumber(ONE);\r\n n1 = d0 = new BigNumber(ONE);\r\n d1 = n0 = new BigNumber(ONE);\r\n s = coeffToString(xc);\r\n\r\n // Determine initial denominator.\r\n // d is a power of 10 and the minimum max denominator that specifies the value exactly.\r\n e = d.e = s.length - x.e - 1;\r\n d.c[0] = POWS_TEN[(exp = e % LOG_BASE) < 0 ? LOG_BASE + exp : exp];\r\n md = !md || n.comparedTo(d) > 0 ? (e > 0 ? d : n1) : n;\r\n\r\n exp = MAX_EXP;\r\n MAX_EXP = 1 / 0;\r\n n = new BigNumber(s);\r\n\r\n // n0 = d1 = 0\r\n n0.c[0] = 0;\r\n\r\n for (; ;) {\r\n q = div(n, d, 0, 1);\r\n d2 = d0.plus(q.times(d1));\r\n if (d2.comparedTo(md) == 1) break;\r\n d0 = d1;\r\n d1 = d2;\r\n n1 = n0.plus(q.times(d2 = n1));\r\n n0 = d2;\r\n d = n.minus(q.times(d2 = d));\r\n n = d2;\r\n }\r\n\r\n d2 = div(md.minus(d0), d1, 0, 1);\r\n n0 = n0.plus(d2.times(n1));\r\n d0 = d0.plus(d2.times(d1));\r\n n0.s = n1.s = x.s;\r\n e = e * 2;\r\n\r\n // Determine which fraction is closer to x, n0/d0 or n1/d1\r\n r = div(n1, d1, e, ROUNDING_MODE).minus(x).abs().comparedTo(\r\n div(n0, d0, e, ROUNDING_MODE).minus(x).abs()) < 1 ? [n1, d1] : [n0, d0];\r\n\r\n MAX_EXP = exp;\r\n\r\n return r;\r\n };\r\n\r\n\r\n /*\r\n * Return the value of this BigNumber converted to a number primitive.\r\n */\r\n P.toNumber = function () {\r\n return +valueOf(this);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this BigNumber rounded to sd significant digits\r\n * using rounding mode rm or ROUNDING_MODE. If sd is less than the number of digits\r\n * necessary to represent the integer part of the value in fixed-point notation, then use\r\n * exponential notation.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {sd|rm}'\r\n */\r\n P.toPrecision = function (sd, rm) {\r\n if (sd != null) intCheck(sd, 1, MAX);\r\n return format(this, sd, rm, 2);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this BigNumber in base b, or base 10 if b is\r\n * omitted. If a base is specified, including base 10, round according to DECIMAL_PLACES and\r\n * ROUNDING_MODE. If a base is not specified, and this BigNumber has a positive exponent\r\n * that is equal to or greater than TO_EXP_POS, or a negative exponent equal to or less than\r\n * TO_EXP_NEG, return exponential notation.\r\n *\r\n * [b] {number} Integer, 2 to ALPHABET.length inclusive.\r\n *\r\n * '[BigNumber Error] Base {not a primitive number|not an integer|out of range}: {b}'\r\n */\r\n P.toString = function (b) {\r\n var str,\r\n n = this,\r\n s = n.s,\r\n e = n.e;\r\n\r\n // Infinity or NaN?\r\n if (e === null) {\r\n if (s) {\r\n str = 'Infinity';\r\n if (s < 0) str = '-' + str;\r\n } else {\r\n str = 'NaN';\r\n }\r\n } else {\r\n if (b == null) {\r\n str = e <= TO_EXP_NEG || e >= TO_EXP_POS\r\n ? toExponential(coeffToString(n.c), e)\r\n : toFixedPoint(coeffToString(n.c), e, '0');\r\n } else if (b === 10 && alphabetHasNormalDecimalDigits) {\r\n n = round(new BigNumber(n), DECIMAL_PLACES + e + 1, ROUNDING_MODE);\r\n str = toFixedPoint(coeffToString(n.c), n.e, '0');\r\n } else {\r\n intCheck(b, 2, ALPHABET.length, 'Base');\r\n str = convertBase(toFixedPoint(coeffToString(n.c), e, '0'), 10, b, s, true);\r\n }\r\n\r\n if (s < 0 && n.c[0]) str = '-' + str;\r\n }\r\n\r\n return str;\r\n };\r\n\r\n\r\n /*\r\n * Return as toString, but do not accept a base argument, and include the minus sign for\r\n * negative zero.\r\n */\r\n P.valueOf = P.toJSON = function () {\r\n return valueOf(this);\r\n };\r\n\r\n\r\n P._isBigNumber = true;\r\n\r\n P[Symbol.toStringTag] = 'BigNumber';\r\n\r\n // Node.js v10.12.0+\r\n P[Symbol.for('nodejs.util.inspect.custom')] = P.valueOf;\r\n\r\n if (configObject != null) BigNumber.set(configObject);\r\n\r\n return BigNumber;\r\n}\r\n\r\n\r\n// PRIVATE HELPER FUNCTIONS\r\n\r\n// These functions don't need access to variables,\r\n// e.g. DECIMAL_PLACES, in the scope of the `clone` function above.\r\n\r\n\r\nfunction bitFloor(n) {\r\n var i = n | 0;\r\n return n > 0 || n === i ? i : i - 1;\r\n}\r\n\r\n\r\n// Return a coefficient array as a string of base 10 digits.\r\nfunction coeffToString(a) {\r\n var s, z,\r\n i = 1,\r\n j = a.length,\r\n r = a[0] + '';\r\n\r\n for (; i < j;) {\r\n s = a[i++] + '';\r\n z = LOG_BASE - s.length;\r\n for (; z--; s = '0' + s);\r\n r += s;\r\n }\r\n\r\n // Determine trailing zeros.\r\n for (j = r.length; r.charCodeAt(--j) === 48;);\r\n\r\n return r.slice(0, j + 1 || 1);\r\n}\r\n\r\n\r\n// Compare the value of BigNumbers x and y.\r\nfunction compare(x, y) {\r\n var a, b,\r\n xc = x.c,\r\n yc = y.c,\r\n i = x.s,\r\n j = y.s,\r\n k = x.e,\r\n l = y.e;\r\n\r\n // Either NaN?\r\n if (!i || !j) return null;\r\n\r\n a = xc && !xc[0];\r\n b = yc && !yc[0];\r\n\r\n // Either zero?\r\n if (a || b) return a ? b ? 0 : -j : i;\r\n\r\n // Signs differ?\r\n if (i != j) return i;\r\n\r\n a = i < 0;\r\n b = k == l;\r\n\r\n // Either Infinity?\r\n if (!xc || !yc) return b ? 0 : !xc ^ a ? 1 : -1;\r\n\r\n // Compare exponents.\r\n if (!b) return k > l ^ a ? 1 : -1;\r\n\r\n j = (k = xc.length) < (l = yc.length) ? k : l;\r\n\r\n // Compare digit by digit.\r\n for (i = 0; i < j; i++) if (xc[i] != yc[i]) return xc[i] > yc[i] ^ a ? 1 : -1;\r\n\r\n // Compare lengths.\r\n return k == l ? 0 : k > l ^ a ? 1 : -1;\r\n}\r\n\r\n\r\n/*\r\n * Check that n is a primitive number, an integer, and in range, otherwise throw.\r\n */\r\nfunction intCheck(n, min, max, name) {\r\n if (n < min || n > max || n !== mathfloor(n)) {\r\n throw Error\r\n (bignumberError + (name || 'Argument') + (typeof n == 'number'\r\n ? n < min || n > max ? ' out of range: ' : ' not an integer: '\r\n : ' not a primitive number: ') + String(n));\r\n }\r\n}\r\n\r\n\r\n// Assumes finite n.\r\nfunction isOdd(n) {\r\n var k = n.c.length - 1;\r\n return bitFloor(n.e / LOG_BASE) == k && n.c[k] % 2 != 0;\r\n}\r\n\r\n\r\nfunction toExponential(str, e) {\r\n return (str.length > 1 ? str.charAt(0) + '.' + str.slice(1) : str) +\r\n (e < 0 ? 'e' : 'e+') + e;\r\n}\r\n\r\n\r\nfunction toFixedPoint(str, e, z) {\r\n var len, zs;\r\n\r\n // Negative exponent?\r\n if (e < 0) {\r\n\r\n // Prepend zeros.\r\n for (zs = z + '.'; ++e; zs += z);\r\n str = zs + str;\r\n\r\n // Positive exponent\r\n } else {\r\n len = str.length;\r\n\r\n // Append zeros.\r\n if (++e > len) {\r\n for (zs = z, e -= len; --e; zs += z);\r\n str += zs;\r\n } else if (e < len) {\r\n str = str.slice(0, e) + '.' + str.slice(e);\r\n }\r\n }\r\n\r\n return str;\r\n}\r\n\r\n\r\n// EXPORT\r\n\r\n\r\nexport var BigNumber = clone();\r\n\r\nexport default BigNumber;\r\n"],"names":["exports","byteLength","b64","lens","getLens","validLen","placeHoldersLen","toByteArray","tmp","i","arr","Arr","_byteLength","curByte","len","revLookup","charCodeAt","fromByteArray","uint8","length","extraBytes","parts","maxChunkLength","len2","push","encodeChunk","lookup","join","Uint8Array","Array","code","Error","indexOf","tripletToBase64","num","start","end","output","sleep","time","Promise","res","setTimeout","randomToken","Math","random","toString","substring","lastMs","additional","microSeconds","ms","Date","getTime","isNode","Object","prototype","call","process","create","channelName","state","messagesCallback","bc","BroadcastChannel","subFns","onmessage","msg","data","close","channelState","onMessage","fn","postMessage","messageJson","resolve","err","reject","canBeUsed","window","_pubkey","type","averageResponseTime","fillOptionsWithDefaults","originalOptions","arguments","undefined","options","JSON","parse","stringify","webWorkerSupport","idb","ttl","fallbackInterval","onclose","localstorage","removeTimeout","methods","node","useFastPath","OBJECT_STORE_ID","getIdb","indexedDB","mozIndexedDB","webkitIndexedDB","msIndexedDB","_readLoop","closed","readNewMessages","then","db","lastCursorId","objectStore","transaction","ret","keyRangeValue","IDBKeyRange","bound","Infinity","openCursor","e","onsuccess","ev","cursor","target","result","value","id","newerMessages","useMessages","filter","msgObj","map","uuid","eMIs","has","messagesCallbackTime","_filterMessage","sort","msgObjA","msgObjB","forEach","add","dbName","openRequest","open","onupgradeneeded","createObjectStore","keyPath","autoIncrement","rej","onerror","createDatabase","writeBlockPromise","readQueuePromises","readerUuid","writeObject","oncomplete","writeMessage","floor","olderThen","msgObk","getOldMessages","tooOld","all","request","removeMessageById","getLocalStorage","localStorage","storageKey","ls","key","setItem","removeItem","listener","newValue","token","addEventListener","addStorageEventListener","removeEventListener","writeObj","document","createEvent","initEvent","dispatchEvent","userAgent","navigator","toLowerCase","includes","defaultTime","SIMULATE_CHANNELS","Set","name","from","channel","METHODS","NodeMethod","maybePromise","obj","this","method","chooseMethods","concat","Boolean","find","m","useMethod","chooseMethod","_iL","_onML","_addEL","message","internal","_uMP","_befC","_prepP","s","_state","_post","broadcastChannel","sendPromise","_hasMessageListeners","_addListenerObject","listenerFn","_startListening","_removeListenerObject","o","_stopListening","postInternal","listenObj","_this","awaitPrepare","isClosed","base64","ieee754","customInspectSymbol","Symbol","Buffer","K_MAX_LENGTH","createBuffer","RangeError","buf","setPrototypeOf","arg","encodingOrOffset","TypeError","allocUnsafe","string","encoding","isEncoding","actual","write","slice","fromString","ArrayBuffer","isView","arrayView","isInstance","copy","fromArrayBuffer","buffer","byteOffset","fromArrayLike","fromArrayView","SharedArrayBuffer","valueOf","b","isBuffer","checked","numberIsNaN","isArray","fromObject","toPrimitive","assertSize","size","array","mustMatch","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","n","bidirectionalIndexOf","val","dir","arrayIndexOf","lastIndexOf","indexSize","arrLength","valLength","String","read","readUInt16BE","foundIndex","found","j","hexWrite","offset","Number","remaining","strLen","parsed","parseInt","substr","utf8Write","blitBuffer","asciiWrite","str","byteArray","asciiToBytes","base64Write","ucs2Write","units","c","hi","lo","utf16leToBytes","min","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","codePoint","bytesPerSequence","codePoints","MAX_ARGUMENTS_LENGTH","fromCharCode","apply","decodeCodePointsArray","TYPED_ARRAY_SUPPORT","proto","foo","typedArraySupport","console","error","defineProperty","enumerable","get","poolSize","alloc","fill","allocUnsafeSlow","_isBuffer","compare","a","x","y","list","pos","set","swap16","swap32","swap64","toLocaleString","equals","inspect","max","replace","trim","thisStart","thisEnd","thisCopy","targetCopy","isFinite","toJSON","_arr","out","hexSliceLookupTable","bytes","checkOffset","ext","checkInt","checkIEEE754","writeFloat","littleEndian","noAssert","writeDouble","newBuf","subarray","readUintLE","readUIntLE","mul","readUintBE","readUIntBE","readUint8","readUInt8","readUint16LE","readUInt16LE","readUint16BE","readUint32LE","readUInt32LE","readUint32BE","readUInt32BE","readIntLE","pow","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUintLE","writeUIntLE","writeUintBE","writeUIntBE","writeUint8","writeUInt8","writeUint16LE","writeUInt16LE","writeUint16BE","writeUInt16BE","writeUint32LE","writeUInt32LE","writeUint32BE","writeUInt32BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","copyWithin","INVALID_BASE64_RE","leadSurrogate","split","base64clean","src","dst","constructor","alphabet","table","i16","isNumeric","mathceil","ceil","mathfloor","bignumberError","tooManyDigits","BASE","LOG_BASE","MAX_SAFE_INTEGER","POWS_TEN","SQRT_BASE","MAX","bitFloor","coeffToString","z","r","xc","yc","k","l","intCheck","isOdd","toExponential","charAt","toFixedPoint","zs","BigNumber","clone","configObject","div","convertBase","parseNumeric","pow2_53","random53bitInt","basePrefix","dotAfter","dotBefore","isInfinityOrNaN","whitespaceOrPlus","P","ONE","DECIMAL_PLACES","ROUNDING_MODE","TO_EXP_NEG","TO_EXP_POS","MIN_EXP","MAX_EXP","CRYPTO","MODULO_MODE","POW_PRECISION","FORMAT","prefix","groupSize","secondaryGroupSize","groupSeparator","decimalSeparator","fractionGroupSize","fractionGroupSeparator","suffix","ALPHABET","alphabetHasNormalDecimalDigits","v","caseChanged","isNum","_isBigNumber","test","search","round","DEBUG","toUpperCase","format","rm","c0","ne","maxOrMin","args","normalise","pop","sd","d","ni","rd","pows10","ROUND_UP","ROUND_DOWN","ROUND_CEIL","ROUND_FLOOR","ROUND_HALF_UP","ROUND_HALF_DOWN","ROUND_HALF_EVEN","ROUND_HALF_CEIL","ROUND_HALF_FLOOR","EUCLID","config","p","hasOwnProperty","crypto","getRandomValues","randomBytes","EXPONENTIAL_AT","RANGE","isBigNumber","maximum","lt","minimum","gt","dp","rand","Uint32Array","splice","sum","plus","decimal","toBaseOut","baseIn","baseOut","arrL","reverse","sign","callerIsToString","multiply","base","temp","xlo","xhi","carry","klo","khi","aL","bL","cmp","subtract","more","prod","prodL","q","qc","rem","remL","rem0","xi","xL","yc0","yL","yz","NaN","isNaN","p1","p2","absoluteValue","abs","comparedTo","decimalPlaces","dividedBy","dividedToIntegerBy","idiv","exponentiatedBy","half","isModExp","nIsBig","nIsNeg","nIsOdd","isInteger","mod","times","integerValue","isEqualTo","eq","isGreaterThan","isGreaterThanOrEqualTo","gte","isLessThan","isLessThanOrEqualTo","lte","isNegative","isPositive","isZero","minus","t","xLTy","xe","ye","modulo","multipliedBy","xcL","ycL","ylo","yhi","zc","sqrtBase","negated","precision","shiftedBy","squareRoot","sqrt","rep","toFixed","toFormat","g1","g2","intPart","fractionPart","isNeg","intDigits","RegExp","toFraction","md","d0","d1","d2","exp","n0","n1","toNumber","toPrecision","toStringTag","for"],"sourceRoot":""}