@alphafi/alphafi-sdk 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/.babelrc +6 -0
  2. package/.eslintrc.json +30 -0
  3. package/README.md +1 -0
  4. package/dist/common/cetus_mainnet_config.d.ts +3 -0
  5. package/dist/common/cetus_mainnet_config.d.ts.map +1 -0
  6. package/dist/common/coins.d.ts +11 -0
  7. package/dist/common/coins.d.ts.map +1 -0
  8. package/dist/common/constants.d.ts +294 -0
  9. package/dist/common/constants.d.ts.map +1 -0
  10. package/dist/common/maps.d.ts +30 -0
  11. package/dist/common/maps.d.ts.map +1 -0
  12. package/dist/common/pyth.d.ts +7 -0
  13. package/dist/common/pyth.d.ts.map +1 -0
  14. package/dist/common/types.d.ts +331 -0
  15. package/dist/common/types.d.ts.map +1 -0
  16. package/dist/functions.d.ts +20 -0
  17. package/dist/functions.d.ts.map +1 -0
  18. package/dist/getVaultBalances.d.ts +5 -0
  19. package/dist/getVaultBalances.d.ts.map +1 -0
  20. package/dist/getVaults.d.ts +3 -0
  21. package/dist/getVaults.d.ts.map +1 -0
  22. package/dist/index.d.ts +4 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +3 -0
  25. package/dist/index.js.LICENSE.txt +28 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/portfolioAmount.d.ts +36 -0
  28. package/dist/portfolioAmount.d.ts.map +1 -0
  29. package/dist/price.d.ts +19 -0
  30. package/dist/price.d.ts.map +1 -0
  31. package/jest.config.js +14 -0
  32. package/package.json +51 -0
  33. package/src/common/cetus_mainnet_config.ts +72 -0
  34. package/src/common/coins.ts +126 -0
  35. package/src/common/constants.ts +820 -0
  36. package/src/common/maps.ts +200 -0
  37. package/src/common/pyth.ts +23 -0
  38. package/src/common/types.ts +446 -0
  39. package/src/functions.ts +299 -0
  40. package/src/getVaultBalances.ts +128 -0
  41. package/src/getVaults.ts +63 -0
  42. package/src/index.ts +13 -0
  43. package/src/portfolioAmount.ts +365 -0
  44. package/src/price.ts +397 -0
  45. package/tsconfig.json +21 -0
  46. package/webpack.config.js +59 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","mappings":"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","sources":["webpack://AlphaFiSDK/webpack/universalModuleDefinition","webpack://AlphaFiSDK/./node_modules/asynckit/index.js","webpack://AlphaFiSDK/./node_modules/asynckit/lib/abort.js","webpack://AlphaFiSDK/./node_modules/asynckit/lib/async.js","webpack://AlphaFiSDK/./node_modules/asynckit/lib/defer.js","webpack://AlphaFiSDK/./node_modules/asynckit/lib/iterate.js","webpack://AlphaFiSDK/./node_modules/asynckit/lib/state.js","webpack://AlphaFiSDK/./node_modules/asynckit/lib/terminator.js","webpack://AlphaFiSDK/./node_modules/asynckit/parallel.js","webpack://AlphaFiSDK/./node_modules/asynckit/serial.js","webpack://AlphaFiSDK/./node_modules/asynckit/serialOrdered.js","webpack://AlphaFiSDK/./node_modules/bn.js/lib/bn.js","webpack://AlphaFiSDK/./node_modules/combined-stream/lib/combined_stream.js","webpack://AlphaFiSDK/./node_modules/debug/src/browser.js","webpack://AlphaFiSDK/./node_modules/debug/src/common.js","webpack://AlphaFiSDK/./node_modules/debug/src/index.js","webpack://AlphaFiSDK/./node_modules/debug/src/node.js","webpack://AlphaFiSDK/./node_modules/delayed-stream/lib/delayed_stream.js","webpack://AlphaFiSDK/./node_modules/follow-redirects/debug.js","webpack://AlphaFiSDK/./node_modules/follow-redirects/index.js","webpack://AlphaFiSDK/./node_modules/form-data/lib/form_data.js","webpack://AlphaFiSDK/./node_modules/form-data/lib/populate.js","webpack://AlphaFiSDK/./node_modules/has-flag/index.js","webpack://AlphaFiSDK/./node_modules/mime-db/index.js","webpack://AlphaFiSDK/./node_modules/mime-types/index.js","webpack://AlphaFiSDK/./node_modules/ms/index.js","webpack://AlphaFiSDK/./node_modules/proxy-from-env/index.js","webpack://AlphaFiSDK/./node_modules/supports-color/index.js","webpack://AlphaFiSDK/external node-commonjs \"assert\"","webpack://AlphaFiSDK/external node-commonjs \"buffer\"","webpack://AlphaFiSDK/external node-commonjs \"fs\"","webpack://AlphaFiSDK/external node-commonjs \"http\"","webpack://AlphaFiSDK/external node-commonjs \"https\"","webpack://AlphaFiSDK/external node-commonjs \"os\"","webpack://AlphaFiSDK/external node-commonjs \"path\"","webpack://AlphaFiSDK/external node-commonjs \"stream\"","webpack://AlphaFiSDK/external node-commonjs \"tty\"","webpack://AlphaFiSDK/external node-commonjs \"url\"","webpack://AlphaFiSDK/external node-commonjs \"util\"","webpack://AlphaFiSDK/webpack/bootstrap","webpack://AlphaFiSDK/webpack/runtime/compat get default export","webpack://AlphaFiSDK/webpack/runtime/define property getters","webpack://AlphaFiSDK/webpack/runtime/hasOwnProperty shorthand","webpack://AlphaFiSDK/webpack/runtime/make namespace object","webpack://AlphaFiSDK/webpack/runtime/node module decorator","webpack://AlphaFiSDK/./src/common/constants.ts","webpack://AlphaFiSDK/./src/common/maps.ts","webpack://AlphaFiSDK/./node_modules/@mysten/bcs/dist/esm/b64.js","webpack://AlphaFiSDK/./node_modules/base-x/src/esm/index.js","webpack://AlphaFiSDK/./node_modules/bs58/src/esm/index.js","webpack://AlphaFiSDK/./node_modules/@mysten/bcs/dist/esm/b58.js","webpack://AlphaFiSDK/./node_modules/@mysten/bcs/dist/esm/hex.js","webpack://AlphaFiSDK/./node_modules/@mysten/bcs/dist/esm/uleb.js","webpack://AlphaFiSDK/./node_modules/@mysten/bcs/dist/esm/reader.js","webpack://AlphaFiSDK/./node_modules/@mysten/bcs/dist/esm/writer.js","webpack://AlphaFiSDK/./node_modules/@mysten/bcs/dist/esm/utils.js","webpack://AlphaFiSDK/./node_modules/@mysten/bcs/dist/esm/bcs-type.js","webpack://AlphaFiSDK/./node_modules/valibot/dist/index.js","webpack://AlphaFiSDK/./node_modules/@mysten/sui/dist/esm/utils/sui-types.js","webpack://AlphaFiSDK/./node_modules/@mysten/sui/dist/esm/transactions/data/internal.js","webpack://AlphaFiSDK/./node_modules/@mysten/sui/dist/esm/transactions/Commands.js","webpack://AlphaFiSDK/./node_modules/@mysten/sui/dist/esm/bcs/type-tag-serializer.js","webpack://AlphaFiSDK/./node_modules/@mysten/sui/dist/esm/transactions/data/v1.js","webpack://AlphaFiSDK/./node_modules/@mysten/sui/dist/esm/transactions/data/v2.js","webpack://AlphaFiSDK/./node_modules/@mysten/sui/dist/esm/transactions/Inputs.js","webpack://AlphaFiSDK/./node_modules/@mysten/bcs/dist/esm/bcs.js","webpack://AlphaFiSDK/./node_modules/@mysten/sui/dist/esm/bcs/bcs.js","webpack://AlphaFiSDK/./node_modules/@mysten/sui/dist/esm/bcs/effects.js","webpack://AlphaFiSDK/./node_modules/@mysten/sui/dist/esm/bcs/index.js","webpack://AlphaFiSDK/./node_modules/@mysten/sui/dist/esm/utils/constants.js","webpack://AlphaFiSDK/./node_modules/@mysten/sui/dist/esm/transactions/serializer.js","webpack://AlphaFiSDK/./node_modules/@mysten/sui/dist/esm/transactions/json-rpc-resolver.js","webpack://AlphaFiSDK/./node_modules/@mysten/sui/dist/esm/transactions/pure.js","webpack://AlphaFiSDK/./node_modules/@noble/hashes/esm/_assert.js","webpack://AlphaFiSDK/./node_modules/@noble/hashes/esm/utils.js","webpack://AlphaFiSDK/./node_modules/@noble/hashes/esm/_blake.js","webpack://AlphaFiSDK/./node_modules/@noble/hashes/esm/_u64.js","webpack://AlphaFiSDK/./node_modules/@noble/hashes/esm/blake2b.js","webpack://AlphaFiSDK/./node_modules/@mysten/sui/dist/esm/transactions/TransactionData.js","webpack://AlphaFiSDK/./node_modules/@mysten/sui/dist/esm/transactions/hash.js","webpack://AlphaFiSDK/./node_modules/@mysten/sui/dist/esm/transactions/utils.js","webpack://AlphaFiSDK/./node_modules/@mysten/sui/dist/esm/transactions/Transaction.js","webpack://AlphaFiSDK/./node_modules/@mysten/sui/dist/esm/utils/suins.js","webpack://AlphaFiSDK/./node_modules/@mysten/sui/dist/esm/client/errors.js","webpack://AlphaFiSDK/./node_modules/@mysten/sui/dist/esm/client/rpc-websocket-client.js","webpack://AlphaFiSDK/./node_modules/@mysten/sui/dist/esm/client/http-transport.js","webpack://AlphaFiSDK/./node_modules/@mysten/sui/dist/esm/version.js","webpack://AlphaFiSDK/./node_modules/@mysten/sui/dist/esm/client/client.js","webpack://AlphaFiSDK/./node_modules/@mysten/sui/dist/esm/client/network.js","webpack://AlphaFiSDK/./node_modules/decimal.js/decimal.mjs","webpack://AlphaFiSDK/./node_modules/tslib/tslib.es6.mjs","webpack://AlphaFiSDK/./node_modules/ss-comparator/dist/index.esm.js","webpack://AlphaFiSDK/./node_modules/ss-linked-list/dist/index.esm.js","webpack://AlphaFiSDK/./node_modules/ss-queue/dist/index.esm.js","webpack://AlphaFiSDK/./node_modules/ss-stack/dist/index.esm.js","webpack://AlphaFiSDK/./node_modules/@syntsugar/cc-graph/dist/index.esm.js","webpack://AlphaFiSDK/./node_modules/js-base64/base64.mjs","webpack://AlphaFiSDK/external node-commonjs \"crypto\"","webpack://AlphaFiSDK/./node_modules/uuid/dist/esm-node/native.js","webpack://AlphaFiSDK/./node_modules/uuid/dist/esm-node/rng.js","webpack://AlphaFiSDK/./node_modules/uuid/dist/esm-node/stringify.js","webpack://AlphaFiSDK/./node_modules/uuid/dist/esm-node/v4.js","webpack://AlphaFiSDK/./node_modules/axios/lib/helpers/bind.js","webpack://AlphaFiSDK/./node_modules/axios/lib/utils.js","webpack://AlphaFiSDK/./node_modules/axios/lib/core/AxiosError.js","webpack://AlphaFiSDK/./node_modules/axios/lib/platform/node/classes/FormData.js","webpack://AlphaFiSDK/./node_modules/axios/lib/helpers/toFormData.js","webpack://AlphaFiSDK/./node_modules/axios/lib/helpers/AxiosURLSearchParams.js","webpack://AlphaFiSDK/./node_modules/axios/lib/helpers/buildURL.js","webpack://AlphaFiSDK/./node_modules/axios/lib/core/InterceptorManager.js","webpack://AlphaFiSDK/./node_modules/axios/lib/defaults/transitional.js","webpack://AlphaFiSDK/./node_modules/axios/lib/platform/node/index.js","webpack://AlphaFiSDK/./node_modules/axios/lib/platform/node/classes/URLSearchParams.js","webpack://AlphaFiSDK/./node_modules/axios/lib/platform/common/utils.js","webpack://AlphaFiSDK/./node_modules/axios/lib/platform/index.js","webpack://AlphaFiSDK/./node_modules/axios/lib/helpers/formDataToJSON.js","webpack://AlphaFiSDK/./node_modules/axios/lib/defaults/index.js","webpack://AlphaFiSDK/./node_modules/axios/lib/helpers/toURLEncodedForm.js","webpack://AlphaFiSDK/./node_modules/axios/lib/helpers/parseHeaders.js","webpack://AlphaFiSDK/./node_modules/axios/lib/core/AxiosHeaders.js","webpack://AlphaFiSDK/./node_modules/axios/lib/core/transformData.js","webpack://AlphaFiSDK/./node_modules/axios/lib/cancel/isCancel.js","webpack://AlphaFiSDK/./node_modules/axios/lib/cancel/CanceledError.js","webpack://AlphaFiSDK/./node_modules/axios/lib/core/settle.js","webpack://AlphaFiSDK/./node_modules/axios/lib/core/buildFullPath.js","webpack://AlphaFiSDK/./node_modules/axios/lib/helpers/isAbsoluteURL.js","webpack://AlphaFiSDK/./node_modules/axios/lib/helpers/combineURLs.js","webpack://AlphaFiSDK/external node-commonjs \"zlib\"","webpack://AlphaFiSDK/./node_modules/axios/lib/env/data.js","webpack://AlphaFiSDK/./node_modules/axios/lib/helpers/parseProtocol.js","webpack://AlphaFiSDK/./node_modules/axios/lib/helpers/fromDataURI.js","webpack://AlphaFiSDK/./node_modules/axios/lib/helpers/throttle.js","webpack://AlphaFiSDK/./node_modules/axios/lib/helpers/speedometer.js","webpack://AlphaFiSDK/./node_modules/axios/lib/helpers/AxiosTransformStream.js","webpack://AlphaFiSDK/external node-commonjs \"events\"","webpack://AlphaFiSDK/./node_modules/axios/lib/helpers/readBlob.js","webpack://AlphaFiSDK/./node_modules/axios/lib/helpers/formDataToStream.js","webpack://AlphaFiSDK/./node_modules/axios/lib/helpers/ZlibHeaderTransformStream.js","webpack://AlphaFiSDK/./node_modules/axios/lib/helpers/callbackify.js","webpack://AlphaFiSDK/./node_modules/axios/lib/adapters/http.js","webpack://AlphaFiSDK/./node_modules/axios/lib/helpers/progressEventReducer.js","webpack://AlphaFiSDK/./node_modules/axios/lib/helpers/isURLSameOrigin.js","webpack://AlphaFiSDK/./node_modules/axios/lib/helpers/cookies.js","webpack://AlphaFiSDK/./node_modules/axios/lib/core/mergeConfig.js","webpack://AlphaFiSDK/./node_modules/axios/lib/helpers/resolveConfig.js","webpack://AlphaFiSDK/./node_modules/axios/lib/adapters/xhr.js","webpack://AlphaFiSDK/./node_modules/axios/lib/helpers/composeSignals.js","webpack://AlphaFiSDK/./node_modules/axios/lib/helpers/trackStream.js","webpack://AlphaFiSDK/./node_modules/axios/lib/adapters/fetch.js","webpack://AlphaFiSDK/./node_modules/axios/lib/adapters/adapters.js","webpack://AlphaFiSDK/./node_modules/axios/lib/core/dispatchRequest.js","webpack://AlphaFiSDK/./node_modules/axios/lib/helpers/validator.js","webpack://AlphaFiSDK/./node_modules/axios/lib/core/Axios.js","webpack://AlphaFiSDK/./node_modules/axios/lib/cancel/CancelToken.js","webpack://AlphaFiSDK/./node_modules/axios/lib/helpers/HttpStatusCode.js","webpack://AlphaFiSDK/./node_modules/axios/lib/axios.js","webpack://AlphaFiSDK/./node_modules/axios/lib/helpers/spread.js","webpack://AlphaFiSDK/./node_modules/axios/lib/helpers/isAxiosError.js","webpack://AlphaFiSDK/./node_modules/@cetusprotocol/cetus-sui-clmm-sdk/dist/index.mjs","webpack://AlphaFiSDK/./src/common/types.ts","webpack://AlphaFiSDK/./src/common/coins.ts","webpack://AlphaFiSDK/./src/common/cetus_mainnet_config.ts","webpack://AlphaFiSDK/./src/price.ts","webpack://AlphaFiSDK/./src/portfolioAmount.ts","webpack://AlphaFiSDK/./src/functions.ts","webpack://AlphaFiSDK/./src/getVaults.ts","webpack://AlphaFiSDK/./src/getVaultBalances.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"AlphaFiSDK\"] = factory();\n\telse\n\t\troot[\"AlphaFiSDK\"] = factory();\n})(this, () => {\nreturn ","module.exports =\n{\n parallel : require('./parallel.js'),\n serial : require('./serial.js'),\n serialOrdered : require('./serialOrdered.js')\n};\n","// API\nmodule.exports = abort;\n\n/**\n * Aborts leftover active jobs\n *\n * @param {object} state - current state object\n */\nfunction abort(state)\n{\n Object.keys(state.jobs).forEach(clean.bind(state));\n\n // reset leftover jobs\n state.jobs = {};\n}\n\n/**\n * Cleans up leftover job by invoking abort function for the provided job id\n *\n * @this state\n * @param {string|number} key - job id to abort\n */\nfunction clean(key)\n{\n if (typeof this.jobs[key] == 'function')\n {\n this.jobs[key]();\n }\n}\n","var defer = require('./defer.js');\n\n// API\nmodule.exports = async;\n\n/**\n * Runs provided callback asynchronously\n * even if callback itself is not\n *\n * @param {function} callback - callback to invoke\n * @returns {function} - augmented callback\n */\nfunction async(callback)\n{\n var isAsync = false;\n\n // check if async happened\n defer(function() { isAsync = true; });\n\n return function async_callback(err, result)\n {\n if (isAsync)\n {\n callback(err, result);\n }\n else\n {\n defer(function nextTick_callback()\n {\n callback(err, result);\n });\n }\n };\n}\n","module.exports = defer;\n\n/**\n * Runs provided function on next iteration of the event loop\n *\n * @param {function} fn - function to run\n */\nfunction defer(fn)\n{\n var nextTick = typeof setImmediate == 'function'\n ? setImmediate\n : (\n typeof process == 'object' && typeof process.nextTick == 'function'\n ? process.nextTick\n : null\n );\n\n if (nextTick)\n {\n nextTick(fn);\n }\n else\n {\n setTimeout(fn, 0);\n }\n}\n","var async = require('./async.js')\n , abort = require('./abort.js')\n ;\n\n// API\nmodule.exports = iterate;\n\n/**\n * Iterates over each job object\n *\n * @param {array|object} list - array or object (named list) to iterate over\n * @param {function} iterator - iterator to run\n * @param {object} state - current job status\n * @param {function} callback - invoked when all elements processed\n */\nfunction iterate(list, iterator, state, callback)\n{\n // store current index\n var key = state['keyedList'] ? state['keyedList'][state.index] : state.index;\n\n state.jobs[key] = runJob(iterator, key, list[key], function(error, output)\n {\n // don't repeat yourself\n // skip secondary callbacks\n if (!(key in state.jobs))\n {\n return;\n }\n\n // clean up jobs\n delete state.jobs[key];\n\n if (error)\n {\n // don't process rest of the results\n // stop still active jobs\n // and reset the list\n abort(state);\n }\n else\n {\n state.results[key] = output;\n }\n\n // return salvaged results\n callback(error, state.results);\n });\n}\n\n/**\n * Runs iterator over provided job element\n *\n * @param {function} iterator - iterator to invoke\n * @param {string|number} key - key/index of the element in the list of jobs\n * @param {mixed} item - job description\n * @param {function} callback - invoked after iterator is done with the job\n * @returns {function|mixed} - job abort function or something else\n */\nfunction runJob(iterator, key, item, callback)\n{\n var aborter;\n\n // allow shortcut if iterator expects only two arguments\n if (iterator.length == 2)\n {\n aborter = iterator(item, async(callback));\n }\n // otherwise go with full three arguments\n else\n {\n aborter = iterator(item, key, async(callback));\n }\n\n return aborter;\n}\n","// API\nmodule.exports = state;\n\n/**\n * Creates initial state object\n * for iteration over list\n *\n * @param {array|object} list - list to iterate over\n * @param {function|null} sortMethod - function to use for keys sort,\n * or `null` to keep them as is\n * @returns {object} - initial state object\n */\nfunction state(list, sortMethod)\n{\n var isNamedList = !Array.isArray(list)\n , initState =\n {\n index : 0,\n keyedList: isNamedList || sortMethod ? Object.keys(list) : null,\n jobs : {},\n results : isNamedList ? {} : [],\n size : isNamedList ? Object.keys(list).length : list.length\n }\n ;\n\n if (sortMethod)\n {\n // sort array keys based on it's values\n // sort object's keys just on own merit\n initState.keyedList.sort(isNamedList ? sortMethod : function(a, b)\n {\n return sortMethod(list[a], list[b]);\n });\n }\n\n return initState;\n}\n","var abort = require('./abort.js')\n , async = require('./async.js')\n ;\n\n// API\nmodule.exports = terminator;\n\n/**\n * Terminates jobs in the attached state context\n *\n * @this AsyncKitState#\n * @param {function} callback - final callback to invoke after termination\n */\nfunction terminator(callback)\n{\n if (!Object.keys(this.jobs).length)\n {\n return;\n }\n\n // fast forward iteration index\n this.index = this.size;\n\n // abort jobs\n abort(this);\n\n // send back results we have so far\n async(callback)(null, this.results);\n}\n","var iterate = require('./lib/iterate.js')\n , initState = require('./lib/state.js')\n , terminator = require('./lib/terminator.js')\n ;\n\n// Public API\nmodule.exports = parallel;\n\n/**\n * Runs iterator over provided array elements in parallel\n *\n * @param {array|object} list - array or object (named list) to iterate over\n * @param {function} iterator - iterator to run\n * @param {function} callback - invoked when all elements processed\n * @returns {function} - jobs terminator\n */\nfunction parallel(list, iterator, callback)\n{\n var state = initState(list);\n\n while (state.index < (state['keyedList'] || list).length)\n {\n iterate(list, iterator, state, function(error, result)\n {\n if (error)\n {\n callback(error, result);\n return;\n }\n\n // looks like it's the last one\n if (Object.keys(state.jobs).length === 0)\n {\n callback(null, state.results);\n return;\n }\n });\n\n state.index++;\n }\n\n return terminator.bind(state, callback);\n}\n","var serialOrdered = require('./serialOrdered.js');\n\n// Public API\nmodule.exports = serial;\n\n/**\n * Runs iterator over provided array elements in series\n *\n * @param {array|object} list - array or object (named list) to iterate over\n * @param {function} iterator - iterator to run\n * @param {function} callback - invoked when all elements processed\n * @returns {function} - jobs terminator\n */\nfunction serial(list, iterator, callback)\n{\n return serialOrdered(list, iterator, null, callback);\n}\n","var iterate = require('./lib/iterate.js')\n , initState = require('./lib/state.js')\n , terminator = require('./lib/terminator.js')\n ;\n\n// Public API\nmodule.exports = serialOrdered;\n// sorting helpers\nmodule.exports.ascending = ascending;\nmodule.exports.descending = descending;\n\n/**\n * Runs iterator over provided sorted array elements in series\n *\n * @param {array|object} list - array or object (named list) to iterate over\n * @param {function} iterator - iterator to run\n * @param {function} sortMethod - custom sort function\n * @param {function} callback - invoked when all elements processed\n * @returns {function} - jobs terminator\n */\nfunction serialOrdered(list, iterator, sortMethod, callback)\n{\n var state = initState(list, sortMethod);\n\n iterate(list, iterator, state, function iteratorHandler(error, result)\n {\n if (error)\n {\n callback(error, result);\n return;\n }\n\n state.index++;\n\n // are we there yet?\n if (state.index < (state['keyedList'] || list).length)\n {\n iterate(list, iterator, state, iteratorHandler);\n return;\n }\n\n // done here\n callback(null, state.results);\n });\n\n return terminator.bind(state, callback);\n}\n\n/*\n * -- Sort methods\n */\n\n/**\n * sort helper to sort array elements in ascending order\n *\n * @param {mixed} a - an item to compare\n * @param {mixed} b - an item to compare\n * @returns {number} - comparison result\n */\nfunction ascending(a, b)\n{\n return a < b ? -1 : a > b ? 1 : 0;\n}\n\n/**\n * sort helper to sort array elements in descending order\n *\n * @param {mixed} a - an item to compare\n * @param {mixed} b - an item to compare\n * @returns {number} - comparison result\n */\nfunction descending(a, b)\n{\n return -1 * ascending(a, b);\n}\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [number & 0x3ffffff];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [0];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this._strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // '0' - '9'\n if (c >= 48 && c <= 57) {\n return c - 48;\n // 'A' - 'F'\n } else if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n } else {\n assert(false, 'Invalid character in ' + string);\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this._strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var b = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n b = c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n b = c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n b = c;\n }\n assert(c >= 0 && b < mul, 'Invalid character');\n r += b;\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [0];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this._strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n function move (dest, src) {\n dest.words = src.words;\n dest.length = src.length;\n dest.negative = src.negative;\n dest.red = src.red;\n }\n\n BN.prototype._move = function _move (dest) {\n move(dest, this);\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype._strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n // Check Symbol.for because not everywhere where Symbol defined\n // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#Browser_compatibility\n if (typeof Symbol !== 'undefined' && typeof Symbol.for === 'function') {\n try {\n BN.prototype[Symbol.for('nodejs.util.inspect.custom')] = inspect;\n } catch (e) {\n BN.prototype.inspect = inspect;\n }\n } else {\n BN.prototype.inspect = inspect;\n }\n\n function inspect () {\n return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n }\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modrn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16, 2);\n };\n\n if (Buffer) {\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n return this.toArrayLike(Buffer, endian, length);\n };\n }\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n var allocate = function allocate (ArrayType, size) {\n if (ArrayType.allocUnsafe) {\n return ArrayType.allocUnsafe(size);\n }\n return new ArrayType(size);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n this._strip();\n\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n var res = allocate(ArrayType, reqLength);\n var postfix = endian === 'le' ? 'LE' : 'BE';\n this['_toArrayLike' + postfix](res, byteLength);\n return res;\n };\n\n BN.prototype._toArrayLikeLE = function _toArrayLikeLE (res, byteLength) {\n var position = 0;\n var carry = 0;\n\n for (var i = 0, shift = 0; i < this.length; i++) {\n var word = (this.words[i] << shift) | carry;\n\n res[position++] = word & 0xff;\n if (position < res.length) {\n res[position++] = (word >> 8) & 0xff;\n }\n if (position < res.length) {\n res[position++] = (word >> 16) & 0xff;\n }\n\n if (shift === 6) {\n if (position < res.length) {\n res[position++] = (word >> 24) & 0xff;\n }\n carry = 0;\n shift = 0;\n } else {\n carry = word >>> 24;\n shift += 2;\n }\n }\n\n if (position < res.length) {\n res[position++] = carry;\n\n while (position < res.length) {\n res[position++] = 0;\n }\n }\n };\n\n BN.prototype._toArrayLikeBE = function _toArrayLikeBE (res, byteLength) {\n var position = res.length - 1;\n var carry = 0;\n\n for (var i = 0, shift = 0; i < this.length; i++) {\n var word = (this.words[i] << shift) | carry;\n\n res[position--] = word & 0xff;\n if (position >= 0) {\n res[position--] = (word >> 8) & 0xff;\n }\n if (position >= 0) {\n res[position--] = (word >> 16) & 0xff;\n }\n\n if (shift === 6) {\n if (position >= 0) {\n res[position--] = (word >> 24) & 0xff;\n }\n carry = 0;\n shift = 0;\n } else {\n carry = word >>> 24;\n shift += 2;\n }\n }\n\n if (position >= 0) {\n res[position--] = carry;\n\n while (position >= 0) {\n res[position--] = 0;\n }\n }\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] >>> wbit) & 0x01;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this._strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this._strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this._strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this._strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this._strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this._strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out._strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out._strip();\n }\n\n function jumboMulTo (self, num, out) {\n // Temporary disable, see https://github.com/indutny/bn.js/issues/211\n // var fftm = new FFTM();\n // return fftm.mulp(self, num, out);\n return bigMulTo(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out._strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return isNegNum ? this.ineg() : this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this._strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this._strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this._strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) <= num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this._strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this._strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this._strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q._strip();\n }\n a._strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modrn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modrn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || (r2 === 1 && cmp === 0)) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modrn = function modrn (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return isNegNum ? -acc : acc;\n };\n\n // WARNING: DEPRECATED\n BN.prototype.modn = function modn (num) {\n return this.modrn(num);\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n this._strip();\n return isNegNum ? this.ineg() : this;\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this._strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is a BN v4 instance\n r.strip();\n } else {\n // r is a BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n\n move(a, a.umod(this.m)._forceRed(this));\n return a;\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","var util = require('util');\nvar Stream = require('stream').Stream;\nvar DelayedStream = require('delayed-stream');\n\nmodule.exports = CombinedStream;\nfunction CombinedStream() {\n this.writable = false;\n this.readable = true;\n this.dataSize = 0;\n this.maxDataSize = 2 * 1024 * 1024;\n this.pauseStreams = true;\n\n this._released = false;\n this._streams = [];\n this._currentStream = null;\n this._insideLoop = false;\n this._pendingNext = false;\n}\nutil.inherits(CombinedStream, Stream);\n\nCombinedStream.create = function(options) {\n var combinedStream = new this();\n\n options = options || {};\n for (var option in options) {\n combinedStream[option] = options[option];\n }\n\n return combinedStream;\n};\n\nCombinedStream.isStreamLike = function(stream) {\n return (typeof stream !== 'function')\n && (typeof stream !== 'string')\n && (typeof stream !== 'boolean')\n && (typeof stream !== 'number')\n && (!Buffer.isBuffer(stream));\n};\n\nCombinedStream.prototype.append = function(stream) {\n var isStreamLike = CombinedStream.isStreamLike(stream);\n\n if (isStreamLike) {\n if (!(stream instanceof DelayedStream)) {\n var newStream = DelayedStream.create(stream, {\n maxDataSize: Infinity,\n pauseStream: this.pauseStreams,\n });\n stream.on('data', this._checkDataSize.bind(this));\n stream = newStream;\n }\n\n this._handleErrors(stream);\n\n if (this.pauseStreams) {\n stream.pause();\n }\n }\n\n this._streams.push(stream);\n return this;\n};\n\nCombinedStream.prototype.pipe = function(dest, options) {\n Stream.prototype.pipe.call(this, dest, options);\n this.resume();\n return dest;\n};\n\nCombinedStream.prototype._getNext = function() {\n this._currentStream = null;\n\n if (this._insideLoop) {\n this._pendingNext = true;\n return; // defer call\n }\n\n this._insideLoop = true;\n try {\n do {\n this._pendingNext = false;\n this._realGetNext();\n } while (this._pendingNext);\n } finally {\n this._insideLoop = false;\n }\n};\n\nCombinedStream.prototype._realGetNext = function() {\n var stream = this._streams.shift();\n\n\n if (typeof stream == 'undefined') {\n this.end();\n return;\n }\n\n if (typeof stream !== 'function') {\n this._pipeNext(stream);\n return;\n }\n\n var getStream = stream;\n getStream(function(stream) {\n var isStreamLike = CombinedStream.isStreamLike(stream);\n if (isStreamLike) {\n stream.on('data', this._checkDataSize.bind(this));\n this._handleErrors(stream);\n }\n\n this._pipeNext(stream);\n }.bind(this));\n};\n\nCombinedStream.prototype._pipeNext = function(stream) {\n this._currentStream = stream;\n\n var isStreamLike = CombinedStream.isStreamLike(stream);\n if (isStreamLike) {\n stream.on('end', this._getNext.bind(this));\n stream.pipe(this, {end: false});\n return;\n }\n\n var value = stream;\n this.write(value);\n this._getNext();\n};\n\nCombinedStream.prototype._handleErrors = function(stream) {\n var self = this;\n stream.on('error', function(err) {\n self._emitError(err);\n });\n};\n\nCombinedStream.prototype.write = function(data) {\n this.emit('data', data);\n};\n\nCombinedStream.prototype.pause = function() {\n if (!this.pauseStreams) {\n return;\n }\n\n if(this.pauseStreams && this._currentStream && typeof(this._currentStream.pause) == 'function') this._currentStream.pause();\n this.emit('pause');\n};\n\nCombinedStream.prototype.resume = function() {\n if (!this._released) {\n this._released = true;\n this.writable = true;\n this._getNext();\n }\n\n if(this.pauseStreams && this._currentStream && typeof(this._currentStream.resume) == 'function') this._currentStream.resume();\n this.emit('resume');\n};\n\nCombinedStream.prototype.end = function() {\n this._reset();\n this.emit('end');\n};\n\nCombinedStream.prototype.destroy = function() {\n this._reset();\n this.emit('close');\n};\n\nCombinedStream.prototype._reset = function() {\n this.writable = false;\n this._streams = [];\n this._currentStream = null;\n};\n\nCombinedStream.prototype._checkDataSize = function() {\n this._updateDataSize();\n if (this.dataSize <= this.maxDataSize) {\n return;\n }\n\n var message =\n 'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.';\n this._emitError(new Error(message));\n};\n\nCombinedStream.prototype._updateDataSize = function() {\n this.dataSize = 0;\n\n var self = this;\n this._streams.forEach(function(stream) {\n if (!stream.dataSize) {\n return;\n }\n\n self.dataSize += stream.dataSize;\n });\n\n if (this._currentStream && this._currentStream.dataSize) {\n this.dataSize += this._currentStream.dataSize;\n }\n};\n\nCombinedStream.prototype._emitError = function(err) {\n this._reset();\n this.emit('error', err);\n};\n","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\tlet m;\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)) && parseInt(m[1], 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug');\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tlet i;\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n\t\tconst len = split.length;\n\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tif (!split[i]) {\n\t\t\t\t// ignore empty strings\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tnamespaces = split[i].replace(/\\*/g, '.*?');\n\n\t\t\tif (namespaces[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(new RegExp('^' + namespaces.slice(1) + '$'));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(new RegExp('^' + namespaces + '$'));\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names.map(toNamespace),\n\t\t\t...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tif (name[name.length - 1] === '*') {\n\t\t\treturn true;\n\t\t}\n\n\t\tlet i;\n\t\tlet len;\n\n\t\tfor (i = 0, len = createDebug.skips.length; i < len; i++) {\n\t\t\tif (createDebug.skips[i].test(name)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0, len = createDebug.names.length; i < len; i++) {\n\t\t\tif (createDebug.names[i].test(name)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Convert regexp to namespace\n\t*\n\t* @param {RegExp} regxep\n\t* @return {String} namespace\n\t* @api private\n\t*/\n\tfunction toNamespace(regexp) {\n\t\treturn regexp.toString()\n\t\t\t.substring(2, regexp.toString().length - 2)\n\t\t\t.replace(/\\.\\*\\?$/, '*');\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","/**\n * Detect Electron renderer / nwjs process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) {\n\tmodule.exports = require('./browser.js');\n} else {\n\tmodule.exports = require('./node.js');\n}\n","/**\n * Module dependencies.\n */\n\nconst tty = require('tty');\nconst util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n */\n\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.destroy = util.deprecate(\n\t() => {},\n\t'Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'\n);\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\ntry {\n\t// Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json)\n\t// eslint-disable-next-line import/no-extraneous-dependencies\n\tconst supportsColor = require('supports-color');\n\n\tif (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) {\n\t\texports.colors = [\n\t\t\t20,\n\t\t\t21,\n\t\t\t26,\n\t\t\t27,\n\t\t\t32,\n\t\t\t33,\n\t\t\t38,\n\t\t\t39,\n\t\t\t40,\n\t\t\t41,\n\t\t\t42,\n\t\t\t43,\n\t\t\t44,\n\t\t\t45,\n\t\t\t56,\n\t\t\t57,\n\t\t\t62,\n\t\t\t63,\n\t\t\t68,\n\t\t\t69,\n\t\t\t74,\n\t\t\t75,\n\t\t\t76,\n\t\t\t77,\n\t\t\t78,\n\t\t\t79,\n\t\t\t80,\n\t\t\t81,\n\t\t\t92,\n\t\t\t93,\n\t\t\t98,\n\t\t\t99,\n\t\t\t112,\n\t\t\t113,\n\t\t\t128,\n\t\t\t129,\n\t\t\t134,\n\t\t\t135,\n\t\t\t148,\n\t\t\t149,\n\t\t\t160,\n\t\t\t161,\n\t\t\t162,\n\t\t\t163,\n\t\t\t164,\n\t\t\t165,\n\t\t\t166,\n\t\t\t167,\n\t\t\t168,\n\t\t\t169,\n\t\t\t170,\n\t\t\t171,\n\t\t\t172,\n\t\t\t173,\n\t\t\t178,\n\t\t\t179,\n\t\t\t184,\n\t\t\t185,\n\t\t\t196,\n\t\t\t197,\n\t\t\t198,\n\t\t\t199,\n\t\t\t200,\n\t\t\t201,\n\t\t\t202,\n\t\t\t203,\n\t\t\t204,\n\t\t\t205,\n\t\t\t206,\n\t\t\t207,\n\t\t\t208,\n\t\t\t209,\n\t\t\t214,\n\t\t\t215,\n\t\t\t220,\n\t\t\t221\n\t\t];\n\t}\n} catch (error) {\n\t// Swallow - we only care if `supports-color` is available; it doesn't have to be.\n}\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(key => {\n\treturn /^debug_/i.test(key);\n}).reduce((obj, key) => {\n\t// Camel-case\n\tconst prop = key\n\t\t.substring(6)\n\t\t.toLowerCase()\n\t\t.replace(/_([a-z])/g, (_, k) => {\n\t\t\treturn k.toUpperCase();\n\t\t});\n\n\t// Coerce string value into JS value\n\tlet val = process.env[key];\n\tif (/^(yes|on|true|enabled)$/i.test(val)) {\n\t\tval = true;\n\t} else if (/^(no|off|false|disabled)$/i.test(val)) {\n\t\tval = false;\n\t} else if (val === 'null') {\n\t\tval = null;\n\t} else {\n\t\tval = Number(val);\n\t}\n\n\tobj[prop] = val;\n\treturn obj;\n}, {});\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n\treturn 'colors' in exports.inspectOpts ?\n\t\tBoolean(exports.inspectOpts.colors) :\n\t\ttty.isatty(process.stderr.fd);\n}\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\tconst {namespace: name, useColors} = this;\n\n\tif (useColors) {\n\t\tconst c = this.color;\n\t\tconst colorCode = '\\u001B[3' + (c < 8 ? c : '8;5;' + c);\n\t\tconst prefix = ` ${colorCode};1m${name} \\u001B[0m`;\n\n\t\targs[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n\t\targs.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\\u001B[0m');\n\t} else {\n\t\targs[0] = getDate() + name + ' ' + args[0];\n\t}\n}\n\nfunction getDate() {\n\tif (exports.inspectOpts.hideDate) {\n\t\treturn '';\n\t}\n\treturn new Date().toISOString() + ' ';\n}\n\n/**\n * Invokes `util.formatWithOptions()` with the specified arguments and writes to stderr.\n */\n\nfunction log(...args) {\n\treturn process.stderr.write(util.formatWithOptions(exports.inspectOpts, ...args) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\tif (namespaces) {\n\t\tprocess.env.DEBUG = namespaces;\n\t} else {\n\t\t// If you set a process.env field to null or undefined, it gets cast to the\n\t\t// string 'null' or 'undefined'. Just delete instead.\n\t\tdelete process.env.DEBUG;\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n\treturn process.env.DEBUG;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init(debug) {\n\tdebug.inspectOpts = {};\n\n\tconst keys = Object.keys(exports.inspectOpts);\n\tfor (let i = 0; i < keys.length; i++) {\n\t\tdebug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nformatters.o = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts)\n\t\t.split('\\n')\n\t\t.map(str => str.trim())\n\t\t.join(' ');\n};\n\n/**\n * Map %O to `util.inspect()`, allowing multiple lines if needed.\n */\n\nformatters.O = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts);\n};\n","var Stream = require('stream').Stream;\nvar util = require('util');\n\nmodule.exports = DelayedStream;\nfunction DelayedStream() {\n this.source = null;\n this.dataSize = 0;\n this.maxDataSize = 1024 * 1024;\n this.pauseStream = true;\n\n this._maxDataSizeExceeded = false;\n this._released = false;\n this._bufferedEvents = [];\n}\nutil.inherits(DelayedStream, Stream);\n\nDelayedStream.create = function(source, options) {\n var delayedStream = new this();\n\n options = options || {};\n for (var option in options) {\n delayedStream[option] = options[option];\n }\n\n delayedStream.source = source;\n\n var realEmit = source.emit;\n source.emit = function() {\n delayedStream._handleEmit(arguments);\n return realEmit.apply(source, arguments);\n };\n\n source.on('error', function() {});\n if (delayedStream.pauseStream) {\n source.pause();\n }\n\n return delayedStream;\n};\n\nObject.defineProperty(DelayedStream.prototype, 'readable', {\n configurable: true,\n enumerable: true,\n get: function() {\n return this.source.readable;\n }\n});\n\nDelayedStream.prototype.setEncoding = function() {\n return this.source.setEncoding.apply(this.source, arguments);\n};\n\nDelayedStream.prototype.resume = function() {\n if (!this._released) {\n this.release();\n }\n\n this.source.resume();\n};\n\nDelayedStream.prototype.pause = function() {\n this.source.pause();\n};\n\nDelayedStream.prototype.release = function() {\n this._released = true;\n\n this._bufferedEvents.forEach(function(args) {\n this.emit.apply(this, args);\n }.bind(this));\n this._bufferedEvents = [];\n};\n\nDelayedStream.prototype.pipe = function() {\n var r = Stream.prototype.pipe.apply(this, arguments);\n this.resume();\n return r;\n};\n\nDelayedStream.prototype._handleEmit = function(args) {\n if (this._released) {\n this.emit.apply(this, args);\n return;\n }\n\n if (args[0] === 'data') {\n this.dataSize += args[1].length;\n this._checkIfMaxDataSizeExceeded();\n }\n\n this._bufferedEvents.push(args);\n};\n\nDelayedStream.prototype._checkIfMaxDataSizeExceeded = function() {\n if (this._maxDataSizeExceeded) {\n return;\n }\n\n if (this.dataSize <= this.maxDataSize) {\n return;\n }\n\n this._maxDataSizeExceeded = true;\n var message =\n 'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.'\n this.emit('error', new Error(message));\n};\n","var debug;\n\nmodule.exports = function () {\n if (!debug) {\n try {\n /* eslint global-require: off */\n debug = require(\"debug\")(\"follow-redirects\");\n }\n catch (error) { /* */ }\n if (typeof debug !== \"function\") {\n debug = function () { /* */ };\n }\n }\n debug.apply(null, arguments);\n};\n","var url = require(\"url\");\nvar URL = url.URL;\nvar http = require(\"http\");\nvar https = require(\"https\");\nvar Writable = require(\"stream\").Writable;\nvar assert = require(\"assert\");\nvar debug = require(\"./debug\");\n\n// Whether to use the native URL object or the legacy url module\nvar useNativeURL = false;\ntry {\n assert(new URL());\n}\ncatch (error) {\n useNativeURL = error.code === \"ERR_INVALID_URL\";\n}\n\n// URL fields to preserve in copy operations\nvar preservedUrlFields = [\n \"auth\",\n \"host\",\n \"hostname\",\n \"href\",\n \"path\",\n \"pathname\",\n \"port\",\n \"protocol\",\n \"query\",\n \"search\",\n \"hash\",\n];\n\n// Create handlers that pass events from native requests\nvar events = [\"abort\", \"aborted\", \"connect\", \"error\", \"socket\", \"timeout\"];\nvar eventHandlers = Object.create(null);\nevents.forEach(function (event) {\n eventHandlers[event] = function (arg1, arg2, arg3) {\n this._redirectable.emit(event, arg1, arg2, arg3);\n };\n});\n\n// Error types with codes\nvar InvalidUrlError = createErrorType(\n \"ERR_INVALID_URL\",\n \"Invalid URL\",\n TypeError\n);\nvar RedirectionError = createErrorType(\n \"ERR_FR_REDIRECTION_FAILURE\",\n \"Redirected request failed\"\n);\nvar TooManyRedirectsError = createErrorType(\n \"ERR_FR_TOO_MANY_REDIRECTS\",\n \"Maximum number of redirects exceeded\",\n RedirectionError\n);\nvar MaxBodyLengthExceededError = createErrorType(\n \"ERR_FR_MAX_BODY_LENGTH_EXCEEDED\",\n \"Request body larger than maxBodyLength limit\"\n);\nvar WriteAfterEndError = createErrorType(\n \"ERR_STREAM_WRITE_AFTER_END\",\n \"write after end\"\n);\n\n// istanbul ignore next\nvar destroy = Writable.prototype.destroy || noop;\n\n// An HTTP(S) request that can be redirected\nfunction RedirectableRequest(options, responseCallback) {\n // Initialize the request\n Writable.call(this);\n this._sanitizeOptions(options);\n this._options = options;\n this._ended = false;\n this._ending = false;\n this._redirectCount = 0;\n this._redirects = [];\n this._requestBodyLength = 0;\n this._requestBodyBuffers = [];\n\n // Attach a callback if passed\n if (responseCallback) {\n this.on(\"response\", responseCallback);\n }\n\n // React to responses of native requests\n var self = this;\n this._onNativeResponse = function (response) {\n try {\n self._processResponse(response);\n }\n catch (cause) {\n self.emit(\"error\", cause instanceof RedirectionError ?\n cause : new RedirectionError({ cause: cause }));\n }\n };\n\n // Perform the first request\n this._performRequest();\n}\nRedirectableRequest.prototype = Object.create(Writable.prototype);\n\nRedirectableRequest.prototype.abort = function () {\n destroyRequest(this._currentRequest);\n this._currentRequest.abort();\n this.emit(\"abort\");\n};\n\nRedirectableRequest.prototype.destroy = function (error) {\n destroyRequest(this._currentRequest, error);\n destroy.call(this, error);\n return this;\n};\n\n// Writes buffered data to the current native request\nRedirectableRequest.prototype.write = function (data, encoding, callback) {\n // Writing is not allowed if end has been called\n if (this._ending) {\n throw new WriteAfterEndError();\n }\n\n // Validate input and shift parameters if necessary\n if (!isString(data) && !isBuffer(data)) {\n throw new TypeError(\"data should be a string, Buffer or Uint8Array\");\n }\n if (isFunction(encoding)) {\n callback = encoding;\n encoding = null;\n }\n\n // Ignore empty buffers, since writing them doesn't invoke the callback\n // https://github.com/nodejs/node/issues/22066\n if (data.length === 0) {\n if (callback) {\n callback();\n }\n return;\n }\n // Only write when we don't exceed the maximum body length\n if (this._requestBodyLength + data.length <= this._options.maxBodyLength) {\n this._requestBodyLength += data.length;\n this._requestBodyBuffers.push({ data: data, encoding: encoding });\n this._currentRequest.write(data, encoding, callback);\n }\n // Error when we exceed the maximum body length\n else {\n this.emit(\"error\", new MaxBodyLengthExceededError());\n this.abort();\n }\n};\n\n// Ends the current native request\nRedirectableRequest.prototype.end = function (data, encoding, callback) {\n // Shift parameters if necessary\n if (isFunction(data)) {\n callback = data;\n data = encoding = null;\n }\n else if (isFunction(encoding)) {\n callback = encoding;\n encoding = null;\n }\n\n // Write data if needed and end\n if (!data) {\n this._ended = this._ending = true;\n this._currentRequest.end(null, null, callback);\n }\n else {\n var self = this;\n var currentRequest = this._currentRequest;\n this.write(data, encoding, function () {\n self._ended = true;\n currentRequest.end(null, null, callback);\n });\n this._ending = true;\n }\n};\n\n// Sets a header value on the current native request\nRedirectableRequest.prototype.setHeader = function (name, value) {\n this._options.headers[name] = value;\n this._currentRequest.setHeader(name, value);\n};\n\n// Clears a header value on the current native request\nRedirectableRequest.prototype.removeHeader = function (name) {\n delete this._options.headers[name];\n this._currentRequest.removeHeader(name);\n};\n\n// Global timeout for all underlying requests\nRedirectableRequest.prototype.setTimeout = function (msecs, callback) {\n var self = this;\n\n // Destroys the socket on timeout\n function destroyOnTimeout(socket) {\n socket.setTimeout(msecs);\n socket.removeListener(\"timeout\", socket.destroy);\n socket.addListener(\"timeout\", socket.destroy);\n }\n\n // Sets up a timer to trigger a timeout event\n function startTimer(socket) {\n if (self._timeout) {\n clearTimeout(self._timeout);\n }\n self._timeout = setTimeout(function () {\n self.emit(\"timeout\");\n clearTimer();\n }, msecs);\n destroyOnTimeout(socket);\n }\n\n // Stops a timeout from triggering\n function clearTimer() {\n // Clear the timeout\n if (self._timeout) {\n clearTimeout(self._timeout);\n self._timeout = null;\n }\n\n // Clean up all attached listeners\n self.removeListener(\"abort\", clearTimer);\n self.removeListener(\"error\", clearTimer);\n self.removeListener(\"response\", clearTimer);\n self.removeListener(\"close\", clearTimer);\n if (callback) {\n self.removeListener(\"timeout\", callback);\n }\n if (!self.socket) {\n self._currentRequest.removeListener(\"socket\", startTimer);\n }\n }\n\n // Attach callback if passed\n if (callback) {\n this.on(\"timeout\", callback);\n }\n\n // Start the timer if or when the socket is opened\n if (this.socket) {\n startTimer(this.socket);\n }\n else {\n this._currentRequest.once(\"socket\", startTimer);\n }\n\n // Clean up on events\n this.on(\"socket\", destroyOnTimeout);\n this.on(\"abort\", clearTimer);\n this.on(\"error\", clearTimer);\n this.on(\"response\", clearTimer);\n this.on(\"close\", clearTimer);\n\n return this;\n};\n\n// Proxy all other public ClientRequest methods\n[\n \"flushHeaders\", \"getHeader\",\n \"setNoDelay\", \"setSocketKeepAlive\",\n].forEach(function (method) {\n RedirectableRequest.prototype[method] = function (a, b) {\n return this._currentRequest[method](a, b);\n };\n});\n\n// Proxy all public ClientRequest properties\n[\"aborted\", \"connection\", \"socket\"].forEach(function (property) {\n Object.defineProperty(RedirectableRequest.prototype, property, {\n get: function () { return this._currentRequest[property]; },\n });\n});\n\nRedirectableRequest.prototype._sanitizeOptions = function (options) {\n // Ensure headers are always present\n if (!options.headers) {\n options.headers = {};\n }\n\n // Since http.request treats host as an alias of hostname,\n // but the url module interprets host as hostname plus port,\n // eliminate the host property to avoid confusion.\n if (options.host) {\n // Use hostname if set, because it has precedence\n if (!options.hostname) {\n options.hostname = options.host;\n }\n delete options.host;\n }\n\n // Complete the URL object when necessary\n if (!options.pathname && options.path) {\n var searchPos = options.path.indexOf(\"?\");\n if (searchPos < 0) {\n options.pathname = options.path;\n }\n else {\n options.pathname = options.path.substring(0, searchPos);\n options.search = options.path.substring(searchPos);\n }\n }\n};\n\n\n// Executes the next native request (initial or redirect)\nRedirectableRequest.prototype._performRequest = function () {\n // Load the native protocol\n var protocol = this._options.protocol;\n var nativeProtocol = this._options.nativeProtocols[protocol];\n if (!nativeProtocol) {\n throw new TypeError(\"Unsupported protocol \" + protocol);\n }\n\n // If specified, use the agent corresponding to the protocol\n // (HTTP and HTTPS use different types of agents)\n if (this._options.agents) {\n var scheme = protocol.slice(0, -1);\n this._options.agent = this._options.agents[scheme];\n }\n\n // Create the native request and set up its event handlers\n var request = this._currentRequest =\n nativeProtocol.request(this._options, this._onNativeResponse);\n request._redirectable = this;\n for (var event of events) {\n request.on(event, eventHandlers[event]);\n }\n\n // RFC7230§5.3.1: When making a request directly to an origin server, […]\n // a client MUST send only the absolute path […] as the request-target.\n this._currentUrl = /^\\//.test(this._options.path) ?\n url.format(this._options) :\n // When making a request to a proxy, […]\n // a client MUST send the target URI in absolute-form […].\n this._options.path;\n\n // End a redirected request\n // (The first request must be ended explicitly with RedirectableRequest#end)\n if (this._isRedirect) {\n // Write the request entity and end\n var i = 0;\n var self = this;\n var buffers = this._requestBodyBuffers;\n (function writeNext(error) {\n // Only write if this request has not been redirected yet\n /* istanbul ignore else */\n if (request === self._currentRequest) {\n // Report any write errors\n /* istanbul ignore if */\n if (error) {\n self.emit(\"error\", error);\n }\n // Write the next buffer if there are still left\n else if (i < buffers.length) {\n var buffer = buffers[i++];\n /* istanbul ignore else */\n if (!request.finished) {\n request.write(buffer.data, buffer.encoding, writeNext);\n }\n }\n // End the request if `end` has been called on us\n else if (self._ended) {\n request.end();\n }\n }\n }());\n }\n};\n\n// Processes a response from the current native request\nRedirectableRequest.prototype._processResponse = function (response) {\n // Store the redirected response\n var statusCode = response.statusCode;\n if (this._options.trackRedirects) {\n this._redirects.push({\n url: this._currentUrl,\n headers: response.headers,\n statusCode: statusCode,\n });\n }\n\n // RFC7231§6.4: The 3xx (Redirection) class of status code indicates\n // that further action needs to be taken by the user agent in order to\n // fulfill the request. If a Location header field is provided,\n // the user agent MAY automatically redirect its request to the URI\n // referenced by the Location field value,\n // even if the specific status code is not understood.\n\n // If the response is not a redirect; return it as-is\n var location = response.headers.location;\n if (!location || this._options.followRedirects === false ||\n statusCode < 300 || statusCode >= 400) {\n response.responseUrl = this._currentUrl;\n response.redirects = this._redirects;\n this.emit(\"response\", response);\n\n // Clean up\n this._requestBodyBuffers = [];\n return;\n }\n\n // The response is a redirect, so abort the current request\n destroyRequest(this._currentRequest);\n // Discard the remainder of the response to avoid waiting for data\n response.destroy();\n\n // RFC7231§6.4: A client SHOULD detect and intervene\n // in cyclical redirections (i.e., \"infinite\" redirection loops).\n if (++this._redirectCount > this._options.maxRedirects) {\n throw new TooManyRedirectsError();\n }\n\n // Store the request headers if applicable\n var requestHeaders;\n var beforeRedirect = this._options.beforeRedirect;\n if (beforeRedirect) {\n requestHeaders = Object.assign({\n // The Host header was set by nativeProtocol.request\n Host: response.req.getHeader(\"host\"),\n }, this._options.headers);\n }\n\n // RFC7231§6.4: Automatic redirection needs to done with\n // care for methods not known to be safe, […]\n // RFC7231§6.4.2–3: For historical reasons, a user agent MAY change\n // the request method from POST to GET for the subsequent request.\n var method = this._options.method;\n if ((statusCode === 301 || statusCode === 302) && this._options.method === \"POST\" ||\n // RFC7231§6.4.4: The 303 (See Other) status code indicates that\n // the server is redirecting the user agent to a different resource […]\n // A user agent can perform a retrieval request targeting that URI\n // (a GET or HEAD request if using HTTP) […]\n (statusCode === 303) && !/^(?:GET|HEAD)$/.test(this._options.method)) {\n this._options.method = \"GET\";\n // Drop a possible entity and headers related to it\n this._requestBodyBuffers = [];\n removeMatchingHeaders(/^content-/i, this._options.headers);\n }\n\n // Drop the Host header, as the redirect might lead to a different host\n var currentHostHeader = removeMatchingHeaders(/^host$/i, this._options.headers);\n\n // If the redirect is relative, carry over the host of the last request\n var currentUrlParts = parseUrl(this._currentUrl);\n var currentHost = currentHostHeader || currentUrlParts.host;\n var currentUrl = /^\\w+:/.test(location) ? this._currentUrl :\n url.format(Object.assign(currentUrlParts, { host: currentHost }));\n\n // Create the redirected request\n var redirectUrl = resolveUrl(location, currentUrl);\n debug(\"redirecting to\", redirectUrl.href);\n this._isRedirect = true;\n spreadUrlObject(redirectUrl, this._options);\n\n // Drop confidential headers when redirecting to a less secure protocol\n // or to a different domain that is not a superdomain\n if (redirectUrl.protocol !== currentUrlParts.protocol &&\n redirectUrl.protocol !== \"https:\" ||\n redirectUrl.host !== currentHost &&\n !isSubdomain(redirectUrl.host, currentHost)) {\n removeMatchingHeaders(/^(?:(?:proxy-)?authorization|cookie)$/i, this._options.headers);\n }\n\n // Evaluate the beforeRedirect callback\n if (isFunction(beforeRedirect)) {\n var responseDetails = {\n headers: response.headers,\n statusCode: statusCode,\n };\n var requestDetails = {\n url: currentUrl,\n method: method,\n headers: requestHeaders,\n };\n beforeRedirect(this._options, responseDetails, requestDetails);\n this._sanitizeOptions(this._options);\n }\n\n // Perform the redirected request\n this._performRequest();\n};\n\n// Wraps the key/value object of protocols with redirect functionality\nfunction wrap(protocols) {\n // Default settings\n var exports = {\n maxRedirects: 21,\n maxBodyLength: 10 * 1024 * 1024,\n };\n\n // Wrap each protocol\n var nativeProtocols = {};\n Object.keys(protocols).forEach(function (scheme) {\n var protocol = scheme + \":\";\n var nativeProtocol = nativeProtocols[protocol] = protocols[scheme];\n var wrappedProtocol = exports[scheme] = Object.create(nativeProtocol);\n\n // Executes a request, following redirects\n function request(input, options, callback) {\n // Parse parameters, ensuring that input is an object\n if (isURL(input)) {\n input = spreadUrlObject(input);\n }\n else if (isString(input)) {\n input = spreadUrlObject(parseUrl(input));\n }\n else {\n callback = options;\n options = validateUrl(input);\n input = { protocol: protocol };\n }\n if (isFunction(options)) {\n callback = options;\n options = null;\n }\n\n // Set defaults\n options = Object.assign({\n maxRedirects: exports.maxRedirects,\n maxBodyLength: exports.maxBodyLength,\n }, input, options);\n options.nativeProtocols = nativeProtocols;\n if (!isString(options.host) && !isString(options.hostname)) {\n options.hostname = \"::1\";\n }\n\n assert.equal(options.protocol, protocol, \"protocol mismatch\");\n debug(\"options\", options);\n return new RedirectableRequest(options, callback);\n }\n\n // Executes a GET request, following redirects\n function get(input, options, callback) {\n var wrappedRequest = wrappedProtocol.request(input, options, callback);\n wrappedRequest.end();\n return wrappedRequest;\n }\n\n // Expose the properties on the wrapped protocol\n Object.defineProperties(wrappedProtocol, {\n request: { value: request, configurable: true, enumerable: true, writable: true },\n get: { value: get, configurable: true, enumerable: true, writable: true },\n });\n });\n return exports;\n}\n\nfunction noop() { /* empty */ }\n\nfunction parseUrl(input) {\n var parsed;\n /* istanbul ignore else */\n if (useNativeURL) {\n parsed = new URL(input);\n }\n else {\n // Ensure the URL is valid and absolute\n parsed = validateUrl(url.parse(input));\n if (!isString(parsed.protocol)) {\n throw new InvalidUrlError({ input });\n }\n }\n return parsed;\n}\n\nfunction resolveUrl(relative, base) {\n /* istanbul ignore next */\n return useNativeURL ? new URL(relative, base) : parseUrl(url.resolve(base, relative));\n}\n\nfunction validateUrl(input) {\n if (/^\\[/.test(input.hostname) && !/^\\[[:0-9a-f]+\\]$/i.test(input.hostname)) {\n throw new InvalidUrlError({ input: input.href || input });\n }\n if (/^\\[/.test(input.host) && !/^\\[[:0-9a-f]+\\](:\\d+)?$/i.test(input.host)) {\n throw new InvalidUrlError({ input: input.href || input });\n }\n return input;\n}\n\nfunction spreadUrlObject(urlObject, target) {\n var spread = target || {};\n for (var key of preservedUrlFields) {\n spread[key] = urlObject[key];\n }\n\n // Fix IPv6 hostname\n if (spread.hostname.startsWith(\"[\")) {\n spread.hostname = spread.hostname.slice(1, -1);\n }\n // Ensure port is a number\n if (spread.port !== \"\") {\n spread.port = Number(spread.port);\n }\n // Concatenate path\n spread.path = spread.search ? spread.pathname + spread.search : spread.pathname;\n\n return spread;\n}\n\nfunction removeMatchingHeaders(regex, headers) {\n var lastValue;\n for (var header in headers) {\n if (regex.test(header)) {\n lastValue = headers[header];\n delete headers[header];\n }\n }\n return (lastValue === null || typeof lastValue === \"undefined\") ?\n undefined : String(lastValue).trim();\n}\n\nfunction createErrorType(code, message, baseClass) {\n // Create constructor\n function CustomError(properties) {\n Error.captureStackTrace(this, this.constructor);\n Object.assign(this, properties || {});\n this.code = code;\n this.message = this.cause ? message + \": \" + this.cause.message : message;\n }\n\n // Attach constructor and set default properties\n CustomError.prototype = new (baseClass || Error)();\n Object.defineProperties(CustomError.prototype, {\n constructor: {\n value: CustomError,\n enumerable: false,\n },\n name: {\n value: \"Error [\" + code + \"]\",\n enumerable: false,\n },\n });\n return CustomError;\n}\n\nfunction destroyRequest(request, error) {\n for (var event of events) {\n request.removeListener(event, eventHandlers[event]);\n }\n request.on(\"error\", noop);\n request.destroy(error);\n}\n\nfunction isSubdomain(subdomain, domain) {\n assert(isString(subdomain) && isString(domain));\n var dot = subdomain.length - domain.length - 1;\n return dot > 0 && subdomain[dot] === \".\" && subdomain.endsWith(domain);\n}\n\nfunction isString(value) {\n return typeof value === \"string\" || value instanceof String;\n}\n\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\n\nfunction isBuffer(value) {\n return typeof value === \"object\" && (\"length\" in value);\n}\n\nfunction isURL(value) {\n return URL && value instanceof URL;\n}\n\n// Exports\nmodule.exports = wrap({ http: http, https: https });\nmodule.exports.wrap = wrap;\n","var CombinedStream = require('combined-stream');\nvar util = require('util');\nvar path = require('path');\nvar http = require('http');\nvar https = require('https');\nvar parseUrl = require('url').parse;\nvar fs = require('fs');\nvar Stream = require('stream').Stream;\nvar mime = require('mime-types');\nvar asynckit = require('asynckit');\nvar populate = require('./populate.js');\n\n// Public API\nmodule.exports = FormData;\n\n// make it a Stream\nutil.inherits(FormData, CombinedStream);\n\n/**\n * Create readable \"multipart/form-data\" streams.\n * Can be used to submit forms\n * and file uploads to other web applications.\n *\n * @constructor\n * @param {Object} options - Properties to be added/overriden for FormData and CombinedStream\n */\nfunction FormData(options) {\n if (!(this instanceof FormData)) {\n return new FormData(options);\n }\n\n this._overheadLength = 0;\n this._valueLength = 0;\n this._valuesToMeasure = [];\n\n CombinedStream.call(this);\n\n options = options || {};\n for (var option in options) {\n this[option] = options[option];\n }\n}\n\nFormData.LINE_BREAK = '\\r\\n';\nFormData.DEFAULT_CONTENT_TYPE = 'application/octet-stream';\n\nFormData.prototype.append = function(field, value, options) {\n\n options = options || {};\n\n // allow filename as single option\n if (typeof options == 'string') {\n options = {filename: options};\n }\n\n var append = CombinedStream.prototype.append.bind(this);\n\n // all that streamy business can't handle numbers\n if (typeof value == 'number') {\n value = '' + value;\n }\n\n // https://github.com/felixge/node-form-data/issues/38\n if (util.isArray(value)) {\n // Please convert your array into string\n // the way web server expects it\n this._error(new Error('Arrays are not supported.'));\n return;\n }\n\n var header = this._multiPartHeader(field, value, options);\n var footer = this._multiPartFooter();\n\n append(header);\n append(value);\n append(footer);\n\n // pass along options.knownLength\n this._trackLength(header, value, options);\n};\n\nFormData.prototype._trackLength = function(header, value, options) {\n var valueLength = 0;\n\n // used w/ getLengthSync(), when length is known.\n // e.g. for streaming directly from a remote server,\n // w/ a known file a size, and not wanting to wait for\n // incoming file to finish to get its size.\n if (options.knownLength != null) {\n valueLength += +options.knownLength;\n } else if (Buffer.isBuffer(value)) {\n valueLength = value.length;\n } else if (typeof value === 'string') {\n valueLength = Buffer.byteLength(value);\n }\n\n this._valueLength += valueLength;\n\n // @check why add CRLF? does this account for custom/multiple CRLFs?\n this._overheadLength +=\n Buffer.byteLength(header) +\n FormData.LINE_BREAK.length;\n\n // empty or either doesn't have path or not an http response or not a stream\n if (!value || ( !value.path && !(value.readable && value.hasOwnProperty('httpVersion')) && !(value instanceof Stream))) {\n return;\n }\n\n // no need to bother with the length\n if (!options.knownLength) {\n this._valuesToMeasure.push(value);\n }\n};\n\nFormData.prototype._lengthRetriever = function(value, callback) {\n\n if (value.hasOwnProperty('fd')) {\n\n // take read range into a account\n // `end` = Infinity –> read file till the end\n //\n // TODO: Looks like there is bug in Node fs.createReadStream\n // it doesn't respect `end` options without `start` options\n // Fix it when node fixes it.\n // https://github.com/joyent/node/issues/7819\n if (value.end != undefined && value.end != Infinity && value.start != undefined) {\n\n // when end specified\n // no need to calculate range\n // inclusive, starts with 0\n callback(null, value.end + 1 - (value.start ? value.start : 0));\n\n // not that fast snoopy\n } else {\n // still need to fetch file size from fs\n fs.stat(value.path, function(err, stat) {\n\n var fileSize;\n\n if (err) {\n callback(err);\n return;\n }\n\n // update final size based on the range options\n fileSize = stat.size - (value.start ? value.start : 0);\n callback(null, fileSize);\n });\n }\n\n // or http response\n } else if (value.hasOwnProperty('httpVersion')) {\n callback(null, +value.headers['content-length']);\n\n // or request stream http://github.com/mikeal/request\n } else if (value.hasOwnProperty('httpModule')) {\n // wait till response come back\n value.on('response', function(response) {\n value.pause();\n callback(null, +response.headers['content-length']);\n });\n value.resume();\n\n // something else\n } else {\n callback('Unknown stream');\n }\n};\n\nFormData.prototype._multiPartHeader = function(field, value, options) {\n // custom header specified (as string)?\n // it becomes responsible for boundary\n // (e.g. to handle extra CRLFs on .NET servers)\n if (typeof options.header == 'string') {\n return options.header;\n }\n\n var contentDisposition = this._getContentDisposition(value, options);\n var contentType = this._getContentType(value, options);\n\n var contents = '';\n var headers = {\n // add custom disposition as third element or keep it two elements if not\n 'Content-Disposition': ['form-data', 'name=\"' + field + '\"'].concat(contentDisposition || []),\n // if no content type. allow it to be empty array\n 'Content-Type': [].concat(contentType || [])\n };\n\n // allow custom headers.\n if (typeof options.header == 'object') {\n populate(headers, options.header);\n }\n\n var header;\n for (var prop in headers) {\n if (!headers.hasOwnProperty(prop)) continue;\n header = headers[prop];\n\n // skip nullish headers.\n if (header == null) {\n continue;\n }\n\n // convert all headers to arrays.\n if (!Array.isArray(header)) {\n header = [header];\n }\n\n // add non-empty headers.\n if (header.length) {\n contents += prop + ': ' + header.join('; ') + FormData.LINE_BREAK;\n }\n }\n\n return '--' + this.getBoundary() + FormData.LINE_BREAK + contents + FormData.LINE_BREAK;\n};\n\nFormData.prototype._getContentDisposition = function(value, options) {\n\n var filename\n , contentDisposition\n ;\n\n if (typeof options.filepath === 'string') {\n // custom filepath for relative paths\n filename = path.normalize(options.filepath).replace(/\\\\/g, '/');\n } else if (options.filename || value.name || value.path) {\n // custom filename take precedence\n // formidable and the browser add a name property\n // fs- and request- streams have path property\n filename = path.basename(options.filename || value.name || value.path);\n } else if (value.readable && value.hasOwnProperty('httpVersion')) {\n // or try http response\n filename = path.basename(value.client._httpMessage.path || '');\n }\n\n if (filename) {\n contentDisposition = 'filename=\"' + filename + '\"';\n }\n\n return contentDisposition;\n};\n\nFormData.prototype._getContentType = function(value, options) {\n\n // use custom content-type above all\n var contentType = options.contentType;\n\n // or try `name` from formidable, browser\n if (!contentType && value.name) {\n contentType = mime.lookup(value.name);\n }\n\n // or try `path` from fs-, request- streams\n if (!contentType && value.path) {\n contentType = mime.lookup(value.path);\n }\n\n // or if it's http-reponse\n if (!contentType && value.readable && value.hasOwnProperty('httpVersion')) {\n contentType = value.headers['content-type'];\n }\n\n // or guess it from the filepath or filename\n if (!contentType && (options.filepath || options.filename)) {\n contentType = mime.lookup(options.filepath || options.filename);\n }\n\n // fallback to the default content type if `value` is not simple value\n if (!contentType && typeof value == 'object') {\n contentType = FormData.DEFAULT_CONTENT_TYPE;\n }\n\n return contentType;\n};\n\nFormData.prototype._multiPartFooter = function() {\n return function(next) {\n var footer = FormData.LINE_BREAK;\n\n var lastPart = (this._streams.length === 0);\n if (lastPart) {\n footer += this._lastBoundary();\n }\n\n next(footer);\n }.bind(this);\n};\n\nFormData.prototype._lastBoundary = function() {\n return '--' + this.getBoundary() + '--' + FormData.LINE_BREAK;\n};\n\nFormData.prototype.getHeaders = function(userHeaders) {\n var header;\n var formHeaders = {\n 'content-type': 'multipart/form-data; boundary=' + this.getBoundary()\n };\n\n for (header in userHeaders) {\n if (userHeaders.hasOwnProperty(header)) {\n formHeaders[header.toLowerCase()] = userHeaders[header];\n }\n }\n\n return formHeaders;\n};\n\nFormData.prototype.setBoundary = function(boundary) {\n this._boundary = boundary;\n};\n\nFormData.prototype.getBoundary = function() {\n if (!this._boundary) {\n this._generateBoundary();\n }\n\n return this._boundary;\n};\n\nFormData.prototype.getBuffer = function() {\n var dataBuffer = new Buffer.alloc( 0 );\n var boundary = this.getBoundary();\n\n // Create the form content. Add Line breaks to the end of data.\n for (var i = 0, len = this._streams.length; i < len; i++) {\n if (typeof this._streams[i] !== 'function') {\n\n // Add content to the buffer.\n if(Buffer.isBuffer(this._streams[i])) {\n dataBuffer = Buffer.concat( [dataBuffer, this._streams[i]]);\n }else {\n dataBuffer = Buffer.concat( [dataBuffer, Buffer.from(this._streams[i])]);\n }\n\n // Add break after content.\n if (typeof this._streams[i] !== 'string' || this._streams[i].substring( 2, boundary.length + 2 ) !== boundary) {\n dataBuffer = Buffer.concat( [dataBuffer, Buffer.from(FormData.LINE_BREAK)] );\n }\n }\n }\n\n // Add the footer and return the Buffer object.\n return Buffer.concat( [dataBuffer, Buffer.from(this._lastBoundary())] );\n};\n\nFormData.prototype._generateBoundary = function() {\n // This generates a 50 character boundary similar to those used by Firefox.\n // They are optimized for boyer-moore parsing.\n var boundary = '--------------------------';\n for (var i = 0; i < 24; i++) {\n boundary += Math.floor(Math.random() * 10).toString(16);\n }\n\n this._boundary = boundary;\n};\n\n// Note: getLengthSync DOESN'T calculate streams length\n// As workaround one can calculate file size manually\n// and add it as knownLength option\nFormData.prototype.getLengthSync = function() {\n var knownLength = this._overheadLength + this._valueLength;\n\n // Don't get confused, there are 3 \"internal\" streams for each keyval pair\n // so it basically checks if there is any value added to the form\n if (this._streams.length) {\n knownLength += this._lastBoundary().length;\n }\n\n // https://github.com/form-data/form-data/issues/40\n if (!this.hasKnownLength()) {\n // Some async length retrievers are present\n // therefore synchronous length calculation is false.\n // Please use getLength(callback) to get proper length\n this._error(new Error('Cannot calculate proper length in synchronous way.'));\n }\n\n return knownLength;\n};\n\n// Public API to check if length of added values is known\n// https://github.com/form-data/form-data/issues/196\n// https://github.com/form-data/form-data/issues/262\nFormData.prototype.hasKnownLength = function() {\n var hasKnownLength = true;\n\n if (this._valuesToMeasure.length) {\n hasKnownLength = false;\n }\n\n return hasKnownLength;\n};\n\nFormData.prototype.getLength = function(cb) {\n var knownLength = this._overheadLength + this._valueLength;\n\n if (this._streams.length) {\n knownLength += this._lastBoundary().length;\n }\n\n if (!this._valuesToMeasure.length) {\n process.nextTick(cb.bind(this, null, knownLength));\n return;\n }\n\n asynckit.parallel(this._valuesToMeasure, this._lengthRetriever, function(err, values) {\n if (err) {\n cb(err);\n return;\n }\n\n values.forEach(function(length) {\n knownLength += length;\n });\n\n cb(null, knownLength);\n });\n};\n\nFormData.prototype.submit = function(params, cb) {\n var request\n , options\n , defaults = {method: 'post'}\n ;\n\n // parse provided url if it's string\n // or treat it as options object\n if (typeof params == 'string') {\n\n params = parseUrl(params);\n options = populate({\n port: params.port,\n path: params.pathname,\n host: params.hostname,\n protocol: params.protocol\n }, defaults);\n\n // use custom params\n } else {\n\n options = populate(params, defaults);\n // if no port provided use default one\n if (!options.port) {\n options.port = options.protocol == 'https:' ? 443 : 80;\n }\n }\n\n // put that good code in getHeaders to some use\n options.headers = this.getHeaders(params.headers);\n\n // https if specified, fallback to http in any other case\n if (options.protocol == 'https:') {\n request = https.request(options);\n } else {\n request = http.request(options);\n }\n\n // get content length and fire away\n this.getLength(function(err, length) {\n if (err && err !== 'Unknown stream') {\n this._error(err);\n return;\n }\n\n // add content length\n if (length) {\n request.setHeader('Content-Length', length);\n }\n\n this.pipe(request);\n if (cb) {\n var onResponse;\n\n var callback = function (error, responce) {\n request.removeListener('error', callback);\n request.removeListener('response', onResponse);\n\n return cb.call(this, error, responce);\n };\n\n onResponse = callback.bind(this, null);\n\n request.on('error', callback);\n request.on('response', onResponse);\n }\n }.bind(this));\n\n return request;\n};\n\nFormData.prototype._error = function(err) {\n if (!this.error) {\n this.error = err;\n this.pause();\n this.emit('error', err);\n }\n};\n\nFormData.prototype.toString = function () {\n return '[object FormData]';\n};\n","// populates missing values\nmodule.exports = function(dst, src) {\n\n Object.keys(src).forEach(function(prop)\n {\n dst[prop] = dst[prop] || src[prop];\n });\n\n return dst;\n};\n","'use strict';\nmodule.exports = (flag, argv) => {\n\targv = argv || process.argv;\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst pos = argv.indexOf(prefix + flag);\n\tconst terminatorPos = argv.indexOf('--');\n\treturn pos !== -1 && (terminatorPos === -1 ? true : pos < terminatorPos);\n};\n","/*!\n * mime-db\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n/**\n * Module exports.\n */\n\nmodule.exports = require('./db.json')\n","/*!\n * mime-types\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar db = require('mime-db')\nvar extname = require('path').extname\n\n/**\n * Module variables.\n * @private\n */\n\nvar EXTRACT_TYPE_REGEXP = /^\\s*([^;\\s]*)(?:;|\\s|$)/\nvar TEXT_TYPE_REGEXP = /^text\\//i\n\n/**\n * Module exports.\n * @public\n */\n\nexports.charset = charset\nexports.charsets = { lookup: charset }\nexports.contentType = contentType\nexports.extension = extension\nexports.extensions = Object.create(null)\nexports.lookup = lookup\nexports.types = Object.create(null)\n\n// Populate the extensions/types maps\npopulateMaps(exports.extensions, exports.types)\n\n/**\n * Get the default charset for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction charset (type) {\n if (!type || typeof type !== 'string') {\n return false\n }\n\n // TODO: use media-typer\n var match = EXTRACT_TYPE_REGEXP.exec(type)\n var mime = match && db[match[1].toLowerCase()]\n\n if (mime && mime.charset) {\n return mime.charset\n }\n\n // default text/* to utf-8\n if (match && TEXT_TYPE_REGEXP.test(match[1])) {\n return 'UTF-8'\n }\n\n return false\n}\n\n/**\n * Create a full Content-Type header given a MIME type or extension.\n *\n * @param {string} str\n * @return {boolean|string}\n */\n\nfunction contentType (str) {\n // TODO: should this even be in this module?\n if (!str || typeof str !== 'string') {\n return false\n }\n\n var mime = str.indexOf('/') === -1\n ? exports.lookup(str)\n : str\n\n if (!mime) {\n return false\n }\n\n // TODO: use content-type or other module\n if (mime.indexOf('charset') === -1) {\n var charset = exports.charset(mime)\n if (charset) mime += '; charset=' + charset.toLowerCase()\n }\n\n return mime\n}\n\n/**\n * Get the default extension for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction extension (type) {\n if (!type || typeof type !== 'string') {\n return false\n }\n\n // TODO: use media-typer\n var match = EXTRACT_TYPE_REGEXP.exec(type)\n\n // get extensions\n var exts = match && exports.extensions[match[1].toLowerCase()]\n\n if (!exts || !exts.length) {\n return false\n }\n\n return exts[0]\n}\n\n/**\n * Lookup the MIME type for a file path/extension.\n *\n * @param {string} path\n * @return {boolean|string}\n */\n\nfunction lookup (path) {\n if (!path || typeof path !== 'string') {\n return false\n }\n\n // get the extension (\"ext\" or \".ext\" or full path)\n var extension = extname('x.' + path)\n .toLowerCase()\n .substr(1)\n\n if (!extension) {\n return false\n }\n\n return exports.types[extension] || false\n}\n\n/**\n * Populate the extensions and types maps.\n * @private\n */\n\nfunction populateMaps (extensions, types) {\n // source preference (least -> most)\n var preference = ['nginx', 'apache', undefined, 'iana']\n\n Object.keys(db).forEach(function forEachMimeType (type) {\n var mime = db[type]\n var exts = mime.extensions\n\n if (!exts || !exts.length) {\n return\n }\n\n // mime -> extensions\n extensions[type] = exts\n\n // extension -> mime\n for (var i = 0; i < exts.length; i++) {\n var extension = exts[i]\n\n if (types[extension]) {\n var from = preference.indexOf(db[types[extension]].source)\n var to = preference.indexOf(mime.source)\n\n if (types[extension] !== 'application/octet-stream' &&\n (from > to || (from === to && types[extension].substr(0, 12) === 'application/'))) {\n // skip the remapping\n continue\n }\n }\n\n // set the extension -> mime\n types[extension] = type\n }\n })\n}\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","'use strict';\n\nvar parseUrl = require('url').parse;\n\nvar DEFAULT_PORTS = {\n ftp: 21,\n gopher: 70,\n http: 80,\n https: 443,\n ws: 80,\n wss: 443,\n};\n\nvar stringEndsWith = String.prototype.endsWith || function(s) {\n return s.length <= this.length &&\n this.indexOf(s, this.length - s.length) !== -1;\n};\n\n/**\n * @param {string|object} url - The URL, or the result from url.parse.\n * @return {string} The URL of the proxy that should handle the request to the\n * given URL. If no proxy is set, this will be an empty string.\n */\nfunction getProxyForUrl(url) {\n var parsedUrl = typeof url === 'string' ? parseUrl(url) : url || {};\n var proto = parsedUrl.protocol;\n var hostname = parsedUrl.host;\n var port = parsedUrl.port;\n if (typeof hostname !== 'string' || !hostname || typeof proto !== 'string') {\n return ''; // Don't proxy URLs without a valid scheme or host.\n }\n\n proto = proto.split(':', 1)[0];\n // Stripping ports in this way instead of using parsedUrl.hostname to make\n // sure that the brackets around IPv6 addresses are kept.\n hostname = hostname.replace(/:\\d*$/, '');\n port = parseInt(port) || DEFAULT_PORTS[proto] || 0;\n if (!shouldProxy(hostname, port)) {\n return ''; // Don't proxy URLs that match NO_PROXY.\n }\n\n var proxy =\n getEnv('npm_config_' + proto + '_proxy') ||\n getEnv(proto + '_proxy') ||\n getEnv('npm_config_proxy') ||\n getEnv('all_proxy');\n if (proxy && proxy.indexOf('://') === -1) {\n // Missing scheme in proxy, default to the requested URL's scheme.\n proxy = proto + '://' + proxy;\n }\n return proxy;\n}\n\n/**\n * Determines whether a given URL should be proxied.\n *\n * @param {string} hostname - The host name of the URL.\n * @param {number} port - The effective port of the URL.\n * @returns {boolean} Whether the given URL should be proxied.\n * @private\n */\nfunction shouldProxy(hostname, port) {\n var NO_PROXY =\n (getEnv('npm_config_no_proxy') || getEnv('no_proxy')).toLowerCase();\n if (!NO_PROXY) {\n return true; // Always proxy if NO_PROXY is not set.\n }\n if (NO_PROXY === '*') {\n return false; // Never proxy if wildcard is set.\n }\n\n return NO_PROXY.split(/[,\\s]/).every(function(proxy) {\n if (!proxy) {\n return true; // Skip zero-length hosts.\n }\n var parsedProxy = proxy.match(/^(.+):(\\d+)$/);\n var parsedProxyHostname = parsedProxy ? parsedProxy[1] : proxy;\n var parsedProxyPort = parsedProxy ? parseInt(parsedProxy[2]) : 0;\n if (parsedProxyPort && parsedProxyPort !== port) {\n return true; // Skip if ports don't match.\n }\n\n if (!/^[.*]/.test(parsedProxyHostname)) {\n // No wildcards, so stop proxying if there is an exact match.\n return hostname !== parsedProxyHostname;\n }\n\n if (parsedProxyHostname.charAt(0) === '*') {\n // Remove leading wildcard.\n parsedProxyHostname = parsedProxyHostname.slice(1);\n }\n // Stop proxying if the hostname ends with the no_proxy host.\n return !stringEndsWith.call(hostname, parsedProxyHostname);\n });\n}\n\n/**\n * Get the value for an environment variable.\n *\n * @param {string} key - The name of the environment variable.\n * @return {string} The value of the environment variable.\n * @private\n */\nfunction getEnv(key) {\n return process.env[key.toLowerCase()] || process.env[key.toUpperCase()] || '';\n}\n\nexports.getProxyForUrl = getProxyForUrl;\n","'use strict';\nconst os = require('os');\nconst hasFlag = require('has-flag');\n\nconst env = process.env;\n\nlet forceColor;\nif (hasFlag('no-color') ||\n\thasFlag('no-colors') ||\n\thasFlag('color=false')) {\n\tforceColor = false;\n} else if (hasFlag('color') ||\n\thasFlag('colors') ||\n\thasFlag('color=true') ||\n\thasFlag('color=always')) {\n\tforceColor = true;\n}\nif ('FORCE_COLOR' in env) {\n\tforceColor = env.FORCE_COLOR.length === 0 || parseInt(env.FORCE_COLOR, 10) !== 0;\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3\n\t};\n}\n\nfunction supportsColor(stream) {\n\tif (forceColor === false) {\n\t\treturn 0;\n\t}\n\n\tif (hasFlag('color=16m') ||\n\t\thasFlag('color=full') ||\n\t\thasFlag('color=truecolor')) {\n\t\treturn 3;\n\t}\n\n\tif (hasFlag('color=256')) {\n\t\treturn 2;\n\t}\n\n\tif (stream && !stream.isTTY && forceColor !== true) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor ? 1 : 0;\n\n\tif (process.platform === 'win32') {\n\t\t// Node.js 7.5.0 is the first version of Node.js to include a patch to\n\t\t// libuv that enables 256 color output on Windows. Anything earlier and it\n\t\t// won't work. However, here we target Node.js 8 at minimum as it is an LTS\n\t\t// release, and Node.js 7 is not. Windows 10 build 10586 is the first Windows\n\t\t// release that supports 256 colors. Windows 10 build 14931 is the first release\n\t\t// that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(process.versions.node.split('.')[0]) >= 8 &&\n\t\t\tNumber(osRelease[0]) >= 10 &&\n\t\t\tNumber(osRelease[2]) >= 10586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app':\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\tcase 'Apple_Terminal':\n\t\t\t\treturn 2;\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\treturn min;\n}\n\nfunction getSupportLevel(stream) {\n\tconst level = supportsColor(stream);\n\treturn translateLevel(level);\n}\n\nmodule.exports = {\n\tsupportsColor: getSupportLevel,\n\tstdout: getSupportLevel(process.stdout),\n\tstderr: getSupportLevel(process.stderr)\n};\n","module.exports = require(\"assert\");","module.exports = require(\"buffer\");","module.exports = require(\"fs\");","module.exports = require(\"http\");","module.exports = require(\"https\");","module.exports = require(\"os\");","module.exports = require(\"path\");","module.exports = require(\"stream\");","module.exports = require(\"tty\");","module.exports = require(\"url\");","module.exports = require(\"util\");","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","export const CONF_ENV = \"production\";\n\nexport const conf = {\n testing: {\n // General Contants\n MS_IN_A_DAY: 864_00_000,\n\n HALF_MUL: 1000000000000000000,\n\n HOP_API_KEY: \"hopapiJrsprQopziLlhXKFPGV98ECGjBTcsxx5\",\n\n HOP_MAX_SLIPPAGE_BPS: 100,\n\n DEFAULT_HOP_SLIPPAGE: 1,\n\n DEFAULT_CETUS_SLIPPAGE: 1,\n\n DEFAULT_SWAP_SLIPPAGE: 1,\n\n SUI_NETWORK: \"mainnet\",\n\n CLOCK_PACKAGE_ID: \"0x6\",\n\n PRICE_ORACLE:\n \"0x1568865ed9a0b5ec414220e8f79b3d04c77acc82358f6e5ae4635687392ffbef\",\n\n ALPHA_XUSDC_COIN_TYPE: \"\",\n\n ALPHA_XUSDT_COIN_TYPE: \"\",\n\n // constants for Alpha Protocol\n\n ALPHA_FIRST_PACKAGE_ID:\n \"0xfcadd5525628c306cc87d980c18aec71daa8a51f17a5eba34e3a105eb64a8b7e\",\n\n ALPHA_LATEST_PACKAGE_ID:\n \"0x0e2db4c7ef008f89a6c747d3cf03b522d04ee09f2e8ef49bc94018c7a4564a1a\",\n\n ALPHA_MODULE_PACKAGE_IDS: [\n \"0xfcadd5525628c306cc87d980c18aec71daa8a51f17a5eba34e3a105eb64a8b7e\",\n \"0xd125a4fd587ae87cd0290df876601b352842aaeeb4cf813a6fdc7d62f2b5b699\",\n \"0xbcdbe865d8b2e84bbc217c12edb9cbad14a71ff8a0a1d849263c6b4b377780f1\",\n ],\n\n ALPHA_DISTRIBUTOR:\n \"0xc83a5765802d20d19b66b1be808131a58b10f480a5bbebb8f9ea04c6e5baade2\",\n\n VERSION:\n \"0xd835f0c985eadf2b41941e70fa4090af4e206ea39b7d7477174c54fa6686386a\",\n\n ALPHA_NAVI_BORROW_FACTOR: 0.95,\n\n ALPHA_TOKEN_REWARD_SHARE: 0.45,\n\n ALPHA_PROTOCOL_INFO_OBJECT_ID: \"\", // TODO\n\n // Coin Types\n\n ALPHA_COIN_TYPE:\n \"0x3813ca8aa2849b6369106ea749b0bdc5d72a671a267bf55a4be68c6c86fb911f::beta::BETA\",\n\n SUI_COIN_TYPE: \"0x2::sui::SUI\",\n\n USDT_COIN_TYPE:\n \"0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c::coin::COIN\",\n\n USDC_COIN_TYPE:\n \"0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf::coin::COIN\",\n\n VSUI_COIN_TYPE:\n \"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55::cert::CERT\",\n\n CETUS_COIN_TYPE:\n \"0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b::cetus::CETUS\",\n\n SCALLOP_COIN_TYPE:\n \"0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6::sca::SCA\",\n\n NAVX_COIN_TYPE:\n \"0xa99b8952d4f7d947ea77fe0ecdcc9e5fc0bcab2841d6e2a5aa00c3044e5544b5::navx::NAVX\",\n\n USDY_COIN_TYPE:\n \"0x960b531667636f39e85867775f52f6b1f220a058c4de786905bdf761e06a56bb::usdy::USDY\",\n\n HASUI_COIN_TYPE:\n \"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d::hasui::HASUI\",\n\n ALPHA_XSUI_COIN_TYPE:\n \"0x07cb3a546202773a06b0b18c9af9c76c8679a2a0fe8d653cecb7dfbf7933e019::xsui::XSUI\",\n\n WBTC_COIN_TYPE:\n \"0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881::coin::COIN\",\n\n WETH_COIN_TYPE:\n \"0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5::coin::COIN\",\n\n BUCK_COIN_TYPE:\n \"0xce7ff77a83ea0cb6fd39bd8748e2ec89a3f41e8efdc3f4eb123e0ca37b184db2::buck::BUCK \",\n\n // Alpha POOL Id's\n\n ALPHA_POOL:\n \"0x0c59f8e743a0ab97b82cbd6b83e8e8791f9b408735d32d8fe6cd4a268732ee61\",\n\n USDC_USDT_POOL:\n \"0x44dc3da97b8e387652c4035a50ecb2c8378e5267943324c4147b3be290d3bd12\",\n\n ALPHA_SUI_POOL:\n \"0x438459191401d90c5e1da4d9f5f4b5fcca9abee0ef870588437632294f1160c5\",\n\n HASUI_SUI_POOL:\n \"0xab1ac9c8c9cedf59671f286a208861b717b91b9553176b65d63ba9cdcfd335ec\",\n\n USDY_USDC_POOL:\n \"0xff2b3f3a26281a8cdffa8ce028315f603262e2bb4b2f5e2689256215e5ac75cf\",\n USDC_WBTC_POOL:\n \"0x1ef0da85103101ed4e9523115d46d29e57ecf0909dee574af5b421ba0483e38e\",\n ALPHA_USDC_POOL: \"\",\n ALPHA_USDT_POOL: \"\",\n USDC_SUI_POOL: \"\",\n WETH_USDC_POOL: \"\",\n NAVX_SUI_POOL:\n \"0x9dc8aefce176a265e14d71f64e960ace3d5da2ded47141cf652d8172551463b1\",\n\n // Alphafi-Navi Pools\n\n ALPHAFI_NAVI_SUI_POOL:\n \"0xd754696e2a7bb50e1ebdf2b1db45e525a99aab1c7640ca8126f2264bc0a4f753\",\n ALPHAFI_NAVI_VSUI_POOL:\n \"0x43c16f8c8c6182c8712c83e31df22dcfaf3f2c644584e2a6cc3f7244465fa04e\",\n ALPHAFI_NAVI_WETH_POOL:\n \"0x990d3af75f1ebcc9a05c34eb6b115eaeb61e9f72eb9955fcc83dbf1e9c91bff7\",\n ALPHAFI_NAVI_USDT_POOL:\n \"0xf1a10734b9acc82ab5ea8d7b35f1ffa053a43b0ca05603dc1f515c5d5e707926\",\n ALPHAFI_NAVI_USDC_POOL: \"\",\n ALPHAFI_NAVI_HASUI_POOL: \"\",\n\n // CETUS Pool Id's\n\n USDC_SUI_CETUS_POOL_ID:\n \"0xcf994611fd4c48e277ce3ffd4d4364c914af2c3cbb05f7bf6facd371de688630\",\n\n CETUS_SUI_CETUS_POOL_ID:\n \"0x2e041f3fd93646dcc877f783c1f2b7fa62d30271bdef1f21ef002cebf857bded\",\n\n USDT_USDC_CETUS_POOL_ID:\n \"0xc8d7a1503dc2f9f5b05449a87d8733593e2f0f3e7bffd90541252782e4d2ca20\",\n\n ALPHA_SUI_CETUS_POOL_ID:\n \"0x79882488b71c90d0be2fe8116972b46f62a2a92cbbca23e67e8788338c85b204\",\n\n USDY_USDC_CETUS_POOL_ID:\n \"0x0e809689d04d87f4bd4e660cd1b84bf5448c5a7997e3d22fc480e7e5e0b3f58d\",\n\n HASUI_SUI_CETUS_POOL_ID:\n \"0x871d8a227114f375170f149f7e9d45be822dd003eba225e83c05ac80828596bc\",\n\n USDC_WBTC_CETUS_POOL_ID:\n \"0xaa57c66ba6ee8f2219376659f727f2b13d49ead66435aa99f57bb008a64a8042\",\n\n WETH_USDC_CETUS_POOL_ID:\n \"0x5b0b24c27ccf6d0e98f3a8704d2e577de83fa574d3a9060eb8945eeb82b3e2df\",\n VSUI_SUI_CETUS_POOL_ID:\n \"0x6c545e78638c8c1db7a48b282bb8ca79da107993fcb185f75cedc1f5adb2f535\",\n NAVX_SUI_CETUS_POOL_ID:\n \"0x0254747f5ca059a1972cd7f6016485d51392a3fde608107b93bbaebea550f703\",\n\n USDC_CETUS_CETUS_POOL_ID:\n \"0x238f7e4648e62751de29c982cbf639b4225547c31db7bd866982d7d56fc2c7a8\",\n\n //Cetus Info Id's\n\n CETUS_REWARDER_GLOBAL_VAULT_ID:\n \"0xce7bceef26d3ad1f6d9b6f13a953f053e6ed3ca77907516481ce99ae8e588f2b\",\n\n CETUS_GLOBAL_CONFIG_ID:\n \"0xdaa46292632c3c4d8f31f23ea0f9b36a28ff3677e9684980e4438403a67a3d8f\",\n\n // Cetus Investor Id's\n\n ALPHA_CETUS_INVESTOR: \"\",\n\n USDT_USDC_CETUS_INVESTOR:\n \"0x6eaf967d65d7586f206ca5522a728a0ec1b80992f8f1a34e09a935138f627dfa\",\n\n ALPHA_SUI_CETUS_INVESTOR:\n \"0xd92fb59b0173c5429658c73534fb567ae51863f1a9f6c63b1fb5b8c07dec5a9f\",\n\n HASUI_SUI_CETUS_INVESTOR:\n \"0xf649267641724f85734543b2f60aeb157e8a046ac773fc97c22d2638124c9efc\",\n\n USDY_USDC_CETUS_INVESTOR:\n \"0x522d71aa19d30a8c154a34e2e38020c1be6ea6f69887057f1eded5580eeb768d\",\n\n USDC_WBTC_CETUS_INVESTOR:\n \"0x298b8f6fc49cefa46a8d45f1c5e86ab58c79e1bab968cf0b93daf074ad3269c6\",\n ALPHA_USDT_CETUS_INVESTOR: \"\",\n USDC_SUI_CETUS_INVESTOR: \"\",\n ALPHA_USDC_CETUS_INVESTOR: \"\",\n\n WETH_USDC_CETUS_INVESTOR: \"\",\n NAVX_SUI_CETUS_INVESTOR:\n \"0x7dd0aa1117683dae31221704237749944d983639452600b6e486a8d3c14c0e6a\",\n\n // Navi Investor Ids\n\n NAVI_SUI_INVESTOR:\n \"0x1a19c5c570ea00695abbb3cdae92caa8b4c4780bf8bf63705cd90c582740570a\",\n\n NAVI_VSUI_INVESTOR:\n \"0xa02f11c802bc0e230b72479a308b0b8da948ee00fc7e18c72222a0291cc47b30\",\n\n NAVI_WETH_INVESTOR:\n \"0xb246f0afffd1d2c13dac4af3c0f328f198f01a49a7fb326485c22a3e8371cba8\",\n\n NAVI_USDT_INVESTOR:\n \"0x77970e1f98160c4e72f57603e1525179d060a8a30baa1fe0fdae2c6b30173d5a\",\n\n NAVI_USDC_INVESTOR: \"\",\n\n NAVI_HASUI_INVESTOR: \"\",\n\n // Receipt Types\n\n ALPHA_POOL_RECEIPT:\n \"0xfcadd5525628c306cc87d980c18aec71daa8a51f17a5eba34e3a105eb64a8b7e::alphapool::Receipt\",\n\n ALPHA_SUI_POOL_RECEIPT:\n \"0xfcadd5525628c306cc87d980c18aec71daa8a51f17a5eba34e3a105eb64a8b7e::alphafi_cetus_sui_pool::Receipt\",\n\n USDT_USDC_POOL_RECEIPT:\n \"0xfcadd5525628c306cc87d980c18aec71daa8a51f17a5eba34e3a105eb64a8b7e::alphafi_cetus_pool::Receipt\",\n\n USDY_USDC_POOL_RECEIPT:\n \"0xfcadd5525628c306cc87d980c18aec71daa8a51f17a5eba34e3a105eb64a8b7e::alphafi_cetus_pool::Receipt\",\n\n HASUI_SUI_POOL_RECEIPT:\n \"0xfcadd5525628c306cc87d980c18aec71daa8a51f17a5eba34e3a105eb64a8b7e::alphafi_cetus_sui_pool::Receipt\",\n\n USDC_WBTC_POOL_RECEIPT:\n \"0xd125a4fd587ae87cd0290df876601b352842aaeeb4cf813a6fdc7d62f2b5b699::alphafi_cetus_pool_base_a::Receipt\",\n USDC_SUI_POOL_RECEIPT:\n \"0xfcadd5525628c306cc87d980c18aec71daa8a51f17a5eba34e3a105eb64a8b7e::alphafi_cetus_sui_pool::Receipt\",\n\n WETH_USDC_POOL_RECEIPT:\n \"0xfcadd5525628c306cc87d980c18aec71daa8a51f17a5eba34e3a105eb64a8b7e::alphafi_cetus_pool::Receipt\",\n\n NAVI_SUI_POOL_RECEIPT:\n \"0xbcdbe865d8b2e84bbc217c12edb9cbad14a71ff8a0a1d849263c6b4b377780f1::alphafi_navi_pool::Receipt\",\n\n NAVI_VSUI_POOL_RECEIPT:\n \"0xbcdbe865d8b2e84bbc217c12edb9cbad14a71ff8a0a1d849263c6b4b377780f1::alphafi_navi_pool::Receipt\",\n\n NAVI_WETH_POOL_RECEIPT:\n \"0xbcdbe865d8b2e84bbc217c12edb9cbad14a71ff8a0a1d849263c6b4b377780f1::alphafi_navi_pool::Receipt\",\n\n NAVI_USDT_POOL_RECEIPT:\n \"0xbcdbe865d8b2e84bbc217c12edb9cbad14a71ff8a0a1d849263c6b4b377780f1::alphafi_navi_pool::Receipt\",\n\n NAVI_USDC_POOL_RECEIPT:\n \"0xbcdbe865d8b2e84bbc217c12edb9cbad14a71ff8a0a1d849263c6b4b377780f1::alphafi_navi_pool::Receipt\",\n\n NAVI_HASUI_POOL_RECEIPT:\n \"0xbcdbe865d8b2e84bbc217c12edb9cbad14a71ff8a0a1d849263c6b4b377780f1::alphafi_navi_pool::Receipt\",\n\n NAVX_SUI_POOL_RECEIPT:\n \"0xfcadd5525628c306cc87d980c18aec71daa8a51f17a5eba34e3a105eb64a8b7e::alphafi_cetus_sui_pool::Receipt\",\n\n // Receipt Names\n\n ALPHA_POOL_RECEIPT_NAME: \"Betafi-BETA-receipt\",\n\n ALPHA_SUI_POOL_RECEIPT_NAME: \"Betafi-ALPHA-SUI-receipt\",\n\n USDT_USDC_POOL_RECEIPT_NAME: \"Betafi-USDT-USDC-receipt\",\n\n USDY_USDC_POOL_RECEIPT_NAME: \"Betafi-USDY-USDC-receipt\",\n\n HASUI_SUI_POOL_RECEIPT_NAME: \"Betafi-HASUI-SUI-receipt\",\n\n USDC_SUI_POOL_RECEIPT_NAME: \"Betafi-USDC-SUI-receipt\",\n\n USDC_WBTC_POOL_RECEIPT_NAME: \"Betafi-USDC-WBTC-receipt\",\n\n WETH_USDC_POOL_RECEIPT_NAME: \"Betafi-WETH-USDC-receipt\",\n\n NAVI_SUI_POOL_RECEIPT_NAME: \"Betafi-Navi-SUI-receipt\",\n\n NAVI_VSUI_POOL_RECEIPT_NAME: \"Betafi-Navi-VSUI-receipt\",\n\n NAVI_WETH_POOL_RECEIPT_NAME: \"Betafi-Navi-WETH-receipt\",\n\n NAVI_USDT_POOL_RECEIPT_NAME: \"Betafi-Navi-USDT-receipt\",\n\n NAVI_USDC_POOL_RECEIPT_NAME: \"Betafi-Navi-USDC-receipt\",\n\n NAVI_HASUI_POOL_RECEIPT_NAME: \"Betafi-Navi-HASUI-receipt\",\n\n NAVX_SUI_POOL_RECEIPT_NAME: \"Betafi-Navx-Sui-receipt\",\n\n // Wallets\n\n AIRDROP_WALLET_ADDRESS:\n \"0x6b3a7df97bcad34c277106fef70444fa26e2bfbcd711c9c26f824869a66bb70a\",\n\n // Constants for Navi Protocol\",\n\n NAVI_STORAGE:\n \"0xbb4e2f4b6205c2e2a2db47aeb4f830796ec7c005f88537ee775986639bc442fe\",\n\n NAVI_SUI_POOL:\n \"0x96df0fce3c471489f4debaaa762cf960b3d97820bd1f3f025ff8190730e958c5\",\n\n NAVI_VSUI_BORROW_POOL:\n \"0x9790c2c272e15b6bf9b341eb531ef16bcc8ed2b20dfda25d060bf47f5dd88d01\",\n\n NAVI_VSUI_POOL:\n \"0x9790c2c272e15b6bf9b341eb531ef16bcc8ed2b20dfda25d060bf47f5dd88d01\",\n\n NAVI_WETH_POOL:\n \"0x71b9f6e822c48ce827bceadce82201d6a7559f7b0350ed1daa1dc2ba3ac41b56\",\n\n NAVI_USDC_POOL:\n \"0xa02a98f9c88db51c6f5efaaf2261c81f34dd56d86073387e0ef1805ca22e39c8\",\n\n NAVI_HASUI_POOL: \"\",\n\n NAVI_USDC_BORROW_POOL: \"\",\n\n NAVI_USDT_POOL:\n \"0x0e060c3b5b8de00fb50511b7a45188c8e34b6995c01f69d98ea5a466fe10d103\",\n\n NAVI_USDT_BORROW_POOL: \"\",\n\n NAVI_INCENTIVE_V1:\n \"0xaaf735bf83ff564e1b219a0d644de894ef5bdc4b2250b126b2a46dd002331821\",\n\n NAVI_INCENTIVE_V2:\n \"0xf87a8acb8b81d14307894d12595541a73f19933f88e1326d5be349c7a6f7559c\",\n\n NAVI_VSUI_FUNDS_POOL:\n \"0xe2b5ada45273676e0da8ae10f8fe079a7cec3d0f59187d3d20b1549c275b07ea\",\n\n NAVI_NAVX_FUNDS_POOL:\n \"0x9dae0cf104a193217904f88a48ce2cf0221e8cd9073878edd05101d6b771fa09\",\n\n // constants for Scallop Protocol\n\n SCALLOP_VERSION:\n \"0x07871c4b3c847a0f674510d4978d5cf6f960452795e8ff6f189fd2088a3f6ac7\",\n\n SCALLOP_MARKET:\n \"0xa757975255146dc9686aa823b7838b507f315d704f428cbadad2f4ea061939d9\",\n\n SCALLOP_SUI_SPOOL:\n \"0x69ce8e537e750a95381e6040794afa5ab1758353a1a2e1de7760391b01f91670\",\n\n SCALLOP_SUI_REWARDS_POOL:\n \"0xbca914adce058ad0902c7f3cfcd698392a475f00dcfdc3f76001d0370b98777a\",\n\n SCALLOP_USDC_SPOOL:\n \"0x4ace6648ddc64e646ba47a957c562c32c9599b3bba8f5ac1aadb2ae23a2f8ca0\",\n\n SCALLOP_USDC_REWARDS_POOL:\n \"0xf4268cc9b9413b9bfe09e8966b8de650494c9e5784bf0930759cfef4904daff8\",\n\n SCALLOP_USDT_SPOOL:\n \"0xcb328f7ffa7f9342ed85af3fdb2f22919e1a06dfb2f713c04c73543870d7548f\",\n\n SCALLOP_USDT_REWARDS_POOL:\n \"0x2c9f934d67a5baa586ceec2cc24163a2f049a6af3d5ba36b84d8ac40f25c4080\",\n\n //Hop Contants\n\n HOP_QUERY_WALLET:\n \"0x4260738f0f7341adc79a8edaa62f8a4681ebd27c595aecab1f322f47bfc52c5e\", // used only for querying Hop for quote.\n\n HOP_FEE_BPS: 0,\n\n HOP_NETWORK: \"mainnet\",\n },\n\n production: {\n // General Contants\n MS_IN_A_DAY: 864_00_000,\n\n HALF_MUL: 1000000000000000000,\n\n HOP_API_KEY: \"hopapiJrsprQopziLlhXKFPGV98ECGjBTcsxx5\",\n\n HOP_MAX_SLIPPAGE_BPS: 100,\n\n DEFAULT_HOP_SLIPPAGE: 1,\n\n DEFAULT_CETUS_SLIPPAGE: 1,\n\n DEFAULT_SWAP_SLIPPAGE: 1,\n\n SUI_NETWORK: \"mainnet\",\n\n CLOCK_PACKAGE_ID: \"0x6\",\n\n PRICE_ORACLE:\n \"0x1568865ed9a0b5ec414220e8f79b3d04c77acc82358f6e5ae4635687392ffbef\",\n\n ALPHA_XUSDC_COIN_TYPE: \"\",\n\n ALPHA_XUSDT_COIN_TYPE: \"\",\n\n // constants for Alpha Protocol\n\n ALPHA_FIRST_PACKAGE_ID:\n \"0x9bbd650b8442abb082c20f3bc95a9434a8d47b4bef98b0832dab57c1a8ba7123\",\n\n ALPHA_PACKAGE_IDS: [\n \"0x9bbd650b8442abb082c20f3bc95a9434a8d47b4bef98b0832dab57c1a8ba7123\",\n \"0x7305ab61391388275514b3195554e1dd5b72aae1d4e6f1103b0600a848b0f36f\",\n \"0x5818295b2823f6f1be62abb7326abeddea01ca51c088f5d45a1853116a26d65d\",\n \"0x34454fd287c11c45c3c035083cdc84d7498d5a62541987098f8f47e443ac02fe\",\n \"0xad579dde7a98ed389171ee7b648296e054c9af4158fa14fca487d961d4702380\",\n \"0x2793db7aa0e0209afc84f0adb1b258973cf1c9da55c35ee85c18f2ed4912bb6f\",\n \"0x5a26561d7bfe9587d9f9b06194dfa3dc800baa5651705bfd28034d56a202d8e0\",\n \"0x5cff7cf977811ef57dbd8e3c211c9e9336bd72c8c366ec381957238ebc60c132\",\n \"0x961465e883920bf201f24c3b6b24c6ab5752795609fa4a66be563be8658aac44\",\n \"0x771dc108bc4ed5266ae32f678f41031c02afe5e96754a8c8d65866eccfd29e30\",\n \"0x8f7d2c35e19c65213bc2153086969a55ec207b5a25ebdee303a6d9edd9c053e3\",\n \"0x7666ad8f8b0201c0a33cc5b3444167c9bd4a029393e3807adc2f82df016d5cea\",\n ],\n ALPHA_MODULE_PACKAGE_IDS: [\n \"0x9bbd650b8442abb082c20f3bc95a9434a8d47b4bef98b0832dab57c1a8ba7123\",\n \"0x2793db7aa0e0209afc84f0adb1b258973cf1c9da55c35ee85c18f2ed4912bb6f\",\n \"0x8f7d2c35e19c65213bc2153086969a55ec207b5a25ebdee303a6d9edd9c053e3\",\n ],\n\n ALPHA_LATEST_PACKAGE_ID:\n \"0x7666ad8f8b0201c0a33cc5b3444167c9bd4a029393e3807adc2f82df016d5cea\",\n\n ALPHA_DISTRIBUTOR:\n \"0x33f3c288a90c5368ec3b937875cfae94aebae0ee7fb65e97265728eff9e6995b\",\n\n VERSION:\n \"0xf9c533b483c656d29aad9b2ee48ea418dde9504fb42c8294298bf523026bf043\",\n\n ALPHA_NAVI_BORROW_FACTOR: 0.95,\n\n ALPHA_TOKEN_REWARD_SHARE: 0.45,\n\n ALPHA_PROTOCOL_INFO_OBJECT_ID: \"\", // TODO\n\n // Coin Types\n\n ALPHA_COIN_TYPE:\n \"0xfe3afec26c59e874f3c1d60b8203cb3852d2bb2aa415df9548b8d688e6683f93::alpha::ALPHA\",\n\n SUI_COIN_TYPE: \"0x2::sui::SUI\",\n\n USDT_COIN_TYPE:\n \"0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c::coin::COIN\",\n\n USDC_COIN_TYPE:\n \"0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf::coin::COIN\",\n\n VSUI_COIN_TYPE:\n \"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55::cert::CERT\",\n\n CETUS_COIN_TYPE:\n \"0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b::cetus::CETUS\",\n\n SCALLOP_COIN_TYPE:\n \"0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6::sca::SCA\",\n\n NAVX_COIN_TYPE:\n \"0xa99b8952d4f7d947ea77fe0ecdcc9e5fc0bcab2841d6e2a5aa00c3044e5544b5::navx::NAVX\",\n\n USDY_COIN_TYPE:\n \"0x960b531667636f39e85867775f52f6b1f220a058c4de786905bdf761e06a56bb::usdy::USDY\",\n\n HASUI_COIN_TYPE:\n \"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d::hasui::HASUI\",\n\n ALPHA_XSUI_COIN_TYPE:\n \"0x07cb3a546202773a06b0b18c9af9c76c8679a2a0fe8d653cecb7dfbf7933e019::xsui::XSUI\",\n\n WBTC_COIN_TYPE:\n \"0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881::coin::COIN\",\n\n WETH_COIN_TYPE:\n \"0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5::coin::COIN\",\n\n BUCK_COIN_TYPE:\n \"0xce7ff77a83ea0cb6fd39bd8748e2ec89a3f41e8efdc3f4eb123e0ca37b184db2::buck::BUCK\",\n\n // Alpha POOL Id's\n\n ALPHA_POOL:\n \"0x6ee8f60226edf48772f81e5986994745dae249c2605a5b12de6602ef1b05b0c1\",\n\n USDC_USDT_POOL:\n \"0x30066d9879374276dc01177fbd239a9377b497bcd347c82811d75fcda35b18e5\",\n\n ALPHA_SUI_POOL:\n \"0x594f13b8f287003fd48e4264e7056e274b84709ada31e3657f00eeedc1547e37\",\n\n HASUI_SUI_POOL:\n \"0xb75f427854fef827233ae838d1c23eefd420a540d8fa83fb40f77421dafb84d4\",\n\n USDY_USDC_POOL:\n \"0xa7239a0c727c40ee3a139689b16b281acfd0682a06c23531b184a61721ece437\",\n\n ALPHA_USDC_POOL: \"\",\n\n ALPHA_USDT_POOL: \"\",\n\n USDC_SUI_POOL:\n \"0xee6f6392cbd9e1997f6e4cf71db0c1ae1611f1f5f7f23f90ad2c64b8f23cceab\",\n\n WETH_USDC_POOL:\n \"0xbdf4f673b34274f36be284bca3f765083380fefb29141f971db289294bf679c6\",\n\n USDC_WBTC_POOL:\n \"0x676fc5cad79f51f6a7d03bfa3474ecd3c695d322380fc68e3d4f61819da3bf8a\",\n\n NAVX_SUI_POOL:\n \"0x045e4e3ccd383bedeb8fda54c39a7a1b1a6ed6a9f66aec4998984373558f96a0\",\n\n BUCK_USDC_POOL: \"\",\n\n CETUS_SUI_POOL: \"\",\n\n // Alphafi-Navi Pools\n\n ALPHAFI_NAVI_SUI_POOL:\n \"0x643f84e0a33b19e2b511be46232610c6eb38e772931f582f019b8bbfb893ddb3\",\n ALPHAFI_NAVI_VSUI_POOL:\n \"0x0d9598006d37077b4935400f6525d7f1070784e2d6f04765d76ae0a4880f7d0a\",\n ALPHAFI_NAVI_WETH_POOL:\n \"0xe4eef7d4d8cafa3ef90ea486ff7d1eec347718375e63f1f778005ae646439aad\",\n ALPHAFI_NAVI_USDT_POOL:\n \"0xc696ca5b8f21a1f8fcd62cff16bbe5a396a4bed6f67909cfec8269eb16e60757\",\n ALPHAFI_NAVI_USDC_POOL:\n \"0x01493446093dfcdcfc6c16dc31ffe40ba9ac2e99a3f6c16a0d285bff861944ae\",\n ALPHAFI_NAVI_HASUI_POOL: \"\",\n\n // CETUS Pool Id's\n\n USDC_SUI_CETUS_POOL_ID:\n \"0xcf994611fd4c48e277ce3ffd4d4364c914af2c3cbb05f7bf6facd371de688630\",\n\n CETUS_SUI_CETUS_POOL_ID:\n \"0x2e041f3fd93646dcc877f783c1f2b7fa62d30271bdef1f21ef002cebf857bded\",\n\n USDT_USDC_CETUS_POOL_ID:\n \"0xc8d7a1503dc2f9f5b05449a87d8733593e2f0f3e7bffd90541252782e4d2ca20\",\n\n ALPHA_SUI_CETUS_POOL_ID:\n \"0xda7347c3192a27ddac32e659c9d9cbed6f8c9d1344e605c71c8886d7b787d720\",\n\n USDY_USDC_CETUS_POOL_ID:\n \"0x0e809689d04d87f4bd4e660cd1b84bf5448c5a7997e3d22fc480e7e5e0b3f58d\",\n\n HASUI_SUI_CETUS_POOL_ID:\n \"0x871d8a227114f375170f149f7e9d45be822dd003eba225e83c05ac80828596bc\",\n\n USDC_WBTC_CETUS_POOL_ID:\n \"0xaa57c66ba6ee8f2219376659f727f2b13d49ead66435aa99f57bb008a64a8042\",\n\n WETH_USDC_CETUS_POOL_ID:\n \"0x5b0b24c27ccf6d0e98f3a8704d2e577de83fa574d3a9060eb8945eeb82b3e2df\",\n\n WETH_SUI_CETUS_POOL_ID:\n \"0xc51752c87e7363dec32bb429cabcb7774aaabb45fa5d2c17edfbb59bd6d1deb0\",\n\n WBTC_SUI_CETUS_POOL_ID:\n \"0xe0c526aa27d1729931d0051a318d795ad0299998898e4287d9da1bf095b49658\",\n\n VSUI_SUI_CETUS_POOL_ID:\n \"0x6c545e78638c8c1db7a48b282bb8ca79da107993fcb185f75cedc1f5adb2f535\",\n NAVX_SUI_CETUS_POOL_ID:\n \"0x0254747f5ca059a1972cd7f6016485d51392a3fde608107b93bbaebea550f703\",\n\n USDC_CETUS_CETUS_POOL_ID:\n \"0x238f7e4648e62751de29c982cbf639b4225547c31db7bd866982d7d56fc2c7a8\",\n\n BUCK_USDC_CETUS_POOL_ID:\n \"0x81fe26939ed676dd766358a60445341a06cea407ca6f3671ef30f162c84126d5\",\n\n //Cetus Info Id's\n\n CETUS_REWARDER_GLOBAL_VAULT_ID:\n \"0xce7bceef26d3ad1f6d9b6f13a953f053e6ed3ca77907516481ce99ae8e588f2b\",\n\n CETUS_GLOBAL_CONFIG_ID:\n \"0xdaa46292632c3c4d8f31f23ea0f9b36a28ff3677e9684980e4438403a67a3d8f\",\n\n // Cetus Investor Id's\n\n ALPHA_CETUS_INVESTOR: \"\",\n\n USDT_USDC_CETUS_INVESTOR:\n \"0x87a76889bf4ed211276b16eb482bf6df8d4e27749ebecd13017d19a63f75a6d5\",\n\n ALPHA_SUI_CETUS_INVESTOR:\n \"0x46d901d5e1dba34103038bd2ba789b775861ea0bf4d6566afd5029cf466a3d88\",\n\n HASUI_SUI_CETUS_INVESTOR:\n \"0x0805991383c8a5e1bbb1c2b8d824d205fdb66509a2c408f505bc16cbbdb909ab\",\n\n USDY_USDC_CETUS_INVESTOR:\n \"0x1b923520f19660d4eb013242c6d03c84fdea034b8f784cfd71173ef72ece50e1\",\n\n ALPHA_USDC_CETUS_INVESTOR: \"\",\n\n ALPHA_USDT_CETUS_INVESTOR: \"\",\n\n USDC_SUI_CETUS_INVESTOR:\n \"0xb6ca8aba0fb26ed264a3ae3d9c1461ac7c96cdcbeabb01e71086e9a8340b9c55\",\n\n USDC_WBTC_CETUS_INVESTOR:\n \"0x9ae0e56aa0ebc27f9d8a17b5a9118d368ba262118d878977b6194a10a671bbbc\",\n\n WETH_USDC_CETUS_INVESTOR:\n \"0x05fa099d1df7b5bfb2e420d5ee2d63508db17c40ce7c4e0ca0305cd5df974e43\",\n\n NAVX_SUI_CETUS_INVESTOR:\n \"0xdd9018247d579bd7adfdbced4ed39c28821c6019461d37dbdf32f0d409959b1c\",\n\n BUCK_USDC_CETUS_INVESTOR: \"\",\n\n CETUS_SUI_CETUS_INVESTOR: \"\",\n\n // Navi Investor Ids\n\n NAVI_SUI_INVESTOR:\n \"0x0b4309b0cb8a75747635ae65a7bf3e7d555e7248c17cf8232a40240a415cf78f\",\n\n NAVI_VSUI_INVESTOR:\n \"0x5843b3db9f1bc9ee39dd4950507f5466f24f1b110b8c6b1d7aa8502ce8ca4ac4\",\n\n NAVI_WETH_INVESTOR:\n \"0xaef988b8bcd85f319817579cfeaf94b13c2113d4b670f9ed66326d97a3f9d76f\",\n\n NAVI_USDT_INVESTOR:\n \"0xc3b2ba8d15fe77bada328ede3219aa8b746832932f7372f974313c841bb6693f\",\n\n NAVI_USDC_INVESTOR:\n \"0xdf980cacf2ef2f4411f793ee9ee9266af78324b228323ede2ce73f9cf0c301cc\",\n\n NAVI_HASUI_INVESTOR: \"\",\n\n // Receipt Types\n\n ALPHA_POOL_RECEIPT:\n \"0x9bbd650b8442abb082c20f3bc95a9434a8d47b4bef98b0832dab57c1a8ba7123::alphapool::Receipt\",\n\n ALPHA_SUI_POOL_RECEIPT:\n \"0x9bbd650b8442abb082c20f3bc95a9434a8d47b4bef98b0832dab57c1a8ba7123::alphafi_cetus_sui_pool::Receipt\",\n\n USDT_USDC_POOL_RECEIPT:\n \"0x9bbd650b8442abb082c20f3bc95a9434a8d47b4bef98b0832dab57c1a8ba7123::alphafi_cetus_pool::Receipt\",\n\n USDY_USDC_POOL_RECEIPT:\n \"0x9bbd650b8442abb082c20f3bc95a9434a8d47b4bef98b0832dab57c1a8ba7123::alphafi_cetus_pool::Receipt\",\n\n HASUI_SUI_POOL_RECEIPT:\n \"0x9bbd650b8442abb082c20f3bc95a9434a8d47b4bef98b0832dab57c1a8ba7123::alphafi_cetus_sui_pool::Receipt\",\n\n USDC_SUI_POOL_RECEIPT:\n \"0x9bbd650b8442abb082c20f3bc95a9434a8d47b4bef98b0832dab57c1a8ba7123::alphafi_cetus_sui_pool::Receipt\",\n\n USDC_WBTC_POOL_RECEIPT:\n \"0x2793db7aa0e0209afc84f0adb1b258973cf1c9da55c35ee85c18f2ed4912bb6f::alphafi_cetus_pool_base_a::Receipt\",\n\n WETH_USDC_POOL_RECEIPT:\n \"0x9bbd650b8442abb082c20f3bc95a9434a8d47b4bef98b0832dab57c1a8ba7123::alphafi_cetus_pool::Receipt\",\n\n NAVX_SUI_POOL_RECEIPT:\n \"0x9bbd650b8442abb082c20f3bc95a9434a8d47b4bef98b0832dab57c1a8ba7123::alphafi_cetus_sui_pool::Receipt\",\n\n BUCK_USDC_POOL_RECEIPT:\n \"0x9bbd650b8442abb082c20f3bc95a9434a8d47b4bef98b0832dab57c1a8ba7123::alphafi_cetus_pool::Receipt\",\n\n CETUS_SUI_POOL_RECEIPT:\n \"0x9bbd650b8442abb082c20f3bc95a9434a8d47b4bef98b0832dab57c1a8ba7123::alphafi_cetus_sui_pool::Receipt\",\n\n NAVI_SUI_POOL_RECEIPT:\n \"0x8f7d2c35e19c65213bc2153086969a55ec207b5a25ebdee303a6d9edd9c053e3::alphafi_navi_pool::Receipt\",\n\n NAVI_VSUI_POOL_RECEIPT:\n \"0x8f7d2c35e19c65213bc2153086969a55ec207b5a25ebdee303a6d9edd9c053e3::alphafi_navi_pool::Receipt\",\n\n NAVI_WETH_POOL_RECEIPT:\n \"0x8f7d2c35e19c65213bc2153086969a55ec207b5a25ebdee303a6d9edd9c053e3::alphafi_navi_pool::Receipt\",\n\n NAVI_USDT_POOL_RECEIPT:\n \"0x8f7d2c35e19c65213bc2153086969a55ec207b5a25ebdee303a6d9edd9c053e3::alphafi_navi_pool::Receipt\",\n\n NAVI_USDC_POOL_RECEIPT:\n \"0x8f7d2c35e19c65213bc2153086969a55ec207b5a25ebdee303a6d9edd9c053e3::alphafi_navi_pool::Receipt\",\n\n NAVI_HASUI_POOL_RECEIPT:\n \"0x8f7d2c35e19c65213bc2153086969a55ec207b5a25ebdee303a6d9edd9c053e3::alphafi_navi_pool::Receipt\",\n\n // Receipt Names\n\n ALPHA_POOL_RECEIPT_NAME: \"AlphaFi ALPHA Receipt\",\n\n ALPHA_SUI_POOL_RECEIPT_NAME: \"AlphaFi ALPHA-SUI Receipt\",\n\n USDT_USDC_POOL_RECEIPT_NAME: \"AlphaFi USDT-USDC Receipt\",\n\n USDY_USDC_POOL_RECEIPT_NAME: \"AlphaFi USDY-USDC Receipt\",\n\n HASUI_SUI_POOL_RECEIPT_NAME: \"AlphaFi haSUI-SUI Receipt\",\n\n USDC_SUI_POOL_RECEIPT_NAME: \"AlphaFi USDC-SUI Receipt\",\n\n USDC_WBTC_POOL_RECEIPT_NAME: \"AlphaFi WBTC-USDC Receipt\",\n\n WETH_USDC_POOL_RECEIPT_NAME: \"AlphaFi WETH-USDC Receipt\",\n\n NAVX_SUI_POOL_RECEIPT_NAME: \"AlphaFi NAVX-SUI Receipt\",\n\n BUCK_USDC_POOL_RECEIPT_NAME: \"AlphaFi BUCK-USDC Receipt\",\n\n CETUS_SUI_POOL_RECEIPT_NAME: \"AlphaFi CETUS-SUI Receipt\",\n\n NAVI_SUI_POOL_RECEIPT_NAME: \"AlphaFi-Navi SUI Receipt\",\n\n NAVI_VSUI_POOL_RECEIPT_NAME: \"AlphaFi-Navi VSUI Receipt\",\n\n NAVI_WETH_POOL_RECEIPT_NAME: \"AlphaFi-Navi WETH Receipt\",\n\n NAVI_USDT_POOL_RECEIPT_NAME: \"AlphaFi-Navi USDT Receipt\",\n\n NAVI_USDC_POOL_RECEIPT_NAME: \"AlphaFi-Navi USDC Receipt\",\n\n NAVI_HASUI_POOL_RECEIPT_NAME: \"AlphaFi-Navi HASUI Receipt\",\n\n // Wallets\n\n AIRDROP_WALLET_ADDRESS:\n \"0x6b3a7df97bcad34c277106fef70444fa26e2bfbcd711c9c26f824869a66bb70a\",\n\n // Constants for Navi Protocol\",\n\n NAVI_STORAGE:\n \"0xbb4e2f4b6205c2e2a2db47aeb4f830796ec7c005f88537ee775986639bc442fe\",\n\n NAVI_SUI_POOL:\n \"0x96df0fce3c471489f4debaaa762cf960b3d97820bd1f3f025ff8190730e958c5\",\n\n NAVI_VSUI_BORROW_POOL:\n \"0x9790c2c272e15b6bf9b341eb531ef16bcc8ed2b20dfda25d060bf47f5dd88d01\",\n\n NAVI_VSUI_POOL:\n \"0x9790c2c272e15b6bf9b341eb531ef16bcc8ed2b20dfda25d060bf47f5dd88d01\",\n\n NAVI_WETH_POOL:\n \"0x71b9f6e822c48ce827bceadce82201d6a7559f7b0350ed1daa1dc2ba3ac41b56\",\n\n NAVI_USDC_POOL:\n \"0xa02a98f9c88db51c6f5efaaf2261c81f34dd56d86073387e0ef1805ca22e39c8\",\n\n NAVI_USDC_BORROW_POOL: \"\",\n\n NAVI_USDT_POOL:\n \"0x0e060c3b5b8de00fb50511b7a45188c8e34b6995c01f69d98ea5a466fe10d103\",\n\n NAVI_HASUI_POOL: \"\",\n\n NAVI_USDT_BORROW_POOL: \"\",\n\n NAVI_INCENTIVE_V1:\n \"0xaaf735bf83ff564e1b219a0d644de894ef5bdc4b2250b126b2a46dd002331821\",\n\n NAVI_INCENTIVE_V2:\n \"0xf87a8acb8b81d14307894d12595541a73f19933f88e1326d5be349c7a6f7559c\",\n\n NAVI_VSUI_FUNDS_POOL:\n \"0xe2b5ada45273676e0da8ae10f8fe079a7cec3d0f59187d3d20b1549c275b07ea\",\n\n NAVI_NAVX_FUNDS_POOL:\n \"0x9dae0cf104a193217904f88a48ce2cf0221e8cd9073878edd05101d6b771fa09\",\n\n // constants for Scallop Protocol\n\n SCALLOP_VERSION:\n \"0x07871c4b3c847a0f674510d4978d5cf6f960452795e8ff6f189fd2088a3f6ac7\",\n\n SCALLOP_MARKET:\n \"0xa757975255146dc9686aa823b7838b507f315d704f428cbadad2f4ea061939d9\",\n\n SCALLOP_SUI_SPOOL:\n \"0x69ce8e537e750a95381e6040794afa5ab1758353a1a2e1de7760391b01f91670\",\n\n SCALLOP_SUI_REWARDS_POOL:\n \"0xbca914adce058ad0902c7f3cfcd698392a475f00dcfdc3f76001d0370b98777a\",\n\n SCALLOP_USDC_SPOOL:\n \"0x4ace6648ddc64e646ba47a957c562c32c9599b3bba8f5ac1aadb2ae23a2f8ca0\",\n\n SCALLOP_USDC_REWARDS_POOL:\n \"0xf4268cc9b9413b9bfe09e8966b8de650494c9e5784bf0930759cfef4904daff8\",\n\n SCALLOP_USDT_SPOOL:\n \"0xcb328f7ffa7f9342ed85af3fdb2f22919e1a06dfb2f713c04c73543870d7548f\",\n\n SCALLOP_USDT_REWARDS_POOL:\n \"0x2c9f934d67a5baa586ceec2cc24163a2f049a6af3d5ba36b84d8ac40f25c4080\",\n\n //Hop Contants\n\n HOP_QUERY_WALLET:\n \"0x4260738f0f7341adc79a8edaa62f8a4681ebd27c595aecab1f322f47bfc52c5e\", // used only for querying Hop for quote.\n\n HOP_FEE_BPS: 0,\n\n HOP_NETWORK: \"mainnet\",\n },\n};\n","import { conf, CONF_ENV } from \"./constants\";\nimport { PoolReceipt } from \"./types\";\n\nexport const cetusPoolMap: { [key: string]: string } = {\n \"USDC-SUI\": conf[CONF_ENV].USDC_SUI_CETUS_POOL_ID,\n \"CETUS-SUI\": conf[CONF_ENV].CETUS_SUI_CETUS_POOL_ID,\n \"USDT-USDC\": conf[CONF_ENV].USDT_USDC_CETUS_POOL_ID,\n \"USDY-USDC\": conf[CONF_ENV].USDY_USDC_CETUS_POOL_ID,\n \"HASUI-SUI\": conf[CONF_ENV].HASUI_SUI_CETUS_POOL_ID,\n \"ALPHA-SUI\": conf[CONF_ENV].ALPHA_SUI_CETUS_POOL_ID,\n \"WETH-USDC\": conf[CONF_ENV].WETH_USDC_CETUS_POOL_ID,\n \"USDC-WBTC\": conf[CONF_ENV].USDC_WBTC_CETUS_POOL_ID,\n \"VSUI-SUI\": conf[CONF_ENV].VSUI_SUI_CETUS_POOL_ID,\n \"NAVX-SUI\": conf[CONF_ENV].NAVX_SUI_CETUS_POOL_ID,\n \"USDC-CETUS\": conf[CONF_ENV].USDC_CETUS_CETUS_POOL_ID,\n \"BUCK-USDC\": conf[CONF_ENV].BUCK_USDC_CETUS_POOL_ID,\n};\n\nexport const cetusInvestorMap: { [key: string]: string } = {\n ALPHA: conf[CONF_ENV].ALPHA_CETUS_INVESTOR,\n \"USDT-USDC\": conf[CONF_ENV].USDT_USDC_CETUS_INVESTOR,\n \"ALPHA-SUI\": conf[CONF_ENV].ALPHA_SUI_CETUS_INVESTOR,\n \"HASUI-SUI\": conf[CONF_ENV].HASUI_SUI_CETUS_INVESTOR,\n \"USDY-USDC\": conf[CONF_ENV].USDY_USDC_CETUS_INVESTOR,\n \"USDC-SUI\": conf[CONF_ENV].USDC_SUI_CETUS_INVESTOR,\n \"WETH-USDC\": conf[CONF_ENV].WETH_USDC_CETUS_INVESTOR,\n \"USDC-WBTC\": conf[CONF_ENV].USDC_WBTC_CETUS_INVESTOR,\n \"NAVX-SUI\": conf[CONF_ENV].NAVX_SUI_CETUS_INVESTOR,\n \"BUCK-USDC\": conf[CONF_ENV].BUCK_USDC_CETUS_INVESTOR,\n \"CETUS-SUI\": conf[CONF_ENV].CETUS_SUI_CETUS_INVESTOR,\n};\n\nexport const poolMap: { [key: string]: string } = {\n ALPHA: conf[CONF_ENV].ALPHA_POOL,\n \"ALPHA-SUI\": conf[CONF_ENV].ALPHA_SUI_POOL,\n \"USDT-USDC\": conf[CONF_ENV].USDC_USDT_POOL,\n \"HASUI-SUI\": conf[CONF_ENV].HASUI_SUI_POOL,\n \"USDY-USDC\": conf[CONF_ENV].USDY_USDC_POOL,\n \"USDC-SUI\": conf[CONF_ENV].USDC_SUI_POOL,\n \"WETH-USDC\": conf[CONF_ENV].WETH_USDC_POOL,\n \"USDC-WBTC\": conf[CONF_ENV].USDC_WBTC_POOL,\n \"NAVX-SUI\": conf[CONF_ENV].NAVX_SUI_POOL,\n \"BUCK-USDC\": conf[CONF_ENV].BUCK_USDC_POOL,\n \"CETUS-SUI\": conf[CONF_ENV].CETUS_SUI_POOL,\n};\n\nexport const receiptNameMap: { [key in string]: string } = {\n ALPHA: conf[CONF_ENV].ALPHA_POOL_RECEIPT_NAME,\n \"ALPHA-SUI\": conf[CONF_ENV].ALPHA_SUI_POOL_RECEIPT_NAME,\n \"USDT-USDC\": conf[CONF_ENV].USDT_USDC_POOL_RECEIPT_NAME,\n \"HASUI-SUI\": conf[CONF_ENV].HASUI_SUI_POOL_RECEIPT_NAME,\n \"USDY-USDC\": conf[CONF_ENV].USDY_USDC_POOL_RECEIPT_NAME,\n \"USDC-SUI\": conf[CONF_ENV].USDC_SUI_POOL_RECEIPT_NAME,\n \"WETH-USDC\": conf[CONF_ENV].WETH_USDC_POOL_RECEIPT_NAME,\n \"USDC-WBTC\": conf[CONF_ENV].USDC_WBTC_POOL_RECEIPT_NAME,\n \"BUCK-USDC\": conf[CONF_ENV].BUCK_USDC_POOL_RECEIPT_NAME,\n \"CETUS-SUI\": conf[CONF_ENV].CETUS_SUI_POOL_RECEIPT_NAME,\n \"NAVI-VSUI\": conf[CONF_ENV].NAVI_VSUI_POOL_RECEIPT_NAME,\n \"NAVI-SUI\": conf[CONF_ENV].NAVI_SUI_POOL_RECEIPT_NAME,\n \"NAVI-HASUI\": conf[CONF_ENV].NAVI_HASUI_POOL_RECEIPT_NAME,\n};\n\nexport const poolPairMap: {\n [key in string]: { pool1: string; pool2: string };\n} = {\n \"USDT-USDC\": { pool1: \"USDT\", pool2: \"USDC\" },\n \"ALPHA-SUI\": { pool1: \"ALPHA\", pool2: \"SUI\" },\n \"HASUI-SUI\": { pool1: \"HASUI\", pool2: \"SUI\" },\n \"USDY-USDC\": { pool1: \"USDY\", pool2: \"USDC\" },\n \"USDC-SUI\": { pool1: \"USDC\", pool2: \"SUI\" },\n \"WETH-USDC\": { pool1: \"WETH\", pool2: \"USDC\" },\n \"USDC-WBTC\": { pool1: \"USDC\", pool2: \"WBTC\" },\n \"NAVX-SUI\": { pool1: \"NAVX\", pool2: \"SUI\" },\n \"BUCK-USDC\": { pool1: \"BUCK\", pool2: \"USDC\" },\n \"CETUS-SUI\": { pool1: \"CETUS\", pool2: \"SUI\" },\n};\n\nexport const poolInfo: {\n [key: string]: {\n parentProtocolName: string;\n parentPoolId: string;\n poolId: string;\n investorId: string;\n receiptName: string;\n receiptType: PoolReceipt;\n };\n} = {\n \"NAVI-SUI\": {\n parentProtocolName: \"NAVI\",\n parentPoolId: conf[CONF_ENV].NAVI_SUI_POOL,\n poolId: conf[CONF_ENV].ALPHAFI_NAVI_SUI_POOL,\n investorId: conf[CONF_ENV].NAVI_SUI_INVESTOR,\n receiptName: conf[CONF_ENV].NAVI_SUI_POOL_RECEIPT_NAME,\n receiptType: conf[CONF_ENV].NAVI_SUI_POOL_RECEIPT,\n },\n \"NAVI-VSUI\": {\n parentProtocolName: \"NAVI\",\n parentPoolId: conf[CONF_ENV].NAVI_VSUI_POOL,\n poolId: conf[CONF_ENV].ALPHAFI_NAVI_VSUI_POOL,\n investorId: conf[CONF_ENV].NAVI_VSUI_INVESTOR,\n receiptName: conf[CONF_ENV].NAVI_VSUI_POOL_RECEIPT_NAME,\n receiptType: conf[CONF_ENV].NAVI_VSUI_POOL_RECEIPT,\n },\n \"NAVI-WETH\": {\n parentProtocolName: \"NAVI\",\n parentPoolId: conf[CONF_ENV].NAVI_WETH_POOL,\n poolId: conf[CONF_ENV].ALPHAFI_NAVI_WETH_POOL,\n investorId: conf[CONF_ENV].NAVI_WETH_INVESTOR,\n receiptName: conf[CONF_ENV].NAVI_WETH_POOL_RECEIPT_NAME,\n receiptType: conf[CONF_ENV].NAVI_WETH_POOL_RECEIPT,\n },\n \"NAVI-USDT\": {\n parentProtocolName: \"NAVI\",\n parentPoolId: conf[CONF_ENV].NAVI_USDT_POOL,\n poolId: conf[CONF_ENV].ALPHAFI_NAVI_USDT_POOL,\n investorId: conf[CONF_ENV].NAVI_USDT_INVESTOR,\n receiptName: conf[CONF_ENV].NAVI_USDT_POOL_RECEIPT_NAME,\n receiptType: conf[CONF_ENV].NAVI_USDT_POOL_RECEIPT,\n },\n \"NAVI-USDC\": {\n parentProtocolName: \"NAVI\",\n parentPoolId: conf[CONF_ENV].NAVI_USDC_POOL,\n poolId: conf[CONF_ENV].ALPHAFI_NAVI_USDC_POOL,\n investorId: conf[CONF_ENV].NAVI_USDC_INVESTOR,\n receiptName: conf[CONF_ENV].NAVI_USDC_POOL_RECEIPT_NAME,\n receiptType: conf[CONF_ENV].NAVI_USDC_POOL_RECEIPT,\n },\n ALPHA: {\n parentProtocolName: \"ALPHAFI\",\n parentPoolId: conf[CONF_ENV].ALPHA_POOL,\n poolId: conf[CONF_ENV].ALPHA_POOL,\n investorId: conf[CONF_ENV].ALPHA_POOL,\n receiptName: conf[CONF_ENV].ALPHA_POOL_RECEIPT_NAME,\n receiptType: conf[CONF_ENV].ALPHA_POOL_RECEIPT,\n },\n \"ALPHA-SUI\": {\n parentProtocolName: \"CETUS\",\n parentPoolId: conf[CONF_ENV].ALPHA_SUI_CETUS_POOL_ID,\n poolId: conf[CONF_ENV].ALPHA_SUI_POOL,\n investorId: conf[CONF_ENV].ALPHA_SUI_CETUS_INVESTOR,\n receiptName: conf[CONF_ENV].ALPHA_SUI_POOL_RECEIPT_NAME,\n receiptType: conf[CONF_ENV].ALPHA_SUI_POOL_RECEIPT,\n },\n \"HASUI-SUI\": {\n parentProtocolName: \"CETUS\",\n parentPoolId: conf[CONF_ENV].HASUI_SUI_CETUS_POOL_ID,\n poolId: conf[CONF_ENV].HASUI_SUI_POOL,\n investorId: conf[CONF_ENV].HASUI_SUI_CETUS_INVESTOR,\n receiptName: conf[CONF_ENV].HASUI_SUI_POOL_RECEIPT_NAME,\n receiptType: conf[CONF_ENV].HASUI_SUI_POOL_RECEIPT,\n },\n \"USDT-USDC\": {\n parentProtocolName: \"CETUS\",\n parentPoolId: conf[CONF_ENV].USDT_USDC_CETUS_POOL_ID,\n poolId: conf[CONF_ENV].USDC_USDT_POOL,\n investorId: conf[CONF_ENV].USDT_USDC_CETUS_INVESTOR,\n receiptName: conf[CONF_ENV].USDT_USDC_POOL_RECEIPT_NAME,\n receiptType: conf[CONF_ENV].USDT_USDC_POOL_RECEIPT,\n },\n \"USDY-USDC\": {\n parentProtocolName: \"CETUS\",\n parentPoolId: conf[CONF_ENV].USDY_USDC_CETUS_POOL_ID,\n poolId: conf[CONF_ENV].USDY_USDC_POOL,\n investorId: conf[CONF_ENV].USDY_USDC_CETUS_INVESTOR,\n receiptName: conf[CONF_ENV].USDY_USDC_POOL_RECEIPT_NAME,\n receiptType: conf[CONF_ENV].USDY_USDC_POOL_RECEIPT,\n },\n \"USDC-SUI\": {\n parentProtocolName: \"CETUS\",\n parentPoolId: conf[CONF_ENV].USDC_SUI_CETUS_POOL_ID,\n poolId: conf[CONF_ENV].USDC_SUI_POOL,\n investorId: conf[CONF_ENV].USDC_SUI_CETUS_INVESTOR,\n receiptName: conf[CONF_ENV].USDC_SUI_POOL_RECEIPT_NAME,\n receiptType: conf[CONF_ENV].USDC_SUI_POOL_RECEIPT,\n },\n \"WETH-USDC\": {\n parentProtocolName: \"CETUS\",\n parentPoolId: conf[CONF_ENV].WETH_USDC_CETUS_POOL_ID,\n poolId: conf[CONF_ENV].WETH_USDC_POOL,\n investorId: conf[CONF_ENV].WETH_USDC_CETUS_INVESTOR,\n receiptName: conf[CONF_ENV].WETH_USDC_POOL_RECEIPT_NAME,\n receiptType: conf[CONF_ENV].WETH_USDC_POOL_RECEIPT,\n },\n \"USDC-WBTC\": {\n parentProtocolName: \"CETUS\",\n parentPoolId: conf[CONF_ENV].USDC_WBTC_CETUS_POOL_ID,\n poolId: conf[CONF_ENV].USDC_WBTC_POOL,\n investorId: conf[CONF_ENV].USDC_WBTC_CETUS_INVESTOR,\n receiptName: conf[CONF_ENV].USDC_WBTC_POOL_RECEIPT_NAME,\n receiptType: conf[CONF_ENV].USDC_WBTC_POOL_RECEIPT,\n },\n \"NAVX-SUI\": {\n parentProtocolName: \"CETUS\",\n parentPoolId: conf[CONF_ENV].NAVX_SUI_CETUS_POOL_ID,\n poolId: conf[CONF_ENV].NAVX_SUI_POOL,\n investorId: conf[CONF_ENV].NAVX_SUI_CETUS_INVESTOR,\n receiptName: conf[CONF_ENV].NAVX_SUI_POOL_RECEIPT_NAME,\n receiptType: conf[CONF_ENV].NAVX_SUI_POOL_RECEIPT,\n },\n};\n","function fromB64(base64String) {\n return Uint8Array.from(atob(base64String), (char) => char.charCodeAt(0));\n}\nconst CHUNK_SIZE = 8192;\nfunction toB64(bytes) {\n if (bytes.length < CHUNK_SIZE) {\n return btoa(String.fromCharCode(...bytes));\n }\n let output = \"\";\n for (var i = 0; i < bytes.length; i += CHUNK_SIZE) {\n const chunk = bytes.slice(i, i + CHUNK_SIZE);\n output += String.fromCharCode(...chunk);\n }\n return btoa(output);\n}\nexport {\n fromB64,\n toB64\n};\n//# sourceMappingURL=b64.js.map\n","// base-x encoding / decoding\n// Copyright (c) 2018 base-x contributors\n// Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp)\n// Distributed under the MIT software license, see the accompanying\n// file LICENSE or http://www.opensource.org/licenses/mit-license.php.\nfunction base (ALPHABET) {\n if (ALPHABET.length >= 255) { throw new TypeError('Alphabet too long') }\n const BASE_MAP = new Uint8Array(256)\n for (let j = 0; j < BASE_MAP.length; j++) {\n BASE_MAP[j] = 255\n }\n for (let i = 0; i < ALPHABET.length; i++) {\n const x = ALPHABET.charAt(i)\n const xc = x.charCodeAt(0)\n if (BASE_MAP[xc] !== 255) { throw new TypeError(x + ' is ambiguous') }\n BASE_MAP[xc] = i\n }\n const BASE = ALPHABET.length\n const LEADER = ALPHABET.charAt(0)\n const FACTOR = Math.log(BASE) / Math.log(256) // log(BASE) / log(256), rounded up\n const iFACTOR = Math.log(256) / Math.log(BASE) // log(256) / log(BASE), rounded up\n function encode (source) {\n // eslint-disable-next-line no-empty\n if (source instanceof Uint8Array) { } else if (ArrayBuffer.isView(source)) {\n source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength)\n } else if (Array.isArray(source)) {\n source = Uint8Array.from(source)\n }\n if (!(source instanceof Uint8Array)) { throw new TypeError('Expected Uint8Array') }\n if (source.length === 0) { return '' }\n // Skip & count leading zeroes.\n let zeroes = 0\n let length = 0\n let pbegin = 0\n const pend = source.length\n while (pbegin !== pend && source[pbegin] === 0) {\n pbegin++\n zeroes++\n }\n // Allocate enough space in big-endian base58 representation.\n const size = ((pend - pbegin) * iFACTOR + 1) >>> 0\n const b58 = new Uint8Array(size)\n // Process the bytes.\n while (pbegin !== pend) {\n let carry = source[pbegin]\n // Apply \"b58 = b58 * 256 + ch\".\n let i = 0\n for (let it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {\n carry += (256 * b58[it1]) >>> 0\n b58[it1] = (carry % BASE) >>> 0\n carry = (carry / BASE) >>> 0\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i\n pbegin++\n }\n // Skip leading zeroes in base58 result.\n let it2 = size - length\n while (it2 !== size && b58[it2] === 0) {\n it2++\n }\n // Translate the result into a string.\n let str = LEADER.repeat(zeroes)\n for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]) }\n return str\n }\n function decodeUnsafe (source) {\n if (typeof source !== 'string') { throw new TypeError('Expected String') }\n if (source.length === 0) { return new Uint8Array() }\n let psz = 0\n // Skip and count leading '1's.\n let zeroes = 0\n let length = 0\n while (source[psz] === LEADER) {\n zeroes++\n psz++\n }\n // Allocate enough space in big-endian base256 representation.\n const size = (((source.length - psz) * FACTOR) + 1) >>> 0 // log(58) / log(256), rounded up.\n const b256 = new Uint8Array(size)\n // Process the characters.\n while (source[psz]) {\n // Decode character\n let carry = BASE_MAP[source.charCodeAt(psz)]\n // Invalid character\n if (carry === 255) { return }\n let i = 0\n for (let it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {\n carry += (BASE * b256[it3]) >>> 0\n b256[it3] = (carry % 256) >>> 0\n carry = (carry / 256) >>> 0\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i\n psz++\n }\n // Skip leading zeroes in b256.\n let it4 = size - length\n while (it4 !== size && b256[it4] === 0) {\n it4++\n }\n const vch = new Uint8Array(zeroes + (size - it4))\n let j = zeroes\n while (it4 !== size) {\n vch[j++] = b256[it4++]\n }\n return vch\n }\n function decode (string) {\n const buffer = decodeUnsafe(string)\n if (buffer) { return buffer }\n throw new Error('Non-base' + BASE + ' character')\n }\n return {\n encode,\n decodeUnsafe,\n decode\n }\n}\nexport default base\n","import basex from 'base-x';\nvar ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';\nexport default basex(ALPHABET);\n","import bs58 from \"bs58\";\nconst toB58 = (buffer) => bs58.encode(buffer);\nconst fromB58 = (str) => bs58.decode(str);\nexport {\n fromB58,\n toB58\n};\n//# sourceMappingURL=b58.js.map\n","function fromHEX(hexStr) {\n const normalized = hexStr.startsWith(\"0x\") ? hexStr.slice(2) : hexStr;\n const padded = normalized.length % 2 === 0 ? normalized : `0${normalized}}`;\n const intArr = padded.match(/.{2}/g)?.map((byte) => parseInt(byte, 16)) ?? [];\n return Uint8Array.from(intArr);\n}\nfunction toHEX(bytes) {\n return bytes.reduce((str, byte) => str + byte.toString(16).padStart(2, \"0\"), \"\");\n}\nexport {\n fromHEX,\n toHEX\n};\n//# sourceMappingURL=hex.js.map\n","function ulebEncode(num) {\n let arr = [];\n let len = 0;\n if (num === 0) {\n return [0];\n }\n while (num > 0) {\n arr[len] = num & 127;\n if (num >>= 7) {\n arr[len] |= 128;\n }\n len += 1;\n }\n return arr;\n}\nfunction ulebDecode(arr) {\n let total = 0;\n let shift = 0;\n let len = 0;\n while (true) {\n let byte = arr[len];\n len += 1;\n total |= (byte & 127) << shift;\n if ((byte & 128) === 0) {\n break;\n }\n shift += 7;\n }\n return {\n value: total,\n length: len\n };\n}\nexport {\n ulebDecode,\n ulebEncode\n};\n//# sourceMappingURL=uleb.js.map\n","import { ulebDecode } from \"./uleb.js\";\nclass BcsReader {\n /**\n * @param {Uint8Array} data Data to use as a buffer.\n */\n constructor(data) {\n this.bytePosition = 0;\n this.dataView = new DataView(data.buffer);\n }\n /**\n * Shift current cursor position by `bytes`.\n *\n * @param {Number} bytes Number of bytes to\n * @returns {this} Self for possible chaining.\n */\n shift(bytes) {\n this.bytePosition += bytes;\n return this;\n }\n /**\n * Read U8 value from the buffer and shift cursor by 1.\n * @returns\n */\n read8() {\n let value = this.dataView.getUint8(this.bytePosition);\n this.shift(1);\n return value;\n }\n /**\n * Read U16 value from the buffer and shift cursor by 2.\n * @returns\n */\n read16() {\n let value = this.dataView.getUint16(this.bytePosition, true);\n this.shift(2);\n return value;\n }\n /**\n * Read U32 value from the buffer and shift cursor by 4.\n * @returns\n */\n read32() {\n let value = this.dataView.getUint32(this.bytePosition, true);\n this.shift(4);\n return value;\n }\n /**\n * Read U64 value from the buffer and shift cursor by 8.\n * @returns\n */\n read64() {\n let value1 = this.read32();\n let value2 = this.read32();\n let result = value2.toString(16) + value1.toString(16).padStart(8, \"0\");\n return BigInt(\"0x\" + result).toString(10);\n }\n /**\n * Read U128 value from the buffer and shift cursor by 16.\n */\n read128() {\n let value1 = BigInt(this.read64());\n let value2 = BigInt(this.read64());\n let result = value2.toString(16) + value1.toString(16).padStart(16, \"0\");\n return BigInt(\"0x\" + result).toString(10);\n }\n /**\n * Read U128 value from the buffer and shift cursor by 32.\n * @returns\n */\n read256() {\n let value1 = BigInt(this.read128());\n let value2 = BigInt(this.read128());\n let result = value2.toString(16) + value1.toString(16).padStart(32, \"0\");\n return BigInt(\"0x\" + result).toString(10);\n }\n /**\n * Read `num` number of bytes from the buffer and shift cursor by `num`.\n * @param num Number of bytes to read.\n */\n readBytes(num) {\n let start = this.bytePosition + this.dataView.byteOffset;\n let value = new Uint8Array(this.dataView.buffer, start, num);\n this.shift(num);\n return value;\n }\n /**\n * Read ULEB value - an integer of varying size. Used for enum indexes and\n * vector lengths.\n * @returns {Number} The ULEB value.\n */\n readULEB() {\n let start = this.bytePosition + this.dataView.byteOffset;\n let buffer = new Uint8Array(this.dataView.buffer, start);\n let { value, length } = ulebDecode(buffer);\n this.shift(length);\n return value;\n }\n /**\n * Read a BCS vector: read a length and then apply function `cb` X times\n * where X is the length of the vector, defined as ULEB in BCS bytes.\n * @param cb Callback to process elements of vector.\n * @returns {Array<Any>} Array of the resulting values, returned by callback.\n */\n readVec(cb) {\n let length = this.readULEB();\n let result = [];\n for (let i = 0; i < length; i++) {\n result.push(cb(this, i, length));\n }\n return result;\n }\n}\nexport {\n BcsReader\n};\n//# sourceMappingURL=reader.js.map\n","import { ulebEncode } from \"./uleb.js\";\nimport { encodeStr } from \"./utils.js\";\nclass BcsWriter {\n constructor({\n initialSize = 1024,\n maxSize = Infinity,\n allocateSize = 1024\n } = {}) {\n this.bytePosition = 0;\n this.size = initialSize;\n this.maxSize = maxSize;\n this.allocateSize = allocateSize;\n this.dataView = new DataView(new ArrayBuffer(initialSize));\n }\n ensureSizeOrGrow(bytes) {\n const requiredSize = this.bytePosition + bytes;\n if (requiredSize > this.size) {\n const nextSize = Math.min(this.maxSize, this.size + this.allocateSize);\n if (requiredSize > nextSize) {\n throw new Error(\n `Attempting to serialize to BCS, but buffer does not have enough size. Allocated size: ${this.size}, Max size: ${this.maxSize}, Required size: ${requiredSize}`\n );\n }\n this.size = nextSize;\n const nextBuffer = new ArrayBuffer(this.size);\n new Uint8Array(nextBuffer).set(new Uint8Array(this.dataView.buffer));\n this.dataView = new DataView(nextBuffer);\n }\n }\n /**\n * Shift current cursor position by `bytes`.\n *\n * @param {Number} bytes Number of bytes to\n * @returns {this} Self for possible chaining.\n */\n shift(bytes) {\n this.bytePosition += bytes;\n return this;\n }\n /**\n * Write a U8 value into a buffer and shift cursor position by 1.\n * @param {Number} value Value to write.\n * @returns {this}\n */\n write8(value) {\n this.ensureSizeOrGrow(1);\n this.dataView.setUint8(this.bytePosition, Number(value));\n return this.shift(1);\n }\n /**\n * Write a U16 value into a buffer and shift cursor position by 2.\n * @param {Number} value Value to write.\n * @returns {this}\n */\n write16(value) {\n this.ensureSizeOrGrow(2);\n this.dataView.setUint16(this.bytePosition, Number(value), true);\n return this.shift(2);\n }\n /**\n * Write a U32 value into a buffer and shift cursor position by 4.\n * @param {Number} value Value to write.\n * @returns {this}\n */\n write32(value) {\n this.ensureSizeOrGrow(4);\n this.dataView.setUint32(this.bytePosition, Number(value), true);\n return this.shift(4);\n }\n /**\n * Write a U64 value into a buffer and shift cursor position by 8.\n * @param {bigint} value Value to write.\n * @returns {this}\n */\n write64(value) {\n toLittleEndian(BigInt(value), 8).forEach((el) => this.write8(el));\n return this;\n }\n /**\n * Write a U128 value into a buffer and shift cursor position by 16.\n *\n * @param {bigint} value Value to write.\n * @returns {this}\n */\n write128(value) {\n toLittleEndian(BigInt(value), 16).forEach((el) => this.write8(el));\n return this;\n }\n /**\n * Write a U256 value into a buffer and shift cursor position by 16.\n *\n * @param {bigint} value Value to write.\n * @returns {this}\n */\n write256(value) {\n toLittleEndian(BigInt(value), 32).forEach((el) => this.write8(el));\n return this;\n }\n /**\n * Write a ULEB value into a buffer and shift cursor position by number of bytes\n * written.\n * @param {Number} value Value to write.\n * @returns {this}\n */\n writeULEB(value) {\n ulebEncode(value).forEach((el) => this.write8(el));\n return this;\n }\n /**\n * Write a vector into a buffer by first writing the vector length and then calling\n * a callback on each passed value.\n *\n * @param {Array<Any>} vector Array of elements to write.\n * @param {WriteVecCb} cb Callback to call on each element of the vector.\n * @returns {this}\n */\n writeVec(vector, cb) {\n this.writeULEB(vector.length);\n Array.from(vector).forEach((el, i) => cb(this, el, i, vector.length));\n return this;\n }\n /**\n * Adds support for iterations over the object.\n * @returns {Uint8Array}\n */\n *[Symbol.iterator]() {\n for (let i = 0; i < this.bytePosition; i++) {\n yield this.dataView.getUint8(i);\n }\n return this.toBytes();\n }\n /**\n * Get underlying buffer taking only value bytes (in case initial buffer size was bigger).\n * @returns {Uint8Array} Resulting bcs.\n */\n toBytes() {\n return new Uint8Array(this.dataView.buffer.slice(0, this.bytePosition));\n }\n /**\n * Represent data as 'hex' or 'base64'\n * @param encoding Encoding to use: 'base64' or 'hex'\n */\n toString(encoding) {\n return encodeStr(this.toBytes(), encoding);\n }\n}\nfunction toLittleEndian(bigint, size) {\n let result = new Uint8Array(size);\n let i = 0;\n while (bigint > 0) {\n result[i] = Number(bigint % BigInt(256));\n bigint = bigint / BigInt(256);\n i += 1;\n }\n return result;\n}\nexport {\n BcsWriter\n};\n//# sourceMappingURL=writer.js.map\n","import { fromB58, toB58 } from \"./b58.js\";\nimport { fromB64, toB64 } from \"./b64.js\";\nimport { fromHEX, toHEX } from \"./hex.js\";\nfunction encodeStr(data, encoding) {\n switch (encoding) {\n case \"base58\":\n return toB58(data);\n case \"base64\":\n return toB64(data);\n case \"hex\":\n return toHEX(data);\n default:\n throw new Error(\"Unsupported encoding, supported values are: base64, hex\");\n }\n}\nfunction decodeStr(data, encoding) {\n switch (encoding) {\n case \"base58\":\n return fromB58(data);\n case \"base64\":\n return fromB64(data);\n case \"hex\":\n return fromHEX(data);\n default:\n throw new Error(\"Unsupported encoding, supported values are: base64, hex\");\n }\n}\nfunction splitGenericParameters(str, genericSeparators = [\"<\", \">\"]) {\n const [left, right] = genericSeparators;\n const tok = [];\n let word = \"\";\n let nestedAngleBrackets = 0;\n for (let i = 0; i < str.length; i++) {\n const char = str[i];\n if (char === left) {\n nestedAngleBrackets++;\n }\n if (char === right) {\n nestedAngleBrackets--;\n }\n if (nestedAngleBrackets === 0 && char === \",\") {\n tok.push(word.trim());\n word = \"\";\n continue;\n }\n word += char;\n }\n tok.push(word.trim());\n return tok;\n}\nexport {\n decodeStr,\n encodeStr,\n splitGenericParameters\n};\n//# sourceMappingURL=utils.js.map\n","var __typeError = (msg) => {\n throw TypeError(msg);\n};\nvar __accessCheck = (obj, member, msg) => member.has(obj) || __typeError(\"Cannot \" + msg);\nvar __privateGet = (obj, member, getter) => (__accessCheck(obj, member, \"read from private field\"), getter ? getter.call(obj) : member.get(obj));\nvar __privateAdd = (obj, member, value) => member.has(obj) ? __typeError(\"Cannot add the same private member more than once\") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\nvar __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, \"write to private field\"), setter ? setter.call(obj, value) : member.set(obj, value), value);\nvar _write, _serialize, _schema, _bytes;\nimport { fromB58, toB58 } from \"./b58.js\";\nimport { fromB64, toB64 } from \"./b64.js\";\nimport { fromHEX, toHEX } from \"./hex.js\";\nimport { BcsReader } from \"./reader.js\";\nimport { ulebEncode } from \"./uleb.js\";\nimport { BcsWriter } from \"./writer.js\";\nconst _BcsType = class _BcsType {\n constructor(options) {\n __privateAdd(this, _write);\n __privateAdd(this, _serialize);\n this.name = options.name;\n this.read = options.read;\n this.serializedSize = options.serializedSize ?? (() => null);\n __privateSet(this, _write, options.write);\n __privateSet(this, _serialize, options.serialize ?? ((value, options2) => {\n const writer = new BcsWriter({\n initialSize: this.serializedSize(value) ?? void 0,\n ...options2\n });\n __privateGet(this, _write).call(this, value, writer);\n return writer.toBytes();\n }));\n this.validate = options.validate ?? (() => {\n });\n }\n write(value, writer) {\n this.validate(value);\n __privateGet(this, _write).call(this, value, writer);\n }\n serialize(value, options) {\n this.validate(value);\n return new SerializedBcs(this, __privateGet(this, _serialize).call(this, value, options));\n }\n parse(bytes) {\n const reader = new BcsReader(bytes);\n return this.read(reader);\n }\n fromHex(hex) {\n return this.parse(fromHEX(hex));\n }\n fromBase58(b64) {\n return this.parse(fromB58(b64));\n }\n fromBase64(b64) {\n return this.parse(fromB64(b64));\n }\n transform({\n name,\n input,\n output,\n validate\n }) {\n return new _BcsType({\n name: name ?? this.name,\n read: (reader) => output(this.read(reader)),\n write: (value, writer) => __privateGet(this, _write).call(this, input(value), writer),\n serializedSize: (value) => this.serializedSize(input(value)),\n serialize: (value, options) => __privateGet(this, _serialize).call(this, input(value), options),\n validate: (value) => {\n validate?.(value);\n this.validate(input(value));\n }\n });\n }\n};\n_write = new WeakMap();\n_serialize = new WeakMap();\nlet BcsType = _BcsType;\nconst SERIALIZED_BCS_BRAND = Symbol.for(\"@mysten/serialized-bcs\");\nfunction isSerializedBcs(obj) {\n return !!obj && typeof obj === \"object\" && obj[SERIALIZED_BCS_BRAND] === true;\n}\nclass SerializedBcs {\n constructor(type, schema) {\n __privateAdd(this, _schema);\n __privateAdd(this, _bytes);\n __privateSet(this, _schema, type);\n __privateSet(this, _bytes, schema);\n }\n // Used to brand SerializedBcs so that they can be identified, even between multiple copies\n // of the @mysten/bcs package are installed\n get [SERIALIZED_BCS_BRAND]() {\n return true;\n }\n toBytes() {\n return __privateGet(this, _bytes);\n }\n toHex() {\n return toHEX(__privateGet(this, _bytes));\n }\n toBase64() {\n return toB64(__privateGet(this, _bytes));\n }\n toBase58() {\n return toB58(__privateGet(this, _bytes));\n }\n parse() {\n return __privateGet(this, _schema).parse(__privateGet(this, _bytes));\n }\n}\n_schema = new WeakMap();\n_bytes = new WeakMap();\nfunction fixedSizeBcsType({\n size,\n ...options\n}) {\n return new BcsType({\n ...options,\n serializedSize: () => size\n });\n}\nfunction uIntBcsType({\n readMethod,\n writeMethod,\n ...options\n}) {\n return fixedSizeBcsType({\n ...options,\n read: (reader) => reader[readMethod](),\n write: (value, writer) => writer[writeMethod](value),\n validate: (value) => {\n if (value < 0 || value > options.maxValue) {\n throw new TypeError(\n `Invalid ${options.name} value: ${value}. Expected value in range 0-${options.maxValue}`\n );\n }\n options.validate?.(value);\n }\n });\n}\nfunction bigUIntBcsType({\n readMethod,\n writeMethod,\n ...options\n}) {\n return fixedSizeBcsType({\n ...options,\n read: (reader) => reader[readMethod](),\n write: (value, writer) => writer[writeMethod](BigInt(value)),\n validate: (val) => {\n const value = BigInt(val);\n if (value < 0 || value > options.maxValue) {\n throw new TypeError(\n `Invalid ${options.name} value: ${value}. Expected value in range 0-${options.maxValue}`\n );\n }\n options.validate?.(value);\n }\n });\n}\nfunction dynamicSizeBcsType({\n serialize,\n ...options\n}) {\n const type = new BcsType({\n ...options,\n serialize,\n write: (value, writer) => {\n for (const byte of type.serialize(value).toBytes()) {\n writer.write8(byte);\n }\n }\n });\n return type;\n}\nfunction stringLikeBcsType({\n toBytes,\n fromBytes,\n ...options\n}) {\n return new BcsType({\n ...options,\n read: (reader) => {\n const length = reader.readULEB();\n const bytes = reader.readBytes(length);\n return fromBytes(bytes);\n },\n write: (hex, writer) => {\n const bytes = toBytes(hex);\n writer.writeULEB(bytes.length);\n for (let i = 0; i < bytes.length; i++) {\n writer.write8(bytes[i]);\n }\n },\n serialize: (value) => {\n const bytes = toBytes(value);\n const size = ulebEncode(bytes.length);\n const result = new Uint8Array(size.length + bytes.length);\n result.set(size, 0);\n result.set(bytes, size.length);\n return result;\n },\n validate: (value) => {\n if (typeof value !== \"string\") {\n throw new TypeError(`Invalid ${options.name} value: ${value}. Expected string`);\n }\n options.validate?.(value);\n }\n });\n}\nfunction lazyBcsType(cb) {\n let lazyType = null;\n function getType() {\n if (!lazyType) {\n lazyType = cb();\n }\n return lazyType;\n }\n return new BcsType({\n name: \"lazy\",\n read: (data) => getType().read(data),\n serializedSize: (value) => getType().serializedSize(value),\n write: (value, writer) => getType().write(value, writer),\n serialize: (value, options) => getType().serialize(value, options).toBytes()\n });\n}\nexport {\n BcsType,\n SerializedBcs,\n bigUIntBcsType,\n dynamicSizeBcsType,\n fixedSizeBcsType,\n isSerializedBcs,\n lazyBcsType,\n stringLikeBcsType,\n uIntBcsType\n};\n//# sourceMappingURL=bcs-type.js.map\n","// src/actions/await/awaitAsync.ts\nfunction awaitAsync() {\n return {\n kind: \"transformation\",\n type: \"await\",\n reference: awaitAsync,\n async: true,\n async _run(dataset) {\n dataset.value = await dataset.value;\n return dataset;\n }\n };\n}\n\n// src/regex.ts\nvar BIC_REGEX = /^[A-Z]{6}(?!00)[A-Z\\d]{2}(?:[A-Z\\d]{3})?$/u;\nvar CUID2_REGEX = /^[a-z][\\da-z]*$/u;\nvar DECIMAL_REGEX = /^\\d+$/u;\nvar EMAIL_REGEX = /^[\\w+-]+(?:\\.[\\w+-]+)*@[\\da-z]+(?:[.-][\\da-z]+)*\\.[a-z]{2,}$/iu;\nvar EMOJI_REGEX = /^[\\p{Extended_Pictographic}\\p{Emoji_Component}]+$/u;\nvar HEXADECIMAL_REGEX = /^(?:0h|0x)?[\\da-f]+$/iu;\nvar HEX_COLOR_REGEX = /^#(?:[\\da-f]{3,4}|[\\da-f]{6}|[\\da-f]{8})$/iu;\nvar IMEI_REGEX = /^\\d{15}$|^\\d{2}-\\d{6}-\\d{6}-\\d$/u;\nvar IPV4_REGEX = (\n // eslint-disable-next-line redos-detector/no-unsafe-regex -- false positive\n /^(?:(?:[1-9]|1\\d|2[0-4])?\\d|25[0-5])(?:\\.(?:(?:[1-9]|1\\d|2[0-4])?\\d|25[0-5])){3}$/u\n);\nvar IPV6_REGEX = /^(?:(?:[\\da-f]{1,4}:){7}[\\da-f]{1,4}|(?:[\\da-f]{1,4}:){1,7}:|(?:[\\da-f]{1,4}:){1,6}:[\\da-f]{1,4}|(?:[\\da-f]{1,4}:){1,5}(?::[\\da-f]{1,4}){1,2}|(?:[\\da-f]{1,4}:){1,4}(?::[\\da-f]{1,4}){1,3}|(?:[\\da-f]{1,4}:){1,3}(?::[\\da-f]{1,4}){1,4}|(?:[\\da-f]{1,4}:){1,2}(?::[\\da-f]{1,4}){1,5}|[\\da-f]{1,4}:(?::[\\da-f]{1,4}){1,6}|:(?:(?::[\\da-f]{1,4}){1,7}|:)|fe80:(?::[\\da-f]{0,4}){0,4}%[\\da-z]+|::(?:f{4}(?::0{1,4})?:)?(?:(?:25[0-5]|(?:2[0-4]|1?\\d)?\\d)\\.){3}(?:25[0-5]|(?:2[0-4]|1?\\d)?\\d)|(?:[\\da-f]{1,4}:){1,4}:(?:(?:25[0-5]|(?:2[0-4]|1?\\d)?\\d)\\.){3}(?:25[0-5]|(?:2[0-4]|1?\\d)?\\d))$/iu;\nvar IP_REGEX = /^(?:(?:[1-9]|1\\d|2[0-4])?\\d|25[0-5])(?:\\.(?:(?:[1-9]|1\\d|2[0-4])?\\d|25[0-5])){3}$|^(?:(?:[\\da-f]{1,4}:){7}[\\da-f]{1,4}|(?:[\\da-f]{1,4}:){1,7}:|(?:[\\da-f]{1,4}:){1,6}:[\\da-f]{1,4}|(?:[\\da-f]{1,4}:){1,5}(?::[\\da-f]{1,4}){1,2}|(?:[\\da-f]{1,4}:){1,4}(?::[\\da-f]{1,4}){1,3}|(?:[\\da-f]{1,4}:){1,3}(?::[\\da-f]{1,4}){1,4}|(?:[\\da-f]{1,4}:){1,2}(?::[\\da-f]{1,4}){1,5}|[\\da-f]{1,4}:(?::[\\da-f]{1,4}){1,6}|:(?:(?::[\\da-f]{1,4}){1,7}|:)|fe80:(?::[\\da-f]{0,4}){0,4}%[\\da-z]+|::(?:f{4}(?::0{1,4})?:)?(?:(?:25[0-5]|(?:2[0-4]|1?\\d)?\\d)\\.){3}(?:25[0-5]|(?:2[0-4]|1?\\d)?\\d)|(?:[\\da-f]{1,4}:){1,4}:(?:(?:25[0-5]|(?:2[0-4]|1?\\d)?\\d)\\.){3}(?:25[0-5]|(?:2[0-4]|1?\\d)?\\d))$/iu;\nvar ISO_DATE_REGEX = /^\\d{4}-(?:0[1-9]|1[0-2])-(?:[12]\\d|0[1-9]|3[01])$/u;\nvar ISO_DATE_TIME_REGEX = /^\\d{4}-(?:0[1-9]|1[0-2])-(?:[12]\\d|0[1-9]|3[01])T(?:0\\d|1\\d|2[0-3]):[0-5]\\d$/u;\nvar ISO_TIME_REGEX = /^(?:0\\d|1\\d|2[0-3]):[0-5]\\d$/u;\nvar ISO_TIME_SECOND_REGEX = /^(?:0\\d|1\\d|2[0-3])(?::[0-5]\\d){2}$/u;\nvar ISO_TIMESTAMP_REGEX = /^\\d{4}-(?:0[1-9]|1[0-2])-(?:[12]\\d|0[1-9]|3[01])T(?:0\\d|1\\d|2[0-3])(?::[0-5]\\d){2}(?:\\.\\d{1,9})?(?:Z|[+-](?:0\\d|1\\d|2[0-3])(?::?[0-5]\\d)?)$/u;\nvar ISO_WEEK_REGEX = /^\\d{4}-W(?:0[1-9]|[1-4]\\d|5[0-3])$/u;\nvar MAC48_REGEX = /^(?:[\\da-f]{2}:){5}[\\da-f]{2}$|^(?:[\\da-f]{2}-){5}[\\da-f]{2}$|^(?:[\\da-f]{4}\\.){2}[\\da-f]{4}$/iu;\nvar MAC64_REGEX = /^(?:[\\da-f]{2}:){7}[\\da-f]{2}$|^(?:[\\da-f]{2}-){7}[\\da-f]{2}$|^(?:[\\da-f]{4}\\.){3}[\\da-f]{4}$|^(?:[\\da-f]{4}:){3}[\\da-f]{4}$/iu;\nvar MAC_REGEX = /^(?:[\\da-f]{2}:){5}[\\da-f]{2}$|^(?:[\\da-f]{2}-){5}[\\da-f]{2}$|^(?:[\\da-f]{4}\\.){2}[\\da-f]{4}$|^(?:[\\da-f]{2}:){7}[\\da-f]{2}$|^(?:[\\da-f]{2}-){7}[\\da-f]{2}$|^(?:[\\da-f]{4}\\.){3}[\\da-f]{4}$|^(?:[\\da-f]{4}:){3}[\\da-f]{4}$/iu;\nvar OCTAL_REGEX = /^(?:0o)?[0-7]+$/iu;\nvar ULID_REGEX = /^[\\da-hjkmnp-tv-z]{26}$/iu;\nvar UUID_REGEX = /^[\\da-f]{8}(?:-[\\da-f]{4}){3}-[\\da-f]{12}$/iu;\n\n// src/storages/globalConfig/globalConfig.ts\nvar store;\nfunction setGlobalConfig(config2) {\n store = { ...store, ...config2 };\n}\nfunction getGlobalConfig(config2) {\n return {\n lang: config2?.lang ?? store?.lang,\n message: config2?.message,\n abortEarly: config2?.abortEarly ?? store?.abortEarly,\n abortPipeEarly: config2?.abortPipeEarly ?? store?.abortPipeEarly\n };\n}\nfunction deleteGlobalConfig() {\n store = void 0;\n}\n\n// src/storages/globalMessage/globalMessage.ts\nvar store2;\nfunction setGlobalMessage(message, lang) {\n if (!store2) store2 = /* @__PURE__ */ new Map();\n store2.set(lang, message);\n}\nfunction getGlobalMessage(lang) {\n return store2?.get(lang);\n}\nfunction deleteGlobalMessage(lang) {\n store2?.delete(lang);\n}\n\n// src/storages/schemaMessage/schemaMessage.ts\nvar store3;\nfunction setSchemaMessage(message, lang) {\n if (!store3) store3 = /* @__PURE__ */ new Map();\n store3.set(lang, message);\n}\nfunction getSchemaMessage(lang) {\n return store3?.get(lang);\n}\nfunction deleteSchemaMessage(lang) {\n store3?.delete(lang);\n}\n\n// src/storages/specificMessage/specificMessage.ts\nvar store4;\nfunction setSpecificMessage(reference, message, lang) {\n if (!store4) store4 = /* @__PURE__ */ new Map();\n if (!store4.get(reference)) store4.set(reference, /* @__PURE__ */ new Map());\n store4.get(reference).set(lang, message);\n}\nfunction getSpecificMessage(reference, lang) {\n return store4?.get(reference)?.get(lang);\n}\nfunction deleteSpecificMessage(reference, lang) {\n store4?.get(reference)?.delete(lang);\n}\n\n// src/utils/_stringify/_stringify.ts\nfunction _stringify(input) {\n const type = typeof input;\n if (type === \"string\") {\n return `\"${input}\"`;\n }\n if (type === \"number\" || type === \"bigint\" || type === \"boolean\") {\n return `${input}`;\n }\n if (type === \"object\" || type === \"function\") {\n return (input && Object.getPrototypeOf(input)?.constructor?.name) ?? \"null\";\n }\n return type;\n}\n\n// src/utils/_addIssue/_addIssue.ts\nfunction _addIssue(context, label, dataset, config2, other) {\n const input = other && \"input\" in other ? other.input : dataset.value;\n const expected = other?.expected ?? context.expects ?? null;\n const received = other?.received ?? _stringify(input);\n const issue = {\n kind: context.kind,\n type: context.type,\n input,\n expected,\n received,\n message: `Invalid ${label}: ${expected ? `Expected ${expected} but r` : \"R\"}eceived ${received}`,\n // @ts-expect-error\n requirement: context.requirement,\n path: other?.path,\n issues: other?.issues,\n lang: config2.lang,\n abortEarly: config2.abortEarly,\n abortPipeEarly: config2.abortPipeEarly\n };\n const isSchema = context.kind === \"schema\";\n const message = other?.message ?? // @ts-expect-error\n context.message ?? getSpecificMessage(context.reference, issue.lang) ?? (isSchema ? getSchemaMessage(issue.lang) : null) ?? config2.message ?? getGlobalMessage(issue.lang);\n if (message) {\n issue.message = typeof message === \"function\" ? message(issue) : message;\n }\n if (isSchema) {\n dataset.typed = false;\n }\n if (dataset.issues) {\n dataset.issues.push(issue);\n } else {\n dataset.issues = [issue];\n }\n}\n\n// src/utils/_isLuhnAlgo/_isLuhnAlgo.ts\nvar NON_DIGIT_REGEX = /\\D/gu;\nfunction _isLuhnAlgo(input) {\n const number2 = input.replace(NON_DIGIT_REGEX, \"\");\n let length2 = number2.length;\n let bit = 1;\n let sum = 0;\n while (length2) {\n const value2 = +number2[--length2];\n bit ^= 1;\n sum += bit ? [0, 2, 4, 6, 8, 1, 3, 5, 7, 9][value2] : value2;\n }\n return sum % 10 === 0;\n}\n\n// src/utils/_isValidObjectKey/_isValidObjectKey.ts\nfunction _isValidObjectKey(object2, key) {\n return Object.hasOwn(object2, key) && key !== \"__proto__\" && key !== \"prototype\" && key !== \"constructor\";\n}\n\n// src/utils/entriesFromList/entriesFromList.ts\nfunction entriesFromList(list, schema) {\n const entries = {};\n for (const key of list) {\n entries[key] = schema;\n }\n return entries;\n}\n\n// src/utils/getDotPath/getDotPath.ts\nfunction getDotPath(issue) {\n if (issue.path) {\n let key = \"\";\n for (const item of issue.path) {\n if (typeof item.key === \"string\" || typeof item.key === \"number\") {\n if (key) {\n key += `.${item.key}`;\n } else {\n key += item.key;\n }\n } else {\n return null;\n }\n }\n return key;\n }\n return null;\n}\n\n// src/utils/isOfKind/isOfKind.ts\nfunction isOfKind(kind, object2) {\n return object2.kind === kind;\n}\n\n// src/utils/isOfType/isOfType.ts\nfunction isOfType(type, object2) {\n return object2.type === type;\n}\n\n// src/utils/isValiError/isValiError.ts\nfunction isValiError(error) {\n return error instanceof ValiError;\n}\n\n// src/utils/ValiError/ValiError.ts\nvar ValiError = class extends Error {\n /**\n * The error issues.\n */\n issues;\n /**\n * Creates a Valibot error with useful information.\n *\n * @param issues The error issues.\n */\n constructor(issues) {\n super(issues[0].message);\n this.name = \"ValiError\";\n this.issues = issues;\n }\n};\n\n// src/actions/bic/bic.ts\nfunction bic(message) {\n return {\n kind: \"validation\",\n type: \"bic\",\n reference: bic,\n async: false,\n expects: null,\n requirement: BIC_REGEX,\n message,\n _run(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"BIC\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/brand/brand.ts\nfunction brand(name) {\n return {\n kind: \"transformation\",\n type: \"brand\",\n reference: brand,\n async: false,\n name,\n _run(dataset) {\n return dataset;\n }\n };\n}\n\n// src/actions/bytes/bytes.ts\nfunction bytes(requirement, message) {\n return {\n kind: \"validation\",\n type: \"bytes\",\n reference: bytes,\n async: false,\n expects: `${requirement}`,\n requirement,\n message,\n _run(dataset, config2) {\n if (dataset.typed) {\n const length2 = new TextEncoder().encode(dataset.value).length;\n if (length2 !== this.requirement) {\n _addIssue(this, \"bytes\", dataset, config2, {\n received: `${length2}`\n });\n }\n }\n return dataset;\n }\n };\n}\n\n// src/actions/check/check.ts\nfunction check(requirement, message) {\n return {\n kind: \"validation\",\n type: \"check\",\n reference: check,\n async: false,\n expects: null,\n requirement,\n message,\n _run(dataset, config2) {\n if (dataset.typed && !this.requirement(dataset.value)) {\n _addIssue(this, \"input\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/check/checkAsync.ts\nfunction checkAsync(requirement, message) {\n return {\n kind: \"validation\",\n type: \"check\",\n reference: checkAsync,\n async: true,\n expects: null,\n requirement,\n message,\n async _run(dataset, config2) {\n if (dataset.typed && !await this.requirement(dataset.value)) {\n _addIssue(this, \"input\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/checkItems/checkItems.ts\nfunction checkItems(requirement, message) {\n return {\n kind: \"validation\",\n type: \"check_items\",\n reference: checkItems,\n async: false,\n expects: null,\n requirement,\n message,\n _run(dataset, config2) {\n if (dataset.typed) {\n for (let index = 0; index < dataset.value.length; index++) {\n const item = dataset.value[index];\n if (!this.requirement(item, index, dataset.value)) {\n _addIssue(this, \"item\", dataset, config2, {\n input: item,\n path: [\n {\n type: \"array\",\n origin: \"value\",\n input: dataset.value,\n key: index,\n value: item\n }\n ]\n });\n }\n }\n }\n return dataset;\n }\n };\n}\n\n// src/actions/creditCard/creditCard.ts\nvar CREDIT_CARD_REGEX = /^(?:\\d{14,19}|\\d{4}(?: \\d{3,6}){2,4}|\\d{4}(?:-\\d{3,6}){2,4})$/u;\nvar SANITIZE_REGEX = /[- ]/gu;\nvar PROVIDER_REGEX_LIST = [\n // American Express\n /^3[47]\\d{13}$/u,\n // Diners Club\n /^3(?:0[0-5]|[68]\\d)\\d{11,13}$/u,\n // Discover\n /^6(?:011|5\\d{2})\\d{12,15}$/u,\n // JCB\n /^(?:2131|1800|35\\d{3})\\d{11}$/u,\n // Mastercard\n /^5[1-5]\\d{2}|(?:222\\d|22[3-9]\\d|2[3-6]\\d{2}|27[01]\\d|2720)\\d{12}$/u,\n // UnionPay\n /^(?:6[27]\\d{14,17}|81\\d{14,17})$/u,\n // Visa\n /^4\\d{12}(?:\\d{3,6})?$/u\n];\nfunction creditCard(message) {\n return {\n kind: \"validation\",\n type: \"credit_card\",\n reference: creditCard,\n async: false,\n expects: null,\n requirement(input) {\n let sanitized;\n return CREDIT_CARD_REGEX.test(input) && // Remove any hyphens and blanks\n (sanitized = input.replace(SANITIZE_REGEX, \"\")) && // Check if it matches a provider\n PROVIDER_REGEX_LIST.some((regex2) => regex2.test(sanitized)) && // Check if passes luhn algorithm\n _isLuhnAlgo(sanitized);\n },\n message,\n _run(dataset, config2) {\n if (dataset.typed && !this.requirement(dataset.value)) {\n _addIssue(this, \"credit card\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/cuid2/cuid2.ts\nfunction cuid2(message) {\n return {\n kind: \"validation\",\n type: \"cuid2\",\n reference: cuid2,\n async: false,\n expects: null,\n requirement: CUID2_REGEX,\n message,\n _run(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"Cuid2\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/decimal/decimal.ts\nfunction decimal(message) {\n return {\n kind: \"validation\",\n type: \"decimal\",\n reference: decimal,\n async: false,\n expects: null,\n requirement: DECIMAL_REGEX,\n message,\n _run(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"decimal\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/email/email.ts\nfunction email(message) {\n return {\n kind: \"validation\",\n type: \"email\",\n reference: email,\n expects: null,\n async: false,\n requirement: EMAIL_REGEX,\n message,\n _run(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"email\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/emoji/emoji.ts\nfunction emoji(message) {\n return {\n kind: \"validation\",\n type: \"emoji\",\n reference: emoji,\n async: false,\n expects: null,\n requirement: EMOJI_REGEX,\n message,\n _run(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"emoji\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/empty/empty.ts\nfunction empty(message) {\n return {\n kind: \"validation\",\n type: \"empty\",\n reference: empty,\n async: false,\n expects: \"0\",\n message,\n _run(dataset, config2) {\n if (dataset.typed && dataset.value.length > 0) {\n _addIssue(this, \"length\", dataset, config2, {\n received: `${dataset.value.length}`\n });\n }\n return dataset;\n }\n };\n}\n\n// src/actions/endsWith/endsWith.ts\nfunction endsWith(requirement, message) {\n return {\n kind: \"validation\",\n type: \"ends_with\",\n reference: endsWith,\n async: false,\n expects: `\"${requirement}\"`,\n requirement,\n message,\n _run(dataset, config2) {\n if (dataset.typed && !dataset.value.endsWith(this.requirement)) {\n _addIssue(this, \"end\", dataset, config2, {\n received: `\"${dataset.value.slice(-this.requirement.length)}\"`\n });\n }\n return dataset;\n }\n };\n}\n\n// src/actions/everyItem/everyItem.ts\nfunction everyItem(requirement, message) {\n return {\n kind: \"validation\",\n type: \"every_item\",\n reference: everyItem,\n async: false,\n expects: null,\n requirement,\n message,\n _run(dataset, config2) {\n if (dataset.typed && !dataset.value.every(this.requirement)) {\n _addIssue(this, \"item\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/excludes/excludes.ts\nfunction excludes(requirement, message) {\n const received = _stringify(requirement);\n return {\n kind: \"validation\",\n type: \"excludes\",\n reference: excludes,\n async: false,\n expects: `!${received}`,\n requirement,\n message,\n _run(dataset, config2) {\n if (dataset.typed && dataset.value.includes(this.requirement)) {\n _addIssue(this, \"content\", dataset, config2, { received });\n }\n return dataset;\n }\n };\n}\n\n// src/actions/filterItems/filterItems.ts\nfunction filterItems(operation) {\n return {\n kind: \"transformation\",\n type: \"filter_items\",\n reference: filterItems,\n async: false,\n operation,\n _run(dataset) {\n dataset.value = dataset.value.filter(this.operation);\n return dataset;\n }\n };\n}\n\n// src/actions/findItem/findItem.ts\nfunction findItem(operation) {\n return {\n kind: \"transformation\",\n type: \"find_item\",\n reference: findItem,\n async: false,\n operation,\n _run(dataset) {\n dataset.value = dataset.value.find(this.operation);\n return dataset;\n }\n };\n}\n\n// src/actions/finite/finite.ts\nfunction finite(message) {\n return {\n kind: \"validation\",\n type: \"finite\",\n reference: finite,\n async: false,\n expects: null,\n requirement: Number.isFinite,\n message,\n _run(dataset, config2) {\n if (dataset.typed && !this.requirement(dataset.value)) {\n _addIssue(this, \"finite\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/hash/hash.ts\nvar HASH_LENGTHS = {\n md4: 32,\n md5: 32,\n sha1: 40,\n sha256: 64,\n sha384: 96,\n sha512: 128,\n ripemd128: 32,\n ripemd160: 40,\n tiger128: 32,\n tiger160: 40,\n tiger192: 48,\n crc32: 8,\n crc32b: 8,\n adler32: 8\n};\nfunction hash(types, message) {\n return {\n kind: \"validation\",\n type: \"hash\",\n reference: hash,\n expects: null,\n async: false,\n requirement: RegExp(\n types.map((type) => `^[a-f0-9]{${HASH_LENGTHS[type]}}$`).join(\"|\"),\n \"iu\"\n ),\n message,\n _run(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"hash\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/hexadecimal/hexadecimal.ts\nfunction hexadecimal(message) {\n return {\n kind: \"validation\",\n type: \"hexadecimal\",\n reference: hexadecimal,\n async: false,\n expects: null,\n requirement: HEXADECIMAL_REGEX,\n message,\n _run(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"hexadecimal\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/hexColor/hexColor.ts\nfunction hexColor(message) {\n return {\n kind: \"validation\",\n type: \"hex_color\",\n reference: hexColor,\n async: false,\n expects: null,\n requirement: HEX_COLOR_REGEX,\n message,\n _run(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"hex color\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/imei/imei.ts\nfunction imei(message) {\n return {\n kind: \"validation\",\n type: \"imei\",\n reference: imei,\n async: false,\n expects: null,\n requirement(input) {\n return IMEI_REGEX.test(input) && _isLuhnAlgo(input);\n },\n message,\n _run(dataset, config2) {\n if (dataset.typed && !this.requirement(dataset.value)) {\n _addIssue(this, \"IMEI\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/includes/includes.ts\nfunction includes(requirement, message) {\n const expects = _stringify(requirement);\n return {\n kind: \"validation\",\n type: \"includes\",\n reference: includes,\n async: false,\n expects,\n requirement,\n message,\n _run(dataset, config2) {\n if (dataset.typed && !dataset.value.includes(this.requirement)) {\n _addIssue(this, \"content\", dataset, config2, {\n received: `!${expects}`\n });\n }\n return dataset;\n }\n };\n}\n\n// src/actions/integer/integer.ts\nfunction integer(message) {\n return {\n kind: \"validation\",\n type: \"integer\",\n reference: integer,\n async: false,\n expects: null,\n requirement: Number.isInteger,\n message,\n _run(dataset, config2) {\n if (dataset.typed && !this.requirement(dataset.value)) {\n _addIssue(this, \"integer\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/ip/ip.ts\nfunction ip(message) {\n return {\n kind: \"validation\",\n type: \"ip\",\n reference: ip,\n async: false,\n expects: null,\n requirement: IP_REGEX,\n message,\n _run(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"IP\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/ipv4/ipv4.ts\nfunction ipv4(message) {\n return {\n kind: \"validation\",\n type: \"ipv4\",\n reference: ipv4,\n async: false,\n expects: null,\n requirement: IPV4_REGEX,\n message,\n _run(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"IPv4\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/ipv6/ipv6.ts\nfunction ipv6(message) {\n return {\n kind: \"validation\",\n type: \"ipv6\",\n reference: ipv6,\n async: false,\n expects: null,\n requirement: IPV6_REGEX,\n message,\n _run(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"IPv6\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/isoDate/isoDate.ts\nfunction isoDate(message) {\n return {\n kind: \"validation\",\n type: \"iso_date\",\n reference: isoDate,\n async: false,\n expects: null,\n requirement: ISO_DATE_REGEX,\n message,\n _run(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"date\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/isoDateTime/isoDateTime.ts\nfunction isoDateTime(message) {\n return {\n kind: \"validation\",\n type: \"iso_date_time\",\n reference: isoDateTime,\n async: false,\n expects: null,\n requirement: ISO_DATE_TIME_REGEX,\n message,\n _run(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"date-time\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/isoTime/isoTime.ts\nfunction isoTime(message) {\n return {\n kind: \"validation\",\n type: \"iso_time\",\n reference: isoTime,\n async: false,\n expects: null,\n requirement: ISO_TIME_REGEX,\n message,\n _run(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"time\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/isoTimeSecond/isoTimeSecond.ts\nfunction isoTimeSecond(message) {\n return {\n kind: \"validation\",\n type: \"iso_time_second\",\n reference: isoTimeSecond,\n async: false,\n expects: null,\n requirement: ISO_TIME_SECOND_REGEX,\n message,\n _run(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"time-second\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/isoTimestamp/isoTimestamp.ts\nfunction isoTimestamp(message) {\n return {\n kind: \"validation\",\n type: \"iso_timestamp\",\n reference: isoTimestamp,\n async: false,\n expects: null,\n requirement: ISO_TIMESTAMP_REGEX,\n message,\n _run(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"timestamp\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/isoWeek/isoWeek.ts\nfunction isoWeek(message) {\n return {\n kind: \"validation\",\n type: \"iso_week\",\n reference: isoWeek,\n async: false,\n expects: null,\n requirement: ISO_WEEK_REGEX,\n message,\n _run(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"week\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/length/length.ts\nfunction length(requirement, message) {\n return {\n kind: \"validation\",\n type: \"length\",\n reference: length,\n async: false,\n expects: `${requirement}`,\n requirement,\n message,\n _run(dataset, config2) {\n if (dataset.typed && dataset.value.length !== this.requirement) {\n _addIssue(this, \"length\", dataset, config2, {\n received: `${dataset.value.length}`\n });\n }\n return dataset;\n }\n };\n}\n\n// src/actions/mac/mac.ts\nfunction mac(message) {\n return {\n kind: \"validation\",\n type: \"mac\",\n reference: mac,\n async: false,\n expects: null,\n requirement: MAC_REGEX,\n message,\n _run(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"MAC\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/mac48/mac48.ts\nfunction mac48(message) {\n return {\n kind: \"validation\",\n type: \"mac48\",\n reference: mac48,\n async: false,\n expects: null,\n requirement: MAC48_REGEX,\n message,\n _run(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"48-bit MAC\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/mac64/mac64.ts\nfunction mac64(message) {\n return {\n kind: \"validation\",\n type: \"mac64\",\n reference: mac64,\n async: false,\n expects: null,\n requirement: MAC64_REGEX,\n message,\n _run(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"64-bit MAC\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/mapItems/mapItems.ts\nfunction mapItems(operation) {\n return {\n kind: \"transformation\",\n type: \"map_items\",\n reference: mapItems,\n async: false,\n operation,\n _run(dataset) {\n dataset.value = dataset.value.map(this.operation);\n return dataset;\n }\n };\n}\n\n// src/actions/maxBytes/maxBytes.ts\nfunction maxBytes(requirement, message) {\n return {\n kind: \"validation\",\n type: \"max_bytes\",\n reference: maxBytes,\n async: false,\n expects: `<=${requirement}`,\n requirement,\n message,\n _run(dataset, config2) {\n if (dataset.typed) {\n const length2 = new TextEncoder().encode(dataset.value).length;\n if (length2 > this.requirement) {\n _addIssue(this, \"bytes\", dataset, config2, {\n received: `${length2}`\n });\n }\n }\n return dataset;\n }\n };\n}\n\n// src/actions/maxLength/maxLength.ts\nfunction maxLength(requirement, message) {\n return {\n kind: \"validation\",\n type: \"max_length\",\n reference: maxLength,\n async: false,\n expects: `<=${requirement}`,\n requirement,\n message,\n _run(dataset, config2) {\n if (dataset.typed && dataset.value.length > this.requirement) {\n _addIssue(this, \"length\", dataset, config2, {\n received: `${dataset.value.length}`\n });\n }\n return dataset;\n }\n };\n}\n\n// src/actions/maxSize/maxSize.ts\nfunction maxSize(requirement, message) {\n return {\n kind: \"validation\",\n type: \"max_size\",\n reference: maxSize,\n async: false,\n expects: `<=${requirement}`,\n requirement,\n message,\n _run(dataset, config2) {\n if (dataset.typed && dataset.value.size > this.requirement) {\n _addIssue(this, \"size\", dataset, config2, {\n received: `${dataset.value.size}`\n });\n }\n return dataset;\n }\n };\n}\n\n// src/actions/maxValue/maxValue.ts\nfunction maxValue(requirement, message) {\n return {\n kind: \"validation\",\n type: \"max_value\",\n reference: maxValue,\n async: false,\n expects: `<=${requirement instanceof Date ? requirement.toJSON() : _stringify(requirement)}`,\n requirement,\n message,\n _run(dataset, config2) {\n if (dataset.typed && dataset.value > this.requirement) {\n _addIssue(this, \"value\", dataset, config2, {\n received: dataset.value instanceof Date ? dataset.value.toJSON() : _stringify(dataset.value)\n });\n }\n return dataset;\n }\n };\n}\n\n// src/actions/mimeType/mimeType.ts\nfunction mimeType(requirement, message) {\n return {\n kind: \"validation\",\n type: \"mime_type\",\n reference: mimeType,\n async: false,\n expects: requirement.map((option) => `\"${option}\"`).join(\" | \") || \"never\",\n requirement,\n message,\n _run(dataset, config2) {\n if (dataset.typed && !this.requirement.includes(dataset.value.type)) {\n _addIssue(this, \"MIME type\", dataset, config2, {\n received: `\"${dataset.value.type}\"`\n });\n }\n return dataset;\n }\n };\n}\n\n// src/actions/minBytes/minBytes.ts\nfunction minBytes(requirement, message) {\n return {\n kind: \"validation\",\n type: \"min_bytes\",\n reference: minBytes,\n async: false,\n expects: `>=${requirement}`,\n requirement,\n message,\n _run(dataset, config2) {\n if (dataset.typed) {\n const length2 = new TextEncoder().encode(dataset.value).length;\n if (length2 < this.requirement) {\n _addIssue(this, \"bytes\", dataset, config2, {\n received: `${length2}`\n });\n }\n }\n return dataset;\n }\n };\n}\n\n// src/actions/minLength/minLength.ts\nfunction minLength(requirement, message) {\n return {\n kind: \"validation\",\n type: \"min_length\",\n reference: minLength,\n async: false,\n expects: `>=${requirement}`,\n requirement,\n message,\n _run(dataset, config2) {\n if (dataset.typed && dataset.value.length < this.requirement) {\n _addIssue(this, \"length\", dataset, config2, {\n received: `${dataset.value.length}`\n });\n }\n return dataset;\n }\n };\n}\n\n// src/actions/minSize/minSize.ts\nfunction minSize(requirement, message) {\n return {\n kind: \"validation\",\n type: \"min_size\",\n reference: minSize,\n async: false,\n expects: `>=${requirement}`,\n requirement,\n message,\n _run(dataset, config2) {\n if (dataset.typed && dataset.value.size < this.requirement) {\n _addIssue(this, \"size\", dataset, config2, {\n received: `${dataset.value.size}`\n });\n }\n return dataset;\n }\n };\n}\n\n// src/actions/minValue/minValue.ts\nfunction minValue(requirement, message) {\n return {\n kind: \"validation\",\n type: \"min_value\",\n reference: minValue,\n async: false,\n expects: `>=${requirement instanceof Date ? requirement.toJSON() : _stringify(requirement)}`,\n requirement,\n message,\n _run(dataset, config2) {\n if (dataset.typed && dataset.value < this.requirement) {\n _addIssue(this, \"value\", dataset, config2, {\n received: dataset.value instanceof Date ? dataset.value.toJSON() : _stringify(dataset.value)\n });\n }\n return dataset;\n }\n };\n}\n\n// src/actions/multipleOf/multipleOf.ts\nfunction multipleOf(requirement, message) {\n return {\n kind: \"validation\",\n type: \"multiple_of\",\n reference: multipleOf,\n async: false,\n expects: `%${requirement}`,\n requirement,\n message,\n _run(dataset, config2) {\n if (dataset.typed && dataset.value % this.requirement !== 0) {\n _addIssue(this, \"multiple\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/nonEmpty/nonEmpty.ts\nfunction nonEmpty(message) {\n return {\n kind: \"validation\",\n type: \"non_empty\",\n reference: nonEmpty,\n async: false,\n expects: \"!0\",\n message,\n _run(dataset, config2) {\n if (dataset.typed && dataset.value.length === 0) {\n _addIssue(this, \"length\", dataset, config2, {\n received: \"0\"\n });\n }\n return dataset;\n }\n };\n}\n\n// src/actions/normalize/normalize.ts\nfunction normalize(form) {\n return {\n kind: \"transformation\",\n type: \"normalize\",\n reference: normalize,\n async: false,\n form,\n _run(dataset) {\n dataset.value = dataset.value.normalize(this.form);\n return dataset;\n }\n };\n}\n\n// src/actions/notBytes/notBytes.ts\nfunction notBytes(requirement, message) {\n return {\n kind: \"validation\",\n type: \"not_bytes\",\n reference: notBytes,\n async: false,\n expects: `!${requirement}`,\n requirement,\n message,\n _run(dataset, config2) {\n if (dataset.typed) {\n const length2 = new TextEncoder().encode(dataset.value).length;\n if (length2 === this.requirement) {\n _addIssue(this, \"bytes\", dataset, config2, {\n received: `${length2}`\n });\n }\n }\n return dataset;\n }\n };\n}\n\n// src/actions/notLength/notLength.ts\nfunction notLength(requirement, message) {\n return {\n kind: \"validation\",\n type: \"not_length\",\n reference: notLength,\n async: false,\n expects: `!${requirement}`,\n requirement,\n message,\n _run(dataset, config2) {\n if (dataset.typed && dataset.value.length === this.requirement) {\n _addIssue(this, \"length\", dataset, config2, {\n received: `${dataset.value.length}`\n });\n }\n return dataset;\n }\n };\n}\n\n// src/actions/notSize/notSize.ts\nfunction notSize(requirement, message) {\n return {\n kind: \"validation\",\n type: \"not_size\",\n reference: notSize,\n async: false,\n expects: `!${requirement}`,\n requirement,\n message,\n _run(dataset, config2) {\n if (dataset.typed && dataset.value.size === this.requirement) {\n _addIssue(this, \"size\", dataset, config2, {\n received: `${dataset.value.size}`\n });\n }\n return dataset;\n }\n };\n}\n\n// src/actions/notValue/notValue.ts\nfunction notValue(requirement, message) {\n return {\n kind: \"validation\",\n type: \"not_value\",\n reference: notValue,\n async: false,\n expects: requirement instanceof Date ? `!${requirement.toJSON()}` : `!${_stringify(requirement)}`,\n requirement,\n message,\n _run(dataset, config2) {\n if (dataset.typed && this.requirement <= dataset.value && this.requirement >= dataset.value) {\n _addIssue(this, \"value\", dataset, config2, {\n received: dataset.value instanceof Date ? dataset.value.toJSON() : _stringify(dataset.value)\n });\n }\n return dataset;\n }\n };\n}\n\n// src/actions/octal/octal.ts\nfunction octal(message) {\n return {\n kind: \"validation\",\n type: \"octal\",\n reference: octal,\n async: false,\n expects: null,\n requirement: OCTAL_REGEX,\n message,\n _run(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"octal\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/partialCheck/utils/_isPartiallyTyped/_isPartiallyTyped.ts\nfunction _isPartiallyTyped(dataset, pathList) {\n if (dataset.issues) {\n for (const path of pathList) {\n for (const issue of dataset.issues) {\n let typed = false;\n const bound = Math.min(path.length, issue.path?.length ?? 0);\n for (let index = 0; index < bound; index++) {\n if (path[index] !== issue.path[index].key) {\n typed = true;\n break;\n }\n }\n if (!typed) {\n return false;\n }\n }\n }\n }\n return true;\n}\n\n// src/actions/partialCheck/partialCheck.ts\nfunction partialCheck(pathList, requirement, message) {\n return {\n kind: \"validation\",\n type: \"partial_check\",\n reference: partialCheck,\n async: false,\n expects: null,\n requirement,\n message,\n _run(dataset, config2) {\n if (_isPartiallyTyped(dataset, pathList) && // @ts-expect-error\n !this.requirement(dataset.value)) {\n _addIssue(this, \"input\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/partialCheck/partialCheckAsync.ts\nfunction partialCheckAsync(pathList, requirement, message) {\n return {\n kind: \"validation\",\n type: \"partial_check\",\n reference: partialCheckAsync,\n async: true,\n expects: null,\n requirement,\n message,\n async _run(dataset, config2) {\n if (_isPartiallyTyped(dataset, pathList) && // @ts-expect-error\n !await this.requirement(dataset.value)) {\n _addIssue(this, \"input\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/rawCheck/rawCheck.ts\nfunction rawCheck(action) {\n return {\n kind: \"validation\",\n type: \"raw_check\",\n reference: rawCheck,\n async: false,\n expects: null,\n _run(dataset, config2) {\n action({\n dataset,\n config: config2,\n addIssue: (info) => _addIssue(this, info?.label ?? \"input\", dataset, config2, info)\n });\n return dataset;\n }\n };\n}\n\n// src/actions/rawCheck/rawCheckAsync.ts\nfunction rawCheckAsync(action) {\n return {\n kind: \"validation\",\n type: \"raw_check\",\n reference: rawCheckAsync,\n async: true,\n expects: null,\n async _run(dataset, config2) {\n await action({\n dataset,\n config: config2,\n addIssue: (info) => _addIssue(this, info?.label ?? \"input\", dataset, config2, info)\n });\n return dataset;\n }\n };\n}\n\n// src/actions/rawTransform/rawTransform.ts\nfunction rawTransform(action) {\n return {\n kind: \"transformation\",\n type: \"raw_transform\",\n reference: rawTransform,\n async: false,\n _run(dataset, config2) {\n const output = action({\n dataset,\n config: config2,\n addIssue: (info) => _addIssue(this, info?.label ?? \"input\", dataset, config2, info),\n NEVER: null\n });\n if (dataset.issues) {\n dataset.typed = false;\n } else {\n dataset.value = output;\n }\n return dataset;\n }\n };\n}\n\n// src/actions/rawTransform/rawTransformAsync.ts\nfunction rawTransformAsync(action) {\n return {\n kind: \"transformation\",\n type: \"raw_transform\",\n reference: rawTransformAsync,\n async: true,\n async _run(dataset, config2) {\n const output = await action({\n dataset,\n config: config2,\n addIssue: (info) => _addIssue(this, info?.label ?? \"input\", dataset, config2, info),\n NEVER: null\n });\n if (dataset.issues) {\n dataset.typed = false;\n } else {\n dataset.value = output;\n }\n return dataset;\n }\n };\n}\n\n// src/actions/readonly/readonly.ts\nfunction readonly() {\n return {\n kind: \"transformation\",\n type: \"readonly\",\n reference: readonly,\n async: false,\n _run(dataset) {\n return dataset;\n }\n };\n}\n\n// src/actions/reduceItems/reduceItems.ts\nfunction reduceItems(operation, initial) {\n return {\n kind: \"transformation\",\n type: \"reduce_items\",\n reference: reduceItems,\n async: false,\n operation,\n initial,\n _run(dataset) {\n dataset.value = dataset.value.reduce(this.operation, this.initial);\n return dataset;\n }\n };\n}\n\n// src/actions/regex/regex.ts\nfunction regex(requirement, message) {\n return {\n kind: \"validation\",\n type: \"regex\",\n reference: regex,\n async: false,\n expects: `${requirement}`,\n requirement,\n message,\n _run(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"format\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/safeInteger/safeInteger.ts\nfunction safeInteger(message) {\n return {\n kind: \"validation\",\n type: \"safe_integer\",\n reference: safeInteger,\n async: false,\n expects: null,\n requirement: Number.isSafeInteger,\n message,\n _run(dataset, config2) {\n if (dataset.typed && !this.requirement(dataset.value)) {\n _addIssue(this, \"safe integer\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/size/size.ts\nfunction size(requirement, message) {\n return {\n kind: \"validation\",\n type: \"size\",\n reference: size,\n async: false,\n expects: `${requirement}`,\n requirement,\n message,\n _run(dataset, config2) {\n if (dataset.typed && dataset.value.size !== this.requirement) {\n _addIssue(this, \"size\", dataset, config2, {\n received: `${dataset.value.size}`\n });\n }\n return dataset;\n }\n };\n}\n\n// src/actions/someItem/someItem.ts\nfunction someItem(requirement, message) {\n return {\n kind: \"validation\",\n type: \"some_item\",\n reference: someItem,\n async: false,\n expects: null,\n requirement,\n message,\n _run(dataset, config2) {\n if (dataset.typed && !dataset.value.some(this.requirement)) {\n _addIssue(this, \"item\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/sortItems/sortItems.ts\nfunction sortItems(operation) {\n return {\n kind: \"transformation\",\n type: \"sort_items\",\n reference: sortItems,\n async: false,\n operation,\n _run(dataset) {\n dataset.value = dataset.value.sort(this.operation);\n return dataset;\n }\n };\n}\n\n// src/actions/startsWith/startsWith.ts\nfunction startsWith(requirement, message) {\n return {\n kind: \"validation\",\n type: \"starts_with\",\n reference: startsWith,\n async: false,\n expects: `\"${requirement}\"`,\n requirement,\n message,\n _run(dataset, config2) {\n if (dataset.typed && !dataset.value.startsWith(this.requirement)) {\n _addIssue(this, \"start\", dataset, config2, {\n received: `\"${dataset.value.slice(0, this.requirement.length)}\"`\n });\n }\n return dataset;\n }\n };\n}\n\n// src/actions/toLowerCase/toLowerCase.ts\nfunction toLowerCase() {\n return {\n kind: \"transformation\",\n type: \"to_lower_case\",\n reference: toLowerCase,\n async: false,\n _run(dataset) {\n dataset.value = dataset.value.toLowerCase();\n return dataset;\n }\n };\n}\n\n// src/actions/toMaxValue/toMaxValue.ts\nfunction toMaxValue(requirement) {\n return {\n kind: \"transformation\",\n type: \"to_max_value\",\n reference: toMaxValue,\n async: false,\n requirement,\n _run(dataset) {\n dataset.value = dataset.value > this.requirement ? this.requirement : dataset.value;\n return dataset;\n }\n };\n}\n\n// src/actions/toMinValue/toMinValue.ts\nfunction toMinValue(requirement) {\n return {\n kind: \"transformation\",\n type: \"to_min_value\",\n reference: toMinValue,\n async: false,\n requirement,\n _run(dataset) {\n dataset.value = dataset.value < this.requirement ? this.requirement : dataset.value;\n return dataset;\n }\n };\n}\n\n// src/actions/toUpperCase/toUpperCase.ts\nfunction toUpperCase() {\n return {\n kind: \"transformation\",\n type: \"to_upper_case\",\n reference: toUpperCase,\n async: false,\n _run(dataset) {\n dataset.value = dataset.value.toUpperCase();\n return dataset;\n }\n };\n}\n\n// src/actions/transform/transform.ts\nfunction transform(operation) {\n return {\n kind: \"transformation\",\n type: \"transform\",\n reference: transform,\n async: false,\n operation,\n _run(dataset) {\n dataset.value = this.operation(dataset.value);\n return dataset;\n }\n };\n}\n\n// src/actions/transform/transformAsync.ts\nfunction transformAsync(operation) {\n return {\n kind: \"transformation\",\n type: \"transform\",\n reference: transformAsync,\n async: true,\n operation,\n async _run(dataset) {\n dataset.value = await this.operation(dataset.value);\n return dataset;\n }\n };\n}\n\n// src/actions/trim/trim.ts\nfunction trim() {\n return {\n kind: \"transformation\",\n type: \"trim\",\n reference: trim,\n async: false,\n _run(dataset) {\n dataset.value = dataset.value.trim();\n return dataset;\n }\n };\n}\n\n// src/actions/trimEnd/trimEnd.ts\nfunction trimEnd() {\n return {\n kind: \"transformation\",\n type: \"trim_end\",\n reference: trimEnd,\n async: false,\n _run(dataset) {\n dataset.value = dataset.value.trimEnd();\n return dataset;\n }\n };\n}\n\n// src/actions/trimStart/trimStart.ts\nfunction trimStart() {\n return {\n kind: \"transformation\",\n type: \"trim_start\",\n reference: trimStart,\n async: false,\n _run(dataset) {\n dataset.value = dataset.value.trimStart();\n return dataset;\n }\n };\n}\n\n// src/actions/ulid/ulid.ts\nfunction ulid(message) {\n return {\n kind: \"validation\",\n type: \"ulid\",\n reference: ulid,\n async: false,\n expects: null,\n requirement: ULID_REGEX,\n message,\n _run(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"ULID\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/url/url.ts\nfunction url(message) {\n return {\n kind: \"validation\",\n type: \"url\",\n reference: url,\n async: false,\n expects: null,\n requirement(input) {\n try {\n new URL(input);\n return true;\n } catch {\n return false;\n }\n },\n message,\n _run(dataset, config2) {\n if (dataset.typed && !this.requirement(dataset.value)) {\n _addIssue(this, \"URL\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/uuid/uuid.ts\nfunction uuid(message) {\n return {\n kind: \"validation\",\n type: \"uuid\",\n reference: uuid,\n async: false,\n expects: null,\n requirement: UUID_REGEX,\n message,\n _run(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"UUID\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/value/value.ts\nfunction value(requirement, message) {\n return {\n kind: \"validation\",\n type: \"value\",\n reference: value,\n async: false,\n expects: requirement instanceof Date ? requirement.toJSON() : _stringify(requirement),\n requirement,\n message,\n _run(dataset, config2) {\n if (dataset.typed && !(this.requirement <= dataset.value && this.requirement >= dataset.value)) {\n _addIssue(this, \"value\", dataset, config2, {\n received: dataset.value instanceof Date ? dataset.value.toJSON() : _stringify(dataset.value)\n });\n }\n return dataset;\n }\n };\n}\n\n// src/methods/config/config.ts\nfunction config(schema, config2) {\n return {\n ...schema,\n _run(dataset, config_) {\n return schema._run(dataset, { ...config_, ...config2 });\n }\n };\n}\n\n// src/methods/getFallback/getFallback.ts\nfunction getFallback(schema, dataset, config2) {\n return typeof schema.fallback === \"function\" ? (\n // @ts-expect-error\n schema.fallback(dataset, config2)\n ) : (\n // @ts-expect-error\n schema.fallback\n );\n}\n\n// src/methods/fallback/fallback.ts\nfunction fallback(schema, fallback2) {\n return {\n ...schema,\n fallback: fallback2,\n _run(dataset, config2) {\n schema._run(dataset, config2);\n return dataset.issues ? { typed: true, value: getFallback(this, dataset, config2) } : dataset;\n }\n };\n}\n\n// src/methods/fallback/fallbackAsync.ts\nfunction fallbackAsync(schema, fallback2) {\n return {\n ...schema,\n fallback: fallback2,\n async: true,\n async _run(dataset, config2) {\n schema._run(dataset, config2);\n return dataset.issues ? (\n // @ts-expect-error\n { typed: true, value: await getFallback(this, dataset, config2) }\n ) : dataset;\n }\n };\n}\n\n// src/methods/flatten/flatten.ts\nfunction flatten(issues) {\n const flatErrors = {};\n for (const issue of issues) {\n if (issue.path) {\n const dotPath = getDotPath(issue);\n if (dotPath) {\n if (!flatErrors.nested) {\n flatErrors.nested = {};\n }\n if (flatErrors.nested[dotPath]) {\n flatErrors.nested[dotPath].push(issue.message);\n } else {\n flatErrors.nested[dotPath] = [issue.message];\n }\n } else {\n if (flatErrors.other) {\n flatErrors.other.push(issue.message);\n } else {\n flatErrors.other = [issue.message];\n }\n }\n } else {\n if (flatErrors.root) {\n flatErrors.root.push(issue.message);\n } else {\n flatErrors.root = [issue.message];\n }\n }\n }\n return flatErrors;\n}\n\n// src/methods/forward/forward.ts\nfunction forward(action, pathKeys) {\n return {\n ...action,\n _run(dataset, config2) {\n const prevIssues = dataset.issues && [...dataset.issues];\n action._run(dataset, config2);\n if (dataset.issues) {\n for (const issue of dataset.issues) {\n if (!prevIssues?.includes(issue)) {\n let pathInput = dataset.value;\n for (const key of pathKeys) {\n const pathValue = pathInput[key];\n const pathItem = {\n type: \"unknown\",\n origin: \"value\",\n input: pathInput,\n key,\n value: pathValue\n };\n if (issue.path) {\n issue.path.push(pathItem);\n } else {\n issue.path = [pathItem];\n }\n if (!pathValue) {\n break;\n }\n pathInput = pathValue;\n }\n }\n }\n }\n return dataset;\n }\n };\n}\n\n// src/methods/forward/forwardAsync.ts\nfunction forwardAsync(action, pathKeys) {\n return {\n ...action,\n async: true,\n async _run(dataset, config2) {\n const prevIssues = dataset.issues && [...dataset.issues];\n await action._run(dataset, config2);\n if (dataset.issues) {\n for (const issue of dataset.issues) {\n if (!prevIssues?.includes(issue)) {\n let pathInput = dataset.value;\n for (const key of pathKeys) {\n const pathValue = pathInput[key];\n const pathItem = {\n type: \"unknown\",\n origin: \"value\",\n input: pathInput,\n key,\n value: pathValue\n };\n if (issue.path) {\n issue.path.push(pathItem);\n } else {\n issue.path = [pathItem];\n }\n if (!pathValue) {\n break;\n }\n pathInput = pathValue;\n }\n }\n }\n }\n return dataset;\n }\n };\n}\n\n// src/methods/getDefault/getDefault.ts\nfunction getDefault(schema, dataset, config2) {\n return typeof schema.default === \"function\" ? (\n // @ts-expect-error\n schema.default(dataset, config2)\n ) : (\n // @ts-expect-error\n schema.default\n );\n}\n\n// src/methods/getDefaults/getDefaults.ts\nfunction getDefaults(schema) {\n if (\"entries\" in schema) {\n const object2 = {};\n for (const key in schema.entries) {\n object2[key] = getDefaults(schema.entries[key]);\n }\n return object2;\n }\n if (\"items\" in schema) {\n return schema.items.map(getDefaults);\n }\n return getDefault(schema);\n}\n\n// src/methods/getDefaults/getDefaultsAsync.ts\nasync function getDefaultsAsync(schema) {\n if (\"entries\" in schema) {\n return Object.fromEntries(\n await Promise.all(\n Object.entries(schema.entries).map(async ([key, value2]) => [\n key,\n await getDefaultsAsync(value2)\n ])\n )\n );\n }\n if (\"items\" in schema) {\n return Promise.all(schema.items.map(getDefaultsAsync));\n }\n return getDefault(schema);\n}\n\n// src/methods/getFallbacks/getFallbacks.ts\nfunction getFallbacks(schema) {\n if (\"entries\" in schema) {\n const object2 = {};\n for (const key in schema.entries) {\n object2[key] = getFallbacks(schema.entries[key]);\n }\n return object2;\n }\n if (\"items\" in schema) {\n return schema.items.map(getFallbacks);\n }\n return getFallback(schema);\n}\n\n// src/methods/getFallbacks/getFallbacksAsync.ts\nasync function getFallbacksAsync(schema) {\n if (\"entries\" in schema) {\n return Object.fromEntries(\n await Promise.all(\n Object.entries(schema.entries).map(async ([key, value2]) => [\n key,\n await getFallbacksAsync(value2)\n ])\n )\n );\n }\n if (\"items\" in schema) {\n return Promise.all(schema.items.map(getFallbacksAsync));\n }\n return getFallback(schema);\n}\n\n// src/methods/is/is.ts\nfunction is(schema, input) {\n return !schema._run({ typed: false, value: input }, { abortEarly: true }).issues;\n}\n\n// src/schemas/any/any.ts\nfunction any() {\n return {\n kind: \"schema\",\n type: \"any\",\n reference: any,\n expects: \"any\",\n async: false,\n _run(dataset) {\n dataset.typed = true;\n return dataset;\n }\n };\n}\n\n// src/schemas/array/array.ts\nfunction array(item, message) {\n return {\n kind: \"schema\",\n type: \"array\",\n reference: array,\n expects: \"Array\",\n async: false,\n item,\n message,\n _run(dataset, config2) {\n const input = dataset.value;\n if (Array.isArray(input)) {\n dataset.typed = true;\n dataset.value = [];\n for (let key = 0; key < input.length; key++) {\n const value2 = input[key];\n const itemDataset = this.item._run({ typed: false, value: value2 }, config2);\n if (itemDataset.issues) {\n const pathItem = {\n type: \"array\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of itemDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = itemDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!itemDataset.typed) {\n dataset.typed = false;\n }\n dataset.value.push(itemDataset.value);\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/array/arrayAsync.ts\nfunction arrayAsync(item, message) {\n return {\n kind: \"schema\",\n type: \"array\",\n reference: arrayAsync,\n expects: \"Array\",\n async: true,\n item,\n message,\n async _run(dataset, config2) {\n const input = dataset.value;\n if (Array.isArray(input)) {\n dataset.typed = true;\n dataset.value = [];\n const itemDatasets = await Promise.all(\n input.map((value2) => this.item._run({ typed: false, value: value2 }, config2))\n );\n for (let key = 0; key < itemDatasets.length; key++) {\n const itemDataset = itemDatasets[key];\n if (itemDataset.issues) {\n const pathItem = {\n type: \"array\",\n origin: \"value\",\n input,\n key,\n value: input[key]\n };\n for (const issue of itemDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = itemDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!itemDataset.typed) {\n dataset.typed = false;\n }\n dataset.value.push(itemDataset.value);\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/bigint/bigint.ts\nfunction bigint(message) {\n return {\n kind: \"schema\",\n type: \"bigint\",\n reference: bigint,\n expects: \"bigint\",\n async: false,\n message,\n _run(dataset, config2) {\n if (typeof dataset.value === \"bigint\") {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/blob/blob.ts\nfunction blob(message) {\n return {\n kind: \"schema\",\n type: \"blob\",\n reference: blob,\n expects: \"Blob\",\n async: false,\n message,\n _run(dataset, config2) {\n if (dataset.value instanceof Blob) {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/boolean/boolean.ts\nfunction boolean(message) {\n return {\n kind: \"schema\",\n type: \"boolean\",\n reference: boolean,\n expects: \"boolean\",\n async: false,\n message,\n _run(dataset, config2) {\n if (typeof dataset.value === \"boolean\") {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/custom/custom.ts\nfunction custom(check2, message) {\n return {\n kind: \"schema\",\n type: \"custom\",\n reference: custom,\n expects: \"unknown\",\n async: false,\n check: check2,\n message,\n _run(dataset, config2) {\n if (this.check(dataset.value)) {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/custom/customAsync.ts\nfunction customAsync(check2, message) {\n return {\n kind: \"schema\",\n type: \"custom\",\n reference: customAsync,\n expects: \"unknown\",\n async: true,\n check: check2,\n message,\n async _run(dataset, config2) {\n if (await this.check(dataset.value)) {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/date/date.ts\nfunction date(message) {\n return {\n kind: \"schema\",\n type: \"date\",\n reference: date,\n expects: \"Date\",\n async: false,\n message,\n _run(dataset, config2) {\n if (dataset.value instanceof Date) {\n if (!isNaN(dataset.value)) {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2, {\n received: '\"Invalid Date\"'\n });\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/enum/enum.ts\nfunction enum_(enum__, message) {\n const options = Object.entries(enum__).filter(([key]) => isNaN(+key)).map(([, value2]) => value2);\n return {\n kind: \"schema\",\n type: \"enum\",\n reference: enum_,\n expects: options.map(_stringify).join(\" | \") || \"never\",\n async: false,\n enum: enum__,\n options,\n message,\n _run(dataset, config2) {\n if (this.options.includes(dataset.value)) {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/file/file.ts\nfunction file(message) {\n return {\n kind: \"schema\",\n type: \"file\",\n reference: file,\n expects: \"File\",\n async: false,\n message,\n _run(dataset, config2) {\n if (dataset.value instanceof File) {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/function/function.ts\nfunction function_(message) {\n return {\n kind: \"schema\",\n type: \"function\",\n reference: function_,\n expects: \"Function\",\n async: false,\n message,\n _run(dataset, config2) {\n if (typeof dataset.value === \"function\") {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/instance/instance.ts\nfunction instance(class_, message) {\n return {\n kind: \"schema\",\n type: \"instance\",\n reference: instance,\n expects: class_.name,\n async: false,\n class: class_,\n message,\n _run(dataset, config2) {\n if (dataset.value instanceof this.class) {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/intersect/utils/_merge/_merge.ts\nfunction _merge(value1, value2) {\n if (typeof value1 === typeof value2) {\n if (value1 === value2 || value1 instanceof Date && value2 instanceof Date && +value1 === +value2) {\n return { value: value1 };\n }\n if (value1 && value2 && value1.constructor === Object && value2.constructor === Object) {\n for (const key in value2) {\n if (key in value1) {\n const dataset = _merge(value1[key], value2[key]);\n if (dataset.issue) {\n return dataset;\n }\n value1[key] = dataset.value;\n } else {\n value1[key] = value2[key];\n }\n }\n return { value: value1 };\n }\n if (Array.isArray(value1) && Array.isArray(value2)) {\n if (value1.length === value2.length) {\n for (let index = 0; index < value1.length; index++) {\n const dataset = _merge(value1[index], value2[index]);\n if (dataset.issue) {\n return dataset;\n }\n value1[index] = dataset.value;\n }\n return { value: value1 };\n }\n }\n }\n return { issue: true };\n}\n\n// src/schemas/intersect/intersect.ts\nfunction intersect(options, message) {\n return {\n kind: \"schema\",\n type: \"intersect\",\n reference: intersect,\n expects: [...new Set(options.map((option) => option.expects))].join(\" & \") || \"never\",\n async: false,\n options,\n message,\n _run(dataset, config2) {\n if (this.options.length) {\n const input = dataset.value;\n let outputs;\n dataset.typed = true;\n for (const schema of this.options) {\n const optionDataset = schema._run(\n { typed: false, value: input },\n config2\n );\n if (optionDataset.issues) {\n if (dataset.issues) {\n dataset.issues.push(...optionDataset.issues);\n } else {\n dataset.issues = optionDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!optionDataset.typed) {\n dataset.typed = false;\n }\n if (dataset.typed) {\n if (outputs) {\n outputs.push(optionDataset.value);\n } else {\n outputs = [optionDataset.value];\n }\n }\n }\n if (dataset.typed) {\n dataset.value = outputs[0];\n for (let index = 1; index < outputs.length; index++) {\n const mergeDataset = _merge(dataset.value, outputs[index]);\n if (mergeDataset.issue) {\n _addIssue(this, \"type\", dataset, config2, {\n received: \"unknown\"\n });\n break;\n }\n dataset.value = mergeDataset.value;\n }\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/intersect/intersectAsync.ts\nfunction intersectAsync(options, message) {\n return {\n kind: \"schema\",\n type: \"intersect\",\n reference: intersectAsync,\n expects: [...new Set(options.map((option) => option.expects))].join(\" & \") || \"never\",\n async: true,\n options,\n message,\n async _run(dataset, config2) {\n if (this.options.length) {\n const input = dataset.value;\n let outputs;\n dataset.typed = true;\n const optionDatasets = await Promise.all(\n this.options.map(\n (schema) => schema._run({ typed: false, value: input }, config2)\n )\n );\n for (const optionDataset of optionDatasets) {\n if (optionDataset.issues) {\n if (dataset.issues) {\n dataset.issues.push(...optionDataset.issues);\n } else {\n dataset.issues = optionDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!optionDataset.typed) {\n dataset.typed = false;\n }\n if (dataset.typed) {\n if (outputs) {\n outputs.push(optionDataset.value);\n } else {\n outputs = [optionDataset.value];\n }\n }\n }\n if (dataset.typed) {\n dataset.value = outputs[0];\n for (let index = 1; index < outputs.length; index++) {\n const mergeDataset = _merge(dataset.value, outputs[index]);\n if (mergeDataset.issue) {\n _addIssue(this, \"type\", dataset, config2, {\n received: \"unknown\"\n });\n break;\n }\n dataset.value = mergeDataset.value;\n }\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/lazy/lazy.ts\nfunction lazy(getter) {\n return {\n kind: \"schema\",\n type: \"lazy\",\n reference: lazy,\n expects: \"unknown\",\n async: false,\n getter,\n _run(dataset, config2) {\n return this.getter(dataset.value)._run(dataset, config2);\n }\n };\n}\n\n// src/schemas/lazy/lazyAsync.ts\nfunction lazyAsync(getter) {\n return {\n kind: \"schema\",\n type: \"lazy\",\n reference: lazyAsync,\n expects: \"unknown\",\n async: true,\n getter,\n async _run(dataset, config2) {\n return (await this.getter(dataset.value))._run(dataset, config2);\n }\n };\n}\n\n// src/schemas/literal/literal.ts\nfunction literal(literal_, message) {\n return {\n kind: \"schema\",\n type: \"literal\",\n reference: literal,\n expects: _stringify(literal_),\n async: false,\n literal: literal_,\n message,\n _run(dataset, config2) {\n if (dataset.value === this.literal) {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/looseObject/looseObject.ts\nfunction looseObject(entries, message) {\n return {\n kind: \"schema\",\n type: \"loose_object\",\n reference: looseObject,\n expects: \"Object\",\n async: false,\n entries,\n message,\n _run(dataset, config2) {\n const input = dataset.value;\n if (input && typeof input === \"object\") {\n dataset.typed = true;\n dataset.value = {};\n for (const key in this.entries) {\n const value2 = input[key];\n const valueDataset = this.entries[key]._run(\n { typed: false, value: value2 },\n config2\n );\n if (valueDataset.issues) {\n const pathItem = {\n type: \"object\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of valueDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = valueDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!valueDataset.typed) {\n dataset.typed = false;\n }\n if (valueDataset.value !== void 0 || key in input) {\n dataset.value[key] = valueDataset.value;\n }\n }\n if (!dataset.issues || !config2.abortEarly) {\n for (const key in input) {\n if (_isValidObjectKey(input, key) && !(key in this.entries)) {\n dataset.value[key] = input[key];\n }\n }\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/looseObject/looseObjectAsync.ts\nfunction looseObjectAsync(entries, message) {\n return {\n kind: \"schema\",\n type: \"loose_object\",\n reference: looseObjectAsync,\n expects: \"Object\",\n async: true,\n entries,\n message,\n async _run(dataset, config2) {\n const input = dataset.value;\n if (input && typeof input === \"object\") {\n dataset.typed = true;\n dataset.value = {};\n const valueDatasets = await Promise.all(\n Object.entries(this.entries).map(async ([key, schema]) => {\n const value2 = input[key];\n return [\n key,\n value2,\n await schema._run({ typed: false, value: value2 }, config2)\n ];\n })\n );\n for (const [key, value2, valueDataset] of valueDatasets) {\n if (valueDataset.issues) {\n const pathItem = {\n type: \"object\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of valueDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = valueDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!valueDataset.typed) {\n dataset.typed = false;\n }\n if (valueDataset.value !== void 0 || key in input) {\n dataset.value[key] = valueDataset.value;\n }\n }\n if (!dataset.issues || !config2.abortEarly) {\n for (const key in input) {\n if (_isValidObjectKey(input, key) && !(key in this.entries)) {\n dataset.value[key] = input[key];\n }\n }\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/looseTuple/looseTuple.ts\nfunction looseTuple(items, message) {\n return {\n kind: \"schema\",\n type: \"loose_tuple\",\n reference: looseTuple,\n expects: \"Array\",\n async: false,\n items,\n message,\n _run(dataset, config2) {\n const input = dataset.value;\n if (Array.isArray(input)) {\n dataset.typed = true;\n dataset.value = [];\n for (let key = 0; key < this.items.length; key++) {\n const value2 = input[key];\n const itemDataset = this.items[key]._run(\n { typed: false, value: value2 },\n config2\n );\n if (itemDataset.issues) {\n const pathItem = {\n type: \"array\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of itemDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = itemDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!itemDataset.typed) {\n dataset.typed = false;\n }\n dataset.value.push(itemDataset.value);\n }\n if (!dataset.issues || !config2.abortEarly) {\n for (let key = this.items.length; key < input.length; key++) {\n dataset.value.push(input[key]);\n }\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/looseTuple/looseTupleAsync.ts\nfunction looseTupleAsync(items, message) {\n return {\n kind: \"schema\",\n type: \"loose_tuple\",\n reference: looseTupleAsync,\n expects: \"Array\",\n async: true,\n items,\n message,\n async _run(dataset, config2) {\n const input = dataset.value;\n if (Array.isArray(input)) {\n dataset.typed = true;\n dataset.value = [];\n const itemDatasets = await Promise.all(\n this.items.map(async (item, key) => {\n const value2 = input[key];\n return [\n key,\n value2,\n await item._run({ typed: false, value: value2 }, config2)\n ];\n })\n );\n for (const [key, value2, itemDataset] of itemDatasets) {\n if (itemDataset.issues) {\n const pathItem = {\n type: \"array\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of itemDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = itemDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!itemDataset.typed) {\n dataset.typed = false;\n }\n dataset.value.push(itemDataset.value);\n }\n if (!dataset.issues || !config2.abortEarly) {\n for (let key = this.items.length; key < input.length; key++) {\n dataset.value.push(input[key]);\n }\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/map/map.ts\nfunction map(key, value2, message) {\n return {\n kind: \"schema\",\n type: \"map\",\n reference: map,\n expects: \"Map\",\n async: false,\n key,\n value: value2,\n message,\n _run(dataset, config2) {\n const input = dataset.value;\n if (input instanceof Map) {\n dataset.typed = true;\n dataset.value = /* @__PURE__ */ new Map();\n for (const [inputKey, inputValue] of input) {\n const keyDataset = this.key._run(\n { typed: false, value: inputKey },\n config2\n );\n if (keyDataset.issues) {\n const pathItem = {\n type: \"map\",\n origin: \"key\",\n input,\n key: inputKey,\n value: inputValue\n };\n for (const issue of keyDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = keyDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n const valueDataset = this.value._run(\n { typed: false, value: inputValue },\n config2\n );\n if (valueDataset.issues) {\n const pathItem = {\n type: \"map\",\n origin: \"value\",\n input,\n key: inputKey,\n value: inputValue\n };\n for (const issue of valueDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = valueDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!keyDataset.typed || !valueDataset.typed) {\n dataset.typed = false;\n }\n dataset.value.set(keyDataset.value, valueDataset.value);\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/map/mapAsync.ts\nfunction mapAsync(key, value2, message) {\n return {\n kind: \"schema\",\n type: \"map\",\n reference: mapAsync,\n expects: \"Map\",\n async: true,\n key,\n value: value2,\n message,\n async _run(dataset, config2) {\n const input = dataset.value;\n if (input instanceof Map) {\n dataset.typed = true;\n dataset.value = /* @__PURE__ */ new Map();\n const datasets = await Promise.all(\n [...input].map(\n ([inputKey, inputValue]) => Promise.all([\n inputKey,\n inputValue,\n this.key._run({ typed: false, value: inputKey }, config2),\n this.value._run({ typed: false, value: inputValue }, config2)\n ])\n )\n );\n for (const [\n inputKey,\n inputValue,\n keyDataset,\n valueDataset\n ] of datasets) {\n if (keyDataset.issues) {\n const pathItem = {\n type: \"map\",\n origin: \"key\",\n input,\n key: inputKey,\n value: inputValue\n };\n for (const issue of keyDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = keyDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (valueDataset.issues) {\n const pathItem = {\n type: \"map\",\n origin: \"value\",\n input,\n key: inputKey,\n value: inputValue\n };\n for (const issue of valueDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = valueDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!keyDataset.typed || !valueDataset.typed) {\n dataset.typed = false;\n }\n dataset.value.set(keyDataset.value, valueDataset.value);\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/nan/nan.ts\nfunction nan(message) {\n return {\n kind: \"schema\",\n type: \"nan\",\n reference: nan,\n expects: \"NaN\",\n async: false,\n message,\n _run(dataset, config2) {\n if (Number.isNaN(dataset.value)) {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/never/never.ts\nfunction never(message) {\n return {\n kind: \"schema\",\n type: \"never\",\n reference: never,\n expects: \"never\",\n async: false,\n message,\n _run(dataset, config2) {\n _addIssue(this, \"type\", dataset, config2);\n return dataset;\n }\n };\n}\n\n// src/schemas/nonNullable/nonNullable.ts\nfunction nonNullable(wrapped, message) {\n return {\n kind: \"schema\",\n type: \"non_nullable\",\n reference: nonNullable,\n expects: \"!null\",\n async: false,\n wrapped,\n message,\n _run(dataset, config2) {\n if (dataset.value === null) {\n _addIssue(this, \"type\", dataset, config2);\n return dataset;\n }\n return this.wrapped._run(dataset, config2);\n }\n };\n}\n\n// src/schemas/nonNullable/nonNullableAsync.ts\nfunction nonNullableAsync(wrapped, message) {\n return {\n kind: \"schema\",\n type: \"non_nullable\",\n reference: nonNullableAsync,\n expects: \"!null\",\n async: true,\n wrapped,\n message,\n async _run(dataset, config2) {\n if (dataset.value === null) {\n _addIssue(this, \"type\", dataset, config2);\n return dataset;\n }\n return this.wrapped._run(dataset, config2);\n }\n };\n}\n\n// src/schemas/nonNullish/nonNullish.ts\nfunction nonNullish(wrapped, message) {\n return {\n kind: \"schema\",\n type: \"non_nullish\",\n reference: nonNullish,\n expects: \"!null & !undefined\",\n async: false,\n wrapped,\n message,\n _run(dataset, config2) {\n if (dataset.value === null || dataset.value === void 0) {\n _addIssue(this, \"type\", dataset, config2);\n return dataset;\n }\n return this.wrapped._run(dataset, config2);\n }\n };\n}\n\n// src/schemas/nonNullish/nonNullishAsync.ts\nfunction nonNullishAsync(wrapped, message) {\n return {\n kind: \"schema\",\n type: \"non_nullish\",\n reference: nonNullishAsync,\n expects: \"!null & !undefined\",\n async: true,\n wrapped,\n message,\n async _run(dataset, config2) {\n if (dataset.value === null || dataset.value === void 0) {\n _addIssue(this, \"type\", dataset, config2);\n return dataset;\n }\n return this.wrapped._run(dataset, config2);\n }\n };\n}\n\n// src/schemas/nonOptional/nonOptional.ts\nfunction nonOptional(wrapped, message) {\n return {\n kind: \"schema\",\n type: \"non_optional\",\n reference: nonOptional,\n expects: \"!undefined\",\n async: false,\n wrapped,\n message,\n _run(dataset, config2) {\n if (dataset.value === void 0) {\n _addIssue(this, \"type\", dataset, config2);\n return dataset;\n }\n return this.wrapped._run(dataset, config2);\n }\n };\n}\n\n// src/schemas/nonOptional/nonOptionalAsync.ts\nfunction nonOptionalAsync(wrapped, message) {\n return {\n kind: \"schema\",\n type: \"non_optional\",\n reference: nonOptionalAsync,\n expects: \"!undefined\",\n async: true,\n wrapped,\n message,\n async _run(dataset, config2) {\n if (dataset.value === void 0) {\n _addIssue(this, \"type\", dataset, config2);\n return dataset;\n }\n return this.wrapped._run(dataset, config2);\n }\n };\n}\n\n// src/schemas/null/null.ts\nfunction null_(message) {\n return {\n kind: \"schema\",\n type: \"null\",\n reference: null_,\n expects: \"null\",\n async: false,\n message,\n _run(dataset, config2) {\n if (dataset.value === null) {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/nullable/nullable.ts\nfunction nullable(wrapped, ...args) {\n const schema = {\n kind: \"schema\",\n type: \"nullable\",\n reference: nullable,\n expects: `${wrapped.expects} | null`,\n async: false,\n wrapped,\n _run(dataset, config2) {\n if (dataset.value === null) {\n if (\"default\" in this) {\n dataset.value = getDefault(\n this,\n dataset,\n config2\n );\n }\n if (dataset.value === null) {\n dataset.typed = true;\n return dataset;\n }\n }\n return this.wrapped._run(dataset, config2);\n }\n };\n if (0 in args) {\n schema.default = args[0];\n }\n return schema;\n}\n\n// src/schemas/nullable/nullableAsync.ts\nfunction nullableAsync(wrapped, ...args) {\n const schema = {\n kind: \"schema\",\n type: \"nullable\",\n reference: nullableAsync,\n expects: `${wrapped.expects} | null`,\n async: true,\n wrapped,\n async _run(dataset, config2) {\n if (dataset.value === null) {\n if (\"default\" in this) {\n dataset.value = await getDefault(\n this,\n dataset,\n config2\n );\n }\n if (dataset.value === null) {\n dataset.typed = true;\n return dataset;\n }\n }\n return this.wrapped._run(dataset, config2);\n }\n };\n if (0 in args) {\n schema.default = args[0];\n }\n return schema;\n}\n\n// src/schemas/nullish/nullish.ts\nfunction nullish(wrapped, ...args) {\n const schema = {\n kind: \"schema\",\n type: \"nullish\",\n reference: nullish,\n expects: `${wrapped.expects} | null | undefined`,\n async: false,\n wrapped,\n _run(dataset, config2) {\n if (dataset.value === null || dataset.value === void 0) {\n if (\"default\" in this) {\n dataset.value = getDefault(\n this,\n dataset,\n config2\n );\n }\n if (dataset.value === null || dataset.value === void 0) {\n dataset.typed = true;\n return dataset;\n }\n }\n return this.wrapped._run(dataset, config2);\n }\n };\n if (0 in args) {\n schema.default = args[0];\n }\n return schema;\n}\n\n// src/schemas/nullish/nullishAsync.ts\nfunction nullishAsync(wrapped, ...args) {\n const schema = {\n kind: \"schema\",\n type: \"nullish\",\n reference: nullishAsync,\n expects: `${wrapped.expects} | null | undefined`,\n async: true,\n wrapped,\n async _run(dataset, config2) {\n if (dataset.value === null || dataset.value === void 0) {\n if (\"default\" in this) {\n dataset.value = await getDefault(\n this,\n dataset,\n config2\n );\n }\n if (dataset.value === null || dataset.value === void 0) {\n dataset.typed = true;\n return dataset;\n }\n }\n return this.wrapped._run(dataset, config2);\n }\n };\n if (0 in args) {\n schema.default = args[0];\n }\n return schema;\n}\n\n// src/schemas/number/number.ts\nfunction number(message) {\n return {\n kind: \"schema\",\n type: \"number\",\n reference: number,\n expects: \"number\",\n async: false,\n message,\n _run(dataset, config2) {\n if (typeof dataset.value === \"number\" && !isNaN(dataset.value)) {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/object/object.ts\nfunction object(entries, message) {\n return {\n kind: \"schema\",\n type: \"object\",\n reference: object,\n expects: \"Object\",\n async: false,\n entries,\n message,\n _run(dataset, config2) {\n const input = dataset.value;\n if (input && typeof input === \"object\") {\n dataset.typed = true;\n dataset.value = {};\n for (const key in this.entries) {\n const value2 = input[key];\n const valueDataset = this.entries[key]._run(\n { typed: false, value: value2 },\n config2\n );\n if (valueDataset.issues) {\n const pathItem = {\n type: \"object\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of valueDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = valueDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!valueDataset.typed) {\n dataset.typed = false;\n }\n if (valueDataset.value !== void 0 || key in input) {\n dataset.value[key] = valueDataset.value;\n }\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/object/objectAsync.ts\nfunction objectAsync(entries, message) {\n return {\n kind: \"schema\",\n type: \"object\",\n reference: objectAsync,\n expects: \"Object\",\n async: true,\n entries,\n message,\n async _run(dataset, config2) {\n const input = dataset.value;\n if (input && typeof input === \"object\") {\n dataset.typed = true;\n dataset.value = {};\n const valueDatasets = await Promise.all(\n Object.entries(this.entries).map(async ([key, schema]) => {\n const value2 = input[key];\n return [\n key,\n value2,\n await schema._run({ typed: false, value: value2 }, config2)\n ];\n })\n );\n for (const [key, value2, valueDataset] of valueDatasets) {\n if (valueDataset.issues) {\n const pathItem = {\n type: \"object\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of valueDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = valueDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!valueDataset.typed) {\n dataset.typed = false;\n }\n if (valueDataset.value !== void 0 || key in input) {\n dataset.value[key] = valueDataset.value;\n }\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/objectWithRest/objectWithRest.ts\nfunction objectWithRest(entries, rest, message) {\n return {\n kind: \"schema\",\n type: \"object_with_rest\",\n reference: objectWithRest,\n expects: \"Object\",\n async: false,\n entries,\n rest,\n message,\n _run(dataset, config2) {\n const input = dataset.value;\n if (input && typeof input === \"object\") {\n dataset.typed = true;\n dataset.value = {};\n for (const key in this.entries) {\n const value2 = input[key];\n const valueDataset = this.entries[key]._run(\n { typed: false, value: value2 },\n config2\n );\n if (valueDataset.issues) {\n const pathItem = {\n type: \"object\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of valueDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = valueDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!valueDataset.typed) {\n dataset.typed = false;\n }\n if (valueDataset.value !== void 0 || key in input) {\n dataset.value[key] = valueDataset.value;\n }\n }\n if (!dataset.issues || !config2.abortEarly) {\n for (const key in input) {\n if (_isValidObjectKey(input, key) && !(key in this.entries)) {\n const value2 = input[key];\n const valueDataset = this.rest._run(\n { typed: false, value: value2 },\n config2\n );\n if (valueDataset.issues) {\n const pathItem = {\n type: \"object\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of valueDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = valueDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!valueDataset.typed) {\n dataset.typed = false;\n }\n dataset.value[key] = valueDataset.value;\n }\n }\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/objectWithRest/objectWithRestAsync.ts\nfunction objectWithRestAsync(entries, rest, message) {\n return {\n kind: \"schema\",\n type: \"object_with_rest\",\n reference: objectWithRestAsync,\n expects: \"Object\",\n async: true,\n entries,\n rest,\n message,\n async _run(dataset, config2) {\n const input = dataset.value;\n if (input && typeof input === \"object\") {\n dataset.typed = true;\n dataset.value = {};\n const [normalDatasets, restDatasets] = await Promise.all([\n // Parse schema of each normal entry\n Promise.all(\n Object.entries(this.entries).map(async ([key, schema]) => {\n const value2 = input[key];\n return [\n key,\n value2,\n await schema._run({ typed: false, value: value2 }, config2)\n ];\n })\n ),\n // Parse other entries with rest schema\n Promise.all(\n Object.entries(input).filter(\n ([key]) => _isValidObjectKey(input, key) && !(key in this.entries)\n ).map(\n async ([key, value2]) => [\n key,\n value2,\n await this.rest._run({ typed: false, value: value2 }, config2)\n ]\n )\n )\n ]);\n for (const [key, value2, valueDataset] of normalDatasets) {\n if (valueDataset.issues) {\n const pathItem = {\n type: \"object\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of valueDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = valueDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!valueDataset.typed) {\n dataset.typed = false;\n }\n if (valueDataset.value !== void 0 || key in input) {\n dataset.value[key] = valueDataset.value;\n }\n }\n if (!dataset.issues || !config2.abortEarly) {\n for (const [key, value2, valueDataset] of restDatasets) {\n if (valueDataset.issues) {\n const pathItem = {\n type: \"object\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of valueDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = valueDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!valueDataset.typed) {\n dataset.typed = false;\n }\n dataset.value[key] = valueDataset.value;\n }\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/optional/optional.ts\nfunction optional(wrapped, ...args) {\n const schema = {\n kind: \"schema\",\n type: \"optional\",\n reference: optional,\n expects: `${wrapped.expects} | undefined`,\n async: false,\n wrapped,\n _run(dataset, config2) {\n if (dataset.value === void 0) {\n if (\"default\" in this) {\n dataset.value = getDefault(\n this,\n dataset,\n config2\n );\n }\n if (dataset.value === void 0) {\n dataset.typed = true;\n return dataset;\n }\n }\n return this.wrapped._run(dataset, config2);\n }\n };\n if (0 in args) {\n schema.default = args[0];\n }\n return schema;\n}\n\n// src/schemas/optional/optionalAsync.ts\nfunction optionalAsync(wrapped, ...args) {\n const schema = {\n kind: \"schema\",\n type: \"optional\",\n reference: optionalAsync,\n expects: `${wrapped.expects} | undefined`,\n async: true,\n wrapped,\n async _run(dataset, config2) {\n if (dataset.value === void 0) {\n if (\"default\" in this) {\n dataset.value = await getDefault(\n this,\n dataset,\n config2\n );\n }\n if (dataset.value === void 0) {\n dataset.typed = true;\n return dataset;\n }\n }\n return this.wrapped._run(dataset, config2);\n }\n };\n if (0 in args) {\n schema.default = args[0];\n }\n return schema;\n}\n\n// src/schemas/picklist/picklist.ts\nfunction picklist(options, message) {\n return {\n kind: \"schema\",\n type: \"picklist\",\n reference: picklist,\n expects: options.map(_stringify).join(\" | \") || \"never\",\n async: false,\n options,\n message,\n _run(dataset, config2) {\n if (this.options.includes(dataset.value)) {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/promise/promise.ts\nfunction promise(message) {\n return {\n kind: \"schema\",\n type: \"promise\",\n reference: promise,\n expects: \"Promise\",\n async: false,\n message,\n _run(dataset, config2) {\n if (dataset.value instanceof Promise) {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/record/record.ts\nfunction record(key, value2, message) {\n return {\n kind: \"schema\",\n type: \"record\",\n reference: record,\n expects: \"Object\",\n async: false,\n key,\n value: value2,\n message,\n _run(dataset, config2) {\n const input = dataset.value;\n if (input && typeof input === \"object\") {\n dataset.typed = true;\n dataset.value = {};\n for (const entryKey in input) {\n if (_isValidObjectKey(input, entryKey)) {\n const entryValue = input[entryKey];\n const keyDataset = this.key._run(\n { typed: false, value: entryKey },\n config2\n );\n if (keyDataset.issues) {\n const pathItem = {\n type: \"object\",\n origin: \"key\",\n input,\n key: entryKey,\n value: entryValue\n };\n for (const issue of keyDataset.issues) {\n issue.path = [pathItem];\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = keyDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n const valueDataset = this.value._run(\n { typed: false, value: entryValue },\n config2\n );\n if (valueDataset.issues) {\n const pathItem = {\n type: \"object\",\n origin: \"value\",\n input,\n key: entryKey,\n value: entryValue\n };\n for (const issue of valueDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = valueDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!keyDataset.typed || !valueDataset.typed) {\n dataset.typed = false;\n }\n if (keyDataset.typed) {\n dataset.value[keyDataset.value] = valueDataset.value;\n }\n }\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/record/recordAsync.ts\nfunction recordAsync(key, value2, message) {\n return {\n kind: \"schema\",\n type: \"record\",\n reference: recordAsync,\n expects: \"Object\",\n async: true,\n key,\n value: value2,\n message,\n async _run(dataset, config2) {\n const input = dataset.value;\n if (input && typeof input === \"object\") {\n dataset.typed = true;\n dataset.value = {};\n const datasets = await Promise.all(\n Object.entries(input).filter(([key2]) => _isValidObjectKey(input, key2)).map(\n ([entryKey, entryValue]) => Promise.all([\n entryKey,\n entryValue,\n this.key._run({ typed: false, value: entryKey }, config2),\n this.value._run({ typed: false, value: entryValue }, config2)\n ])\n )\n );\n for (const [\n entryKey,\n entryValue,\n keyDataset,\n valueDataset\n ] of datasets) {\n if (keyDataset.issues) {\n const pathItem = {\n type: \"object\",\n origin: \"key\",\n input,\n key: entryKey,\n value: entryValue\n };\n for (const issue of keyDataset.issues) {\n issue.path = [pathItem];\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = keyDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (valueDataset.issues) {\n const pathItem = {\n type: \"object\",\n origin: \"value\",\n input,\n key: entryKey,\n value: entryValue\n };\n for (const issue of valueDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = valueDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!keyDataset.typed || !valueDataset.typed) {\n dataset.typed = false;\n }\n if (keyDataset.typed) {\n dataset.value[keyDataset.value] = valueDataset.value;\n }\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/set/set.ts\nfunction set(value2, message) {\n return {\n kind: \"schema\",\n type: \"set\",\n reference: set,\n expects: \"Set\",\n async: false,\n value: value2,\n message,\n _run(dataset, config2) {\n const input = dataset.value;\n if (input instanceof Set) {\n dataset.typed = true;\n dataset.value = /* @__PURE__ */ new Set();\n for (const inputValue of input) {\n const valueDataset = this.value._run(\n { typed: false, value: inputValue },\n config2\n );\n if (valueDataset.issues) {\n const pathItem = {\n type: \"set\",\n origin: \"value\",\n input,\n key: null,\n value: inputValue\n };\n for (const issue of valueDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = valueDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!valueDataset.typed) {\n dataset.typed = false;\n }\n dataset.value.add(valueDataset.value);\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/set/setAsync.ts\nfunction setAsync(value2, message) {\n return {\n kind: \"schema\",\n type: \"set\",\n reference: setAsync,\n expects: \"Set\",\n async: true,\n value: value2,\n message,\n async _run(dataset, config2) {\n const input = dataset.value;\n if (input instanceof Set) {\n dataset.typed = true;\n dataset.value = /* @__PURE__ */ new Set();\n const valueDatasets = await Promise.all(\n [...input].map(\n async (inputValue) => [\n inputValue,\n await this.value._run(\n { typed: false, value: inputValue },\n config2\n )\n ]\n )\n );\n for (const [inputValue, valueDataset] of valueDatasets) {\n if (valueDataset.issues) {\n const pathItem = {\n type: \"set\",\n origin: \"value\",\n input,\n key: null,\n value: inputValue\n };\n for (const issue of valueDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = valueDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!valueDataset.typed) {\n dataset.typed = false;\n }\n dataset.value.add(valueDataset.value);\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/strictObject/strictObject.ts\nfunction strictObject(entries, message) {\n return {\n kind: \"schema\",\n type: \"strict_object\",\n reference: strictObject,\n expects: \"Object\",\n async: false,\n entries,\n message,\n _run(dataset, config2) {\n const input = dataset.value;\n if (input && typeof input === \"object\") {\n dataset.typed = true;\n dataset.value = {};\n for (const key in this.entries) {\n const value2 = input[key];\n const valueDataset = this.entries[key]._run(\n { typed: false, value: value2 },\n config2\n );\n if (valueDataset.issues) {\n const pathItem = {\n type: \"object\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of valueDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = valueDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!valueDataset.typed) {\n dataset.typed = false;\n }\n if (valueDataset.value !== void 0 || key in input) {\n dataset.value[key] = valueDataset.value;\n }\n }\n if (!dataset.issues || !config2.abortEarly) {\n for (const key in input) {\n if (!(key in this.entries)) {\n const value2 = input[key];\n _addIssue(this, \"type\", dataset, config2, {\n input: value2,\n expected: \"never\",\n path: [\n {\n type: \"object\",\n origin: \"value\",\n input,\n key,\n value: value2\n }\n ]\n });\n break;\n }\n }\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/strictObject/strictObjectAsync.ts\nfunction strictObjectAsync(entries, message) {\n return {\n kind: \"schema\",\n type: \"strict_object\",\n reference: strictObjectAsync,\n expects: \"Object\",\n async: true,\n entries,\n message,\n async _run(dataset, config2) {\n const input = dataset.value;\n if (input && typeof input === \"object\") {\n dataset.typed = true;\n dataset.value = {};\n const valueDatasets = await Promise.all(\n Object.entries(this.entries).map(async ([key, schema]) => {\n const value2 = input[key];\n return [\n key,\n value2,\n await schema._run({ typed: false, value: value2 }, config2)\n ];\n })\n );\n for (const [key, value2, valueDataset] of valueDatasets) {\n if (valueDataset.issues) {\n const pathItem = {\n type: \"object\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of valueDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = valueDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!valueDataset.typed) {\n dataset.typed = false;\n }\n if (valueDataset.value !== void 0 || key in input) {\n dataset.value[key] = valueDataset.value;\n }\n }\n if (!dataset.issues || !config2.abortEarly) {\n for (const key in input) {\n if (!(key in this.entries)) {\n const value2 = input[key];\n _addIssue(this, \"type\", dataset, config2, {\n input: value2,\n expected: \"never\",\n path: [\n {\n type: \"object\",\n origin: \"value\",\n input,\n key,\n value: value2\n }\n ]\n });\n break;\n }\n }\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/strictTuple/strictTuple.ts\nfunction strictTuple(items, message) {\n return {\n kind: \"schema\",\n type: \"strict_tuple\",\n reference: strictTuple,\n expects: \"Array\",\n async: false,\n items,\n message,\n _run(dataset, config2) {\n const input = dataset.value;\n if (Array.isArray(input)) {\n dataset.typed = true;\n dataset.value = [];\n for (let key = 0; key < this.items.length; key++) {\n const value2 = input[key];\n const itemDataset = this.items[key]._run(\n { typed: false, value: value2 },\n config2\n );\n if (itemDataset.issues) {\n const pathItem = {\n type: \"array\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of itemDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = itemDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!itemDataset.typed) {\n dataset.typed = false;\n }\n dataset.value.push(itemDataset.value);\n }\n if (!(dataset.issues && config2.abortEarly) && this.items.length < input.length) {\n const value2 = input[items.length];\n _addIssue(this, \"type\", dataset, config2, {\n input: value2,\n expected: \"never\",\n path: [\n {\n type: \"array\",\n origin: \"value\",\n input,\n key: this.items.length,\n value: value2\n }\n ]\n });\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/strictTuple/strictTupleAsync.ts\nfunction strictTupleAsync(items, message) {\n return {\n kind: \"schema\",\n type: \"strict_tuple\",\n reference: strictTupleAsync,\n expects: \"Array\",\n async: true,\n items,\n message,\n async _run(dataset, config2) {\n const input = dataset.value;\n if (Array.isArray(input)) {\n dataset.typed = true;\n dataset.value = [];\n const itemDatasets = await Promise.all(\n this.items.map(async (item, key) => {\n const value2 = input[key];\n return [\n key,\n value2,\n await item._run({ typed: false, value: value2 }, config2)\n ];\n })\n );\n for (const [key, value2, itemDataset] of itemDatasets) {\n if (itemDataset.issues) {\n const pathItem = {\n type: \"array\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of itemDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = itemDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!itemDataset.typed) {\n dataset.typed = false;\n }\n dataset.value.push(itemDataset.value);\n }\n if (!(dataset.issues && config2.abortEarly) && this.items.length < input.length) {\n const value2 = input[items.length];\n _addIssue(this, \"type\", dataset, config2, {\n input: value2,\n expected: \"never\",\n path: [\n {\n type: \"array\",\n origin: \"value\",\n input,\n key: this.items.length,\n value: value2\n }\n ]\n });\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/string/string.ts\nfunction string(message) {\n return {\n kind: \"schema\",\n type: \"string\",\n reference: string,\n expects: \"string\",\n async: false,\n message,\n _run(dataset, config2) {\n if (typeof dataset.value === \"string\") {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/symbol/symbol.ts\nfunction symbol(message) {\n return {\n kind: \"schema\",\n type: \"symbol\",\n reference: symbol,\n expects: \"symbol\",\n async: false,\n message,\n _run(dataset, config2) {\n if (typeof dataset.value === \"symbol\") {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/tuple/tuple.ts\nfunction tuple(items, message) {\n return {\n kind: \"schema\",\n type: \"tuple\",\n reference: tuple,\n expects: \"Array\",\n async: false,\n items,\n message,\n _run(dataset, config2) {\n const input = dataset.value;\n if (Array.isArray(input)) {\n dataset.typed = true;\n dataset.value = [];\n for (let key = 0; key < this.items.length; key++) {\n const value2 = input[key];\n const itemDataset = this.items[key]._run(\n { typed: false, value: value2 },\n config2\n );\n if (itemDataset.issues) {\n const pathItem = {\n type: \"array\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of itemDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = itemDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!itemDataset.typed) {\n dataset.typed = false;\n }\n dataset.value.push(itemDataset.value);\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/tuple/tupleAsync.ts\nfunction tupleAsync(items, message) {\n return {\n kind: \"schema\",\n type: \"tuple\",\n reference: tupleAsync,\n expects: \"Array\",\n async: true,\n items,\n message,\n async _run(dataset, config2) {\n const input = dataset.value;\n if (Array.isArray(input)) {\n dataset.typed = true;\n dataset.value = [];\n const itemDatasets = await Promise.all(\n this.items.map(async (item, key) => {\n const value2 = input[key];\n return [\n key,\n value2,\n await item._run({ typed: false, value: value2 }, config2)\n ];\n })\n );\n for (const [key, value2, itemDataset] of itemDatasets) {\n if (itemDataset.issues) {\n const pathItem = {\n type: \"array\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of itemDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = itemDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!itemDataset.typed) {\n dataset.typed = false;\n }\n dataset.value.push(itemDataset.value);\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/tupleWithRest/tupleWithRest.ts\nfunction tupleWithRest(items, rest, message) {\n return {\n kind: \"schema\",\n type: \"tuple_with_rest\",\n reference: tupleWithRest,\n expects: \"Array\",\n async: false,\n items,\n rest,\n message,\n _run(dataset, config2) {\n const input = dataset.value;\n if (Array.isArray(input)) {\n dataset.typed = true;\n dataset.value = [];\n for (let key = 0; key < this.items.length; key++) {\n const value2 = input[key];\n const itemDataset = this.items[key]._run(\n { typed: false, value: value2 },\n config2\n );\n if (itemDataset.issues) {\n const pathItem = {\n type: \"array\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of itemDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = itemDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!itemDataset.typed) {\n dataset.typed = false;\n }\n dataset.value.push(itemDataset.value);\n }\n if (!dataset.issues || !config2.abortEarly) {\n for (let key = this.items.length; key < input.length; key++) {\n const value2 = input[key];\n const itemDataset = this.rest._run({ typed: false, value: value2 }, config2);\n if (itemDataset.issues) {\n const pathItem = {\n type: \"array\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of itemDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = itemDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!itemDataset.typed) {\n dataset.typed = false;\n }\n dataset.value.push(itemDataset.value);\n }\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/tupleWithRest/tupleWithRestAsync.ts\nfunction tupleWithRestAsync(items, rest, message) {\n return {\n kind: \"schema\",\n type: \"tuple_with_rest\",\n reference: tupleWithRestAsync,\n expects: \"Array\",\n async: true,\n items,\n rest,\n message,\n async _run(dataset, config2) {\n const input = dataset.value;\n if (Array.isArray(input)) {\n dataset.typed = true;\n dataset.value = [];\n const [normalDatasets, restDatasets] = await Promise.all([\n // Parse schema of each normal item\n Promise.all(\n this.items.map(async (item, key) => {\n const value2 = input[key];\n return [\n key,\n value2,\n await item._run({ typed: false, value: value2 }, config2)\n ];\n })\n ),\n // Parse other items with rest schema\n Promise.all(\n input.slice(this.items.length).map(async (value2, key) => {\n return [\n key + this.items.length,\n value2,\n await this.rest._run({ typed: false, value: value2 }, config2)\n ];\n })\n )\n ]);\n for (const [key, value2, itemDataset] of normalDatasets) {\n if (itemDataset.issues) {\n const pathItem = {\n type: \"array\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of itemDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = itemDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!itemDataset.typed) {\n dataset.typed = false;\n }\n dataset.value.push(itemDataset.value);\n }\n if (!dataset.issues || !config2.abortEarly) {\n for (const [key, value2, itemDataset] of restDatasets) {\n if (itemDataset.issues) {\n const pathItem = {\n type: \"array\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of itemDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = itemDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!itemDataset.typed) {\n dataset.typed = false;\n }\n dataset.value.push(itemDataset.value);\n }\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/undefined/undefined.ts\nfunction undefined_(message) {\n return {\n kind: \"schema\",\n type: \"undefined\",\n reference: undefined_,\n expects: \"undefined\",\n async: false,\n message,\n _run(dataset, config2) {\n if (dataset.value === void 0) {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/union/utils/_subIssues/_subIssues.ts\nfunction _subIssues(datasets) {\n let issues;\n if (datasets) {\n for (const dataset of datasets) {\n if (issues) {\n issues.push(...dataset.issues);\n } else {\n issues = dataset.issues;\n }\n }\n }\n return issues;\n}\n\n// src/schemas/union/union.ts\nfunction union(options, message) {\n return {\n kind: \"schema\",\n type: \"union\",\n reference: union,\n expects: [...new Set(options.map((option) => option.expects))].join(\" | \") || \"never\",\n async: false,\n options,\n message,\n _run(dataset, config2) {\n let validDataset;\n let typedDatasets;\n let untypedDatasets;\n for (const schema of this.options) {\n const optionDataset = schema._run(\n { typed: false, value: dataset.value },\n config2\n );\n if (optionDataset.typed) {\n if (optionDataset.issues) {\n if (typedDatasets) {\n typedDatasets.push(optionDataset);\n } else {\n typedDatasets = [optionDataset];\n }\n } else {\n validDataset = optionDataset;\n break;\n }\n } else {\n if (untypedDatasets) {\n untypedDatasets.push(optionDataset);\n } else {\n untypedDatasets = [optionDataset];\n }\n }\n }\n if (validDataset) {\n return validDataset;\n }\n if (typedDatasets) {\n if (typedDatasets.length === 1) {\n return typedDatasets[0];\n }\n _addIssue(this, \"type\", dataset, config2, {\n issues: _subIssues(typedDatasets)\n });\n dataset.typed = true;\n } else if (untypedDatasets?.length === 1) {\n return untypedDatasets[0];\n } else {\n _addIssue(this, \"type\", dataset, config2, {\n issues: _subIssues(untypedDatasets)\n });\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/union/unionAsync.ts\nfunction unionAsync(options, message) {\n return {\n kind: \"schema\",\n type: \"union\",\n reference: unionAsync,\n expects: [...new Set(options.map((option) => option.expects))].join(\" | \") || \"never\",\n async: true,\n options,\n message,\n async _run(dataset, config2) {\n let validDataset;\n let typedDatasets;\n let untypedDatasets;\n for (const schema of this.options) {\n const optionDataset = await schema._run(\n { typed: false, value: dataset.value },\n config2\n );\n if (optionDataset.typed) {\n if (optionDataset.issues) {\n if (typedDatasets) {\n typedDatasets.push(optionDataset);\n } else {\n typedDatasets = [optionDataset];\n }\n } else {\n validDataset = optionDataset;\n break;\n }\n } else {\n if (untypedDatasets) {\n untypedDatasets.push(optionDataset);\n } else {\n untypedDatasets = [optionDataset];\n }\n }\n }\n if (validDataset) {\n return validDataset;\n }\n if (typedDatasets) {\n if (typedDatasets.length === 1) {\n return typedDatasets[0];\n }\n _addIssue(this, \"type\", dataset, config2, {\n issues: _subIssues(typedDatasets)\n });\n dataset.typed = true;\n } else if (untypedDatasets?.length === 1) {\n return untypedDatasets[0];\n } else {\n _addIssue(this, \"type\", dataset, config2, {\n issues: _subIssues(untypedDatasets)\n });\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/unknown/unknown.ts\nfunction unknown() {\n return {\n kind: \"schema\",\n type: \"unknown\",\n reference: unknown,\n expects: \"unknown\",\n async: false,\n _run(dataset) {\n dataset.typed = true;\n return dataset;\n }\n };\n}\n\n// src/schemas/variant/utils/_discriminators/_discriminators.ts\nfunction _discriminators(key, options, set2 = /* @__PURE__ */ new Set()) {\n for (const schema of options) {\n if (schema.type === \"variant\") {\n _discriminators(key, schema.options, set2);\n } else {\n set2.add(schema.entries[key].expects);\n }\n }\n return set2;\n}\n\n// src/schemas/variant/variant.ts\nfunction variant(key, options, message) {\n let expectedDiscriminators;\n return {\n kind: \"schema\",\n type: \"variant\",\n reference: variant,\n expects: \"Object\",\n async: false,\n key,\n options,\n message,\n _run(dataset, config2) {\n const input = dataset.value;\n if (input && typeof input === \"object\") {\n const discriminator = input[this.key];\n if (this.key in input) {\n let outputDataset;\n for (const schema of this.options) {\n if (schema.type === \"variant\" || !schema.entries[this.key]._run(\n { typed: false, value: discriminator },\n config2\n ).issues) {\n const optionDataset = schema._run(\n { typed: false, value: input },\n config2\n );\n if (!optionDataset.issues) {\n return optionDataset;\n }\n if (!outputDataset || !outputDataset.typed && optionDataset.typed) {\n outputDataset = optionDataset;\n }\n }\n }\n if (outputDataset) {\n return outputDataset;\n }\n }\n if (!expectedDiscriminators) {\n expectedDiscriminators = [..._discriminators(this.key, this.options)].join(\" | \") || \"never\";\n }\n _addIssue(this, \"type\", dataset, config2, {\n input: discriminator,\n expected: expectedDiscriminators,\n path: [\n {\n type: \"object\",\n origin: \"value\",\n input,\n key: this.key,\n value: discriminator\n }\n ]\n });\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/variant/variantAsync.ts\nfunction variantAsync(key, options, message) {\n let expectedDiscriminators;\n return {\n kind: \"schema\",\n type: \"variant\",\n reference: variantAsync,\n expects: \"Object\",\n async: true,\n key,\n options,\n message,\n async _run(dataset, config2) {\n const input = dataset.value;\n if (input && typeof input === \"object\") {\n const discriminator = input[this.key];\n if (this.key in input) {\n let outputDataset;\n for (const schema of this.options) {\n if (schema.type === \"variant\" || !(await schema.entries[this.key]._run(\n { typed: false, value: discriminator },\n config2\n )).issues) {\n const optionDataset = await schema._run(\n { typed: false, value: input },\n config2\n );\n if (!optionDataset.issues) {\n return optionDataset;\n }\n if (!outputDataset || !outputDataset.typed && optionDataset.typed) {\n outputDataset = optionDataset;\n }\n }\n }\n if (outputDataset) {\n return outputDataset;\n }\n }\n if (!expectedDiscriminators) {\n expectedDiscriminators = [..._discriminators(this.key, this.options)].join(\" | \") || \"never\";\n }\n _addIssue(this, \"type\", dataset, config2, {\n input: discriminator,\n expected: expectedDiscriminators,\n path: [\n {\n type: \"object\",\n origin: \"value\",\n input,\n key: this.key,\n value: discriminator\n }\n ]\n });\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/void/void.ts\nfunction void_(message) {\n return {\n kind: \"schema\",\n type: \"void\",\n reference: void_,\n expects: \"void\",\n async: false,\n message,\n _run(dataset, config2) {\n if (dataset.value === void 0) {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/methods/keyof/keyof.ts\nfunction keyof(schema, message) {\n return picklist(Object.keys(schema.entries), message);\n}\n\n// src/methods/omit/omit.ts\nfunction omit(schema, keys) {\n const entries = {\n ...schema.entries\n };\n for (const key of keys) {\n delete entries[key];\n }\n return { ...schema, entries };\n}\n\n// src/methods/parse/parse.ts\nfunction parse(schema, input, config2) {\n const dataset = schema._run(\n { typed: false, value: input },\n getGlobalConfig(config2)\n );\n if (dataset.issues) {\n throw new ValiError(dataset.issues);\n }\n return dataset.value;\n}\n\n// src/methods/parse/parseAsync.ts\nasync function parseAsync(schema, input, config2) {\n const dataset = await schema._run(\n { typed: false, value: input },\n getGlobalConfig(config2)\n );\n if (dataset.issues) {\n throw new ValiError(dataset.issues);\n }\n return dataset.value;\n}\n\n// src/methods/parser/parser.ts\nfunction parser(schema, config2) {\n const func = (input) => parse(schema, input, config2);\n func.schema = schema;\n func.config = config2;\n return func;\n}\n\n// src/methods/parser/parserAsync.ts\nfunction parserAsync(schema, config2) {\n const func = (input) => parseAsync(schema, input, config2);\n func.schema = schema;\n func.config = config2;\n return func;\n}\n\n// src/methods/partial/partial.ts\nfunction partial(schema, keys) {\n const entries = {};\n for (const key in schema.entries) {\n entries[key] = !keys || keys.includes(key) ? optional(schema.entries[key]) : schema.entries[key];\n }\n return { ...schema, entries };\n}\n\n// src/methods/partial/partialAsync.ts\nfunction partialAsync(schema, keys) {\n const entries = {};\n for (const key in schema.entries) {\n entries[key] = !keys || keys.includes(key) ? optionalAsync(schema.entries[key]) : schema.entries[key];\n }\n return { ...schema, entries };\n}\n\n// src/methods/pick/pick.ts\nfunction pick(schema, keys) {\n const entries = {};\n for (const key of keys) {\n entries[key] = schema.entries[key];\n }\n return { ...schema, entries };\n}\n\n// src/methods/pipe/pipe.ts\nfunction pipe(...pipe2) {\n return {\n ...pipe2[0],\n pipe: pipe2,\n _run(dataset, config2) {\n for (let index = 0; index < pipe2.length; index++) {\n if (dataset.issues && (pipe2[index].kind === \"schema\" || pipe2[index].kind === \"transformation\")) {\n dataset.typed = false;\n break;\n }\n if (!dataset.issues || !config2.abortEarly && !config2.abortPipeEarly) {\n dataset = pipe2[index]._run(dataset, config2);\n }\n }\n return dataset;\n }\n };\n}\n\n// src/methods/pipe/pipeAsync.ts\nfunction pipeAsync(...pipe2) {\n return {\n ...pipe2[0],\n pipe: pipe2,\n async: true,\n async _run(dataset, config2) {\n for (let index = 0; index < pipe2.length; index++) {\n if (dataset.issues && (pipe2[index].kind === \"schema\" || pipe2[index].kind === \"transformation\")) {\n dataset.typed = false;\n break;\n }\n if (!dataset.issues || !config2.abortEarly && !config2.abortPipeEarly) {\n dataset = await pipe2[index]._run(dataset, config2);\n }\n }\n return dataset;\n }\n };\n}\n\n// src/methods/required/required.ts\nfunction required(schema, arg2, arg3) {\n const keys = Array.isArray(arg2) ? arg2 : void 0;\n const message = Array.isArray(arg2) ? arg3 : arg2;\n const entries = {};\n for (const key in schema.entries) {\n entries[key] = !keys || keys.includes(key) ? nonOptional(schema.entries[key], message) : schema.entries[key];\n }\n return { ...schema, entries };\n}\n\n// src/methods/required/requiredAsync.ts\nfunction requiredAsync(schema, arg2, arg3) {\n const keys = Array.isArray(arg2) ? arg2 : void 0;\n const message = Array.isArray(arg2) ? arg3 : arg2;\n const entries = {};\n for (const key in schema.entries) {\n entries[key] = !keys || keys.includes(key) ? nonOptionalAsync(schema.entries[key], message) : schema.entries[key];\n }\n return { ...schema, entries };\n}\n\n// src/methods/safeParse/safeParse.ts\nfunction safeParse(schema, input, config2) {\n const dataset = schema._run(\n { typed: false, value: input },\n getGlobalConfig(config2)\n );\n return {\n typed: dataset.typed,\n success: !dataset.issues,\n output: dataset.value,\n issues: dataset.issues\n };\n}\n\n// src/methods/safeParse/safeParseAsync.ts\nasync function safeParseAsync(schema, input, config2) {\n const dataset = await schema._run(\n { typed: false, value: input },\n getGlobalConfig(config2)\n );\n return {\n typed: dataset.typed,\n success: !dataset.issues,\n output: dataset.value,\n issues: dataset.issues\n };\n}\n\n// src/methods/safeParser/safeParser.ts\nfunction safeParser(schema, config2) {\n const func = (input) => safeParse(schema, input, config2);\n func.schema = schema;\n func.config = config2;\n return func;\n}\n\n// src/methods/safeParser/safeParserAsync.ts\nfunction safeParserAsync(schema, config2) {\n const func = (input) => safeParseAsync(schema, input, config2);\n func.schema = schema;\n func.config = config2;\n return func;\n}\n\n// src/methods/unwrap/unwrap.ts\nfunction unwrap(schema) {\n return schema.wrapped;\n}\nexport {\n BIC_REGEX,\n CUID2_REGEX,\n DECIMAL_REGEX,\n EMAIL_REGEX,\n EMOJI_REGEX,\n HEXADECIMAL_REGEX,\n HEX_COLOR_REGEX,\n IMEI_REGEX,\n IPV4_REGEX,\n IPV6_REGEX,\n IP_REGEX,\n ISO_DATE_REGEX,\n ISO_DATE_TIME_REGEX,\n ISO_TIMESTAMP_REGEX,\n ISO_TIME_REGEX,\n ISO_TIME_SECOND_REGEX,\n ISO_WEEK_REGEX,\n MAC48_REGEX,\n MAC64_REGEX,\n MAC_REGEX,\n OCTAL_REGEX,\n ULID_REGEX,\n UUID_REGEX,\n ValiError,\n _addIssue,\n _isLuhnAlgo,\n _isValidObjectKey,\n _stringify,\n any,\n array,\n arrayAsync,\n awaitAsync,\n bic,\n bigint,\n blob,\n boolean,\n brand,\n bytes,\n check,\n checkAsync,\n checkItems,\n config,\n creditCard,\n cuid2,\n custom,\n customAsync,\n date,\n decimal,\n deleteGlobalConfig,\n deleteGlobalMessage,\n deleteSchemaMessage,\n deleteSpecificMessage,\n email,\n emoji,\n empty,\n endsWith,\n entriesFromList,\n enum_ as enum,\n enum_,\n everyItem,\n excludes,\n fallback,\n fallbackAsync,\n file,\n filterItems,\n findItem,\n finite,\n flatten,\n forward,\n forwardAsync,\n function_ as function,\n function_,\n getDefault,\n getDefaults,\n getDefaultsAsync,\n getDotPath,\n getFallback,\n getFallbacks,\n getFallbacksAsync,\n getGlobalConfig,\n getGlobalMessage,\n getSchemaMessage,\n getSpecificMessage,\n hash,\n hexColor,\n hexadecimal,\n imei,\n includes,\n instance,\n integer,\n intersect,\n intersectAsync,\n ip,\n ipv4,\n ipv6,\n is,\n isOfKind,\n isOfType,\n isValiError,\n isoDate,\n isoDateTime,\n isoTime,\n isoTimeSecond,\n isoTimestamp,\n isoWeek,\n keyof,\n lazy,\n lazyAsync,\n length,\n literal,\n looseObject,\n looseObjectAsync,\n looseTuple,\n looseTupleAsync,\n mac,\n mac48,\n mac64,\n map,\n mapAsync,\n mapItems,\n maxBytes,\n maxLength,\n maxSize,\n maxValue,\n mimeType,\n minBytes,\n minLength,\n minSize,\n minValue,\n multipleOf,\n nan,\n never,\n nonEmpty,\n nonNullable,\n nonNullableAsync,\n nonNullish,\n nonNullishAsync,\n nonOptional,\n nonOptionalAsync,\n normalize,\n notBytes,\n notLength,\n notSize,\n notValue,\n null_ as null,\n null_,\n nullable,\n nullableAsync,\n nullish,\n nullishAsync,\n number,\n object,\n objectAsync,\n objectWithRest,\n objectWithRestAsync,\n octal,\n omit,\n optional,\n optionalAsync,\n parse,\n parseAsync,\n parser,\n parserAsync,\n partial,\n partialAsync,\n partialCheck,\n partialCheckAsync,\n pick,\n picklist,\n pipe,\n pipeAsync,\n promise,\n rawCheck,\n rawCheckAsync,\n rawTransform,\n rawTransformAsync,\n readonly,\n record,\n recordAsync,\n reduceItems,\n regex,\n required,\n requiredAsync,\n safeInteger,\n safeParse,\n safeParseAsync,\n safeParser,\n safeParserAsync,\n set,\n setAsync,\n setGlobalConfig,\n setGlobalMessage,\n setSchemaMessage,\n setSpecificMessage,\n size,\n someItem,\n sortItems,\n startsWith,\n strictObject,\n strictObjectAsync,\n strictTuple,\n strictTupleAsync,\n string,\n symbol,\n toLowerCase,\n toMaxValue,\n toMinValue,\n toUpperCase,\n transform,\n transformAsync,\n trim,\n trimEnd,\n trimStart,\n tuple,\n tupleAsync,\n tupleWithRest,\n tupleWithRestAsync,\n ulid,\n undefined_ as undefined,\n undefined_,\n union,\n unionAsync,\n unknown,\n unwrap,\n url,\n uuid,\n value,\n variant,\n variantAsync,\n void_ as void,\n void_\n};\n","import { fromB58, splitGenericParameters } from \"@mysten/bcs\";\nconst TX_DIGEST_LENGTH = 32;\nfunction isValidTransactionDigest(value) {\n try {\n const buffer = fromB58(value);\n return buffer.length === TX_DIGEST_LENGTH;\n } catch (e) {\n return false;\n }\n}\nconst SUI_ADDRESS_LENGTH = 32;\nfunction isValidSuiAddress(value) {\n return isHex(value) && getHexByteLength(value) === SUI_ADDRESS_LENGTH;\n}\nfunction isValidSuiObjectId(value) {\n return isValidSuiAddress(value);\n}\nfunction parseTypeTag(type) {\n if (!type.includes(\"::\")) return type;\n return parseStructTag(type);\n}\nfunction parseStructTag(type) {\n const [address, module] = type.split(\"::\");\n const rest = type.slice(address.length + module.length + 4);\n const name = rest.includes(\"<\") ? rest.slice(0, rest.indexOf(\"<\")) : rest;\n const typeParams = rest.includes(\"<\") ? splitGenericParameters(rest.slice(rest.indexOf(\"<\") + 1, rest.lastIndexOf(\">\"))).map(\n (typeParam) => parseTypeTag(typeParam.trim())\n ) : [];\n return {\n address: normalizeSuiAddress(address),\n module,\n name,\n typeParams\n };\n}\nfunction normalizeStructTag(type) {\n const { address, module, name, typeParams } = typeof type === \"string\" ? parseStructTag(type) : type;\n const formattedTypeParams = typeParams?.length > 0 ? `<${typeParams.map(\n (typeParam) => typeof typeParam === \"string\" ? typeParam : normalizeStructTag(typeParam)\n ).join(\",\")}>` : \"\";\n return `${address}::${module}::${name}${formattedTypeParams}`;\n}\nfunction normalizeSuiAddress(value, forceAdd0x = false) {\n let address = value.toLowerCase();\n if (!forceAdd0x && address.startsWith(\"0x\")) {\n address = address.slice(2);\n }\n return `0x${address.padStart(SUI_ADDRESS_LENGTH * 2, \"0\")}`;\n}\nfunction normalizeSuiObjectId(value, forceAdd0x = false) {\n return normalizeSuiAddress(value, forceAdd0x);\n}\nfunction isHex(value) {\n return /^(0x|0X)?[a-fA-F0-9]+$/.test(value) && value.length % 2 === 0;\n}\nfunction getHexByteLength(value) {\n return /^(0x|0X)/.test(value) ? (value.length - 2) / 2 : value.length / 2;\n}\nexport {\n SUI_ADDRESS_LENGTH,\n isValidSuiAddress,\n isValidSuiObjectId,\n isValidTransactionDigest,\n normalizeStructTag,\n normalizeSuiAddress,\n normalizeSuiObjectId,\n parseStructTag\n};\n//# sourceMappingURL=sui-types.js.map\n","import {\n array,\n boolean,\n check,\n integer,\n lazy,\n literal,\n nullable,\n nullish,\n number,\n object,\n optional,\n pipe,\n record,\n string,\n transform,\n tuple,\n union,\n unknown\n} from \"valibot\";\nimport { isValidSuiAddress, normalizeSuiAddress } from \"../../utils/sui-types.js\";\nfunction safeEnum(options) {\n const unionOptions = Object.entries(options).map(([key, value]) => object({ [key]: value }));\n return pipe(\n union(unionOptions),\n transform((value) => ({\n ...value,\n $kind: Object.keys(value)[0]\n }))\n );\n}\nconst SuiAddress = pipe(\n string(),\n transform((value) => normalizeSuiAddress(value)),\n check(isValidSuiAddress)\n);\nconst ObjectID = SuiAddress;\nconst BCSBytes = string();\nconst JsonU64 = pipe(\n union([string(), pipe(number(), integer())]),\n check((val) => {\n try {\n BigInt(val);\n return BigInt(val) >= 0 && BigInt(val) <= 18446744073709551615n;\n } catch {\n return false;\n }\n }, \"Invalid u64\")\n);\nconst ObjectRef = object({\n objectId: SuiAddress,\n version: JsonU64,\n digest: string()\n});\nconst Argument = pipe(\n union([\n object({ GasCoin: literal(true) }),\n object({ Input: pipe(number(), integer()), type: optional(literal(\"pure\")) }),\n object({ Input: pipe(number(), integer()), type: optional(literal(\"object\")) }),\n object({ Result: pipe(number(), integer()) }),\n object({ NestedResult: tuple([pipe(number(), integer()), pipe(number(), integer())]) })\n ]),\n transform((value) => ({\n ...value,\n $kind: Object.keys(value)[0]\n }))\n // Defined manually to add `type?: 'pure' | 'object'` to Input\n);\nconst GasData = object({\n budget: nullable(JsonU64),\n price: nullable(JsonU64),\n owner: nullable(SuiAddress),\n payment: nullable(array(ObjectRef))\n});\nconst StructTag = object({\n address: string(),\n module: string(),\n name: string(),\n // type_params in rust, should be updated to use camelCase\n typeParams: array(string())\n});\nconst OpenMoveTypeSignatureBody = union([\n literal(\"address\"),\n literal(\"bool\"),\n literal(\"u8\"),\n literal(\"u16\"),\n literal(\"u32\"),\n literal(\"u64\"),\n literal(\"u128\"),\n literal(\"u256\"),\n object({ vector: lazy(() => OpenMoveTypeSignatureBody) }),\n object({\n datatype: object({\n package: string(),\n module: string(),\n type: string(),\n typeParameters: array(lazy(() => OpenMoveTypeSignatureBody))\n })\n }),\n object({ typeParameter: pipe(number(), integer()) })\n]);\nconst OpenMoveTypeSignature = object({\n ref: nullable(union([literal(\"&\"), literal(\"&mut\")])),\n body: OpenMoveTypeSignatureBody\n});\nconst ProgrammableMoveCall = object({\n package: ObjectID,\n module: string(),\n function: string(),\n // snake case in rust\n typeArguments: array(string()),\n arguments: array(Argument),\n _argumentTypes: optional(nullable(array(OpenMoveTypeSignature)))\n});\nconst $Intent = object({\n name: string(),\n inputs: record(string(), union([Argument, array(Argument)])),\n data: record(string(), unknown())\n});\nconst Command = safeEnum({\n MoveCall: ProgrammableMoveCall,\n TransferObjects: object({\n objects: array(Argument),\n address: Argument\n }),\n SplitCoins: object({\n coin: Argument,\n amounts: array(Argument)\n }),\n MergeCoins: object({\n destination: Argument,\n sources: array(Argument)\n }),\n Publish: object({\n modules: array(BCSBytes),\n dependencies: array(ObjectID)\n }),\n MakeMoveVec: object({\n type: nullable(string()),\n elements: array(Argument)\n }),\n Upgrade: object({\n modules: array(BCSBytes),\n dependencies: array(ObjectID),\n package: ObjectID,\n ticket: Argument\n }),\n $Intent\n});\nconst ObjectArg = safeEnum({\n ImmOrOwnedObject: ObjectRef,\n SharedObject: object({\n objectId: ObjectID,\n // snake case in rust\n initialSharedVersion: JsonU64,\n mutable: boolean()\n }),\n Receiving: ObjectRef\n});\nconst CallArg = safeEnum({\n Object: ObjectArg,\n Pure: object({\n bytes: BCSBytes\n }),\n UnresolvedPure: object({\n value: unknown()\n }),\n UnresolvedObject: object({\n objectId: ObjectID,\n version: optional(nullable(JsonU64)),\n digest: optional(nullable(string())),\n initialSharedVersion: optional(nullable(JsonU64))\n })\n});\nconst NormalizedCallArg = safeEnum({\n Object: ObjectArg,\n Pure: object({\n bytes: BCSBytes\n })\n});\nconst TransactionExpiration = safeEnum({\n None: literal(true),\n Epoch: JsonU64\n});\nconst TransactionData = object({\n version: literal(2),\n sender: nullish(SuiAddress),\n expiration: nullish(TransactionExpiration),\n gasData: GasData,\n inputs: array(CallArg),\n commands: array(Command)\n});\nexport {\n $Intent,\n Argument,\n BCSBytes,\n Command,\n GasData,\n JsonU64,\n NormalizedCallArg,\n ObjectArg,\n ObjectID,\n ObjectRef,\n OpenMoveTypeSignature,\n OpenMoveTypeSignatureBody,\n StructTag,\n SuiAddress,\n TransactionData,\n TransactionExpiration,\n safeEnum\n};\n//# sourceMappingURL=internal.js.map\n","import { toB64 } from \"@mysten/bcs\";\nimport { parse } from \"valibot\";\nimport { normalizeSuiObjectId } from \"../utils/sui-types.js\";\nimport { Argument } from \"./data/internal.js\";\nvar UpgradePolicy = /* @__PURE__ */ ((UpgradePolicy2) => {\n UpgradePolicy2[UpgradePolicy2[\"COMPATIBLE\"] = 0] = \"COMPATIBLE\";\n UpgradePolicy2[UpgradePolicy2[\"ADDITIVE\"] = 128] = \"ADDITIVE\";\n UpgradePolicy2[UpgradePolicy2[\"DEP_ONLY\"] = 192] = \"DEP_ONLY\";\n return UpgradePolicy2;\n})(UpgradePolicy || {});\nconst Commands = {\n MoveCall(input) {\n const [pkg, mod = \"\", fn = \"\"] = \"target\" in input ? input.target.split(\"::\") : [input.package, input.module, input.function];\n return {\n $kind: \"MoveCall\",\n MoveCall: {\n package: pkg,\n module: mod,\n function: fn,\n typeArguments: input.typeArguments ?? [],\n arguments: input.arguments ?? []\n }\n };\n },\n TransferObjects(objects, address) {\n return {\n $kind: \"TransferObjects\",\n TransferObjects: {\n objects: objects.map((o) => parse(Argument, o)),\n address: parse(Argument, address)\n }\n };\n },\n SplitCoins(coin, amounts) {\n return {\n $kind: \"SplitCoins\",\n SplitCoins: {\n coin: parse(Argument, coin),\n amounts: amounts.map((o) => parse(Argument, o))\n }\n };\n },\n MergeCoins(destination, sources) {\n return {\n $kind: \"MergeCoins\",\n MergeCoins: {\n destination: parse(Argument, destination),\n sources: sources.map((o) => parse(Argument, o))\n }\n };\n },\n Publish({\n modules,\n dependencies\n }) {\n return {\n $kind: \"Publish\",\n Publish: {\n modules: modules.map(\n (module) => typeof module === \"string\" ? module : toB64(new Uint8Array(module))\n ),\n dependencies: dependencies.map((dep) => normalizeSuiObjectId(dep))\n }\n };\n },\n Upgrade({\n modules,\n dependencies,\n package: packageId,\n ticket\n }) {\n return {\n $kind: \"Upgrade\",\n Upgrade: {\n modules: modules.map(\n (module) => typeof module === \"string\" ? module : toB64(new Uint8Array(module))\n ),\n dependencies: dependencies.map((dep) => normalizeSuiObjectId(dep)),\n package: packageId,\n ticket: parse(Argument, ticket)\n }\n };\n },\n MakeMoveVec({\n type,\n elements\n }) {\n return {\n $kind: \"MakeMoveVec\",\n MakeMoveVec: {\n type: type ?? null,\n elements: elements.map((o) => parse(Argument, o))\n }\n };\n },\n Intent({\n name,\n inputs = {},\n data = {}\n }) {\n return {\n $kind: \"$Intent\",\n $Intent: {\n name,\n inputs: Object.fromEntries(\n Object.entries(inputs).map(([key, value]) => [\n key,\n Array.isArray(value) ? value.map((o) => parse(Argument, o)) : parse(Argument, value)\n ])\n ),\n data\n }\n };\n }\n};\nexport {\n Commands,\n UpgradePolicy\n};\n//# sourceMappingURL=Commands.js.map\n","import { splitGenericParameters } from \"@mysten/bcs\";\nimport { normalizeSuiAddress } from \"../utils/sui-types.js\";\nconst VECTOR_REGEX = /^vector<(.+)>$/;\nconst STRUCT_REGEX = /^([^:]+)::([^:]+)::([^<]+)(<(.+)>)?/;\nclass TypeTagSerializer {\n static parseFromStr(str, normalizeAddress = false) {\n if (str === \"address\") {\n return { address: null };\n } else if (str === \"bool\") {\n return { bool: null };\n } else if (str === \"u8\") {\n return { u8: null };\n } else if (str === \"u16\") {\n return { u16: null };\n } else if (str === \"u32\") {\n return { u32: null };\n } else if (str === \"u64\") {\n return { u64: null };\n } else if (str === \"u128\") {\n return { u128: null };\n } else if (str === \"u256\") {\n return { u256: null };\n } else if (str === \"signer\") {\n return { signer: null };\n }\n const vectorMatch = str.match(VECTOR_REGEX);\n if (vectorMatch) {\n return {\n vector: TypeTagSerializer.parseFromStr(vectorMatch[1], normalizeAddress)\n };\n }\n const structMatch = str.match(STRUCT_REGEX);\n if (structMatch) {\n const address = normalizeAddress ? normalizeSuiAddress(structMatch[1]) : structMatch[1];\n return {\n struct: {\n address,\n module: structMatch[2],\n name: structMatch[3],\n typeParams: structMatch[5] === void 0 ? [] : TypeTagSerializer.parseStructTypeArgs(structMatch[5], normalizeAddress)\n }\n };\n }\n throw new Error(`Encountered unexpected token when parsing type args for ${str}`);\n }\n static parseStructTypeArgs(str, normalizeAddress = false) {\n return splitGenericParameters(str).map(\n (tok) => TypeTagSerializer.parseFromStr(tok, normalizeAddress)\n );\n }\n static tagToString(tag) {\n if (\"bool\" in tag) {\n return \"bool\";\n }\n if (\"u8\" in tag) {\n return \"u8\";\n }\n if (\"u16\" in tag) {\n return \"u16\";\n }\n if (\"u32\" in tag) {\n return \"u32\";\n }\n if (\"u64\" in tag) {\n return \"u64\";\n }\n if (\"u128\" in tag) {\n return \"u128\";\n }\n if (\"u256\" in tag) {\n return \"u256\";\n }\n if (\"address\" in tag) {\n return \"address\";\n }\n if (\"signer\" in tag) {\n return \"signer\";\n }\n if (\"vector\" in tag) {\n return `vector<${TypeTagSerializer.tagToString(tag.vector)}>`;\n }\n if (\"struct\" in tag) {\n const struct = tag.struct;\n const typeParams = struct.typeParams.map(TypeTagSerializer.tagToString).join(\", \");\n return `${struct.address}::${struct.module}::${struct.name}${typeParams ? `<${typeParams}>` : \"\"}`;\n }\n throw new Error(\"Invalid TypeTag\");\n }\n}\nexport {\n TypeTagSerializer\n};\n//# sourceMappingURL=type-tag-serializer.js.map\n","import { fromB64, toB64 } from \"@mysten/bcs\";\nimport {\n array,\n bigint,\n boolean,\n check,\n integer,\n is,\n lazy,\n literal,\n nullable,\n nullish,\n number,\n object,\n optional,\n parse,\n pipe,\n string,\n union,\n unknown\n} from \"valibot\";\nimport { TypeTagSerializer } from \"../../bcs/index.js\";\nimport { JsonU64, ObjectID, safeEnum, TransactionData } from \"./internal.js\";\nconst ObjectRef = object({\n digest: string(),\n objectId: string(),\n version: union([pipe(number(), integer()), string(), bigint()])\n});\nconst ObjectArg = safeEnum({\n ImmOrOwned: ObjectRef,\n Shared: object({\n objectId: ObjectID,\n initialSharedVersion: JsonU64,\n mutable: boolean()\n }),\n Receiving: ObjectRef\n});\nconst NormalizedCallArg = safeEnum({\n Object: ObjectArg,\n Pure: array(pipe(number(), integer()))\n});\nconst TransactionInput = union([\n object({\n kind: literal(\"Input\"),\n index: pipe(number(), integer()),\n value: unknown(),\n type: optional(literal(\"object\"))\n }),\n object({\n kind: literal(\"Input\"),\n index: pipe(number(), integer()),\n value: unknown(),\n type: literal(\"pure\")\n })\n]);\nconst TransactionExpiration = union([\n object({ Epoch: pipe(number(), integer()) }),\n object({ None: nullable(literal(true)) })\n]);\nconst StringEncodedBigint = pipe(\n union([number(), string(), bigint()]),\n check((val) => {\n if (![\"string\", \"number\", \"bigint\"].includes(typeof val)) return false;\n try {\n BigInt(val);\n return true;\n } catch {\n return false;\n }\n })\n);\nconst TypeTag = union([\n object({ bool: nullable(literal(true)) }),\n object({ u8: nullable(literal(true)) }),\n object({ u64: nullable(literal(true)) }),\n object({ u128: nullable(literal(true)) }),\n object({ address: nullable(literal(true)) }),\n object({ signer: nullable(literal(true)) }),\n object({ vector: lazy(() => TypeTag) }),\n object({ struct: lazy(() => StructTag) }),\n object({ u16: nullable(literal(true)) }),\n object({ u32: nullable(literal(true)) }),\n object({ u256: nullable(literal(true)) })\n]);\nconst StructTag = object({\n address: string(),\n module: string(),\n name: string(),\n typeParams: array(TypeTag)\n});\nconst GasConfig = object({\n budget: optional(StringEncodedBigint),\n price: optional(StringEncodedBigint),\n payment: optional(array(ObjectRef)),\n owner: optional(string())\n});\nconst TransactionArgumentTypes = [\n TransactionInput,\n object({ kind: literal(\"GasCoin\") }),\n object({ kind: literal(\"Result\"), index: pipe(number(), integer()) }),\n object({\n kind: literal(\"NestedResult\"),\n index: pipe(number(), integer()),\n resultIndex: pipe(number(), integer())\n })\n];\nconst TransactionArgument = union([...TransactionArgumentTypes]);\nconst MoveCallTransaction = object({\n kind: literal(\"MoveCall\"),\n target: pipe(\n string(),\n check((target) => target.split(\"::\").length === 3)\n ),\n typeArguments: array(string()),\n arguments: array(TransactionArgument)\n});\nconst TransferObjectsTransaction = object({\n kind: literal(\"TransferObjects\"),\n objects: array(TransactionArgument),\n address: TransactionArgument\n});\nconst SplitCoinsTransaction = object({\n kind: literal(\"SplitCoins\"),\n coin: TransactionArgument,\n amounts: array(TransactionArgument)\n});\nconst MergeCoinsTransaction = object({\n kind: literal(\"MergeCoins\"),\n destination: TransactionArgument,\n sources: array(TransactionArgument)\n});\nconst MakeMoveVecTransaction = object({\n kind: literal(\"MakeMoveVec\"),\n type: union([object({ Some: TypeTag }), object({ None: nullable(literal(true)) })]),\n objects: array(TransactionArgument)\n});\nconst PublishTransaction = object({\n kind: literal(\"Publish\"),\n modules: array(array(pipe(number(), integer()))),\n dependencies: array(string())\n});\nconst UpgradeTransaction = object({\n kind: literal(\"Upgrade\"),\n modules: array(array(pipe(number(), integer()))),\n dependencies: array(string()),\n packageId: string(),\n ticket: TransactionArgument\n});\nconst TransactionTypes = [\n MoveCallTransaction,\n TransferObjectsTransaction,\n SplitCoinsTransaction,\n MergeCoinsTransaction,\n PublishTransaction,\n UpgradeTransaction,\n MakeMoveVecTransaction\n];\nconst TransactionType = union([...TransactionTypes]);\nconst SerializedTransactionDataV1 = object({\n version: literal(1),\n sender: optional(string()),\n expiration: nullish(TransactionExpiration),\n gasConfig: GasConfig,\n inputs: array(TransactionInput),\n transactions: array(TransactionType)\n});\nfunction serializeV1TransactionData(transactionData) {\n const inputs = transactionData.inputs.map(\n (input, index) => {\n if (input.Object) {\n return {\n kind: \"Input\",\n index,\n value: {\n Object: input.Object.ImmOrOwnedObject ? {\n ImmOrOwned: input.Object.ImmOrOwnedObject\n } : input.Object.Receiving ? {\n Receiving: {\n digest: input.Object.Receiving.digest,\n version: input.Object.Receiving.version,\n objectId: input.Object.Receiving.objectId\n }\n } : {\n Shared: {\n mutable: input.Object.SharedObject.mutable,\n initialSharedVersion: input.Object.SharedObject.initialSharedVersion,\n objectId: input.Object.SharedObject.objectId\n }\n }\n },\n type: \"object\"\n };\n }\n if (input.Pure) {\n return {\n kind: \"Input\",\n index,\n value: {\n Pure: Array.from(fromB64(input.Pure.bytes))\n },\n type: \"pure\"\n };\n }\n if (input.UnresolvedPure) {\n return {\n kind: \"Input\",\n type: \"pure\",\n index,\n value: input.UnresolvedPure.value\n };\n }\n if (input.UnresolvedObject) {\n return {\n kind: \"Input\",\n type: \"object\",\n index,\n value: input.UnresolvedObject.objectId\n };\n }\n throw new Error(\"Invalid input\");\n }\n );\n return {\n version: 1,\n sender: transactionData.sender ?? void 0,\n expiration: transactionData.expiration?.$kind === \"Epoch\" ? { Epoch: Number(transactionData.expiration.Epoch) } : transactionData.expiration ? { None: true } : null,\n gasConfig: {\n owner: transactionData.gasData.owner ?? void 0,\n budget: transactionData.gasData.budget ?? void 0,\n price: transactionData.gasData.price ?? void 0,\n payment: transactionData.gasData.payment ?? void 0\n },\n inputs,\n transactions: transactionData.commands.map((command) => {\n if (command.MakeMoveVec) {\n return {\n kind: \"MakeMoveVec\",\n type: command.MakeMoveVec.type === null ? { None: true } : { Some: TypeTagSerializer.parseFromStr(command.MakeMoveVec.type) },\n objects: command.MakeMoveVec.elements.map(\n (arg) => convertTransactionArgument(arg, inputs)\n )\n };\n }\n if (command.MergeCoins) {\n return {\n kind: \"MergeCoins\",\n destination: convertTransactionArgument(command.MergeCoins.destination, inputs),\n sources: command.MergeCoins.sources.map((arg) => convertTransactionArgument(arg, inputs))\n };\n }\n if (command.MoveCall) {\n return {\n kind: \"MoveCall\",\n target: `${command.MoveCall.package}::${command.MoveCall.module}::${command.MoveCall.function}`,\n typeArguments: command.MoveCall.typeArguments,\n arguments: command.MoveCall.arguments.map(\n (arg) => convertTransactionArgument(arg, inputs)\n )\n };\n }\n if (command.Publish) {\n return {\n kind: \"Publish\",\n modules: command.Publish.modules.map((mod) => Array.from(fromB64(mod))),\n dependencies: command.Publish.dependencies\n };\n }\n if (command.SplitCoins) {\n return {\n kind: \"SplitCoins\",\n coin: convertTransactionArgument(command.SplitCoins.coin, inputs),\n amounts: command.SplitCoins.amounts.map((arg) => convertTransactionArgument(arg, inputs))\n };\n }\n if (command.TransferObjects) {\n return {\n kind: \"TransferObjects\",\n objects: command.TransferObjects.objects.map(\n (arg) => convertTransactionArgument(arg, inputs)\n ),\n address: convertTransactionArgument(command.TransferObjects.address, inputs)\n };\n }\n if (command.Upgrade) {\n return {\n kind: \"Upgrade\",\n modules: command.Upgrade.modules.map((mod) => Array.from(fromB64(mod))),\n dependencies: command.Upgrade.dependencies,\n packageId: command.Upgrade.package,\n ticket: convertTransactionArgument(command.Upgrade.ticket, inputs)\n };\n }\n throw new Error(`Unknown transaction ${Object.keys(command)}`);\n })\n };\n}\nfunction convertTransactionArgument(arg, inputs) {\n if (arg.$kind === \"GasCoin\") {\n return { kind: \"GasCoin\" };\n }\n if (arg.$kind === \"Result\") {\n return { kind: \"Result\", index: arg.Result };\n }\n if (arg.$kind === \"NestedResult\") {\n return { kind: \"NestedResult\", index: arg.NestedResult[0], resultIndex: arg.NestedResult[1] };\n }\n if (arg.$kind === \"Input\") {\n return inputs[arg.Input];\n }\n throw new Error(`Invalid argument ${Object.keys(arg)}`);\n}\nfunction transactionDataFromV1(data) {\n return parse(TransactionData, {\n version: 2,\n sender: data.sender ?? null,\n expiration: data.expiration ? \"Epoch\" in data.expiration ? { Epoch: data.expiration.Epoch } : { None: true } : null,\n gasData: {\n owner: data.gasConfig.owner ?? null,\n budget: data.gasConfig.budget?.toString() ?? null,\n price: data.gasConfig.price?.toString() ?? null,\n payment: data.gasConfig.payment?.map((ref) => ({\n digest: ref.digest,\n objectId: ref.objectId,\n version: ref.version.toString()\n })) ?? null\n },\n inputs: data.inputs.map((input) => {\n if (input.kind === \"Input\") {\n if (is(NormalizedCallArg, input.value)) {\n const value = parse(NormalizedCallArg, input.value);\n if (value.Object) {\n if (value.Object.ImmOrOwned) {\n return {\n Object: {\n ImmOrOwnedObject: {\n objectId: value.Object.ImmOrOwned.objectId,\n version: String(value.Object.ImmOrOwned.version),\n digest: value.Object.ImmOrOwned.digest\n }\n }\n };\n }\n if (value.Object.Shared) {\n return {\n Object: {\n SharedObject: {\n mutable: value.Object.Shared.mutable ?? null,\n initialSharedVersion: value.Object.Shared.initialSharedVersion,\n objectId: value.Object.Shared.objectId\n }\n }\n };\n }\n if (value.Object.Receiving) {\n return {\n Object: {\n Receiving: {\n digest: value.Object.Receiving.digest,\n version: String(value.Object.Receiving.version),\n objectId: value.Object.Receiving.objectId\n }\n }\n };\n }\n throw new Error(\"Invalid object input\");\n }\n return {\n Pure: {\n bytes: toB64(new Uint8Array(value.Pure))\n }\n };\n }\n if (input.type === \"object\") {\n return {\n UnresolvedObject: {\n objectId: input.value\n }\n };\n }\n return {\n UnresolvedPure: {\n value: input.value\n }\n };\n }\n throw new Error(\"Invalid input\");\n }),\n commands: data.transactions.map((transaction) => {\n switch (transaction.kind) {\n case \"MakeMoveVec\":\n return {\n MakeMoveVec: {\n type: \"Some\" in transaction.type ? TypeTagSerializer.tagToString(transaction.type.Some) : null,\n elements: transaction.objects.map((arg) => parseV1TransactionArgument(arg))\n }\n };\n case \"MergeCoins\": {\n return {\n MergeCoins: {\n destination: parseV1TransactionArgument(transaction.destination),\n sources: transaction.sources.map((arg) => parseV1TransactionArgument(arg))\n }\n };\n }\n case \"MoveCall\": {\n const [pkg, mod, fn] = transaction.target.split(\"::\");\n return {\n MoveCall: {\n package: pkg,\n module: mod,\n function: fn,\n typeArguments: transaction.typeArguments,\n arguments: transaction.arguments.map((arg) => parseV1TransactionArgument(arg))\n }\n };\n }\n case \"Publish\": {\n return {\n Publish: {\n modules: transaction.modules.map((mod) => toB64(Uint8Array.from(mod))),\n dependencies: transaction.dependencies\n }\n };\n }\n case \"SplitCoins\": {\n return {\n SplitCoins: {\n coin: parseV1TransactionArgument(transaction.coin),\n amounts: transaction.amounts.map((arg) => parseV1TransactionArgument(arg))\n }\n };\n }\n case \"TransferObjects\": {\n return {\n TransferObjects: {\n objects: transaction.objects.map((arg) => parseV1TransactionArgument(arg)),\n address: parseV1TransactionArgument(transaction.address)\n }\n };\n }\n case \"Upgrade\": {\n return {\n Upgrade: {\n modules: transaction.modules.map((mod) => toB64(Uint8Array.from(mod))),\n dependencies: transaction.dependencies,\n package: transaction.packageId,\n ticket: parseV1TransactionArgument(transaction.ticket)\n }\n };\n }\n }\n throw new Error(`Unknown transaction ${Object.keys(transaction)}`);\n })\n });\n}\nfunction parseV1TransactionArgument(arg) {\n switch (arg.kind) {\n case \"GasCoin\": {\n return { GasCoin: true };\n }\n case \"Result\":\n return { Result: arg.index };\n case \"NestedResult\": {\n return { NestedResult: [arg.index, arg.resultIndex] };\n }\n case \"Input\": {\n return { Input: arg.index };\n }\n }\n}\nexport {\n NormalizedCallArg,\n ObjectRef,\n SerializedTransactionDataV1,\n StructTag,\n TransactionArgument,\n TypeTag,\n serializeV1TransactionData,\n transactionDataFromV1\n};\n//# sourceMappingURL=v1.js.map\n","import {\n array,\n boolean,\n integer,\n literal,\n nullable,\n nullish,\n number,\n object,\n optional,\n pipe,\n record,\n string,\n tuple,\n union,\n unknown\n} from \"valibot\";\nimport { BCSBytes, JsonU64, ObjectID, ObjectRef, SuiAddress } from \"./internal.js\";\nfunction enumUnion(options) {\n return union(\n Object.entries(options).map(([key, value]) => object({ [key]: value }))\n );\n}\nconst Argument = enumUnion({\n GasCoin: literal(true),\n Input: pipe(number(), integer()),\n Result: pipe(number(), integer()),\n NestedResult: tuple([pipe(number(), integer()), pipe(number(), integer())])\n});\nconst GasData = object({\n budget: nullable(JsonU64),\n price: nullable(JsonU64),\n owner: nullable(SuiAddress),\n payment: nullable(array(ObjectRef))\n});\nconst ProgrammableMoveCall = object({\n package: ObjectID,\n module: string(),\n function: string(),\n // snake case in rust\n typeArguments: array(string()),\n arguments: array(Argument)\n});\nconst $Intent = object({\n name: string(),\n inputs: record(string(), union([Argument, array(Argument)])),\n data: record(string(), unknown())\n});\nconst Command = enumUnion({\n MoveCall: ProgrammableMoveCall,\n TransferObjects: object({\n objects: array(Argument),\n address: Argument\n }),\n SplitCoins: object({\n coin: Argument,\n amounts: array(Argument)\n }),\n MergeCoins: object({\n destination: Argument,\n sources: array(Argument)\n }),\n Publish: object({\n modules: array(BCSBytes),\n dependencies: array(ObjectID)\n }),\n MakeMoveVec: object({\n type: nullable(string()),\n elements: array(Argument)\n }),\n Upgrade: object({\n modules: array(BCSBytes),\n dependencies: array(ObjectID),\n package: ObjectID,\n ticket: Argument\n }),\n $Intent\n});\nconst ObjectArg = enumUnion({\n ImmOrOwnedObject: ObjectRef,\n SharedObject: object({\n objectId: ObjectID,\n // snake case in rust\n initialSharedVersion: JsonU64,\n mutable: boolean()\n }),\n Receiving: ObjectRef\n});\nconst CallArg = enumUnion({\n Object: ObjectArg,\n Pure: object({\n bytes: BCSBytes\n }),\n UnresolvedPure: object({\n value: unknown()\n }),\n UnresolvedObject: object({\n objectId: ObjectID,\n version: optional(nullable(JsonU64)),\n digest: optional(nullable(string())),\n initialSharedVersion: optional(nullable(JsonU64))\n })\n});\nconst TransactionExpiration = enumUnion({\n None: literal(true),\n Epoch: JsonU64\n});\nconst SerializedTransactionDataV2 = object({\n version: literal(2),\n sender: nullish(SuiAddress),\n expiration: nullish(TransactionExpiration),\n gasData: GasData,\n inputs: array(CallArg),\n commands: array(Command)\n});\nexport {\n SerializedTransactionDataV2\n};\n//# sourceMappingURL=v2.js.map\n","import { toB64 } from \"@mysten/bcs\";\nimport { normalizeSuiAddress } from \"../utils/sui-types.js\";\nfunction Pure(data) {\n return {\n $kind: \"Pure\",\n Pure: {\n bytes: data instanceof Uint8Array ? toB64(data) : data.toBase64()\n }\n };\n}\nconst Inputs = {\n Pure,\n ObjectRef({ objectId, digest, version }) {\n return {\n $kind: \"Object\",\n Object: {\n $kind: \"ImmOrOwnedObject\",\n ImmOrOwnedObject: {\n digest,\n version,\n objectId: normalizeSuiAddress(objectId)\n }\n }\n };\n },\n SharedObjectRef({\n objectId,\n mutable,\n initialSharedVersion\n }) {\n return {\n $kind: \"Object\",\n Object: {\n $kind: \"SharedObject\",\n SharedObject: {\n mutable,\n initialSharedVersion,\n objectId: normalizeSuiAddress(objectId)\n }\n }\n };\n },\n ReceivingRef({ objectId, digest, version }) {\n return {\n $kind: \"Object\",\n Object: {\n $kind: \"Receiving\",\n Receiving: {\n digest,\n version,\n objectId: normalizeSuiAddress(objectId)\n }\n }\n };\n }\n};\nexport {\n Inputs\n};\n//# sourceMappingURL=Inputs.js.map\n","import {\n BcsType,\n bigUIntBcsType,\n dynamicSizeBcsType,\n fixedSizeBcsType,\n lazyBcsType,\n stringLikeBcsType,\n uIntBcsType\n} from \"./bcs-type.js\";\nimport { ulebEncode } from \"./uleb.js\";\nconst bcs = {\n /**\n * Creates a BcsType that can be used to read and write an 8-bit unsigned integer.\n * @example\n * bcs.u8().serialize(255).toBytes() // Uint8Array [ 255 ]\n */\n u8(options) {\n return uIntBcsType({\n name: \"u8\",\n readMethod: \"read8\",\n writeMethod: \"write8\",\n size: 1,\n maxValue: 2 ** 8 - 1,\n ...options\n });\n },\n /**\n * Creates a BcsType that can be used to read and write a 16-bit unsigned integer.\n * @example\n * bcs.u16().serialize(65535).toBytes() // Uint8Array [ 255, 255 ]\n */\n u16(options) {\n return uIntBcsType({\n name: \"u16\",\n readMethod: \"read16\",\n writeMethod: \"write16\",\n size: 2,\n maxValue: 2 ** 16 - 1,\n ...options\n });\n },\n /**\n * Creates a BcsType that can be used to read and write a 32-bit unsigned integer.\n * @example\n * bcs.u32().serialize(4294967295).toBytes() // Uint8Array [ 255, 255, 255, 255 ]\n */\n u32(options) {\n return uIntBcsType({\n name: \"u32\",\n readMethod: \"read32\",\n writeMethod: \"write32\",\n size: 4,\n maxValue: 2 ** 32 - 1,\n ...options\n });\n },\n /**\n * Creates a BcsType that can be used to read and write a 64-bit unsigned integer.\n * @example\n * bcs.u64().serialize(1).toBytes() // Uint8Array [ 1, 0, 0, 0, 0, 0, 0, 0 ]\n */\n u64(options) {\n return bigUIntBcsType({\n name: \"u64\",\n readMethod: \"read64\",\n writeMethod: \"write64\",\n size: 8,\n maxValue: 2n ** 64n - 1n,\n ...options\n });\n },\n /**\n * Creates a BcsType that can be used to read and write a 128-bit unsigned integer.\n * @example\n * bcs.u128().serialize(1).toBytes() // Uint8Array [ 1, ..., 0 ]\n */\n u128(options) {\n return bigUIntBcsType({\n name: \"u128\",\n readMethod: \"read128\",\n writeMethod: \"write128\",\n size: 16,\n maxValue: 2n ** 128n - 1n,\n ...options\n });\n },\n /**\n * Creates a BcsType that can be used to read and write a 256-bit unsigned integer.\n * @example\n * bcs.u256().serialize(1).toBytes() // Uint8Array [ 1, ..., 0 ]\n */\n u256(options) {\n return bigUIntBcsType({\n name: \"u256\",\n readMethod: \"read256\",\n writeMethod: \"write256\",\n size: 32,\n maxValue: 2n ** 256n - 1n,\n ...options\n });\n },\n /**\n * Creates a BcsType that can be used to read and write boolean values.\n * @example\n * bcs.bool().serialize(true).toBytes() // Uint8Array [ 1 ]\n */\n bool(options) {\n return fixedSizeBcsType({\n name: \"bool\",\n size: 1,\n read: (reader) => reader.read8() === 1,\n write: (value, writer) => writer.write8(value ? 1 : 0),\n ...options,\n validate: (value) => {\n options?.validate?.(value);\n if (typeof value !== \"boolean\") {\n throw new TypeError(`Expected boolean, found ${typeof value}`);\n }\n }\n });\n },\n /**\n * Creates a BcsType that can be used to read and write unsigned LEB encoded integers\n * @example\n *\n */\n uleb128(options) {\n return dynamicSizeBcsType({\n name: \"uleb128\",\n read: (reader) => reader.readULEB(),\n serialize: (value) => {\n return Uint8Array.from(ulebEncode(value));\n },\n ...options\n });\n },\n /**\n * Creates a BcsType representing a fixed length byte array\n * @param size The number of bytes this types represents\n * @example\n * bcs.bytes(3).serialize(new Uint8Array([1, 2, 3])).toBytes() // Uint8Array [1, 2, 3]\n */\n bytes(size, options) {\n return fixedSizeBcsType({\n name: `bytes[${size}]`,\n size,\n read: (reader) => reader.readBytes(size),\n write: (value, writer) => {\n for (let i = 0; i < size; i++) {\n writer.write8(value[i] ?? 0);\n }\n },\n ...options,\n validate: (value) => {\n options?.validate?.(value);\n if (!value || typeof value !== \"object\" || !(\"length\" in value)) {\n throw new TypeError(`Expected array, found ${typeof value}`);\n }\n if (value.length !== size) {\n throw new TypeError(`Expected array of length ${size}, found ${value.length}`);\n }\n }\n });\n },\n /**\n * Creates a BcsType that can ser/de string values. Strings will be UTF-8 encoded\n * @example\n * bcs.string().serialize('a').toBytes() // Uint8Array [ 1, 97 ]\n */\n string(options) {\n return stringLikeBcsType({\n name: \"string\",\n toBytes: (value) => new TextEncoder().encode(value),\n fromBytes: (bytes) => new TextDecoder().decode(bytes),\n ...options\n });\n },\n /**\n * Creates a BcsType that represents a fixed length array of a given type\n * @param size The number of elements in the array\n * @param type The BcsType of each element in the array\n * @example\n * bcs.fixedArray(3, bcs.u8()).serialize([1, 2, 3]).toBytes() // Uint8Array [ 1, 2, 3 ]\n */\n fixedArray(size, type, options) {\n return new BcsType({\n name: `${type.name}[${size}]`,\n read: (reader) => {\n const result = new Array(size);\n for (let i = 0; i < size; i++) {\n result[i] = type.read(reader);\n }\n return result;\n },\n write: (value, writer) => {\n for (const item of value) {\n type.write(item, writer);\n }\n },\n ...options,\n validate: (value) => {\n options?.validate?.(value);\n if (!value || typeof value !== \"object\" || !(\"length\" in value)) {\n throw new TypeError(`Expected array, found ${typeof value}`);\n }\n if (value.length !== size) {\n throw new TypeError(`Expected array of length ${size}, found ${value.length}`);\n }\n }\n });\n },\n /**\n * Creates a BcsType representing an optional value\n * @param type The BcsType of the optional value\n * @example\n * bcs.option(bcs.u8()).serialize(null).toBytes() // Uint8Array [ 0 ]\n * bcs.option(bcs.u8()).serialize(1).toBytes() // Uint8Array [ 1, 1 ]\n */\n option(type) {\n return bcs.enum(`Option<${type.name}>`, {\n None: null,\n Some: type\n }).transform({\n input: (value) => {\n if (value == null) {\n return { None: true };\n }\n return { Some: value };\n },\n output: (value) => {\n if (value.$kind === \"Some\") {\n return value.Some;\n }\n return null;\n }\n });\n },\n /**\n * Creates a BcsType representing a variable length vector of a given type\n * @param type The BcsType of each element in the vector\n *\n * @example\n * bcs.vector(bcs.u8()).toBytes([1, 2, 3]) // Uint8Array [ 3, 1, 2, 3 ]\n */\n vector(type, options) {\n return new BcsType({\n name: `vector<${type.name}>`,\n read: (reader) => {\n const length = reader.readULEB();\n const result = new Array(length);\n for (let i = 0; i < length; i++) {\n result[i] = type.read(reader);\n }\n return result;\n },\n write: (value, writer) => {\n writer.writeULEB(value.length);\n for (const item of value) {\n type.write(item, writer);\n }\n },\n ...options,\n validate: (value) => {\n options?.validate?.(value);\n if (!value || typeof value !== \"object\" || !(\"length\" in value)) {\n throw new TypeError(`Expected array, found ${typeof value}`);\n }\n }\n });\n },\n /**\n * Creates a BcsType representing a tuple of a given set of types\n * @param types The BcsTypes for each element in the tuple\n *\n * @example\n * const tuple = bcs.tuple([bcs.u8(), bcs.string(), bcs.bool()])\n * tuple.serialize([1, 'a', true]).toBytes() // Uint8Array [ 1, 1, 97, 1 ]\n */\n tuple(types, options) {\n return new BcsType({\n name: `(${types.map((t) => t.name).join(\", \")})`,\n serializedSize: (values) => {\n let total = 0;\n for (let i = 0; i < types.length; i++) {\n const size = types[i].serializedSize(values[i]);\n if (size == null) {\n return null;\n }\n total += size;\n }\n return total;\n },\n read: (reader) => {\n const result = [];\n for (const type of types) {\n result.push(type.read(reader));\n }\n return result;\n },\n write: (value, writer) => {\n for (let i = 0; i < types.length; i++) {\n types[i].write(value[i], writer);\n }\n },\n ...options,\n validate: (value) => {\n options?.validate?.(value);\n if (!Array.isArray(value)) {\n throw new TypeError(`Expected array, found ${typeof value}`);\n }\n if (value.length !== types.length) {\n throw new TypeError(`Expected array of length ${types.length}, found ${value.length}`);\n }\n }\n });\n },\n /**\n * Creates a BcsType representing a struct of a given set of fields\n * @param name The name of the struct\n * @param fields The fields of the struct. The order of the fields affects how data is serialized and deserialized\n *\n * @example\n * const struct = bcs.struct('MyStruct', {\n * a: bcs.u8(),\n * b: bcs.string(),\n * })\n * struct.serialize({ a: 1, b: 'a' }).toBytes() // Uint8Array [ 1, 1, 97 ]\n */\n struct(name, fields, options) {\n const canonicalOrder = Object.entries(fields);\n return new BcsType({\n name,\n serializedSize: (values) => {\n let total = 0;\n for (const [field, type] of canonicalOrder) {\n const size = type.serializedSize(values[field]);\n if (size == null) {\n return null;\n }\n total += size;\n }\n return total;\n },\n read: (reader) => {\n const result = {};\n for (const [field, type] of canonicalOrder) {\n result[field] = type.read(reader);\n }\n return result;\n },\n write: (value, writer) => {\n for (const [field, type] of canonicalOrder) {\n type.write(value[field], writer);\n }\n },\n ...options,\n validate: (value) => {\n options?.validate?.(value);\n if (typeof value !== \"object\" || value == null) {\n throw new TypeError(`Expected object, found ${typeof value}`);\n }\n }\n });\n },\n /**\n * Creates a BcsType representing an enum of a given set of options\n * @param name The name of the enum\n * @param values The values of the enum. The order of the values affects how data is serialized and deserialized.\n * null can be used to represent a variant with no data.\n *\n * @example\n * const enum = bcs.enum('MyEnum', {\n * A: bcs.u8(),\n * B: bcs.string(),\n * C: null,\n * })\n * enum.serialize({ A: 1 }).toBytes() // Uint8Array [ 0, 1 ]\n * enum.serialize({ B: 'a' }).toBytes() // Uint8Array [ 1, 1, 97 ]\n * enum.serialize({ C: true }).toBytes() // Uint8Array [ 2 ]\n */\n enum(name, values, options) {\n const canonicalOrder = Object.entries(values);\n return new BcsType({\n name,\n read: (reader) => {\n const index = reader.readULEB();\n const [name2, type] = canonicalOrder[index];\n return {\n [name2]: type?.read(reader) ?? true,\n $kind: name2\n };\n },\n write: (value, writer) => {\n const [name2, val] = Object.entries(value).filter(\n ([name3]) => Object.hasOwn(values, name3)\n )[0];\n for (let i = 0; i < canonicalOrder.length; i++) {\n const [optionName, optionType] = canonicalOrder[i];\n if (optionName === name2) {\n writer.writeULEB(i);\n optionType?.write(val, writer);\n return;\n }\n }\n },\n ...options,\n validate: (value) => {\n options?.validate?.(value);\n if (typeof value !== \"object\" || value == null) {\n throw new TypeError(`Expected object, found ${typeof value}`);\n }\n const keys = Object.keys(value).filter(\n (k) => value[k] !== void 0 && Object.hasOwn(values, k)\n );\n if (keys.length !== 1) {\n throw new TypeError(\n `Expected object with one key, but found ${keys.length} for type ${name}}`\n );\n }\n const [variant] = keys;\n if (!Object.hasOwn(values, variant)) {\n throw new TypeError(`Invalid enum variant ${variant}`);\n }\n }\n });\n },\n /**\n * Creates a BcsType representing a map of a given key and value type\n * @param keyType The BcsType of the key\n * @param valueType The BcsType of the value\n * @example\n * const map = bcs.map(bcs.u8(), bcs.string())\n * map.serialize(new Map([[2, 'a']])).toBytes() // Uint8Array [ 1, 2, 1, 97 ]\n */\n map(keyType, valueType) {\n return bcs.vector(bcs.tuple([keyType, valueType])).transform({\n name: `Map<${keyType.name}, ${valueType.name}>`,\n input: (value) => {\n return [...value.entries()];\n },\n output: (value) => {\n const result = /* @__PURE__ */ new Map();\n for (const [key, val] of value) {\n result.set(key, val);\n }\n return result;\n }\n });\n },\n /**\n * Creates a BcsType that wraps another BcsType which is lazily evaluated. This is useful for creating recursive types.\n * @param cb A callback that returns the BcsType\n */\n lazy(cb) {\n return lazyBcsType(cb);\n }\n};\nexport {\n bcs\n};\n//# sourceMappingURL=bcs.js.map\n","import { bcs, fromB58, fromB64, fromHEX, toB58, toB64, toHEX } from \"@mysten/bcs\";\nimport { isValidSuiAddress, normalizeSuiAddress, SUI_ADDRESS_LENGTH } from \"../utils/sui-types.js\";\nimport { TypeTagSerializer } from \"./type-tag-serializer.js\";\nfunction unsafe_u64(options) {\n return bcs.u64({\n name: \"unsafe_u64\",\n ...options\n }).transform({\n input: (val) => val,\n output: (val) => Number(val)\n });\n}\nfunction optionEnum(type) {\n return bcs.enum(\"Option\", {\n None: null,\n Some: type\n });\n}\nconst Address = bcs.bytes(SUI_ADDRESS_LENGTH).transform({\n validate: (val) => {\n const address = typeof val === \"string\" ? val : toHEX(val);\n if (!address || !isValidSuiAddress(normalizeSuiAddress(address))) {\n throw new Error(`Invalid Sui address ${address}`);\n }\n },\n input: (val) => typeof val === \"string\" ? fromHEX(normalizeSuiAddress(val)) : val,\n output: (val) => normalizeSuiAddress(toHEX(val))\n});\nconst ObjectDigest = bcs.vector(bcs.u8()).transform({\n name: \"ObjectDigest\",\n input: (value) => fromB58(value),\n output: (value) => toB58(new Uint8Array(value)),\n validate: (value) => {\n if (fromB58(value).length !== 32) {\n throw new Error(\"ObjectDigest must be 32 bytes\");\n }\n }\n});\nconst SuiObjectRef = bcs.struct(\"SuiObjectRef\", {\n objectId: Address,\n version: bcs.u64(),\n digest: ObjectDigest\n});\nconst SharedObjectRef = bcs.struct(\"SharedObjectRef\", {\n objectId: Address,\n initialSharedVersion: bcs.u64(),\n mutable: bcs.bool()\n});\nconst ObjectArg = bcs.enum(\"ObjectArg\", {\n ImmOrOwnedObject: SuiObjectRef,\n SharedObject: SharedObjectRef,\n Receiving: SuiObjectRef\n});\nconst CallArg = bcs.enum(\"CallArg\", {\n Pure: bcs.struct(\"Pure\", {\n bytes: bcs.vector(bcs.u8()).transform({\n input: (val) => typeof val === \"string\" ? fromB64(val) : val,\n output: (val) => toB64(new Uint8Array(val))\n })\n }),\n Object: ObjectArg\n});\nconst InnerTypeTag = bcs.enum(\"TypeTag\", {\n bool: null,\n u8: null,\n u64: null,\n u128: null,\n address: null,\n signer: null,\n vector: bcs.lazy(() => InnerTypeTag),\n struct: bcs.lazy(() => StructTag),\n u16: null,\n u32: null,\n u256: null\n});\nconst TypeTag = InnerTypeTag.transform({\n input: (typeTag) => typeof typeTag === \"string\" ? TypeTagSerializer.parseFromStr(typeTag, true) : typeTag,\n output: (typeTag) => TypeTagSerializer.tagToString(typeTag)\n});\nconst Argument = bcs.enum(\"Argument\", {\n GasCoin: null,\n Input: bcs.u16(),\n Result: bcs.u16(),\n NestedResult: bcs.tuple([bcs.u16(), bcs.u16()])\n});\nconst ProgrammableMoveCall = bcs.struct(\"ProgrammableMoveCall\", {\n package: Address,\n module: bcs.string(),\n function: bcs.string(),\n typeArguments: bcs.vector(TypeTag),\n arguments: bcs.vector(Argument)\n});\nconst Command = bcs.enum(\"Command\", {\n /**\n * A Move Call - any public Move function can be called via\n * this transaction. The results can be used that instant to pass\n * into the next transaction.\n */\n MoveCall: ProgrammableMoveCall,\n /**\n * Transfer vector of objects to a receiver.\n */\n TransferObjects: bcs.struct(\"TransferObjects\", {\n objects: bcs.vector(Argument),\n address: Argument\n }),\n // /**\n // * Split `amount` from a `coin`.\n // */\n SplitCoins: bcs.struct(\"SplitCoins\", {\n coin: Argument,\n amounts: bcs.vector(Argument)\n }),\n // /**\n // * Merge Vector of Coins (`sources`) into a `destination`.\n // */\n MergeCoins: bcs.struct(\"MergeCoins\", {\n destination: Argument,\n sources: bcs.vector(Argument)\n }),\n // /**\n // * Publish a Move module.\n // */\n Publish: bcs.struct(\"Publish\", {\n modules: bcs.vector(\n bcs.vector(bcs.u8()).transform({\n input: (val) => typeof val === \"string\" ? fromB64(val) : val,\n output: (val) => toB64(new Uint8Array(val))\n })\n ),\n dependencies: bcs.vector(Address)\n }),\n // /**\n // * Build a vector of objects using the input arguments.\n // * It is impossible to export construct a `vector<T: key>` otherwise,\n // * so this call serves a utility function.\n // */\n MakeMoveVec: bcs.struct(\"MakeMoveVec\", {\n type: optionEnum(TypeTag).transform({\n input: (val) => val === null ? {\n None: true\n } : {\n Some: val\n },\n output: (val) => val.Some ?? null\n }),\n elements: bcs.vector(Argument)\n }),\n Upgrade: bcs.struct(\"Upgrade\", {\n modules: bcs.vector(\n bcs.vector(bcs.u8()).transform({\n input: (val) => typeof val === \"string\" ? fromB64(val) : val,\n output: (val) => toB64(new Uint8Array(val))\n })\n ),\n dependencies: bcs.vector(Address),\n package: Address,\n ticket: Argument\n })\n});\nconst ProgrammableTransaction = bcs.struct(\"ProgrammableTransaction\", {\n inputs: bcs.vector(CallArg),\n commands: bcs.vector(Command)\n});\nconst TransactionKind = bcs.enum(\"TransactionKind\", {\n ProgrammableTransaction,\n ChangeEpoch: null,\n Genesis: null,\n ConsensusCommitPrologue: null\n});\nconst TransactionExpiration = bcs.enum(\"TransactionExpiration\", {\n None: null,\n Epoch: unsafe_u64()\n});\nconst StructTag = bcs.struct(\"StructTag\", {\n address: Address,\n module: bcs.string(),\n name: bcs.string(),\n typeParams: bcs.vector(InnerTypeTag)\n});\nconst GasData = bcs.struct(\"GasData\", {\n payment: bcs.vector(SuiObjectRef),\n owner: Address,\n price: bcs.u64(),\n budget: bcs.u64()\n});\nconst TransactionDataV1 = bcs.struct(\"TransactionDataV1\", {\n kind: TransactionKind,\n sender: Address,\n gasData: GasData,\n expiration: TransactionExpiration\n});\nconst TransactionData = bcs.enum(\"TransactionData\", {\n V1: TransactionDataV1\n});\nconst IntentScope = bcs.enum(\"IntentScope\", {\n TransactionData: null,\n TransactionEffects: null,\n CheckpointSummary: null,\n PersonalMessage: null\n});\nconst IntentVersion = bcs.enum(\"IntentVersion\", {\n V0: null\n});\nconst AppId = bcs.enum(\"AppId\", {\n Sui: null\n});\nconst Intent = bcs.struct(\"Intent\", {\n scope: IntentScope,\n version: IntentVersion,\n appId: AppId\n});\nfunction IntentMessage(T) {\n return bcs.struct(`IntentMessage<${T.name}>`, {\n intent: Intent,\n value: T\n });\n}\nconst CompressedSignature = bcs.enum(\"CompressedSignature\", {\n ED25519: bcs.fixedArray(64, bcs.u8()),\n Secp256k1: bcs.fixedArray(64, bcs.u8()),\n Secp256r1: bcs.fixedArray(64, bcs.u8()),\n ZkLogin: bcs.vector(bcs.u8())\n});\nconst PublicKey = bcs.enum(\"PublicKey\", {\n ED25519: bcs.fixedArray(32, bcs.u8()),\n Secp256k1: bcs.fixedArray(33, bcs.u8()),\n Secp256r1: bcs.fixedArray(33, bcs.u8()),\n ZkLogin: bcs.vector(bcs.u8())\n});\nconst MultiSigPkMap = bcs.struct(\"MultiSigPkMap\", {\n pubKey: PublicKey,\n weight: bcs.u8()\n});\nconst MultiSigPublicKey = bcs.struct(\"MultiSigPublicKey\", {\n pk_map: bcs.vector(MultiSigPkMap),\n threshold: bcs.u16()\n});\nconst MultiSig = bcs.struct(\"MultiSig\", {\n sigs: bcs.vector(CompressedSignature),\n bitmap: bcs.u16(),\n multisig_pk: MultiSigPublicKey\n});\nconst base64String = bcs.vector(bcs.u8()).transform({\n input: (val) => typeof val === \"string\" ? fromB64(val) : val,\n output: (val) => toB64(new Uint8Array(val))\n});\nconst SenderSignedTransaction = bcs.struct(\"SenderSignedTransaction\", {\n intentMessage: IntentMessage(TransactionData),\n txSignatures: bcs.vector(base64String)\n});\nconst SenderSignedData = bcs.vector(SenderSignedTransaction, {\n name: \"SenderSignedData\"\n});\nexport {\n Address,\n AppId,\n Argument,\n CallArg,\n Command,\n CompressedSignature,\n GasData,\n Intent,\n IntentMessage,\n IntentScope,\n IntentVersion,\n MultiSig,\n MultiSigPkMap,\n MultiSigPublicKey,\n ObjectArg,\n ObjectDigest,\n ProgrammableMoveCall,\n ProgrammableTransaction,\n PublicKey,\n SenderSignedData,\n SenderSignedTransaction,\n SharedObjectRef,\n StructTag,\n SuiObjectRef,\n TransactionData,\n TransactionDataV1,\n TransactionExpiration,\n TransactionKind,\n TypeTag,\n base64String\n};\n//# sourceMappingURL=bcs.js.map\n","import { bcs } from \"@mysten/bcs\";\nimport { Address, ObjectDigest, SuiObjectRef } from \"./bcs.js\";\nconst PackageUpgradeError = bcs.enum(\"PackageUpgradeError\", {\n UnableToFetchPackage: bcs.struct(\"UnableToFetchPackage\", { packageId: Address }),\n NotAPackage: bcs.struct(\"NotAPackage\", { objectId: Address }),\n IncompatibleUpgrade: null,\n DigestDoesNotMatch: bcs.struct(\"DigestDoesNotMatch\", { digest: bcs.vector(bcs.u8()) }),\n UnknownUpgradePolicy: bcs.struct(\"UnknownUpgradePolicy\", { policy: bcs.u8() }),\n PackageIDDoesNotMatch: bcs.struct(\"PackageIDDoesNotMatch\", {\n packageId: Address,\n ticketId: Address\n })\n});\nconst ModuleId = bcs.struct(\"ModuleId\", {\n address: Address,\n name: bcs.string()\n});\nconst MoveLocation = bcs.struct(\"MoveLocation\", {\n module: ModuleId,\n function: bcs.u16(),\n instruction: bcs.u16(),\n functionName: bcs.option(bcs.string())\n});\nconst CommandArgumentError = bcs.enum(\"CommandArgumentError\", {\n TypeMismatch: null,\n InvalidBCSBytes: null,\n InvalidUsageOfPureArg: null,\n InvalidArgumentToPrivateEntryFunction: null,\n IndexOutOfBounds: bcs.struct(\"IndexOutOfBounds\", { idx: bcs.u16() }),\n SecondaryIndexOutOfBounds: bcs.struct(\"SecondaryIndexOutOfBounds\", {\n resultIdx: bcs.u16(),\n secondaryIdx: bcs.u16()\n }),\n InvalidResultArity: bcs.struct(\"InvalidResultArity\", { resultIdx: bcs.u16() }),\n InvalidGasCoinUsage: null,\n InvalidValueUsage: null,\n InvalidObjectByValue: null,\n InvalidObjectByMutRef: null,\n SharedObjectOperationNotAllowed: null\n});\nconst TypeArgumentError = bcs.enum(\"TypeArgumentError\", {\n TypeNotFound: null,\n ConstraintNotSatisfied: null\n});\nconst ExecutionFailureStatus = bcs.enum(\"ExecutionFailureStatus\", {\n InsufficientGas: null,\n InvalidGasObject: null,\n InvariantViolation: null,\n FeatureNotYetSupported: null,\n MoveObjectTooBig: bcs.struct(\"MoveObjectTooBig\", {\n objectSize: bcs.u64(),\n maxObjectSize: bcs.u64()\n }),\n MovePackageTooBig: bcs.struct(\"MovePackageTooBig\", {\n objectSize: bcs.u64(),\n maxObjectSize: bcs.u64()\n }),\n CircularObjectOwnership: bcs.struct(\"CircularObjectOwnership\", { object: Address }),\n InsufficientCoinBalance: null,\n CoinBalanceOverflow: null,\n PublishErrorNonZeroAddress: null,\n SuiMoveVerificationError: null,\n MovePrimitiveRuntimeError: bcs.option(MoveLocation),\n MoveAbort: bcs.tuple([MoveLocation, bcs.u64()]),\n VMVerificationOrDeserializationError: null,\n VMInvariantViolation: null,\n FunctionNotFound: null,\n ArityMismatch: null,\n TypeArityMismatch: null,\n NonEntryFunctionInvoked: null,\n CommandArgumentError: bcs.struct(\"CommandArgumentError\", {\n argIdx: bcs.u16(),\n kind: CommandArgumentError\n }),\n TypeArgumentError: bcs.struct(\"TypeArgumentError\", {\n argumentIdx: bcs.u16(),\n kind: TypeArgumentError\n }),\n UnusedValueWithoutDrop: bcs.struct(\"UnusedValueWithoutDrop\", {\n resultIdx: bcs.u16(),\n secondaryIdx: bcs.u16()\n }),\n InvalidPublicFunctionReturnType: bcs.struct(\"InvalidPublicFunctionReturnType\", {\n idx: bcs.u16()\n }),\n InvalidTransferObject: null,\n EffectsTooLarge: bcs.struct(\"EffectsTooLarge\", { currentSize: bcs.u64(), maxSize: bcs.u64() }),\n PublishUpgradeMissingDependency: null,\n PublishUpgradeDependencyDowngrade: null,\n PackageUpgradeError: bcs.struct(\"PackageUpgradeError\", { upgradeError: PackageUpgradeError }),\n WrittenObjectsTooLarge: bcs.struct(\"WrittenObjectsTooLarge\", {\n currentSize: bcs.u64(),\n maxSize: bcs.u64()\n }),\n CertificateDenied: null,\n SuiMoveVerificationTimedout: null,\n SharedObjectOperationNotAllowed: null,\n InputObjectDeleted: null\n});\nconst ExecutionStatus = bcs.enum(\"ExecutionStatus\", {\n Success: null,\n Failed: bcs.struct(\"ExecutionFailed\", {\n error: ExecutionFailureStatus,\n command: bcs.option(bcs.u64())\n })\n});\nconst GasCostSummary = bcs.struct(\"GasCostSummary\", {\n computationCost: bcs.u64(),\n storageCost: bcs.u64(),\n storageRebate: bcs.u64(),\n nonRefundableStorageFee: bcs.u64()\n});\nconst Owner = bcs.enum(\"Owner\", {\n AddressOwner: Address,\n ObjectOwner: Address,\n Shared: bcs.struct(\"Shared\", {\n initialSharedVersion: bcs.u64()\n }),\n Immutable: null\n});\nconst TransactionEffectsV1 = bcs.struct(\"TransactionEffectsV1\", {\n status: ExecutionStatus,\n executedEpoch: bcs.u64(),\n gasUsed: GasCostSummary,\n modifiedAtVersions: bcs.vector(bcs.tuple([Address, bcs.u64()])),\n sharedObjects: bcs.vector(SuiObjectRef),\n transactionDigest: ObjectDigest,\n created: bcs.vector(bcs.tuple([SuiObjectRef, Owner])),\n mutated: bcs.vector(bcs.tuple([SuiObjectRef, Owner])),\n unwrapped: bcs.vector(bcs.tuple([SuiObjectRef, Owner])),\n deleted: bcs.vector(SuiObjectRef),\n unwrappedThenDeleted: bcs.vector(SuiObjectRef),\n wrapped: bcs.vector(SuiObjectRef),\n gasObject: bcs.tuple([SuiObjectRef, Owner]),\n eventsDigest: bcs.option(ObjectDigest),\n dependencies: bcs.vector(ObjectDigest)\n});\nconst VersionDigest = bcs.tuple([bcs.u64(), ObjectDigest]);\nconst ObjectIn = bcs.enum(\"ObjectIn\", {\n NotExist: null,\n Exist: bcs.tuple([VersionDigest, Owner])\n});\nconst ObjectOut = bcs.enum(\"ObjectOut\", {\n NotExist: null,\n ObjectWrite: bcs.tuple([ObjectDigest, Owner]),\n PackageWrite: VersionDigest\n});\nconst IDOperation = bcs.enum(\"IDOperation\", {\n None: null,\n Created: null,\n Deleted: null\n});\nconst EffectsObjectChange = bcs.struct(\"EffectsObjectChange\", {\n inputState: ObjectIn,\n outputState: ObjectOut,\n idOperation: IDOperation\n});\nconst UnchangedSharedKind = bcs.enum(\"UnchangedSharedKind\", {\n ReadOnlyRoot: VersionDigest,\n MutateDeleted: bcs.u64(),\n ReadDeleted: bcs.u64()\n});\nconst TransactionEffectsV2 = bcs.struct(\"TransactionEffectsV2\", {\n status: ExecutionStatus,\n executedEpoch: bcs.u64(),\n gasUsed: GasCostSummary,\n transactionDigest: ObjectDigest,\n gasObjectIndex: bcs.option(bcs.u32()),\n eventsDigest: bcs.option(ObjectDigest),\n dependencies: bcs.vector(ObjectDigest),\n lamportVersion: bcs.u64(),\n changedObjects: bcs.vector(bcs.tuple([Address, EffectsObjectChange])),\n unchangedSharedObjects: bcs.vector(bcs.tuple([Address, UnchangedSharedKind])),\n auxDataDigest: bcs.option(ObjectDigest)\n});\nconst TransactionEffects = bcs.enum(\"TransactionEffects\", {\n V1: TransactionEffectsV1,\n V2: TransactionEffectsV2\n});\nexport {\n TransactionEffects\n};\n//# sourceMappingURL=effects.js.map\n","import { bcs } from \"@mysten/bcs\";\nimport {\n Address,\n AppId,\n Argument,\n CallArg,\n Command,\n CompressedSignature,\n GasData,\n Intent,\n IntentMessage,\n IntentScope,\n IntentVersion,\n MultiSig,\n MultiSigPkMap,\n MultiSigPublicKey,\n ObjectArg,\n ObjectDigest,\n ProgrammableMoveCall,\n ProgrammableTransaction,\n PublicKey,\n SenderSignedData,\n SenderSignedTransaction,\n SharedObjectRef,\n StructTag,\n SuiObjectRef,\n TransactionData,\n TransactionDataV1,\n TransactionExpiration,\n TransactionKind,\n TypeTag\n} from \"./bcs.js\";\nimport { TransactionEffects } from \"./effects.js\";\nimport { TypeTagSerializer } from \"./type-tag-serializer.js\";\nimport { BcsType } from \"@mysten/bcs\";\nconst suiBcs = {\n ...bcs,\n U8: bcs.u8(),\n U16: bcs.u16(),\n U32: bcs.u32(),\n U64: bcs.u64(),\n U128: bcs.u128(),\n U256: bcs.u256(),\n ULEB128: bcs.uleb128(),\n Bool: bcs.bool(),\n String: bcs.string(),\n Address,\n AppId,\n Argument,\n CallArg,\n CompressedSignature,\n GasData,\n Intent,\n IntentMessage,\n IntentScope,\n IntentVersion,\n MultiSig,\n MultiSigPkMap,\n MultiSigPublicKey,\n ObjectArg,\n ObjectDigest,\n ProgrammableMoveCall,\n ProgrammableTransaction,\n PublicKey,\n SenderSignedData,\n SenderSignedTransaction,\n SharedObjectRef,\n StructTag,\n SuiObjectRef,\n Command,\n TransactionData,\n TransactionDataV1,\n TransactionExpiration,\n TransactionKind,\n TypeTag,\n TransactionEffects\n};\nexport {\n BcsType,\n TypeTagSerializer,\n suiBcs as bcs\n};\n//# sourceMappingURL=index.js.map\n","import { normalizeSuiObjectId } from \"./sui-types.js\";\nconst SUI_DECIMALS = 9;\nconst MIST_PER_SUI = BigInt(1e9);\nconst MOVE_STDLIB_ADDRESS = \"0x1\";\nconst SUI_FRAMEWORK_ADDRESS = \"0x2\";\nconst SUI_SYSTEM_ADDRESS = \"0x3\";\nconst SUI_CLOCK_OBJECT_ID = normalizeSuiObjectId(\"0x6\");\nconst SUI_SYSTEM_MODULE_NAME = \"sui_system\";\nconst SUI_TYPE_ARG = `${SUI_FRAMEWORK_ADDRESS}::sui::SUI`;\nconst SUI_SYSTEM_STATE_OBJECT_ID = normalizeSuiObjectId(\"0x5\");\nexport {\n MIST_PER_SUI,\n MOVE_STDLIB_ADDRESS,\n SUI_CLOCK_OBJECT_ID,\n SUI_DECIMALS,\n SUI_FRAMEWORK_ADDRESS,\n SUI_SYSTEM_ADDRESS,\n SUI_SYSTEM_MODULE_NAME,\n SUI_SYSTEM_STATE_OBJECT_ID,\n SUI_TYPE_ARG\n};\n//# sourceMappingURL=constants.js.map\n","import { bcs } from \"../bcs/index.js\";\nimport { MOVE_STDLIB_ADDRESS, SUI_FRAMEWORK_ADDRESS } from \"../utils/index.js\";\nimport { normalizeSuiAddress } from \"../utils/sui-types.js\";\nconst OBJECT_MODULE_NAME = \"object\";\nconst ID_STRUCT_NAME = \"ID\";\nconst STD_ASCII_MODULE_NAME = \"ascii\";\nconst STD_ASCII_STRUCT_NAME = \"String\";\nconst STD_UTF8_MODULE_NAME = \"string\";\nconst STD_UTF8_STRUCT_NAME = \"String\";\nconst STD_OPTION_MODULE_NAME = \"option\";\nconst STD_OPTION_STRUCT_NAME = \"Option\";\nfunction isTxContext(param) {\n const struct = typeof param.body === \"object\" && \"datatype\" in param.body ? param.body.datatype : null;\n return !!struct && normalizeSuiAddress(struct.package) === normalizeSuiAddress(\"0x2\") && struct.module === \"tx_context\" && struct.type === \"TxContext\";\n}\nfunction getPureBcsSchema(typeSignature) {\n if (typeof typeSignature === \"string\") {\n switch (typeSignature) {\n case \"address\":\n return bcs.Address;\n case \"bool\":\n return bcs.Bool;\n case \"u8\":\n return bcs.U8;\n case \"u16\":\n return bcs.U16;\n case \"u32\":\n return bcs.U32;\n case \"u64\":\n return bcs.U64;\n case \"u128\":\n return bcs.U128;\n case \"u256\":\n return bcs.U256;\n default:\n throw new Error(`Unknown type signature ${typeSignature}`);\n }\n }\n if (\"vector\" in typeSignature) {\n if (typeSignature.vector === \"u8\") {\n return bcs.vector(bcs.U8).transform({\n input: (val) => typeof val === \"string\" ? new TextEncoder().encode(val) : val,\n output: (val) => val\n });\n }\n const type = getPureBcsSchema(typeSignature.vector);\n return type ? bcs.vector(type) : null;\n }\n if (\"datatype\" in typeSignature) {\n const pkg = normalizeSuiAddress(typeSignature.datatype.package);\n if (pkg === normalizeSuiAddress(MOVE_STDLIB_ADDRESS)) {\n if (typeSignature.datatype.module === STD_ASCII_MODULE_NAME && typeSignature.datatype.type === STD_ASCII_STRUCT_NAME) {\n return bcs.String;\n }\n if (typeSignature.datatype.module === STD_UTF8_MODULE_NAME && typeSignature.datatype.type === STD_UTF8_STRUCT_NAME) {\n return bcs.String;\n }\n if (typeSignature.datatype.module === STD_OPTION_MODULE_NAME && typeSignature.datatype.type === STD_OPTION_STRUCT_NAME) {\n const type = getPureBcsSchema(typeSignature.datatype.typeParameters[0]);\n return type ? bcs.vector(type) : null;\n }\n }\n if (pkg === normalizeSuiAddress(SUI_FRAMEWORK_ADDRESS) && typeSignature.datatype.module === OBJECT_MODULE_NAME && typeSignature.datatype.type === ID_STRUCT_NAME) {\n return bcs.Address;\n }\n }\n return null;\n}\nfunction normalizedTypeToMoveTypeSignature(type) {\n if (typeof type === \"object\" && \"Reference\" in type) {\n return {\n ref: \"&\",\n body: normalizedTypeToMoveTypeSignatureBody(type.Reference)\n };\n }\n if (typeof type === \"object\" && \"MutableReference\" in type) {\n return {\n ref: \"&mut\",\n body: normalizedTypeToMoveTypeSignatureBody(type.MutableReference)\n };\n }\n return {\n ref: null,\n body: normalizedTypeToMoveTypeSignatureBody(type)\n };\n}\nfunction normalizedTypeToMoveTypeSignatureBody(type) {\n if (typeof type === \"string\") {\n switch (type) {\n case \"Address\":\n return \"address\";\n case \"Bool\":\n return \"bool\";\n case \"U8\":\n return \"u8\";\n case \"U16\":\n return \"u16\";\n case \"U32\":\n return \"u32\";\n case \"U64\":\n return \"u64\";\n case \"U128\":\n return \"u128\";\n case \"U256\":\n return \"u256\";\n default:\n throw new Error(`Unexpected type ${type}`);\n }\n }\n if (\"Vector\" in type) {\n return { vector: normalizedTypeToMoveTypeSignatureBody(type.Vector) };\n }\n if (\"Struct\" in type) {\n return {\n datatype: {\n package: type.Struct.address,\n module: type.Struct.module,\n type: type.Struct.name,\n typeParameters: type.Struct.typeArguments.map(normalizedTypeToMoveTypeSignatureBody)\n }\n };\n }\n if (\"TypeParameter\" in type) {\n return { typeParameter: type.TypeParameter };\n }\n throw new Error(`Unexpected type ${JSON.stringify(type)}`);\n}\nfunction pureBcsSchemaFromOpenMoveTypeSignatureBody(typeSignature) {\n if (typeof typeSignature === \"string\") {\n switch (typeSignature) {\n case \"address\":\n return bcs.Address;\n case \"bool\":\n return bcs.Bool;\n case \"u8\":\n return bcs.U8;\n case \"u16\":\n return bcs.U16;\n case \"u32\":\n return bcs.U32;\n case \"u64\":\n return bcs.U64;\n case \"u128\":\n return bcs.U128;\n case \"u256\":\n return bcs.U256;\n default:\n throw new Error(`Unknown type signature ${typeSignature}`);\n }\n }\n if (\"vector\" in typeSignature) {\n return bcs.vector(pureBcsSchemaFromOpenMoveTypeSignatureBody(typeSignature.vector));\n }\n throw new Error(`Expected pure typeSignature, but got ${JSON.stringify(typeSignature)}`);\n}\nexport {\n getPureBcsSchema,\n isTxContext,\n normalizedTypeToMoveTypeSignature,\n pureBcsSchemaFromOpenMoveTypeSignatureBody\n};\n//# sourceMappingURL=serializer.js.map\n","import { parse } from \"valibot\";\nimport { bcs } from \"../bcs/index.js\";\nimport { normalizeSuiAddress, normalizeSuiObjectId, SUI_TYPE_ARG } from \"../utils/index.js\";\nimport { ObjectRef } from \"./data/internal.js\";\nimport { Inputs } from \"./Inputs.js\";\nimport { getPureBcsSchema, isTxContext, normalizedTypeToMoveTypeSignature } from \"./serializer.js\";\nconst MAX_OBJECTS_PER_FETCH = 50;\nconst GAS_SAFE_OVERHEAD = 1000n;\nconst MAX_GAS = 5e10;\nasync function resolveTransactionData(transactionData, options, next) {\n await normalizeInputs(transactionData, options);\n await resolveObjectReferences(transactionData, options);\n if (!options.onlyTransactionKind) {\n await setGasPrice(transactionData, options);\n await setGasBudget(transactionData, options);\n await setGasPayment(transactionData, options);\n }\n await validate(transactionData);\n return await next();\n}\nasync function setGasPrice(transactionData, options) {\n if (!transactionData.gasConfig.price) {\n transactionData.gasConfig.price = String(await getClient(options).getReferenceGasPrice());\n }\n}\nasync function setGasBudget(transactionData, options) {\n if (transactionData.gasConfig.budget) {\n return;\n }\n const dryRunResult = await getClient(options).dryRunTransactionBlock({\n transactionBlock: transactionData.build({\n overrides: {\n gasData: {\n budget: String(MAX_GAS),\n payment: []\n }\n }\n })\n });\n if (dryRunResult.effects.status.status !== \"success\") {\n throw new Error(\n `Dry run failed, could not automatically determine a budget: ${dryRunResult.effects.status.error}`,\n { cause: dryRunResult }\n );\n }\n const safeOverhead = GAS_SAFE_OVERHEAD * BigInt(transactionData.gasConfig.price || 1n);\n const baseComputationCostWithOverhead = BigInt(dryRunResult.effects.gasUsed.computationCost) + safeOverhead;\n const gasBudget = baseComputationCostWithOverhead + BigInt(dryRunResult.effects.gasUsed.storageCost) - BigInt(dryRunResult.effects.gasUsed.storageRebate);\n transactionData.gasConfig.budget = String(\n gasBudget > baseComputationCostWithOverhead ? gasBudget : baseComputationCostWithOverhead\n );\n}\nasync function setGasPayment(transactionData, options) {\n if (!transactionData.gasConfig.payment) {\n const coins = await getClient(options).getCoins({\n owner: transactionData.gasConfig.owner || transactionData.sender,\n coinType: SUI_TYPE_ARG\n });\n const paymentCoins = coins.data.filter((coin) => {\n const matchingInput = transactionData.inputs.find((input) => {\n if (input.Object?.ImmOrOwnedObject) {\n return coin.coinObjectId === input.Object.ImmOrOwnedObject.objectId;\n }\n return false;\n });\n return !matchingInput;\n }).map((coin) => ({\n objectId: coin.coinObjectId,\n digest: coin.digest,\n version: coin.version\n }));\n if (!paymentCoins.length) {\n throw new Error(\"No valid gas coins found for the transaction.\");\n }\n transactionData.gasConfig.payment = paymentCoins.map((payment) => parse(ObjectRef, payment));\n }\n}\nasync function resolveObjectReferences(transactionData, options) {\n const objectsToResolve = transactionData.inputs.filter((input) => {\n return input.UnresolvedObject && !(input.UnresolvedObject.version || input.UnresolvedObject?.initialSharedVersion);\n });\n const dedupedIds = [\n ...new Set(\n objectsToResolve.map((input) => normalizeSuiObjectId(input.UnresolvedObject.objectId))\n )\n ];\n const objectChunks = dedupedIds.length ? chunk(dedupedIds, MAX_OBJECTS_PER_FETCH) : [];\n const resolved = (await Promise.all(\n objectChunks.map(\n (chunk2) => getClient(options).multiGetObjects({\n ids: chunk2,\n options: { showOwner: true }\n })\n )\n )).flat();\n const responsesById = new Map(\n dedupedIds.map((id, index) => {\n return [id, resolved[index]];\n })\n );\n const invalidObjects = Array.from(responsesById).filter(([_, obj]) => obj.error).map(([_, obj]) => JSON.stringify(obj.error));\n if (invalidObjects.length) {\n throw new Error(`The following input objects are invalid: ${invalidObjects.join(\", \")}`);\n }\n const objects = resolved.map((object) => {\n if (object.error || !object.data) {\n throw new Error(`Failed to fetch object: ${object.error}`);\n }\n const owner = object.data.owner;\n const initialSharedVersion = owner && typeof owner === \"object\" && \"Shared\" in owner ? owner.Shared.initial_shared_version : null;\n return {\n objectId: object.data.objectId,\n digest: object.data.digest,\n version: object.data.version,\n initialSharedVersion\n };\n });\n const objectsById = new Map(\n dedupedIds.map((id, index) => {\n return [id, objects[index]];\n })\n );\n for (const [index, input] of transactionData.inputs.entries()) {\n if (!input.UnresolvedObject) {\n continue;\n }\n let updated;\n const id = normalizeSuiAddress(input.UnresolvedObject.objectId);\n const object = objectsById.get(id);\n if (input.UnresolvedObject.initialSharedVersion ?? object?.initialSharedVersion) {\n updated = Inputs.SharedObjectRef({\n objectId: id,\n initialSharedVersion: input.UnresolvedObject.initialSharedVersion || object?.initialSharedVersion,\n mutable: isUsedAsMutable(transactionData, index)\n });\n } else if (isUsedAsReceiving(transactionData, index)) {\n updated = Inputs.ReceivingRef(\n {\n objectId: id,\n digest: input.UnresolvedObject.digest ?? object?.digest,\n version: input.UnresolvedObject.version ?? object?.version\n }\n );\n }\n transactionData.inputs[transactionData.inputs.indexOf(input)] = updated ?? Inputs.ObjectRef({\n objectId: id,\n digest: input.UnresolvedObject.digest ?? object?.digest,\n version: input.UnresolvedObject.version ?? object?.version\n });\n }\n}\nasync function normalizeInputs(transactionData, options) {\n const { inputs, commands } = transactionData;\n const moveCallsToResolve = [];\n const moveFunctionsToResolve = /* @__PURE__ */ new Set();\n commands.forEach((command) => {\n if (command.MoveCall) {\n if (command.MoveCall._argumentTypes) {\n return;\n }\n const inputs2 = command.MoveCall.arguments.map((arg) => {\n if (arg.$kind === \"Input\") {\n return transactionData.inputs[arg.Input];\n }\n return null;\n });\n const needsResolution = inputs2.some(\n (input) => input?.UnresolvedPure || input?.UnresolvedObject\n );\n if (needsResolution) {\n const functionName = `${command.MoveCall.package}::${command.MoveCall.module}::${command.MoveCall.function}`;\n moveFunctionsToResolve.add(functionName);\n moveCallsToResolve.push(command.MoveCall);\n }\n }\n switch (command.$kind) {\n case \"SplitCoins\":\n command.SplitCoins.amounts.forEach((amount) => {\n normalizeRawArgument(amount, bcs.U64, transactionData);\n });\n break;\n case \"TransferObjects\":\n normalizeRawArgument(command.TransferObjects.address, bcs.Address, transactionData);\n break;\n }\n });\n const moveFunctionParameters = /* @__PURE__ */ new Map();\n if (moveFunctionsToResolve.size > 0) {\n const client = getClient(options);\n await Promise.all(\n [...moveFunctionsToResolve].map(async (functionName) => {\n const [packageId, moduleId, functionId] = functionName.split(\"::\");\n const def = await client.getNormalizedMoveFunction({\n package: packageId,\n module: moduleId,\n function: functionId\n });\n moveFunctionParameters.set(\n functionName,\n def.parameters.map((param) => normalizedTypeToMoveTypeSignature(param))\n );\n })\n );\n }\n if (moveCallsToResolve.length) {\n await Promise.all(\n moveCallsToResolve.map(async (moveCall) => {\n const parameters = moveFunctionParameters.get(\n `${moveCall.package}::${moveCall.module}::${moveCall.function}`\n );\n if (!parameters) {\n return;\n }\n const hasTxContext = parameters.length > 0 && isTxContext(parameters.at(-1));\n const params = hasTxContext ? parameters.slice(0, parameters.length - 1) : parameters;\n moveCall._argumentTypes = params;\n })\n );\n }\n commands.forEach((command) => {\n if (!command.MoveCall) {\n return;\n }\n const moveCall = command.MoveCall;\n const fnName = `${moveCall.package}::${moveCall.module}::${moveCall.function}`;\n const params = moveCall._argumentTypes;\n if (!params) {\n return;\n }\n if (params.length !== command.MoveCall.arguments.length) {\n throw new Error(`Incorrect number of arguments for ${fnName}`);\n }\n params.forEach((param, i) => {\n const arg = moveCall.arguments[i];\n if (arg.$kind !== \"Input\") return;\n const input = inputs[arg.Input];\n if (!input.UnresolvedPure && !input.UnresolvedObject) {\n return;\n }\n const inputValue = input.UnresolvedPure?.value ?? input.UnresolvedObject?.objectId;\n const schema = getPureBcsSchema(param.body);\n if (schema) {\n arg.type = \"pure\";\n inputs[inputs.indexOf(input)] = Inputs.Pure(schema.serialize(inputValue));\n return;\n }\n if (typeof inputValue !== \"string\") {\n throw new Error(\n `Expect the argument to be an object id string, got ${JSON.stringify(\n inputValue,\n null,\n 2\n )}`\n );\n }\n arg.type = \"object\";\n const unresolvedObject = input.UnresolvedPure ? {\n $kind: \"UnresolvedObject\",\n UnresolvedObject: {\n objectId: inputValue\n }\n } : input;\n inputs[arg.Input] = unresolvedObject;\n });\n });\n}\nfunction validate(transactionData) {\n transactionData.inputs.forEach((input, index) => {\n if (input.$kind !== \"Object\" && input.$kind !== \"Pure\") {\n throw new Error(\n `Input at index ${index} has not been resolved. Expected a Pure or Object input, but found ${JSON.stringify(\n input\n )}`\n );\n }\n });\n}\nfunction normalizeRawArgument(arg, schema, transactionData) {\n if (arg.$kind !== \"Input\") {\n return;\n }\n const input = transactionData.inputs[arg.Input];\n if (input.$kind !== \"UnresolvedPure\") {\n return;\n }\n transactionData.inputs[arg.Input] = Inputs.Pure(schema.serialize(input.UnresolvedPure.value));\n}\nfunction isUsedAsMutable(transactionData, index) {\n let usedAsMutable = false;\n transactionData.getInputUses(index, (arg, tx) => {\n if (tx.MoveCall && tx.MoveCall._argumentTypes) {\n const argIndex = tx.MoveCall.arguments.indexOf(arg);\n usedAsMutable = tx.MoveCall._argumentTypes[argIndex].ref !== \"&\" || usedAsMutable;\n }\n if (tx.$kind === \"MakeMoveVec\" || tx.$kind === \"MergeCoins\" || tx.$kind === \"SplitCoins\") {\n usedAsMutable = true;\n }\n });\n return usedAsMutable;\n}\nfunction isUsedAsReceiving(transactionData, index) {\n let usedAsReceiving = false;\n transactionData.getInputUses(index, (arg, tx) => {\n if (tx.MoveCall && tx.MoveCall._argumentTypes) {\n const argIndex = tx.MoveCall.arguments.indexOf(arg);\n usedAsReceiving = isReceivingType(tx.MoveCall._argumentTypes[argIndex]) || usedAsReceiving;\n }\n });\n return usedAsReceiving;\n}\nfunction isReceivingType(type) {\n if (typeof type.body !== \"object\" || !(\"datatype\" in type.body)) {\n return false;\n }\n return type.body.datatype.package === \"0x2\" && type.body.datatype.module === \"transfer\" && type.body.datatype.type === \"Receiving\";\n}\nfunction getClient(options) {\n if (!options.client) {\n throw new Error(\n `No provider passed to Transaction#build, but transaction data was not sufficient to build offline.`\n );\n }\n return options.client;\n}\nfunction chunk(arr, size) {\n return Array.from(\n { length: Math.ceil(arr.length / size) },\n (_, i) => arr.slice(i * size, i * size + size)\n );\n}\nexport {\n getClient,\n resolveTransactionData\n};\n//# sourceMappingURL=json-rpc-resolver.js.map\n","import { isSerializedBcs } from \"@mysten/bcs\";\nimport { bcs } from \"../bcs/index.js\";\nfunction createPure(makePure) {\n function pure(typeOrSerializedValue, value) {\n if (typeof typeOrSerializedValue === \"string\") {\n return makePure(schemaFromName(typeOrSerializedValue).serialize(value));\n }\n if (typeOrSerializedValue instanceof Uint8Array || isSerializedBcs(typeOrSerializedValue)) {\n return makePure(typeOrSerializedValue);\n }\n throw new Error(\"tx.pure must be called either a bcs type name, or a serialized bcs value\");\n }\n pure.u8 = (value) => makePure(bcs.U8.serialize(value));\n pure.u16 = (value) => makePure(bcs.U16.serialize(value));\n pure.u32 = (value) => makePure(bcs.U32.serialize(value));\n pure.u64 = (value) => makePure(bcs.U64.serialize(value));\n pure.u128 = (value) => makePure(bcs.U128.serialize(value));\n pure.u256 = (value) => makePure(bcs.U256.serialize(value));\n pure.bool = (value) => makePure(bcs.Bool.serialize(value));\n pure.string = (value) => makePure(bcs.String.serialize(value));\n pure.address = (value) => makePure(bcs.Address.serialize(value));\n pure.id = pure.address;\n pure.vector = (type, value) => {\n return makePure(bcs.vector(schemaFromName(type)).serialize(value));\n };\n pure.option = (type, value) => {\n return makePure(bcs.option(schemaFromName(type)).serialize(value));\n };\n return pure;\n}\nfunction schemaFromName(name) {\n switch (name) {\n case \"u8\":\n return bcs.u8();\n case \"u16\":\n return bcs.u16();\n case \"u32\":\n return bcs.u32();\n case \"u64\":\n return bcs.u64();\n case \"u128\":\n return bcs.u128();\n case \"u256\":\n return bcs.u256();\n case \"bool\":\n return bcs.bool();\n case \"string\":\n return bcs.string();\n case \"id\":\n case \"address\":\n return bcs.Address;\n }\n const generic = name.match(/^(vector|option)<(.+)>$/);\n if (generic) {\n const [kind, inner] = generic.slice(1);\n if (kind === \"vector\") {\n return bcs.vector(schemaFromName(inner));\n } else {\n return bcs.option(schemaFromName(inner));\n }\n }\n throw new Error(`Invalid Pure type name: ${name}`);\n}\nexport {\n createPure\n};\n//# sourceMappingURL=pure.js.map\n","function number(n) {\n if (!Number.isSafeInteger(n) || n < 0)\n throw new Error(`positive integer expected, not ${n}`);\n}\nfunction bool(b) {\n if (typeof b !== 'boolean')\n throw new Error(`boolean expected, not ${b}`);\n}\n// copied from utils\nexport function isBytes(a) {\n return (a instanceof Uint8Array ||\n (a != null && typeof a === 'object' && a.constructor.name === 'Uint8Array'));\n}\nfunction bytes(b, ...lengths) {\n if (!isBytes(b))\n throw new Error('Uint8Array expected');\n if (lengths.length > 0 && !lengths.includes(b.length))\n throw new Error(`Uint8Array expected of length ${lengths}, not of length=${b.length}`);\n}\nfunction hash(h) {\n if (typeof h !== 'function' || typeof h.create !== 'function')\n throw new Error('Hash should be wrapped by utils.wrapConstructor');\n number(h.outputLen);\n number(h.blockLen);\n}\nfunction exists(instance, checkFinished = true) {\n if (instance.destroyed)\n throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished)\n throw new Error('Hash#digest() has already been called');\n}\nfunction output(out, instance) {\n bytes(out);\n const min = instance.outputLen;\n if (out.length < min) {\n throw new Error(`digestInto() expects output buffer of length at least ${min}`);\n }\n}\nexport { number, bool, bytes, hash, exists, output };\nconst assert = { number, bool, bytes, hash, exists, output };\nexport default assert;\n//# sourceMappingURL=_assert.js.map","/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// node.js versions earlier than v19 don't declare it in global scope.\n// For node.js, package.json#exports field mapping rewrites import\n// from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated (2025-04-30), we can just drop the import.\nimport { crypto } from '@noble/hashes/crypto';\nimport { bytes as abytes } from './_assert.js';\n// export { isBytes } from './_assert.js';\n// We can't reuse isBytes from _assert, because somehow this causes huge perf issues\nexport function isBytes(a) {\n return (a instanceof Uint8Array ||\n (a != null && typeof a === 'object' && a.constructor.name === 'Uint8Array'));\n}\n// Cast array to different type\nexport const u8 = (arr) => new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\nexport const u32 = (arr) => new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n// Cast array to view\nexport const createView = (arr) => new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n// The rotate right (circular right shift) operation for uint32\nexport const rotr = (word, shift) => (word << (32 - shift)) | (word >>> shift);\n// The rotate left (circular left shift) operation for uint32\nexport const rotl = (word, shift) => (word << shift) | ((word >>> (32 - shift)) >>> 0);\nexport const isLE = new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44;\n// The byte swap operation for uint32\nexport const byteSwap = (word) => ((word << 24) & 0xff000000) |\n ((word << 8) & 0xff0000) |\n ((word >>> 8) & 0xff00) |\n ((word >>> 24) & 0xff);\n// Conditionally byte swap if on a big-endian platform\nexport const byteSwapIfBE = isLE ? (n) => n : (n) => byteSwap(n);\n// In place byte swap for Uint32Array\nexport function byteSwap32(arr) {\n for (let i = 0; i < arr.length; i++) {\n arr[i] = byteSwap(arr[i]);\n }\n}\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, '0'));\n/**\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes) {\n abytes(bytes);\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, _A: 65, _F: 70, _a: 97, _f: 102 };\nfunction asciiToBase16(char) {\n if (char >= asciis._0 && char <= asciis._9)\n return char - asciis._0;\n if (char >= asciis._A && char <= asciis._F)\n return char - (asciis._A - 10);\n if (char >= asciis._a && char <= asciis._f)\n return char - (asciis._a - 10);\n return;\n}\n/**\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex) {\n if (typeof hex !== 'string')\n throw new Error('hex string expected, got ' + typeof hex);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2)\n throw new Error('padded hex string expected, got unpadded hex of length ' + hl);\n const array = new Uint8Array(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n const n1 = asciiToBase16(hex.charCodeAt(hi));\n const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n if (n1 === undefined || n2 === undefined) {\n const char = hex[hi] + hex[hi + 1];\n throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n }\n array[ai] = n1 * 16 + n2;\n }\n return array;\n}\n// There is no setImmediate in browser and setTimeout is slow.\n// call of async fn will return Promise, which will be fullfiled only on\n// next scheduler queue processing step and this is exactly what we need.\nexport const nextTick = async () => { };\n// Returns control to thread each 'tick' ms to avoid blocking\nexport async function asyncLoop(iters, tick, cb) {\n let ts = Date.now();\n for (let i = 0; i < iters; i++) {\n cb(i);\n // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n const diff = Date.now() - ts;\n if (diff >= 0 && diff < tick)\n continue;\n await nextTick();\n ts += diff;\n }\n}\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nexport function utf8ToBytes(str) {\n if (typeof str !== 'string')\n throw new Error(`utf8ToBytes expected string, got ${typeof str}`);\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */\nexport function toBytes(data) {\n if (typeof data === 'string')\n data = utf8ToBytes(data);\n abytes(data);\n return data;\n}\n/**\n * Copies several Uint8Arrays into one.\n */\nexport function concatBytes(...arrays) {\n let sum = 0;\n for (let i = 0; i < arrays.length; i++) {\n const a = arrays[i];\n abytes(a);\n sum += a.length;\n }\n const res = new Uint8Array(sum);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const a = arrays[i];\n res.set(a, pad);\n pad += a.length;\n }\n return res;\n}\n// For runtime check if class implements interface\nexport class Hash {\n // Safe version that clones internal state\n clone() {\n return this._cloneInto();\n }\n}\nconst toStr = {}.toString;\nexport function checkOpts(defaults, opts) {\n if (opts !== undefined && toStr.call(opts) !== '[object Object]')\n throw new Error('Options should be object or undefined');\n const merged = Object.assign(defaults, opts);\n return merged;\n}\nexport function wrapConstructor(hashCons) {\n const hashC = (msg) => hashCons().update(toBytes(msg)).digest();\n const tmp = hashCons();\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = () => hashCons();\n return hashC;\n}\nexport function wrapConstructorWithOpts(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\nexport function wrapXOFConstructorWithOpts(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\n/**\n * Secure PRNG. Uses `crypto.getRandomValues`, which defers to OS.\n */\nexport function randomBytes(bytesLength = 32) {\n if (crypto && typeof crypto.getRandomValues === 'function') {\n return crypto.getRandomValues(new Uint8Array(bytesLength));\n }\n throw new Error('crypto.getRandomValues must be defined');\n}\n//# sourceMappingURL=utils.js.map","import { number, exists, output } from './_assert.js';\nimport { Hash, toBytes, u32, isLE, byteSwap32, byteSwapIfBE } from './utils.js';\n// Blake is based on ChaCha permutation.\n// For BLAKE2b, the two extra permutations for rounds 10 and 11 are SIGMA[10..11] = SIGMA[0..1].\n// prettier-ignore\nexport const SIGMA = /* @__PURE__ */ new Uint8Array([\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3,\n 11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4,\n 7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8,\n 9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13,\n 2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9,\n 12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11,\n 13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10,\n 6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5,\n 10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13, 0,\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3,\n]);\nexport class BLAKE extends Hash {\n constructor(blockLen, outputLen, opts = {}, keyLen, saltLen, persLen) {\n super();\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.length = 0;\n this.pos = 0;\n this.finished = false;\n this.destroyed = false;\n number(blockLen);\n number(outputLen);\n number(keyLen);\n if (outputLen < 0 || outputLen > keyLen)\n throw new Error('outputLen bigger than keyLen');\n if (opts.key !== undefined && (opts.key.length < 1 || opts.key.length > keyLen))\n throw new Error(`key must be up 1..${keyLen} byte long or undefined`);\n if (opts.salt !== undefined && opts.salt.length !== saltLen)\n throw new Error(`salt must be ${saltLen} byte long or undefined`);\n if (opts.personalization !== undefined && opts.personalization.length !== persLen)\n throw new Error(`personalization must be ${persLen} byte long or undefined`);\n this.buffer32 = u32((this.buffer = new Uint8Array(blockLen)));\n }\n update(data) {\n exists(this);\n // Main difference with other hashes: there is flag for last block,\n // so we cannot process current block before we know that there\n // is the next one. This significantly complicates logic and reduces ability\n // to do zero-copy processing\n const { blockLen, buffer, buffer32 } = this;\n data = toBytes(data);\n const len = data.length;\n const offset = data.byteOffset;\n const buf = data.buffer;\n for (let pos = 0; pos < len;) {\n // If buffer is full and we still have input (don't process last block, same as blake2s)\n if (this.pos === blockLen) {\n if (!isLE)\n byteSwap32(buffer32);\n this.compress(buffer32, 0, false);\n if (!isLE)\n byteSwap32(buffer32);\n this.pos = 0;\n }\n const take = Math.min(blockLen - this.pos, len - pos);\n const dataOffset = offset + pos;\n // full block && aligned to 4 bytes && not last in input\n if (take === blockLen && !(dataOffset % 4) && pos + take < len) {\n const data32 = new Uint32Array(buf, dataOffset, Math.floor((len - pos) / 4));\n if (!isLE)\n byteSwap32(data32);\n for (let pos32 = 0; pos + blockLen < len; pos32 += buffer32.length, pos += blockLen) {\n this.length += blockLen;\n this.compress(data32, pos32, false);\n }\n if (!isLE)\n byteSwap32(data32);\n continue;\n }\n buffer.set(data.subarray(pos, pos + take), this.pos);\n this.pos += take;\n this.length += take;\n pos += take;\n }\n return this;\n }\n digestInto(out) {\n exists(this);\n output(out, this);\n const { pos, buffer32 } = this;\n this.finished = true;\n // Padding\n this.buffer.subarray(pos).fill(0);\n if (!isLE)\n byteSwap32(buffer32);\n this.compress(buffer32, 0, true);\n if (!isLE)\n byteSwap32(buffer32);\n const out32 = u32(out);\n this.get().forEach((v, i) => (out32[i] = byteSwapIfBE(v)));\n }\n digest() {\n const { buffer, outputLen } = this;\n this.digestInto(buffer);\n const res = buffer.slice(0, outputLen);\n this.destroy();\n return res;\n }\n _cloneInto(to) {\n const { buffer, length, finished, destroyed, outputLen, pos } = this;\n to || (to = new this.constructor({ dkLen: outputLen }));\n to.set(...this.get());\n to.length = length;\n to.finished = finished;\n to.destroyed = destroyed;\n to.outputLen = outputLen;\n to.buffer.set(buffer);\n to.pos = pos;\n return to;\n }\n}\n//# sourceMappingURL=_blake.js.map","const U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nconst _32n = /* @__PURE__ */ BigInt(32);\n// We are not using BigUint64Array, because they are extremely slow as per 2022\nfunction fromBig(n, le = false) {\n if (le)\n return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\nfunction split(lst, le = false) {\n let Ah = new Uint32Array(lst.length);\n let Al = new Uint32Array(lst.length);\n for (let i = 0; i < lst.length; i++) {\n const { h, l } = fromBig(lst[i], le);\n [Ah[i], Al[i]] = [h, l];\n }\n return [Ah, Al];\n}\nconst toBig = (h, l) => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\n// for Shift in [0, 32)\nconst shrSH = (h, _l, s) => h >>> s;\nconst shrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h, l, s) => (h >>> s) | (l << (32 - s));\nconst rotrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotrBH = (h, l, s) => (h << (64 - s)) | (l >>> (s - 32));\nconst rotrBL = (h, l, s) => (h >>> (s - 32)) | (l << (64 - s));\n// Right rotate for shift===32 (just swaps l&h)\nconst rotr32H = (_h, l) => l;\nconst rotr32L = (h, _l) => h;\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h, l, s) => (h << s) | (l >>> (32 - s));\nconst rotlSL = (h, l, s) => (l << s) | (h >>> (32 - s));\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotlBH = (h, l, s) => (l << (s - 32)) | (h >>> (64 - s));\nconst rotlBL = (h, l, s) => (h << (s - 32)) | (l >>> (64 - s));\n// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\nfunction add(Ah, Al, Bh, Bl) {\n const l = (Al >>> 0) + (Bl >>> 0);\n return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\n// Addition with more than 2 elements\nconst add3L = (Al, Bl, Cl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nconst add3H = (low, Ah, Bh, Ch) => (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nconst add4L = (Al, Bl, Cl, Dl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nconst add4H = (low, Ah, Bh, Ch, Dh) => (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nconst add5L = (Al, Bl, Cl, Dl, El) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nconst add5H = (low, Ah, Bh, Ch, Dh, Eh) => (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\n// prettier-ignore\nexport { fromBig, split, toBig, shrSH, shrSL, rotrSH, rotrSL, rotrBH, rotrBL, rotr32H, rotr32L, rotlSH, rotlSL, rotlBH, rotlBL, add, add3L, add3H, add4L, add4H, add5H, add5L, };\n// prettier-ignore\nconst u64 = {\n fromBig, split, toBig,\n shrSH, shrSL,\n rotrSH, rotrSL, rotrBH, rotrBL,\n rotr32H, rotr32L,\n rotlSH, rotlSL, rotlBH, rotlBL,\n add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\nexport default u64;\n//# sourceMappingURL=_u64.js.map","import { BLAKE, SIGMA } from './_blake.js';\nimport u64 from './_u64.js';\nimport { toBytes, u32, wrapConstructorWithOpts, byteSwapIfBE } from './utils.js';\n// Same as SHA-512 but LE\n// prettier-ignore\nconst B2B_IV = /* @__PURE__ */ new Uint32Array([\n 0xf3bcc908, 0x6a09e667, 0x84caa73b, 0xbb67ae85, 0xfe94f82b, 0x3c6ef372, 0x5f1d36f1, 0xa54ff53a,\n 0xade682d1, 0x510e527f, 0x2b3e6c1f, 0x9b05688c, 0xfb41bd6b, 0x1f83d9ab, 0x137e2179, 0x5be0cd19\n]);\n// Temporary buffer\nconst BBUF = /* @__PURE__ */ new Uint32Array(32);\n// Mixing function G splitted in two halfs\nfunction G1b(a, b, c, d, msg, x) {\n // NOTE: V is LE here\n const Xl = msg[x], Xh = msg[x + 1]; // prettier-ignore\n let Al = BBUF[2 * a], Ah = BBUF[2 * a + 1]; // prettier-ignore\n let Bl = BBUF[2 * b], Bh = BBUF[2 * b + 1]; // prettier-ignore\n let Cl = BBUF[2 * c], Ch = BBUF[2 * c + 1]; // prettier-ignore\n let Dl = BBUF[2 * d], Dh = BBUF[2 * d + 1]; // prettier-ignore\n // v[a] = (v[a] + v[b] + x) | 0;\n let ll = u64.add3L(Al, Bl, Xl);\n Ah = u64.add3H(ll, Ah, Bh, Xh);\n Al = ll | 0;\n // v[d] = rotr(v[d] ^ v[a], 32)\n ({ Dh, Dl } = { Dh: Dh ^ Ah, Dl: Dl ^ Al });\n ({ Dh, Dl } = { Dh: u64.rotr32H(Dh, Dl), Dl: u64.rotr32L(Dh, Dl) });\n // v[c] = (v[c] + v[d]) | 0;\n ({ h: Ch, l: Cl } = u64.add(Ch, Cl, Dh, Dl));\n // v[b] = rotr(v[b] ^ v[c], 24)\n ({ Bh, Bl } = { Bh: Bh ^ Ch, Bl: Bl ^ Cl });\n ({ Bh, Bl } = { Bh: u64.rotrSH(Bh, Bl, 24), Bl: u64.rotrSL(Bh, Bl, 24) });\n (BBUF[2 * a] = Al), (BBUF[2 * a + 1] = Ah);\n (BBUF[2 * b] = Bl), (BBUF[2 * b + 1] = Bh);\n (BBUF[2 * c] = Cl), (BBUF[2 * c + 1] = Ch);\n (BBUF[2 * d] = Dl), (BBUF[2 * d + 1] = Dh);\n}\nfunction G2b(a, b, c, d, msg, x) {\n // NOTE: V is LE here\n const Xl = msg[x], Xh = msg[x + 1]; // prettier-ignore\n let Al = BBUF[2 * a], Ah = BBUF[2 * a + 1]; // prettier-ignore\n let Bl = BBUF[2 * b], Bh = BBUF[2 * b + 1]; // prettier-ignore\n let Cl = BBUF[2 * c], Ch = BBUF[2 * c + 1]; // prettier-ignore\n let Dl = BBUF[2 * d], Dh = BBUF[2 * d + 1]; // prettier-ignore\n // v[a] = (v[a] + v[b] + x) | 0;\n let ll = u64.add3L(Al, Bl, Xl);\n Ah = u64.add3H(ll, Ah, Bh, Xh);\n Al = ll | 0;\n // v[d] = rotr(v[d] ^ v[a], 16)\n ({ Dh, Dl } = { Dh: Dh ^ Ah, Dl: Dl ^ Al });\n ({ Dh, Dl } = { Dh: u64.rotrSH(Dh, Dl, 16), Dl: u64.rotrSL(Dh, Dl, 16) });\n // v[c] = (v[c] + v[d]) | 0;\n ({ h: Ch, l: Cl } = u64.add(Ch, Cl, Dh, Dl));\n // v[b] = rotr(v[b] ^ v[c], 63)\n ({ Bh, Bl } = { Bh: Bh ^ Ch, Bl: Bl ^ Cl });\n ({ Bh, Bl } = { Bh: u64.rotrBH(Bh, Bl, 63), Bl: u64.rotrBL(Bh, Bl, 63) });\n (BBUF[2 * a] = Al), (BBUF[2 * a + 1] = Ah);\n (BBUF[2 * b] = Bl), (BBUF[2 * b + 1] = Bh);\n (BBUF[2 * c] = Cl), (BBUF[2 * c + 1] = Ch);\n (BBUF[2 * d] = Dl), (BBUF[2 * d + 1] = Dh);\n}\nclass BLAKE2b extends BLAKE {\n constructor(opts = {}) {\n super(128, opts.dkLen === undefined ? 64 : opts.dkLen, opts, 64, 16, 16);\n // Same as SHA-512, but LE\n this.v0l = B2B_IV[0] | 0;\n this.v0h = B2B_IV[1] | 0;\n this.v1l = B2B_IV[2] | 0;\n this.v1h = B2B_IV[3] | 0;\n this.v2l = B2B_IV[4] | 0;\n this.v2h = B2B_IV[5] | 0;\n this.v3l = B2B_IV[6] | 0;\n this.v3h = B2B_IV[7] | 0;\n this.v4l = B2B_IV[8] | 0;\n this.v4h = B2B_IV[9] | 0;\n this.v5l = B2B_IV[10] | 0;\n this.v5h = B2B_IV[11] | 0;\n this.v6l = B2B_IV[12] | 0;\n this.v6h = B2B_IV[13] | 0;\n this.v7l = B2B_IV[14] | 0;\n this.v7h = B2B_IV[15] | 0;\n const keyLength = opts.key ? opts.key.length : 0;\n this.v0l ^= this.outputLen | (keyLength << 8) | (0x01 << 16) | (0x01 << 24);\n if (opts.salt) {\n const salt = u32(toBytes(opts.salt));\n this.v4l ^= byteSwapIfBE(salt[0]);\n this.v4h ^= byteSwapIfBE(salt[1]);\n this.v5l ^= byteSwapIfBE(salt[2]);\n this.v5h ^= byteSwapIfBE(salt[3]);\n }\n if (opts.personalization) {\n const pers = u32(toBytes(opts.personalization));\n this.v6l ^= byteSwapIfBE(pers[0]);\n this.v6h ^= byteSwapIfBE(pers[1]);\n this.v7l ^= byteSwapIfBE(pers[2]);\n this.v7h ^= byteSwapIfBE(pers[3]);\n }\n if (opts.key) {\n // Pad to blockLen and update\n const tmp = new Uint8Array(this.blockLen);\n tmp.set(toBytes(opts.key));\n this.update(tmp);\n }\n }\n // prettier-ignore\n get() {\n let { v0l, v0h, v1l, v1h, v2l, v2h, v3l, v3h, v4l, v4h, v5l, v5h, v6l, v6h, v7l, v7h } = this;\n return [v0l, v0h, v1l, v1h, v2l, v2h, v3l, v3h, v4l, v4h, v5l, v5h, v6l, v6h, v7l, v7h];\n }\n // prettier-ignore\n set(v0l, v0h, v1l, v1h, v2l, v2h, v3l, v3h, v4l, v4h, v5l, v5h, v6l, v6h, v7l, v7h) {\n this.v0l = v0l | 0;\n this.v0h = v0h | 0;\n this.v1l = v1l | 0;\n this.v1h = v1h | 0;\n this.v2l = v2l | 0;\n this.v2h = v2h | 0;\n this.v3l = v3l | 0;\n this.v3h = v3h | 0;\n this.v4l = v4l | 0;\n this.v4h = v4h | 0;\n this.v5l = v5l | 0;\n this.v5h = v5h | 0;\n this.v6l = v6l | 0;\n this.v6h = v6h | 0;\n this.v7l = v7l | 0;\n this.v7h = v7h | 0;\n }\n compress(msg, offset, isLast) {\n this.get().forEach((v, i) => (BBUF[i] = v)); // First half from state.\n BBUF.set(B2B_IV, 16); // Second half from IV.\n let { h, l } = u64.fromBig(BigInt(this.length));\n BBUF[24] = B2B_IV[8] ^ l; // Low word of the offset.\n BBUF[25] = B2B_IV[9] ^ h; // High word.\n // Invert all bits for last block\n if (isLast) {\n BBUF[28] = ~BBUF[28];\n BBUF[29] = ~BBUF[29];\n }\n let j = 0;\n const s = SIGMA;\n for (let i = 0; i < 12; i++) {\n G1b(0, 4, 8, 12, msg, offset + 2 * s[j++]);\n G2b(0, 4, 8, 12, msg, offset + 2 * s[j++]);\n G1b(1, 5, 9, 13, msg, offset + 2 * s[j++]);\n G2b(1, 5, 9, 13, msg, offset + 2 * s[j++]);\n G1b(2, 6, 10, 14, msg, offset + 2 * s[j++]);\n G2b(2, 6, 10, 14, msg, offset + 2 * s[j++]);\n G1b(3, 7, 11, 15, msg, offset + 2 * s[j++]);\n G2b(3, 7, 11, 15, msg, offset + 2 * s[j++]);\n G1b(0, 5, 10, 15, msg, offset + 2 * s[j++]);\n G2b(0, 5, 10, 15, msg, offset + 2 * s[j++]);\n G1b(1, 6, 11, 12, msg, offset + 2 * s[j++]);\n G2b(1, 6, 11, 12, msg, offset + 2 * s[j++]);\n G1b(2, 7, 8, 13, msg, offset + 2 * s[j++]);\n G2b(2, 7, 8, 13, msg, offset + 2 * s[j++]);\n G1b(3, 4, 9, 14, msg, offset + 2 * s[j++]);\n G2b(3, 4, 9, 14, msg, offset + 2 * s[j++]);\n }\n this.v0l ^= BBUF[0] ^ BBUF[16];\n this.v0h ^= BBUF[1] ^ BBUF[17];\n this.v1l ^= BBUF[2] ^ BBUF[18];\n this.v1h ^= BBUF[3] ^ BBUF[19];\n this.v2l ^= BBUF[4] ^ BBUF[20];\n this.v2h ^= BBUF[5] ^ BBUF[21];\n this.v3l ^= BBUF[6] ^ BBUF[22];\n this.v3h ^= BBUF[7] ^ BBUF[23];\n this.v4l ^= BBUF[8] ^ BBUF[24];\n this.v4h ^= BBUF[9] ^ BBUF[25];\n this.v5l ^= BBUF[10] ^ BBUF[26];\n this.v5h ^= BBUF[11] ^ BBUF[27];\n this.v6l ^= BBUF[12] ^ BBUF[28];\n this.v6h ^= BBUF[13] ^ BBUF[29];\n this.v7l ^= BBUF[14] ^ BBUF[30];\n this.v7h ^= BBUF[15] ^ BBUF[31];\n BBUF.fill(0);\n }\n destroy() {\n this.destroyed = true;\n this.buffer32.fill(0);\n this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n }\n}\n/**\n * BLAKE2b - optimized for 64-bit platforms. JS doesn't have uint64, so it's slower than BLAKE2s.\n * @param msg - message that would be hashed\n * @param opts - dkLen, key, salt, personalization\n */\nexport const blake2b = /* @__PURE__ */ wrapConstructorWithOpts((opts) => new BLAKE2b(opts));\n//# sourceMappingURL=blake2b.js.map","import { toB58 } from \"@mysten/bcs\";\nimport { parse } from \"valibot\";\nimport { bcs } from \"../bcs/index.js\";\nimport { normalizeSuiAddress } from \"../utils/sui-types.js\";\nimport { TransactionData } from \"./data/internal.js\";\nimport { transactionDataFromV1 } from \"./data/v1.js\";\nimport { hashTypedData } from \"./hash.js\";\nfunction prepareSuiAddress(address) {\n return normalizeSuiAddress(address).replace(\"0x\", \"\");\n}\nclass TransactionDataBuilder {\n constructor(clone) {\n this.version = 2;\n this.sender = clone?.sender ?? null;\n this.expiration = clone?.expiration ?? null;\n this.inputs = clone?.inputs ?? [];\n this.commands = clone?.commands ?? [];\n this.gasData = clone?.gasData ?? {\n budget: null,\n price: null,\n owner: null,\n payment: null\n };\n }\n static fromKindBytes(bytes) {\n const kind = bcs.TransactionKind.parse(bytes);\n const programmableTx = kind.ProgrammableTransaction;\n if (!programmableTx) {\n throw new Error(\"Unable to deserialize from bytes.\");\n }\n return TransactionDataBuilder.restore({\n version: 2,\n sender: null,\n expiration: null,\n gasData: {\n budget: null,\n owner: null,\n payment: null,\n price: null\n },\n inputs: programmableTx.inputs,\n commands: programmableTx.commands\n });\n }\n static fromBytes(bytes) {\n const rawData = bcs.TransactionData.parse(bytes);\n const data = rawData?.V1;\n const programmableTx = data.kind.ProgrammableTransaction;\n if (!data || !programmableTx) {\n throw new Error(\"Unable to deserialize from bytes.\");\n }\n return TransactionDataBuilder.restore({\n version: 2,\n sender: data.sender,\n expiration: data.expiration,\n gasData: data.gasData,\n inputs: programmableTx.inputs,\n commands: programmableTx.commands\n });\n }\n static restore(data) {\n if (data.version === 2) {\n return new TransactionDataBuilder(parse(TransactionData, data));\n } else {\n return new TransactionDataBuilder(parse(TransactionData, transactionDataFromV1(data)));\n }\n }\n /**\n * Generate transaction digest.\n *\n * @param bytes BCS serialized transaction data\n * @returns transaction digest.\n */\n static getDigestFromBytes(bytes) {\n const hash = hashTypedData(\"TransactionData\", bytes);\n return toB58(hash);\n }\n // @deprecated use gasData instead\n get gasConfig() {\n return this.gasData;\n }\n // @deprecated use gasData instead\n set gasConfig(value) {\n this.gasData = value;\n }\n build({\n maxSizeBytes = Infinity,\n overrides,\n onlyTransactionKind\n } = {}) {\n const inputs = this.inputs;\n const commands = this.commands;\n const kind = {\n ProgrammableTransaction: {\n inputs,\n commands\n }\n };\n if (onlyTransactionKind) {\n return bcs.TransactionKind.serialize(kind, { maxSize: maxSizeBytes }).toBytes();\n }\n const expiration = overrides?.expiration ?? this.expiration;\n const sender = overrides?.sender ?? this.sender;\n const gasData = { ...this.gasData, ...overrides?.gasConfig, ...overrides?.gasData };\n if (!sender) {\n throw new Error(\"Missing transaction sender\");\n }\n if (!gasData.budget) {\n throw new Error(\"Missing gas budget\");\n }\n if (!gasData.payment) {\n throw new Error(\"Missing gas payment\");\n }\n if (!gasData.price) {\n throw new Error(\"Missing gas price\");\n }\n const transactionData = {\n sender: prepareSuiAddress(sender),\n expiration: expiration ? expiration : { None: true },\n gasData: {\n payment: gasData.payment,\n owner: prepareSuiAddress(this.gasData.owner ?? sender),\n price: BigInt(gasData.price),\n budget: BigInt(gasData.budget)\n },\n kind: {\n ProgrammableTransaction: {\n inputs,\n commands\n }\n }\n };\n return bcs.TransactionData.serialize(\n { V1: transactionData },\n { maxSize: maxSizeBytes }\n ).toBytes();\n }\n addInput(type, arg) {\n const index = this.inputs.length;\n this.inputs.push(arg);\n return { Input: index, type, $kind: \"Input\" };\n }\n getInputUses(index, fn) {\n this.mapArguments((arg, command) => {\n if (arg.$kind === \"Input\" && arg.Input === index) {\n fn(arg, command);\n }\n return arg;\n });\n }\n mapArguments(fn) {\n for (const command of this.commands) {\n switch (command.$kind) {\n case \"MoveCall\":\n command.MoveCall.arguments = command.MoveCall.arguments.map((arg) => fn(arg, command));\n break;\n case \"TransferObjects\":\n command.TransferObjects.objects = command.TransferObjects.objects.map(\n (arg) => fn(arg, command)\n );\n command.TransferObjects.address = fn(command.TransferObjects.address, command);\n break;\n case \"SplitCoins\":\n command.SplitCoins.coin = fn(command.SplitCoins.coin, command);\n command.SplitCoins.amounts = command.SplitCoins.amounts.map((arg) => fn(arg, command));\n break;\n case \"MergeCoins\":\n command.MergeCoins.destination = fn(command.MergeCoins.destination, command);\n command.MergeCoins.sources = command.MergeCoins.sources.map((arg) => fn(arg, command));\n break;\n case \"MakeMoveVec\":\n command.MakeMoveVec.elements = command.MakeMoveVec.elements.map(\n (arg) => fn(arg, command)\n );\n break;\n case \"Upgrade\":\n command.Upgrade.ticket = fn(command.Upgrade.ticket, command);\n break;\n case \"$Intent\":\n const inputs = command.$Intent.inputs;\n command.$Intent.inputs = {};\n for (const [key, value] of Object.entries(inputs)) {\n command.$Intent.inputs[key] = Array.isArray(value) ? value.map((arg) => fn(arg, command)) : fn(value, command);\n }\n break;\n case \"Publish\":\n break;\n default:\n throw new Error(`Unexpected transaction kind: ${command.$kind}`);\n }\n }\n }\n replaceCommand(index, replacement) {\n if (!Array.isArray(replacement)) {\n this.commands[index] = replacement;\n return;\n }\n const sizeDiff = replacement.length - 1;\n this.commands.splice(index, 1, ...replacement);\n if (sizeDiff !== 0) {\n this.mapArguments((arg) => {\n switch (arg.$kind) {\n case \"Result\":\n if (arg.Result > index) {\n arg.Result += sizeDiff;\n }\n break;\n case \"NestedResult\":\n if (arg.NestedResult[0] > index) {\n arg.NestedResult[0] += sizeDiff;\n }\n break;\n }\n return arg;\n });\n }\n }\n getDigest() {\n const bytes = this.build({ onlyTransactionKind: false });\n return TransactionDataBuilder.getDigestFromBytes(bytes);\n }\n snapshot() {\n return parse(TransactionData, this);\n }\n}\nexport {\n TransactionDataBuilder\n};\n//# sourceMappingURL=TransactionData.js.map\n","import { blake2b } from \"@noble/hashes/blake2b\";\nfunction hashTypedData(typeTag, data) {\n const typeTagBytes = Array.from(`${typeTag}::`).map((e) => e.charCodeAt(0));\n const dataWithTag = new Uint8Array(typeTagBytes.length + data.length);\n dataWithTag.set(typeTagBytes);\n dataWithTag.set(data, typeTagBytes.length);\n return blake2b(dataWithTag, { dkLen: 32 });\n}\nexport {\n hashTypedData\n};\n//# sourceMappingURL=hash.js.map\n","import { normalizeSuiAddress } from \"../utils/sui-types.js\";\nfunction extractMutableReference(normalizedType) {\n return typeof normalizedType === \"object\" && \"MutableReference\" in normalizedType ? normalizedType.MutableReference : void 0;\n}\nfunction extractReference(normalizedType) {\n return typeof normalizedType === \"object\" && \"Reference\" in normalizedType ? normalizedType.Reference : void 0;\n}\nfunction extractStructTag(normalizedType) {\n if (typeof normalizedType === \"object\" && \"Struct\" in normalizedType) {\n return normalizedType;\n }\n const ref = extractReference(normalizedType);\n const mutRef = extractMutableReference(normalizedType);\n if (typeof ref === \"object\" && \"Struct\" in ref) {\n return ref;\n }\n if (typeof mutRef === \"object\" && \"Struct\" in mutRef) {\n return mutRef;\n }\n return void 0;\n}\nfunction getIdFromCallArg(arg) {\n if (typeof arg === \"string\") {\n return normalizeSuiAddress(arg);\n }\n if (arg.Object) {\n if (arg.Object.ImmOrOwnedObject) {\n return normalizeSuiAddress(arg.Object.ImmOrOwnedObject.objectId);\n }\n if (arg.Object.Receiving) {\n return normalizeSuiAddress(arg.Object.Receiving.objectId);\n }\n return normalizeSuiAddress(arg.Object.SharedObject.objectId);\n }\n if (arg.UnresolvedObject) {\n return normalizeSuiAddress(arg.UnresolvedObject.objectId);\n }\n return void 0;\n}\nexport {\n extractMutableReference,\n extractReference,\n extractStructTag,\n getIdFromCallArg\n};\n//# sourceMappingURL=utils.js.map\n","var __typeError = (msg) => {\n throw TypeError(msg);\n};\nvar __accessCheck = (obj, member, msg) => member.has(obj) || __typeError(\"Cannot \" + msg);\nvar __privateGet = (obj, member, getter) => (__accessCheck(obj, member, \"read from private field\"), getter ? getter.call(obj) : member.get(obj));\nvar __privateAdd = (obj, member, value) => member.has(obj) ? __typeError(\"Cannot add the same private member more than once\") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\nvar __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, \"write to private field\"), setter ? setter.call(obj, value) : member.set(obj, value), value);\nvar __privateMethod = (obj, member, method) => (__accessCheck(obj, member, \"access private method\"), method);\nvar _serializationPlugins, _buildPlugins, _intentResolvers, _data, _Transaction_instances, normalizeTransactionArgument_fn, resolveArgument_fn, prepareBuild_fn, runPlugins_fn;\nimport { fromB64, isSerializedBcs } from \"@mysten/bcs\";\nimport { is, parse } from \"valibot\";\nimport { normalizeSuiAddress } from \"../utils/sui-types.js\";\nimport { Commands } from \"./Commands.js\";\nimport { Argument, NormalizedCallArg, ObjectRef, TransactionExpiration } from \"./data/internal.js\";\nimport { serializeV1TransactionData } from \"./data/v1.js\";\nimport { SerializedTransactionDataV2 } from \"./data/v2.js\";\nimport { Inputs } from \"./Inputs.js\";\nimport { resolveTransactionData } from \"./json-rpc-resolver.js\";\nimport { createPure } from \"./pure.js\";\nimport { TransactionDataBuilder } from \"./TransactionData.js\";\nimport { getIdFromCallArg } from \"./utils.js\";\nfunction createTransactionResult(index) {\n const baseResult = { $kind: \"Result\", Result: index };\n const nestedResults = [];\n const nestedResultFor = (resultIndex) => nestedResults[resultIndex] ?? (nestedResults[resultIndex] = {\n $kind: \"NestedResult\",\n NestedResult: [index, resultIndex]\n });\n return new Proxy(baseResult, {\n set() {\n throw new Error(\n \"The transaction result is a proxy, and does not support setting properties directly\"\n );\n },\n // TODO: Instead of making this return a concrete argument, we should ideally\n // make it reference-based (so that this gets resolved at build-time), which\n // allows re-ordering transactions.\n get(target, property) {\n if (property in target) {\n return Reflect.get(target, property);\n }\n if (property === Symbol.iterator) {\n return function* () {\n let i = 0;\n while (true) {\n yield nestedResultFor(i);\n i++;\n }\n };\n }\n if (typeof property === \"symbol\") return;\n const resultIndex = parseInt(property, 10);\n if (Number.isNaN(resultIndex) || resultIndex < 0) return;\n return nestedResultFor(resultIndex);\n }\n });\n}\nconst TRANSACTION_BRAND = Symbol.for(\"@mysten/transaction\");\nfunction isTransaction(obj) {\n return !!obj && typeof obj === \"object\" && obj[TRANSACTION_BRAND] === true;\n}\nconst _Transaction = class _Transaction {\n constructor() {\n __privateAdd(this, _Transaction_instances);\n __privateAdd(this, _serializationPlugins, []);\n __privateAdd(this, _buildPlugins, []);\n __privateAdd(this, _intentResolvers, /* @__PURE__ */ new Map());\n __privateAdd(this, _data);\n __privateSet(this, _data, new TransactionDataBuilder());\n }\n /**\n * Converts from a serialize transaction kind (built with `build({ onlyTransactionKind: true })`) to a `Transaction` class.\n * Supports either a byte array, or base64-encoded bytes.\n */\n static fromKind(serialized) {\n const tx = new _Transaction();\n __privateSet(tx, _data, TransactionDataBuilder.fromKindBytes(\n typeof serialized === \"string\" ? fromB64(serialized) : serialized\n ));\n return tx;\n }\n /**\n * Converts from a serialized transaction format to a `Transaction` class.\n * There are two supported serialized formats:\n * - A string returned from `Transaction#serialize`. The serialized format must be compatible, or it will throw an error.\n * - A byte array (or base64-encoded bytes) containing BCS transaction data.\n */\n static from(transaction) {\n const newTransaction = new _Transaction();\n if (isTransaction(transaction)) {\n __privateSet(newTransaction, _data, new TransactionDataBuilder(transaction.getData()));\n } else if (typeof transaction !== \"string\" || !transaction.startsWith(\"{\")) {\n __privateSet(newTransaction, _data, TransactionDataBuilder.fromBytes(\n typeof transaction === \"string\" ? fromB64(transaction) : transaction\n ));\n } else {\n __privateSet(newTransaction, _data, TransactionDataBuilder.restore(JSON.parse(transaction)));\n }\n return newTransaction;\n }\n addSerializationPlugin(step) {\n __privateGet(this, _serializationPlugins).push(step);\n }\n addBuildPlugin(step) {\n __privateGet(this, _buildPlugins).push(step);\n }\n addIntentResolver(intent, resolver) {\n if (__privateGet(this, _intentResolvers).has(intent) && __privateGet(this, _intentResolvers).get(intent) !== resolver) {\n throw new Error(`Intent resolver for ${intent} already exists`);\n }\n __privateGet(this, _intentResolvers).set(intent, resolver);\n }\n setSender(sender) {\n __privateGet(this, _data).sender = sender;\n }\n /**\n * Sets the sender only if it has not already been set.\n * This is useful for sponsored transaction flows where the sender may not be the same as the signer address.\n */\n setSenderIfNotSet(sender) {\n if (!__privateGet(this, _data).sender) {\n __privateGet(this, _data).sender = sender;\n }\n }\n setExpiration(expiration) {\n __privateGet(this, _data).expiration = expiration ? parse(TransactionExpiration, expiration) : null;\n }\n setGasPrice(price) {\n __privateGet(this, _data).gasConfig.price = String(price);\n }\n setGasBudget(budget) {\n __privateGet(this, _data).gasConfig.budget = String(budget);\n }\n setGasBudgetIfNotSet(budget) {\n if (__privateGet(this, _data).gasData.budget == null) {\n __privateGet(this, _data).gasConfig.budget = String(budget);\n }\n }\n setGasOwner(owner) {\n __privateGet(this, _data).gasConfig.owner = owner;\n }\n setGasPayment(payments) {\n __privateGet(this, _data).gasConfig.payment = payments.map((payment) => parse(ObjectRef, payment));\n }\n /** @deprecated Use `getData()` instead. */\n get blockData() {\n return serializeV1TransactionData(__privateGet(this, _data).snapshot());\n }\n /** Get a snapshot of the transaction data, in JSON form: */\n getData() {\n return __privateGet(this, _data).snapshot();\n }\n // Used to brand transaction classes so that they can be identified, even between multiple copies\n // of the builder.\n get [TRANSACTION_BRAND]() {\n return true;\n }\n // Temporary workaround for the wallet interface accidentally serializing transactions via postMessage\n get pure() {\n Object.defineProperty(this, \"pure\", {\n enumerable: false,\n value: createPure((value) => {\n if (isSerializedBcs(value)) {\n return __privateGet(this, _data).addInput(\"pure\", {\n $kind: \"Pure\",\n Pure: {\n bytes: value.toBase64()\n }\n });\n }\n return __privateGet(this, _data).addInput(\n \"pure\",\n is(NormalizedCallArg, value) ? parse(NormalizedCallArg, value) : value instanceof Uint8Array ? Inputs.Pure(value) : { $kind: \"UnresolvedPure\", UnresolvedPure: { value } }\n );\n })\n });\n return this.pure;\n }\n /** Returns an argument for the gas coin, to be used in a transaction. */\n get gas() {\n return { $kind: \"GasCoin\", GasCoin: true };\n }\n /**\n * Add a new object input to the transaction.\n */\n object(value) {\n if (typeof value === \"function\") {\n return this.object(value(this));\n }\n if (typeof value === \"object\" && is(Argument, value)) {\n return value;\n }\n const id = getIdFromCallArg(value);\n const inserted = __privateGet(this, _data).inputs.find((i) => id === getIdFromCallArg(i));\n if (inserted?.Object?.SharedObject && typeof value === \"object\" && value.Object?.SharedObject) {\n inserted.Object.SharedObject.mutable = inserted.Object.SharedObject.mutable || value.Object.SharedObject.mutable;\n }\n return inserted ? { $kind: \"Input\", Input: __privateGet(this, _data).inputs.indexOf(inserted), type: \"object\" } : __privateGet(this, _data).addInput(\n \"object\",\n typeof value === \"string\" ? {\n $kind: \"UnresolvedObject\",\n UnresolvedObject: { objectId: normalizeSuiAddress(value) }\n } : value\n );\n }\n /**\n * Add a new object input to the transaction using the fully-resolved object reference.\n * If you only have an object ID, use `builder.object(id)` instead.\n */\n objectRef(...args) {\n return this.object(Inputs.ObjectRef(...args));\n }\n /**\n * Add a new receiving input to the transaction using the fully-resolved object reference.\n * If you only have an object ID, use `builder.object(id)` instead.\n */\n receivingRef(...args) {\n return this.object(Inputs.ReceivingRef(...args));\n }\n /**\n * Add a new shared object input to the transaction using the fully-resolved shared object reference.\n * If you only have an object ID, use `builder.object(id)` instead.\n */\n sharedObjectRef(...args) {\n return this.object(Inputs.SharedObjectRef(...args));\n }\n /** Add a transaction to the transaction */\n add(command) {\n if (typeof command === \"function\") {\n return command(this);\n }\n const index = __privateGet(this, _data).commands.push(command);\n return createTransactionResult(index - 1);\n }\n // Method shorthands:\n splitCoins(coin, amounts) {\n return this.add(\n Commands.SplitCoins(\n typeof coin === \"string\" ? this.object(coin) : __privateMethod(this, _Transaction_instances, resolveArgument_fn).call(this, coin),\n amounts.map(\n (amount) => typeof amount === \"number\" || typeof amount === \"bigint\" || typeof amount === \"string\" ? this.pure.u64(amount) : __privateMethod(this, _Transaction_instances, normalizeTransactionArgument_fn).call(this, amount)\n )\n )\n );\n }\n mergeCoins(destination, sources) {\n return this.add(\n Commands.MergeCoins(\n this.object(destination),\n sources.map((src) => this.object(src))\n )\n );\n }\n publish({ modules, dependencies }) {\n return this.add(\n Commands.Publish({\n modules,\n dependencies\n })\n );\n }\n upgrade({\n modules,\n dependencies,\n package: packageId,\n ticket\n }) {\n return this.add(\n Commands.Upgrade({\n modules,\n dependencies,\n package: packageId,\n ticket: this.object(ticket)\n })\n );\n }\n moveCall({\n arguments: args,\n ...input\n }) {\n return this.add(\n Commands.MoveCall({\n ...input,\n arguments: args?.map((arg) => __privateMethod(this, _Transaction_instances, normalizeTransactionArgument_fn).call(this, arg))\n })\n );\n }\n transferObjects(objects, address) {\n return this.add(\n Commands.TransferObjects(\n objects.map((obj) => this.object(obj)),\n typeof address === \"string\" ? this.pure.address(address) : __privateMethod(this, _Transaction_instances, normalizeTransactionArgument_fn).call(this, address)\n )\n );\n }\n makeMoveVec({\n type,\n elements\n }) {\n return this.add(\n Commands.MakeMoveVec({\n type,\n elements: elements.map((obj) => this.object(obj))\n })\n );\n }\n /**\n * @deprecated Use toJSON instead.\n * For synchronous serialization, you can use `getData()`\n * */\n serialize() {\n return JSON.stringify(serializeV1TransactionData(__privateGet(this, _data).snapshot()));\n }\n async toJSON(options = {}) {\n await this.prepareForSerialization(options);\n return JSON.stringify(\n parse(SerializedTransactionDataV2, __privateGet(this, _data).snapshot()),\n (_key, value) => typeof value === \"bigint\" ? value.toString() : value,\n 2\n );\n }\n /** Build the transaction to BCS bytes, and sign it with the provided keypair. */\n async sign(options) {\n const { signer, ...buildOptions } = options;\n const bytes = await this.build(buildOptions);\n return signer.signTransaction(bytes);\n }\n /** Build the transaction to BCS bytes. */\n async build(options = {}) {\n await this.prepareForSerialization(options);\n await __privateMethod(this, _Transaction_instances, prepareBuild_fn).call(this, options);\n return __privateGet(this, _data).build({\n onlyTransactionKind: options.onlyTransactionKind\n });\n }\n /** Derive transaction digest */\n async getDigest(options = {}) {\n await __privateMethod(this, _Transaction_instances, prepareBuild_fn).call(this, options);\n return __privateGet(this, _data).getDigest();\n }\n async prepareForSerialization(options) {\n const intents = /* @__PURE__ */ new Set();\n for (const command of __privateGet(this, _data).commands) {\n if (command.$Intent) {\n intents.add(command.$Intent.name);\n }\n }\n const steps = [...__privateGet(this, _serializationPlugins)];\n for (const intent of intents) {\n if (options.supportedIntents?.includes(intent)) {\n continue;\n }\n if (!__privateGet(this, _intentResolvers).has(intent)) {\n throw new Error(`Missing intent resolver for ${intent}`);\n }\n steps.push(__privateGet(this, _intentResolvers).get(intent));\n }\n await __privateMethod(this, _Transaction_instances, runPlugins_fn).call(this, steps, options);\n }\n};\n_serializationPlugins = new WeakMap();\n_buildPlugins = new WeakMap();\n_intentResolvers = new WeakMap();\n_data = new WeakMap();\n_Transaction_instances = new WeakSet();\nnormalizeTransactionArgument_fn = function(arg) {\n if (isSerializedBcs(arg)) {\n return this.pure(arg);\n }\n return __privateMethod(this, _Transaction_instances, resolveArgument_fn).call(this, arg);\n};\nresolveArgument_fn = function(arg) {\n if (typeof arg === \"function\") {\n return parse(Argument, arg(this));\n }\n return parse(Argument, arg);\n};\nprepareBuild_fn = async function(options) {\n if (!options.onlyTransactionKind && !__privateGet(this, _data).sender) {\n throw new Error(\"Missing transaction sender\");\n }\n await __privateMethod(this, _Transaction_instances, runPlugins_fn).call(this, [...__privateGet(this, _buildPlugins), resolveTransactionData], options);\n};\nrunPlugins_fn = async function(plugins, options) {\n const createNext = (i) => {\n if (i >= plugins.length) {\n return () => {\n };\n }\n const plugin = plugins[i];\n return async () => {\n const next = createNext(i + 1);\n let calledNext = false;\n let nextResolved = false;\n await plugin(__privateGet(this, _data), options, async () => {\n if (calledNext) {\n throw new Error(`next() was call multiple times in TransactionPlugin ${i}`);\n }\n calledNext = true;\n await next();\n nextResolved = true;\n });\n if (!calledNext) {\n throw new Error(`next() was not called in TransactionPlugin ${i}`);\n }\n if (!nextResolved) {\n throw new Error(`next() was not awaited in TransactionPlugin ${i}`);\n }\n };\n };\n await createNext(0)();\n};\nlet Transaction = _Transaction;\nexport {\n Transaction,\n isTransaction\n};\n//# sourceMappingURL=Transaction.js.map\n","const SUI_NS_NAME_REGEX = /^(?!.*(^(?!@)|[-.@])($|[-.@]))(?:[a-z0-9-]{0,63}(?:\\.[a-z0-9-]{0,63})*)?@[a-z0-9-]{0,63}$/i;\nconst SUI_NS_DOMAIN_REGEX = /^(?!.*(^|[-.])($|[-.]))(?:[a-z0-9-]{0,63}\\.)+sui$/i;\nconst MAX_SUI_NS_NAME_LENGTH = 235;\nfunction isValidSuiNSName(name) {\n if (name.length > MAX_SUI_NS_NAME_LENGTH) {\n return false;\n }\n if (name.includes(\"@\")) {\n return SUI_NS_NAME_REGEX.test(name);\n }\n return SUI_NS_DOMAIN_REGEX.test(name);\n}\nfunction normalizeSuiNSName(name, format = \"at\") {\n const lowerCase = name.toLowerCase();\n let parts;\n if (lowerCase.includes(\"@\")) {\n if (!SUI_NS_NAME_REGEX.test(lowerCase)) {\n throw new Error(`Invalid SuiNS name ${name}`);\n }\n const [labels, domain] = lowerCase.split(\"@\");\n parts = [...labels ? labels.split(\".\") : [], domain];\n } else {\n if (!SUI_NS_DOMAIN_REGEX.test(lowerCase)) {\n throw new Error(`Invalid SuiNS name ${name}`);\n }\n parts = lowerCase.split(\".\").slice(0, -1);\n }\n if (format === \"dot\") {\n return `${parts.join(\".\")}.sui`;\n }\n return `${parts.slice(0, -1).join(\".\")}@${parts[parts.length - 1]}`;\n}\nexport {\n isValidSuiNSName,\n normalizeSuiNSName\n};\n//# sourceMappingURL=suins.js.map\n","const CODE_TO_ERROR_TYPE = {\n \"-32700\": \"ParseError\",\n \"-32701\": \"OversizedRequest\",\n \"-32702\": \"OversizedResponse\",\n \"-32600\": \"InvalidRequest\",\n \"-32601\": \"MethodNotFound\",\n \"-32602\": \"InvalidParams\",\n \"-32603\": \"InternalError\",\n \"-32604\": \"ServerBusy\",\n \"-32000\": \"CallExecutionFailed\",\n \"-32001\": \"UnknownError\",\n \"-32003\": \"SubscriptionClosed\",\n \"-32004\": \"SubscriptionClosedWithError\",\n \"-32005\": \"BatchesNotSupported\",\n \"-32006\": \"TooManySubscriptions\",\n \"-32050\": \"TransientError\",\n \"-32002\": \"TransactionExecutionClientError\"\n};\nclass SuiHTTPTransportError extends Error {\n}\nclass JsonRpcError extends SuiHTTPTransportError {\n constructor(message, code) {\n super(message);\n this.code = code;\n this.type = CODE_TO_ERROR_TYPE[code] ?? \"ServerError\";\n }\n}\nclass SuiHTTPStatusError extends SuiHTTPTransportError {\n constructor(message, status, statusText) {\n super(message);\n this.status = status;\n this.statusText = statusText;\n }\n}\nexport {\n JsonRpcError,\n SuiHTTPStatusError,\n SuiHTTPTransportError\n};\n//# sourceMappingURL=errors.js.map\n","var __typeError = (msg) => {\n throw TypeError(msg);\n};\nvar __accessCheck = (obj, member, msg) => member.has(obj) || __typeError(\"Cannot \" + msg);\nvar __privateGet = (obj, member, getter) => (__accessCheck(obj, member, \"read from private field\"), getter ? getter.call(obj) : member.get(obj));\nvar __privateAdd = (obj, member, value) => member.has(obj) ? __typeError(\"Cannot add the same private member more than once\") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\nvar __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, \"write to private field\"), setter ? setter.call(obj, value) : member.set(obj, value), value);\nvar __privateMethod = (obj, member, method) => (__accessCheck(obj, member, \"access private method\"), method);\nvar __privateWrapper = (obj, member, setter, getter) => ({\n set _(value) {\n __privateSet(obj, member, value, setter);\n },\n get _() {\n return __privateGet(obj, member, getter);\n }\n});\nvar _requestId, _disconnects, _webSocket, _connectionPromise, _subscriptions, _pendingRequests, _WebsocketClient_instances, setupWebSocket_fn, reconnect_fn;\nimport { JsonRpcError } from \"./errors.js\";\nfunction getWebsocketUrl(httpUrl) {\n const url = new URL(httpUrl);\n url.protocol = url.protocol.replace(\"http\", \"ws\");\n return url.toString();\n}\nconst DEFAULT_CLIENT_OPTIONS = {\n // We fudge the typing because we also check for undefined in the constructor:\n WebSocketConstructor: typeof WebSocket !== \"undefined\" ? WebSocket : void 0,\n callTimeout: 3e4,\n reconnectTimeout: 3e3,\n maxReconnects: 5\n};\nclass WebsocketClient {\n constructor(endpoint, options = {}) {\n __privateAdd(this, _WebsocketClient_instances);\n __privateAdd(this, _requestId, 0);\n __privateAdd(this, _disconnects, 0);\n __privateAdd(this, _webSocket, null);\n __privateAdd(this, _connectionPromise, null);\n __privateAdd(this, _subscriptions, /* @__PURE__ */ new Set());\n __privateAdd(this, _pendingRequests, /* @__PURE__ */ new Map());\n this.endpoint = endpoint;\n this.options = { ...DEFAULT_CLIENT_OPTIONS, ...options };\n if (!this.options.WebSocketConstructor) {\n throw new Error(\"Missing WebSocket constructor\");\n }\n if (this.endpoint.startsWith(\"http\")) {\n this.endpoint = getWebsocketUrl(this.endpoint);\n }\n }\n async makeRequest(method, params) {\n const webSocket = await __privateMethod(this, _WebsocketClient_instances, setupWebSocket_fn).call(this);\n return new Promise((resolve, reject) => {\n __privateSet(this, _requestId, __privateGet(this, _requestId) + 1);\n __privateGet(this, _pendingRequests).set(__privateGet(this, _requestId), {\n resolve,\n reject,\n timeout: setTimeout(() => {\n __privateGet(this, _pendingRequests).delete(__privateGet(this, _requestId));\n reject(new Error(`Request timeout: ${method}`));\n }, this.options.callTimeout)\n });\n webSocket.send(JSON.stringify({ jsonrpc: \"2.0\", id: __privateGet(this, _requestId), method, params }));\n }).then(({ error, result }) => {\n if (error) {\n throw new JsonRpcError(error.message, error.code);\n }\n return result;\n });\n }\n async subscribe(input) {\n const subscription = new RpcSubscription(input);\n __privateGet(this, _subscriptions).add(subscription);\n await subscription.subscribe(this);\n return () => subscription.unsubscribe(this);\n }\n}\n_requestId = new WeakMap();\n_disconnects = new WeakMap();\n_webSocket = new WeakMap();\n_connectionPromise = new WeakMap();\n_subscriptions = new WeakMap();\n_pendingRequests = new WeakMap();\n_WebsocketClient_instances = new WeakSet();\nsetupWebSocket_fn = function() {\n if (__privateGet(this, _connectionPromise)) {\n return __privateGet(this, _connectionPromise);\n }\n __privateSet(this, _connectionPromise, new Promise((resolve) => {\n __privateGet(this, _webSocket)?.close();\n __privateSet(this, _webSocket, new this.options.WebSocketConstructor(this.endpoint));\n __privateGet(this, _webSocket).addEventListener(\"open\", () => {\n __privateSet(this, _disconnects, 0);\n resolve(__privateGet(this, _webSocket));\n });\n __privateGet(this, _webSocket).addEventListener(\"close\", () => {\n __privateWrapper(this, _disconnects)._++;\n if (__privateGet(this, _disconnects) <= this.options.maxReconnects) {\n setTimeout(() => {\n __privateMethod(this, _WebsocketClient_instances, reconnect_fn).call(this);\n }, this.options.reconnectTimeout);\n }\n });\n __privateGet(this, _webSocket).addEventListener(\"message\", ({ data }) => {\n let json;\n try {\n json = JSON.parse(data);\n } catch (error) {\n console.error(new Error(`Failed to parse RPC message: ${data}`, { cause: error }));\n return;\n }\n if (\"id\" in json && json.id != null && __privateGet(this, _pendingRequests).has(json.id)) {\n const { resolve: resolve2, timeout } = __privateGet(this, _pendingRequests).get(json.id);\n clearTimeout(timeout);\n resolve2(json);\n } else if (\"params\" in json) {\n const { params } = json;\n __privateGet(this, _subscriptions).forEach((subscription) => {\n if (subscription.subscriptionId === params.subscription) {\n if (params.subscription === subscription.subscriptionId) {\n subscription.onMessage(params.result);\n }\n }\n });\n }\n });\n }));\n return __privateGet(this, _connectionPromise);\n};\nreconnect_fn = async function() {\n __privateGet(this, _webSocket)?.close();\n __privateSet(this, _connectionPromise, null);\n return Promise.allSettled(\n [...__privateGet(this, _subscriptions)].map((subscription) => subscription.subscribe(this))\n );\n};\nclass RpcSubscription {\n constructor(input) {\n this.subscriptionId = null;\n this.subscribed = false;\n this.input = input;\n }\n onMessage(message) {\n if (this.subscribed) {\n this.input.onMessage(message);\n }\n }\n async unsubscribe(client) {\n const { subscriptionId } = this;\n this.subscribed = false;\n if (subscriptionId == null) return false;\n this.subscriptionId = null;\n return client.makeRequest(this.input.unsubscribe, [subscriptionId]);\n }\n async subscribe(client) {\n this.subscriptionId = null;\n this.subscribed = true;\n const newSubscriptionId = await client.makeRequest(\n this.input.method,\n this.input.params\n );\n if (this.subscribed) {\n this.subscriptionId = newSubscriptionId;\n }\n }\n}\nexport {\n DEFAULT_CLIENT_OPTIONS,\n WebsocketClient\n};\n//# sourceMappingURL=rpc-websocket-client.js.map\n","var __typeError = (msg) => {\n throw TypeError(msg);\n};\nvar __accessCheck = (obj, member, msg) => member.has(obj) || __typeError(\"Cannot \" + msg);\nvar __privateGet = (obj, member, getter) => (__accessCheck(obj, member, \"read from private field\"), getter ? getter.call(obj) : member.get(obj));\nvar __privateAdd = (obj, member, value) => member.has(obj) ? __typeError(\"Cannot add the same private member more than once\") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\nvar __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, \"write to private field\"), setter ? setter.call(obj, value) : member.set(obj, value), value);\nvar __privateMethod = (obj, member, method) => (__accessCheck(obj, member, \"access private method\"), method);\nvar _requestId, _options, _websocketClient, _SuiHTTPTransport_instances, getWebsocketClient_fn;\nimport { PACKAGE_VERSION, TARGETED_RPC_VERSION } from \"../version.js\";\nimport { JsonRpcError, SuiHTTPStatusError } from \"./errors.js\";\nimport { WebsocketClient } from \"./rpc-websocket-client.js\";\nclass SuiHTTPTransport {\n constructor(options) {\n __privateAdd(this, _SuiHTTPTransport_instances);\n __privateAdd(this, _requestId, 0);\n __privateAdd(this, _options);\n __privateAdd(this, _websocketClient);\n __privateSet(this, _options, options);\n }\n fetch(input, init) {\n const fetchFn = __privateGet(this, _options).fetch ?? fetch;\n if (!fetchFn) {\n throw new Error(\n \"The current environment does not support fetch, you can provide a fetch implementation in the options for SuiHTTPTransport.\"\n );\n }\n return fetchFn(input, init);\n }\n async request(input) {\n __privateSet(this, _requestId, __privateGet(this, _requestId) + 1);\n const res = await this.fetch(__privateGet(this, _options).rpc?.url ?? __privateGet(this, _options).url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Client-Sdk-Type\": \"typescript\",\n \"Client-Sdk-Version\": PACKAGE_VERSION,\n \"Client-Target-Api-Version\": TARGETED_RPC_VERSION,\n ...__privateGet(this, _options).rpc?.headers\n },\n body: JSON.stringify({\n jsonrpc: \"2.0\",\n id: __privateGet(this, _requestId),\n method: input.method,\n params: input.params\n })\n });\n if (!res.ok) {\n throw new SuiHTTPStatusError(\n `Unexpected status code: ${res.status}`,\n res.status,\n res.statusText\n );\n }\n const data = await res.json();\n if (\"error\" in data && data.error != null) {\n throw new JsonRpcError(data.error.message, data.error.code);\n }\n return data.result;\n }\n async subscribe(input) {\n const unsubscribe = await __privateMethod(this, _SuiHTTPTransport_instances, getWebsocketClient_fn).call(this).subscribe(input);\n return async () => !!await unsubscribe();\n }\n}\n_requestId = new WeakMap();\n_options = new WeakMap();\n_websocketClient = new WeakMap();\n_SuiHTTPTransport_instances = new WeakSet();\ngetWebsocketClient_fn = function() {\n if (!__privateGet(this, _websocketClient)) {\n const WebSocketConstructor = __privateGet(this, _options).WebSocketConstructor ?? WebSocket;\n if (!WebSocketConstructor) {\n throw new Error(\n \"The current environment does not support WebSocket, you can provide a WebSocketConstructor in the options for SuiHTTPTransport.\"\n );\n }\n __privateSet(this, _websocketClient, new WebsocketClient(\n __privateGet(this, _options).websocket?.url ?? __privateGet(this, _options).url,\n {\n WebSocketConstructor,\n ...__privateGet(this, _options).websocket\n }\n ));\n }\n return __privateGet(this, _websocketClient);\n};\nexport {\n SuiHTTPTransport\n};\n//# sourceMappingURL=http-transport.js.map\n","const PACKAGE_VERSION = \"1.4.0\";\nconst TARGETED_RPC_VERSION = \"1.31.0\";\nexport {\n PACKAGE_VERSION,\n TARGETED_RPC_VERSION\n};\n//# sourceMappingURL=version.js.map\n","import { fromB58, toB64, toHEX } from \"@mysten/bcs\";\nimport { isTransaction } from \"../transactions/index.js\";\nimport {\n isValidSuiAddress,\n isValidSuiObjectId,\n isValidTransactionDigest,\n normalizeSuiAddress,\n normalizeSuiObjectId\n} from \"../utils/sui-types.js\";\nimport { normalizeSuiNSName } from \"../utils/suins.js\";\nimport { SuiHTTPTransport } from \"./http-transport.js\";\nconst SUI_CLIENT_BRAND = Symbol.for(\"@mysten/SuiClient\");\nfunction isSuiClient(client) {\n return typeof client === \"object\" && client !== null && client[SUI_CLIENT_BRAND] === true;\n}\nclass SuiClient {\n get [SUI_CLIENT_BRAND]() {\n return true;\n }\n /**\n * Establish a connection to a Sui RPC endpoint\n *\n * @param options configuration options for the API Client\n */\n constructor(options) {\n this.transport = options.transport ?? new SuiHTTPTransport({ url: options.url });\n }\n async getRpcApiVersion() {\n const resp = await this.transport.request({\n method: \"rpc.discover\",\n params: []\n });\n return resp.info.version;\n }\n /**\n * Get all Coin<`coin_type`> objects owned by an address.\n */\n async getCoins(input) {\n if (!input.owner || !isValidSuiAddress(normalizeSuiAddress(input.owner))) {\n throw new Error(\"Invalid Sui address\");\n }\n return await this.transport.request({\n method: \"suix_getCoins\",\n params: [input.owner, input.coinType, input.cursor, input.limit]\n });\n }\n /**\n * Get all Coin objects owned by an address.\n */\n async getAllCoins(input) {\n if (!input.owner || !isValidSuiAddress(normalizeSuiAddress(input.owner))) {\n throw new Error(\"Invalid Sui address\");\n }\n return await this.transport.request({\n method: \"suix_getAllCoins\",\n params: [input.owner, input.cursor, input.limit]\n });\n }\n /**\n * Get the total coin balance for one coin type, owned by the address owner.\n */\n async getBalance(input) {\n if (!input.owner || !isValidSuiAddress(normalizeSuiAddress(input.owner))) {\n throw new Error(\"Invalid Sui address\");\n }\n return await this.transport.request({\n method: \"suix_getBalance\",\n params: [input.owner, input.coinType]\n });\n }\n /**\n * Get the total coin balance for all coin types, owned by the address owner.\n */\n async getAllBalances(input) {\n if (!input.owner || !isValidSuiAddress(normalizeSuiAddress(input.owner))) {\n throw new Error(\"Invalid Sui address\");\n }\n return await this.transport.request({ method: \"suix_getAllBalances\", params: [input.owner] });\n }\n /**\n * Fetch CoinMetadata for a given coin type\n */\n async getCoinMetadata(input) {\n return await this.transport.request({\n method: \"suix_getCoinMetadata\",\n params: [input.coinType]\n });\n }\n /**\n * Fetch total supply for a coin\n */\n async getTotalSupply(input) {\n return await this.transport.request({\n method: \"suix_getTotalSupply\",\n params: [input.coinType]\n });\n }\n /**\n * Invoke any RPC method\n * @param method the method to be invoked\n * @param args the arguments to be passed to the RPC request\n */\n async call(method, params) {\n return await this.transport.request({ method, params });\n }\n /**\n * Get Move function argument types like read, write and full access\n */\n async getMoveFunctionArgTypes(input) {\n return await this.transport.request({\n method: \"sui_getMoveFunctionArgTypes\",\n params: [input.package, input.module, input.function]\n });\n }\n /**\n * Get a map from module name to\n * structured representations of Move modules\n */\n async getNormalizedMoveModulesByPackage(input) {\n return await this.transport.request({\n method: \"sui_getNormalizedMoveModulesByPackage\",\n params: [input.package]\n });\n }\n /**\n * Get a structured representation of Move module\n */\n async getNormalizedMoveModule(input) {\n return await this.transport.request({\n method: \"sui_getNormalizedMoveModule\",\n params: [input.package, input.module]\n });\n }\n /**\n * Get a structured representation of Move function\n */\n async getNormalizedMoveFunction(input) {\n return await this.transport.request({\n method: \"sui_getNormalizedMoveFunction\",\n params: [input.package, input.module, input.function]\n });\n }\n /**\n * Get a structured representation of Move struct\n */\n async getNormalizedMoveStruct(input) {\n return await this.transport.request({\n method: \"sui_getNormalizedMoveStruct\",\n params: [input.package, input.module, input.struct]\n });\n }\n /**\n * Get all objects owned by an address\n */\n async getOwnedObjects(input) {\n if (!input.owner || !isValidSuiAddress(normalizeSuiAddress(input.owner))) {\n throw new Error(\"Invalid Sui address\");\n }\n return await this.transport.request({\n method: \"suix_getOwnedObjects\",\n params: [\n input.owner,\n {\n filter: input.filter,\n options: input.options\n },\n input.cursor,\n input.limit\n ]\n });\n }\n /**\n * Get details about an object\n */\n async getObject(input) {\n if (!input.id || !isValidSuiObjectId(normalizeSuiObjectId(input.id))) {\n throw new Error(\"Invalid Sui Object id\");\n }\n return await this.transport.request({\n method: \"sui_getObject\",\n params: [input.id, input.options]\n });\n }\n async tryGetPastObject(input) {\n return await this.transport.request({\n method: \"sui_tryGetPastObject\",\n params: [input.id, input.version, input.options]\n });\n }\n /**\n * Batch get details about a list of objects. If any of the object ids are duplicates the call will fail\n */\n async multiGetObjects(input) {\n input.ids.forEach((id) => {\n if (!id || !isValidSuiObjectId(normalizeSuiObjectId(id))) {\n throw new Error(`Invalid Sui Object id ${id}`);\n }\n });\n const hasDuplicates = input.ids.length !== new Set(input.ids).size;\n if (hasDuplicates) {\n throw new Error(`Duplicate object ids in batch call ${input.ids}`);\n }\n return await this.transport.request({\n method: \"sui_multiGetObjects\",\n params: [input.ids, input.options]\n });\n }\n /**\n * Get transaction blocks for a given query criteria\n */\n async queryTransactionBlocks(input) {\n return await this.transport.request({\n method: \"suix_queryTransactionBlocks\",\n params: [\n {\n filter: input.filter,\n options: input.options\n },\n input.cursor,\n input.limit,\n (input.order || \"descending\") === \"descending\"\n ]\n });\n }\n async getTransactionBlock(input) {\n if (!isValidTransactionDigest(input.digest)) {\n throw new Error(\"Invalid Transaction digest\");\n }\n return await this.transport.request({\n method: \"sui_getTransactionBlock\",\n params: [input.digest, input.options]\n });\n }\n async multiGetTransactionBlocks(input) {\n input.digests.forEach((d) => {\n if (!isValidTransactionDigest(d)) {\n throw new Error(`Invalid Transaction digest ${d}`);\n }\n });\n const hasDuplicates = input.digests.length !== new Set(input.digests).size;\n if (hasDuplicates) {\n throw new Error(`Duplicate digests in batch call ${input.digests}`);\n }\n return await this.transport.request({\n method: \"sui_multiGetTransactionBlocks\",\n params: [input.digests, input.options]\n });\n }\n async executeTransactionBlock(input) {\n return await this.transport.request({\n method: \"sui_executeTransactionBlock\",\n params: [\n typeof input.transactionBlock === \"string\" ? input.transactionBlock : toB64(input.transactionBlock),\n Array.isArray(input.signature) ? input.signature : [input.signature],\n input.options,\n input.requestType\n ]\n });\n }\n async signAndExecuteTransaction({\n transaction,\n signer,\n ...input\n }) {\n let transactionBytes;\n if (transaction instanceof Uint8Array) {\n transactionBytes = transaction;\n } else {\n transaction.setSenderIfNotSet(signer.toSuiAddress());\n transactionBytes = await transaction.build({ client: this });\n }\n const { signature, bytes } = await signer.signTransaction(transactionBytes);\n return this.executeTransactionBlock({\n transactionBlock: bytes,\n signature,\n ...input\n });\n }\n /**\n * Get total number of transactions\n */\n async getTotalTransactionBlocks() {\n const resp = await this.transport.request({\n method: \"sui_getTotalTransactionBlocks\",\n params: []\n });\n return BigInt(resp);\n }\n /**\n * Getting the reference gas price for the network\n */\n async getReferenceGasPrice() {\n const resp = await this.transport.request({\n method: \"suix_getReferenceGasPrice\",\n params: []\n });\n return BigInt(resp);\n }\n /**\n * Return the delegated stakes for an address\n */\n async getStakes(input) {\n if (!input.owner || !isValidSuiAddress(normalizeSuiAddress(input.owner))) {\n throw new Error(\"Invalid Sui address\");\n }\n return await this.transport.request({ method: \"suix_getStakes\", params: [input.owner] });\n }\n /**\n * Return the delegated stakes queried by id.\n */\n async getStakesByIds(input) {\n input.stakedSuiIds.forEach((id) => {\n if (!id || !isValidSuiObjectId(normalizeSuiObjectId(id))) {\n throw new Error(`Invalid Sui Stake id ${id}`);\n }\n });\n return await this.transport.request({\n method: \"suix_getStakesByIds\",\n params: [input.stakedSuiIds]\n });\n }\n /**\n * Return the latest system state content.\n */\n async getLatestSuiSystemState() {\n return await this.transport.request({ method: \"suix_getLatestSuiSystemState\", params: [] });\n }\n /**\n * Get events for a given query criteria\n */\n async queryEvents(input) {\n return await this.transport.request({\n method: \"suix_queryEvents\",\n params: [\n input.query,\n input.cursor,\n input.limit,\n (input.order || \"descending\") === \"descending\"\n ]\n });\n }\n /**\n * Subscribe to get notifications whenever an event matching the filter occurs\n *\n * @deprecated\n */\n async subscribeEvent(input) {\n return this.transport.subscribe({\n method: \"suix_subscribeEvent\",\n unsubscribe: \"suix_unsubscribeEvent\",\n params: [input.filter],\n onMessage: input.onMessage\n });\n }\n /**\n * @deprecated\n */\n async subscribeTransaction(input) {\n return this.transport.subscribe({\n method: \"suix_subscribeTransaction\",\n unsubscribe: \"suix_unsubscribeTransaction\",\n params: [input.filter],\n onMessage: input.onMessage\n });\n }\n /**\n * Runs the transaction block in dev-inspect mode. Which allows for nearly any\n * transaction (or Move call) with any arguments. Detailed results are\n * provided, including both the transaction effects and any return values.\n */\n async devInspectTransactionBlock(input) {\n let devInspectTxBytes;\n if (isTransaction(input.transactionBlock)) {\n input.transactionBlock.setSenderIfNotSet(input.sender);\n devInspectTxBytes = toB64(\n await input.transactionBlock.build({\n client: this,\n onlyTransactionKind: true\n })\n );\n } else if (typeof input.transactionBlock === \"string\") {\n devInspectTxBytes = input.transactionBlock;\n } else if (input.transactionBlock instanceof Uint8Array) {\n devInspectTxBytes = toB64(input.transactionBlock);\n } else {\n throw new Error(\"Unknown transaction block format.\");\n }\n return await this.transport.request({\n method: \"sui_devInspectTransactionBlock\",\n params: [input.sender, devInspectTxBytes, input.gasPrice?.toString(), input.epoch]\n });\n }\n /**\n * Dry run a transaction block and return the result.\n */\n async dryRunTransactionBlock(input) {\n return await this.transport.request({\n method: \"sui_dryRunTransactionBlock\",\n params: [\n typeof input.transactionBlock === \"string\" ? input.transactionBlock : toB64(input.transactionBlock)\n ]\n });\n }\n /**\n * Return the list of dynamic field objects owned by an object\n */\n async getDynamicFields(input) {\n if (!input.parentId || !isValidSuiObjectId(normalizeSuiObjectId(input.parentId))) {\n throw new Error(\"Invalid Sui Object id\");\n }\n return await this.transport.request({\n method: \"suix_getDynamicFields\",\n params: [input.parentId, input.cursor, input.limit]\n });\n }\n /**\n * Return the dynamic field object information for a specified object\n */\n async getDynamicFieldObject(input) {\n return await this.transport.request({\n method: \"suix_getDynamicFieldObject\",\n params: [input.parentId, input.name]\n });\n }\n /**\n * Get the sequence number of the latest checkpoint that has been executed\n */\n async getLatestCheckpointSequenceNumber() {\n const resp = await this.transport.request({\n method: \"sui_getLatestCheckpointSequenceNumber\",\n params: []\n });\n return String(resp);\n }\n /**\n * Returns information about a given checkpoint\n */\n async getCheckpoint(input) {\n return await this.transport.request({ method: \"sui_getCheckpoint\", params: [input.id] });\n }\n /**\n * Returns historical checkpoints paginated\n */\n async getCheckpoints(input) {\n return await this.transport.request({\n method: \"sui_getCheckpoints\",\n params: [input.cursor, input?.limit, input.descendingOrder]\n });\n }\n /**\n * Return the committee information for the asked epoch\n */\n async getCommitteeInfo(input) {\n return await this.transport.request({\n method: \"suix_getCommitteeInfo\",\n params: [input?.epoch]\n });\n }\n async getNetworkMetrics() {\n return await this.transport.request({ method: \"suix_getNetworkMetrics\", params: [] });\n }\n async getAddressMetrics() {\n return await this.transport.request({ method: \"suix_getLatestAddressMetrics\", params: [] });\n }\n async getEpochMetrics(input) {\n return await this.transport.request({\n method: \"suix_getEpochMetrics\",\n params: [input?.cursor, input?.limit, input?.descendingOrder]\n });\n }\n async getAllEpochAddressMetrics(input) {\n return await this.transport.request({\n method: \"suix_getAllEpochAddressMetrics\",\n params: [input?.descendingOrder]\n });\n }\n /**\n * Return the committee information for the asked epoch\n */\n async getEpochs(input) {\n return await this.transport.request({\n method: \"suix_getEpochs\",\n params: [input?.cursor, input?.limit, input?.descendingOrder]\n });\n }\n /**\n * Returns list of top move calls by usage\n */\n async getMoveCallMetrics() {\n return await this.transport.request({ method: \"suix_getMoveCallMetrics\", params: [] });\n }\n /**\n * Return the committee information for the asked epoch\n */\n async getCurrentEpoch() {\n return await this.transport.request({ method: \"suix_getCurrentEpoch\", params: [] });\n }\n /**\n * Return the Validators APYs\n */\n async getValidatorsApy() {\n return await this.transport.request({ method: \"suix_getValidatorsApy\", params: [] });\n }\n // TODO: Migrate this to `sui_getChainIdentifier` once it is widely available.\n async getChainIdentifier() {\n const checkpoint = await this.getCheckpoint({ id: \"0\" });\n const bytes = fromB58(checkpoint.digest);\n return toHEX(bytes.slice(0, 4));\n }\n async resolveNameServiceAddress(input) {\n return await this.transport.request({\n method: \"suix_resolveNameServiceAddress\",\n params: [input.name]\n });\n }\n async resolveNameServiceNames({\n format = \"dot\",\n ...input\n }) {\n const { nextCursor, hasNextPage, data } = await this.transport.request({\n method: \"suix_resolveNameServiceNames\",\n params: [input.address, input.cursor, input.limit]\n });\n return {\n hasNextPage,\n nextCursor,\n data: data.map((name) => normalizeSuiNSName(name, format))\n };\n }\n async getProtocolConfig(input) {\n return await this.transport.request({\n method: \"sui_getProtocolConfig\",\n params: [input?.version]\n });\n }\n /**\n * Wait for a transaction block result to be available over the API.\n * This can be used in conjunction with `executeTransactionBlock` to wait for the transaction to\n * be available via the API.\n * This currently polls the `getTransactionBlock` API to check for the transaction.\n */\n async waitForTransaction({\n signal,\n timeout = 60 * 1e3,\n pollInterval = 2 * 1e3,\n ...input\n }) {\n const timeoutSignal = AbortSignal.timeout(timeout);\n const timeoutPromise = new Promise((_, reject) => {\n timeoutSignal.addEventListener(\"abort\", () => reject(timeoutSignal.reason));\n });\n timeoutPromise.catch(() => {\n });\n while (!timeoutSignal.aborted) {\n signal?.throwIfAborted();\n try {\n return await this.getTransactionBlock(input);\n } catch (e) {\n await Promise.race([\n new Promise((resolve) => setTimeout(resolve, pollInterval)),\n timeoutPromise\n ]);\n }\n }\n timeoutSignal.throwIfAborted();\n throw new Error(\"Unexpected error while waiting for transaction block.\");\n }\n}\nexport {\n SuiClient,\n isSuiClient\n};\n//# sourceMappingURL=client.js.map\n","function getFullnodeUrl(network) {\n switch (network) {\n case \"mainnet\":\n return \"https://fullnode.mainnet.sui.io:443\";\n case \"testnet\":\n return \"https://fullnode.testnet.sui.io:443\";\n case \"devnet\":\n return \"https://fullnode.devnet.sui.io:443\";\n case \"localnet\":\n return \"http://127.0.0.1:9000\";\n default:\n throw new Error(`Unknown network: ${network}`);\n }\n}\nexport {\n getFullnodeUrl\n};\n//# sourceMappingURL=network.js.map\n","/*!\r\n * decimal.js v10.4.3\r\n * An arbitrary-precision Decimal type for JavaScript.\r\n * https://github.com/MikeMcl/decimal.js\r\n * Copyright (c) 2022 Michael Mclaughlin <M8ch88l@gmail.com>\r\n * MIT Licence\r\n */\r\n\r\n\r\n// ----------------------------------- EDITABLE DEFAULTS ------------------------------------ //\r\n\r\n\r\n // The maximum exponent magnitude.\r\n // The limit on the value of `toExpNeg`, `toExpPos`, `minE` and `maxE`.\r\nvar EXP_LIMIT = 9e15, // 0 to 9e15\r\n\r\n // The limit on the value of `precision`, and on the value of the first argument to\r\n // `toDecimalPlaces`, `toExponential`, `toFixed`, `toPrecision` and `toSignificantDigits`.\r\n MAX_DIGITS = 1e9, // 0 to 1e9\r\n\r\n // Base conversion alphabet.\r\n NUMERALS = '0123456789abcdef',\r\n\r\n // The natural logarithm of 10 (1025 digits).\r\n LN10 = '2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058',\r\n\r\n // Pi (1025 digits).\r\n PI = '3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789',\r\n\r\n\r\n // The initial configuration properties of the Decimal constructor.\r\n DEFAULTS = {\r\n\r\n // These values must be integers within the stated ranges (inclusive).\r\n // Most of these values can be changed at run-time using the `Decimal.config` method.\r\n\r\n // The maximum number of significant digits of the result of a calculation or base conversion.\r\n // E.g. `Decimal.config({ precision: 20 });`\r\n precision: 20, // 1 to MAX_DIGITS\r\n\r\n // The rounding mode used when rounding to `precision`.\r\n //\r\n // ROUND_UP 0 Away from zero.\r\n // ROUND_DOWN 1 Towards zero.\r\n // ROUND_CEIL 2 Towards +Infinity.\r\n // ROUND_FLOOR 3 Towards -Infinity.\r\n // ROUND_HALF_UP 4 Towards nearest neighbour. If equidistant, up.\r\n // ROUND_HALF_DOWN 5 Towards nearest neighbour. If equidistant, down.\r\n // ROUND_HALF_EVEN 6 Towards nearest neighbour. If equidistant, towards even neighbour.\r\n // ROUND_HALF_CEIL 7 Towards nearest neighbour. If equidistant, towards +Infinity.\r\n // ROUND_HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity.\r\n //\r\n // E.g.\r\n // `Decimal.rounding = 4;`\r\n // `Decimal.rounding = Decimal.ROUND_HALF_UP;`\r\n rounding: 4, // 0 to 8\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 (JavaScript %).\r\n // FLOOR 3 The remainder has the same sign as the divisor (Python %).\r\n // HALF_EVEN 6 The IEEE 754 remainder function.\r\n // EUCLID 9 Euclidian division. q = sign(n) * floor(a / abs(n)). Always positive.\r\n //\r\n // Truncated division (1), floored division (3), the IEEE 754 remainder (6), and Euclidian\r\n // division (9) are commonly used for the modulus operation. The other rounding modes can also\r\n // be used, but they may not give useful results.\r\n modulo: 1, // 0 to 9\r\n\r\n // The exponent value at and beneath which `toString` returns exponential notation.\r\n // JavaScript numbers: -7\r\n toExpNeg: -7, // 0 to -EXP_LIMIT\r\n\r\n // The exponent value at and above which `toString` returns exponential notation.\r\n // JavaScript numbers: 21\r\n toExpPos: 21, // 0 to EXP_LIMIT\r\n\r\n // The minimum exponent value, beneath which underflow to zero occurs.\r\n // JavaScript numbers: -324 (5e-324)\r\n minE: -EXP_LIMIT, // -1 to -EXP_LIMIT\r\n\r\n // The maximum exponent value, above which overflow to Infinity occurs.\r\n // JavaScript numbers: 308 (1.7976931348623157e+308)\r\n maxE: EXP_LIMIT, // 1 to EXP_LIMIT\r\n\r\n // Whether to use cryptographically-secure random number generation, if available.\r\n crypto: false // true/false\r\n },\r\n\r\n\r\n// ----------------------------------- END OF EDITABLE DEFAULTS ------------------------------- //\r\n\r\n\r\n inexact, quadrant,\r\n external = true,\r\n\r\n decimalError = '[DecimalError] ',\r\n invalidArgument = decimalError + 'Invalid argument: ',\r\n precisionLimitExceeded = decimalError + 'Precision limit exceeded',\r\n cryptoUnavailable = decimalError + 'crypto unavailable',\r\n tag = '[object Decimal]',\r\n\r\n mathfloor = Math.floor,\r\n mathpow = Math.pow,\r\n\r\n isBinary = /^0b([01]+(\\.[01]*)?|\\.[01]+)(p[+-]?\\d+)?$/i,\r\n isHex = /^0x([0-9a-f]+(\\.[0-9a-f]*)?|\\.[0-9a-f]+)(p[+-]?\\d+)?$/i,\r\n isOctal = /^0o([0-7]+(\\.[0-7]*)?|\\.[0-7]+)(p[+-]?\\d+)?$/i,\r\n isDecimal = /^(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i,\r\n\r\n BASE = 1e7,\r\n LOG_BASE = 7,\r\n MAX_SAFE_INTEGER = 9007199254740991,\r\n\r\n LN10_PRECISION = LN10.length - 1,\r\n PI_PRECISION = PI.length - 1,\r\n\r\n // Decimal.prototype object\r\n P = { toStringTag: tag };\r\n\r\n\r\n// Decimal prototype methods\r\n\r\n\r\n/*\r\n * absoluteValue abs\r\n * ceil\r\n * clampedTo clamp\r\n * comparedTo cmp\r\n * cosine cos\r\n * cubeRoot cbrt\r\n * decimalPlaces dp\r\n * dividedBy div\r\n * dividedToIntegerBy divToInt\r\n * equals eq\r\n * floor\r\n * greaterThan gt\r\n * greaterThanOrEqualTo gte\r\n * hyperbolicCosine cosh\r\n * hyperbolicSine sinh\r\n * hyperbolicTangent tanh\r\n * inverseCosine acos\r\n * inverseHyperbolicCosine acosh\r\n * inverseHyperbolicSine asinh\r\n * inverseHyperbolicTangent atanh\r\n * inverseSine asin\r\n * inverseTangent atan\r\n * isFinite\r\n * isInteger isInt\r\n * isNaN\r\n * isNegative isNeg\r\n * isPositive isPos\r\n * isZero\r\n * lessThan lt\r\n * lessThanOrEqualTo lte\r\n * logarithm log\r\n * [maximum] [max]\r\n * [minimum] [min]\r\n * minus sub\r\n * modulo mod\r\n * naturalExponential exp\r\n * naturalLogarithm ln\r\n * negated neg\r\n * plus add\r\n * precision sd\r\n * round\r\n * sine sin\r\n * squareRoot sqrt\r\n * tangent tan\r\n * times mul\r\n * toBinary\r\n * toDecimalPlaces toDP\r\n * toExponential\r\n * toFixed\r\n * toFraction\r\n * toHexadecimal toHex\r\n * toNearest\r\n * toNumber\r\n * toOctal\r\n * toPower pow\r\n * toPrecision\r\n * toSignificantDigits toSD\r\n * toString\r\n * truncated trunc\r\n * valueOf toJSON\r\n */\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the absolute value of this Decimal.\r\n *\r\n */\r\nP.absoluteValue = P.abs = function () {\r\n var x = new this.constructor(this);\r\n if (x.s < 0) x.s = 1;\r\n return finalise(x);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a whole number in the\r\n * direction of positive Infinity.\r\n *\r\n */\r\nP.ceil = function () {\r\n return finalise(new this.constructor(this), this.e + 1, 2);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal clamped to the range\r\n * delineated by `min` and `max`.\r\n *\r\n * min {number|string|Decimal}\r\n * max {number|string|Decimal}\r\n *\r\n */\r\nP.clampedTo = P.clamp = function (min, max) {\r\n var k,\r\n x = this,\r\n Ctor = x.constructor;\r\n min = new Ctor(min);\r\n max = new Ctor(max);\r\n if (!min.s || !max.s) return new Ctor(NaN);\r\n if (min.gt(max)) throw Error(invalidArgument + max);\r\n k = x.cmp(min);\r\n return k < 0 ? min : x.cmp(max) > 0 ? max : new Ctor(x);\r\n};\r\n\r\n\r\n/*\r\n * Return\r\n * 1 if the value of this Decimal is greater than the value of `y`,\r\n * -1 if the value of this Decimal is less than the value of `y`,\r\n * 0 if they have the same value,\r\n * NaN if the value of either Decimal is NaN.\r\n *\r\n */\r\nP.comparedTo = P.cmp = function (y) {\r\n var i, j, xdL, ydL,\r\n x = this,\r\n xd = x.d,\r\n yd = (y = new x.constructor(y)).d,\r\n xs = x.s,\r\n ys = y.s;\r\n\r\n // Either NaN or ±Infinity?\r\n if (!xd || !yd) {\r\n return !xs || !ys ? NaN : xs !== ys ? xs : xd === yd ? 0 : !xd ^ xs < 0 ? 1 : -1;\r\n }\r\n\r\n // Either zero?\r\n if (!xd[0] || !yd[0]) return xd[0] ? xs : yd[0] ? -ys : 0;\r\n\r\n // Signs differ?\r\n if (xs !== ys) return xs;\r\n\r\n // Compare exponents.\r\n if (x.e !== y.e) return x.e > y.e ^ xs < 0 ? 1 : -1;\r\n\r\n xdL = xd.length;\r\n ydL = yd.length;\r\n\r\n // Compare digit by digit.\r\n for (i = 0, j = xdL < ydL ? xdL : ydL; i < j; ++i) {\r\n if (xd[i] !== yd[i]) return xd[i] > yd[i] ^ xs < 0 ? 1 : -1;\r\n }\r\n\r\n // Compare lengths.\r\n return xdL === ydL ? 0 : xdL > ydL ^ xs < 0 ? 1 : -1;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the cosine of the value in radians of this Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-1, 1]\r\n *\r\n * cos(0) = 1\r\n * cos(-0) = 1\r\n * cos(Infinity) = NaN\r\n * cos(-Infinity) = NaN\r\n * cos(NaN) = NaN\r\n *\r\n */\r\nP.cosine = P.cos = function () {\r\n var pr, rm,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (!x.d) return new Ctor(NaN);\r\n\r\n // cos(0) = cos(-0) = 1\r\n if (!x.d[0]) return new Ctor(1);\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n Ctor.precision = pr + Math.max(x.e, x.sd()) + LOG_BASE;\r\n Ctor.rounding = 1;\r\n\r\n x = cosine(Ctor, toLessThanHalfPi(Ctor, x));\r\n\r\n Ctor.precision = pr;\r\n Ctor.rounding = rm;\r\n\r\n return finalise(quadrant == 2 || quadrant == 3 ? x.neg() : x, pr, rm, true);\r\n};\r\n\r\n\r\n/*\r\n *\r\n * Return a new Decimal whose value is the cube root of the value of this Decimal, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * cbrt(0) = 0\r\n * cbrt(-0) = -0\r\n * cbrt(1) = 1\r\n * cbrt(-1) = -1\r\n * cbrt(N) = N\r\n * cbrt(-I) = -I\r\n * cbrt(I) = I\r\n *\r\n * Math.cbrt(x) = (x < 0 ? -Math.pow(-x, 1/3) : Math.pow(x, 1/3))\r\n *\r\n */\r\nP.cubeRoot = P.cbrt = function () {\r\n var e, m, n, r, rep, s, sd, t, t3, t3plusx,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (!x.isFinite() || x.isZero()) return new Ctor(x);\r\n external = false;\r\n\r\n // Initial estimate.\r\n s = x.s * mathpow(x.s * x, 1 / 3);\r\n\r\n // Math.cbrt underflow/overflow?\r\n // Pass x to Math.pow as integer, then adjust the exponent of the result.\r\n if (!s || Math.abs(s) == 1 / 0) {\r\n n = digitsToString(x.d);\r\n e = x.e;\r\n\r\n // Adjust n exponent so it is a multiple of 3 away from x exponent.\r\n if (s = (e - n.length + 1) % 3) n += (s == 1 || s == -2 ? '0' : '00');\r\n s = mathpow(n, 1 / 3);\r\n\r\n // Rarely, e may be one less than the result exponent value.\r\n e = mathfloor((e + 1) / 3) - (e % 3 == (e < 0 ? -1 : 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 Ctor(n);\r\n r.s = x.s;\r\n } else {\r\n r = new Ctor(s.toString());\r\n }\r\n\r\n sd = (e = Ctor.precision) + 3;\r\n\r\n // Halley's method.\r\n // TODO? Compare Newton's method.\r\n for (;;) {\r\n t = r;\r\n t3 = t.times(t).times(t);\r\n t3plusx = t3.plus(x);\r\n r = divide(t3plusx.plus(x).times(t), t3plusx.plus(t3), sd + 2, 1);\r\n\r\n // TODO? Replace with for-loop and checkRoundingDigits.\r\n if (digitsToString(t.d).slice(0, sd) === (n = digitsToString(r.d)).slice(0, sd)) {\r\n n = n.slice(sd - 3, sd + 1);\r\n\r\n // The 4th rounding digit may be in error by -1 so if the 4 rounding digits are 9999 or 4999\r\n // , i.e. approaching a rounding boundary, continue the 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 exact result as the\r\n // nines may infinitely repeat.\r\n if (!rep) {\r\n finalise(t, e + 1, 0);\r\n\r\n if (t.times(t).times(t).eq(x)) {\r\n r = t;\r\n break;\r\n }\r\n }\r\n\r\n sd += 4;\r\n rep = 1;\r\n } else {\r\n\r\n // If the rounding digits are null, 0{0,4} or 50{0,3}, check for an exact result.\r\n // 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 finalise(r, e + 1, 1);\r\n m = !r.times(r).times(r).eq(x);\r\n }\r\n\r\n break;\r\n }\r\n }\r\n }\r\n\r\n external = true;\r\n\r\n return finalise(r, e, Ctor.rounding, m);\r\n};\r\n\r\n\r\n/*\r\n * Return the number of decimal places of the value of this Decimal.\r\n *\r\n */\r\nP.decimalPlaces = P.dp = function () {\r\n var w,\r\n d = this.d,\r\n n = NaN;\r\n\r\n if (d) {\r\n w = d.length - 1;\r\n n = (w - mathfloor(this.e / LOG_BASE)) * LOG_BASE;\r\n\r\n // Subtract the number of trailing zeros of the last word.\r\n w = d[w];\r\n if (w) for (; w % 10 == 0; w /= 10) n--;\r\n if (n < 0) n = 0;\r\n }\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 Decimal whose value is the value of this Decimal divided by `y`, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n */\r\nP.dividedBy = P.div = function (y) {\r\n return divide(this, new this.constructor(y));\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the integer part of dividing the value of this Decimal\r\n * by the value of `y`, rounded to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n */\r\nP.dividedToIntegerBy = P.divToInt = function (y) {\r\n var x = this,\r\n Ctor = x.constructor;\r\n return finalise(divide(x, new Ctor(y), 0, 1, 1), Ctor.precision, Ctor.rounding);\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is equal to the value of `y`, otherwise return false.\r\n *\r\n */\r\nP.equals = P.eq = function (y) {\r\n return this.cmp(y) === 0;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a whole number in the\r\n * direction of negative Infinity.\r\n *\r\n */\r\nP.floor = function () {\r\n return finalise(new this.constructor(this), this.e + 1, 3);\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is greater than the value of `y`, otherwise return\r\n * false.\r\n *\r\n */\r\nP.greaterThan = P.gt = function (y) {\r\n return this.cmp(y) > 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is greater than or equal to the value of `y`,\r\n * otherwise return false.\r\n *\r\n */\r\nP.greaterThanOrEqualTo = P.gte = function (y) {\r\n var k = this.cmp(y);\r\n return k == 1 || k === 0;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the hyperbolic cosine of the value in radians of this\r\n * Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [1, Infinity]\r\n *\r\n * cosh(x) = 1 + x^2/2! + x^4/4! + x^6/6! + ...\r\n *\r\n * cosh(0) = 1\r\n * cosh(-0) = 1\r\n * cosh(Infinity) = Infinity\r\n * cosh(-Infinity) = Infinity\r\n * cosh(NaN) = NaN\r\n *\r\n * x time taken (ms) result\r\n * 1000 9 9.8503555700852349694e+433\r\n * 10000 25 4.4034091128314607936e+4342\r\n * 100000 171 1.4033316802130615897e+43429\r\n * 1000000 3817 1.5166076984010437725e+434294\r\n * 10000000 abandoned after 2 minute wait\r\n *\r\n * TODO? Compare performance of cosh(x) = 0.5 * (exp(x) + exp(-x))\r\n *\r\n */\r\nP.hyperbolicCosine = P.cosh = function () {\r\n var k, n, pr, rm, len,\r\n x = this,\r\n Ctor = x.constructor,\r\n one = new Ctor(1);\r\n\r\n if (!x.isFinite()) return new Ctor(x.s ? 1 / 0 : NaN);\r\n if (x.isZero()) return one;\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n Ctor.precision = pr + Math.max(x.e, x.sd()) + 4;\r\n Ctor.rounding = 1;\r\n len = x.d.length;\r\n\r\n // Argument reduction: cos(4x) = 1 - 8cos^2(x) + 8cos^4(x) + 1\r\n // i.e. cos(x) = 1 - cos^2(x/4)(8 - 8cos^2(x/4))\r\n\r\n // Estimate the optimum number of times to use the argument reduction.\r\n // TODO? Estimation reused from cosine() and may not be optimal here.\r\n if (len < 32) {\r\n k = Math.ceil(len / 3);\r\n n = (1 / tinyPow(4, k)).toString();\r\n } else {\r\n k = 16;\r\n n = '2.3283064365386962890625e-10';\r\n }\r\n\r\n x = taylorSeries(Ctor, 1, x.times(n), new Ctor(1), true);\r\n\r\n // Reverse argument reduction\r\n var cosh2_x,\r\n i = k,\r\n d8 = new Ctor(8);\r\n for (; i--;) {\r\n cosh2_x = x.times(x);\r\n x = one.minus(cosh2_x.times(d8.minus(cosh2_x.times(d8))));\r\n }\r\n\r\n return finalise(x, Ctor.precision = pr, Ctor.rounding = rm, true);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the hyperbolic sine of the value in radians of this\r\n * Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-Infinity, Infinity]\r\n *\r\n * sinh(x) = x + x^3/3! + x^5/5! + x^7/7! + ...\r\n *\r\n * sinh(0) = 0\r\n * sinh(-0) = -0\r\n * sinh(Infinity) = Infinity\r\n * sinh(-Infinity) = -Infinity\r\n * sinh(NaN) = NaN\r\n *\r\n * x time taken (ms)\r\n * 10 2 ms\r\n * 100 5 ms\r\n * 1000 14 ms\r\n * 10000 82 ms\r\n * 100000 886 ms 1.4033316802130615897e+43429\r\n * 200000 2613 ms\r\n * 300000 5407 ms\r\n * 400000 8824 ms\r\n * 500000 13026 ms 8.7080643612718084129e+217146\r\n * 1000000 48543 ms\r\n *\r\n * TODO? Compare performance of sinh(x) = 0.5 * (exp(x) - exp(-x))\r\n *\r\n */\r\nP.hyperbolicSine = P.sinh = function () {\r\n var k, pr, rm, len,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (!x.isFinite() || x.isZero()) return new Ctor(x);\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n Ctor.precision = pr + Math.max(x.e, x.sd()) + 4;\r\n Ctor.rounding = 1;\r\n len = x.d.length;\r\n\r\n if (len < 3) {\r\n x = taylorSeries(Ctor, 2, x, x, true);\r\n } else {\r\n\r\n // Alternative argument reduction: sinh(3x) = sinh(x)(3 + 4sinh^2(x))\r\n // i.e. sinh(x) = sinh(x/3)(3 + 4sinh^2(x/3))\r\n // 3 multiplications and 1 addition\r\n\r\n // Argument reduction: sinh(5x) = sinh(x)(5 + sinh^2(x)(20 + 16sinh^2(x)))\r\n // i.e. sinh(x) = sinh(x/5)(5 + sinh^2(x/5)(20 + 16sinh^2(x/5)))\r\n // 4 multiplications and 2 additions\r\n\r\n // Estimate the optimum number of times to use the argument reduction.\r\n k = 1.4 * Math.sqrt(len);\r\n k = k > 16 ? 16 : k | 0;\r\n\r\n x = x.times(1 / tinyPow(5, k));\r\n x = taylorSeries(Ctor, 2, x, x, true);\r\n\r\n // Reverse argument reduction\r\n var sinh2_x,\r\n d5 = new Ctor(5),\r\n d16 = new Ctor(16),\r\n d20 = new Ctor(20);\r\n for (; k--;) {\r\n sinh2_x = x.times(x);\r\n x = x.times(d5.plus(sinh2_x.times(d16.times(sinh2_x).plus(d20))));\r\n }\r\n }\r\n\r\n Ctor.precision = pr;\r\n Ctor.rounding = rm;\r\n\r\n return finalise(x, pr, rm, true);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the hyperbolic tangent of the value in radians of this\r\n * Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-1, 1]\r\n *\r\n * tanh(x) = sinh(x) / cosh(x)\r\n *\r\n * tanh(0) = 0\r\n * tanh(-0) = -0\r\n * tanh(Infinity) = 1\r\n * tanh(-Infinity) = -1\r\n * tanh(NaN) = NaN\r\n *\r\n */\r\nP.hyperbolicTangent = P.tanh = function () {\r\n var pr, rm,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (!x.isFinite()) return new Ctor(x.s);\r\n if (x.isZero()) return new Ctor(x);\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n Ctor.precision = pr + 7;\r\n Ctor.rounding = 1;\r\n\r\n return divide(x.sinh(), x.cosh(), Ctor.precision = pr, Ctor.rounding = rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the arccosine (inverse cosine) in radians of the value of\r\n * this Decimal.\r\n *\r\n * Domain: [-1, 1]\r\n * Range: [0, pi]\r\n *\r\n * acos(x) = pi/2 - asin(x)\r\n *\r\n * acos(0) = pi/2\r\n * acos(-0) = pi/2\r\n * acos(1) = 0\r\n * acos(-1) = pi\r\n * acos(1/2) = pi/3\r\n * acos(-1/2) = 2*pi/3\r\n * acos(|x| > 1) = NaN\r\n * acos(NaN) = NaN\r\n *\r\n */\r\nP.inverseCosine = P.acos = function () {\r\n var halfPi,\r\n x = this,\r\n Ctor = x.constructor,\r\n k = x.abs().cmp(1),\r\n pr = Ctor.precision,\r\n rm = Ctor.rounding;\r\n\r\n if (k !== -1) {\r\n return k === 0\r\n // |x| is 1\r\n ? x.isNeg() ? getPi(Ctor, pr, rm) : new Ctor(0)\r\n // |x| > 1 or x is NaN\r\n : new Ctor(NaN);\r\n }\r\n\r\n if (x.isZero()) return getPi(Ctor, pr + 4, rm).times(0.5);\r\n\r\n // TODO? Special case acos(0.5) = pi/3 and acos(-0.5) = 2*pi/3\r\n\r\n Ctor.precision = pr + 6;\r\n Ctor.rounding = 1;\r\n\r\n x = x.asin();\r\n halfPi = getPi(Ctor, pr + 4, rm).times(0.5);\r\n\r\n Ctor.precision = pr;\r\n Ctor.rounding = rm;\r\n\r\n return halfPi.minus(x);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic cosine in radians of the\r\n * value of this Decimal.\r\n *\r\n * Domain: [1, Infinity]\r\n * Range: [0, Infinity]\r\n *\r\n * acosh(x) = ln(x + sqrt(x^2 - 1))\r\n *\r\n * acosh(x < 1) = NaN\r\n * acosh(NaN) = NaN\r\n * acosh(Infinity) = Infinity\r\n * acosh(-Infinity) = NaN\r\n * acosh(0) = NaN\r\n * acosh(-0) = NaN\r\n * acosh(1) = 0\r\n * acosh(-1) = NaN\r\n *\r\n */\r\nP.inverseHyperbolicCosine = P.acosh = function () {\r\n var pr, rm,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (x.lte(1)) return new Ctor(x.eq(1) ? 0 : NaN);\r\n if (!x.isFinite()) return new Ctor(x);\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n Ctor.precision = pr + Math.max(Math.abs(x.e), x.sd()) + 4;\r\n Ctor.rounding = 1;\r\n external = false;\r\n\r\n x = x.times(x).minus(1).sqrt().plus(x);\r\n\r\n external = true;\r\n Ctor.precision = pr;\r\n Ctor.rounding = rm;\r\n\r\n return x.ln();\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic sine in radians of the value\r\n * of this Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-Infinity, Infinity]\r\n *\r\n * asinh(x) = ln(x + sqrt(x^2 + 1))\r\n *\r\n * asinh(NaN) = NaN\r\n * asinh(Infinity) = Infinity\r\n * asinh(-Infinity) = -Infinity\r\n * asinh(0) = 0\r\n * asinh(-0) = -0\r\n *\r\n */\r\nP.inverseHyperbolicSine = P.asinh = function () {\r\n var pr, rm,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (!x.isFinite() || x.isZero()) return new Ctor(x);\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n Ctor.precision = pr + 2 * Math.max(Math.abs(x.e), x.sd()) + 6;\r\n Ctor.rounding = 1;\r\n external = false;\r\n\r\n x = x.times(x).plus(1).sqrt().plus(x);\r\n\r\n external = true;\r\n Ctor.precision = pr;\r\n Ctor.rounding = rm;\r\n\r\n return x.ln();\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic tangent in radians of the\r\n * value of this Decimal.\r\n *\r\n * Domain: [-1, 1]\r\n * Range: [-Infinity, Infinity]\r\n *\r\n * atanh(x) = 0.5 * ln((1 + x) / (1 - x))\r\n *\r\n * atanh(|x| > 1) = NaN\r\n * atanh(NaN) = NaN\r\n * atanh(Infinity) = NaN\r\n * atanh(-Infinity) = NaN\r\n * atanh(0) = 0\r\n * atanh(-0) = -0\r\n * atanh(1) = Infinity\r\n * atanh(-1) = -Infinity\r\n *\r\n */\r\nP.inverseHyperbolicTangent = P.atanh = function () {\r\n var pr, rm, wpr, xsd,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (!x.isFinite()) return new Ctor(NaN);\r\n if (x.e >= 0) return new Ctor(x.abs().eq(1) ? x.s / 0 : x.isZero() ? x : NaN);\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n xsd = x.sd();\r\n\r\n if (Math.max(xsd, pr) < 2 * -x.e - 1) return finalise(new Ctor(x), pr, rm, true);\r\n\r\n Ctor.precision = wpr = xsd - x.e;\r\n\r\n x = divide(x.plus(1), new Ctor(1).minus(x), wpr + pr, 1);\r\n\r\n Ctor.precision = pr + 4;\r\n Ctor.rounding = 1;\r\n\r\n x = x.ln();\r\n\r\n Ctor.precision = pr;\r\n Ctor.rounding = rm;\r\n\r\n return x.times(0.5);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the arcsine (inverse sine) in radians of the value of this\r\n * Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-pi/2, pi/2]\r\n *\r\n * asin(x) = 2*atan(x/(1 + sqrt(1 - x^2)))\r\n *\r\n * asin(0) = 0\r\n * asin(-0) = -0\r\n * asin(1/2) = pi/6\r\n * asin(-1/2) = -pi/6\r\n * asin(1) = pi/2\r\n * asin(-1) = -pi/2\r\n * asin(|x| > 1) = NaN\r\n * asin(NaN) = NaN\r\n *\r\n * TODO? Compare performance of Taylor series.\r\n *\r\n */\r\nP.inverseSine = P.asin = function () {\r\n var halfPi, k,\r\n pr, rm,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (x.isZero()) return new Ctor(x);\r\n\r\n k = x.abs().cmp(1);\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n\r\n if (k !== -1) {\r\n\r\n // |x| is 1\r\n if (k === 0) {\r\n halfPi = getPi(Ctor, pr + 4, rm).times(0.5);\r\n halfPi.s = x.s;\r\n return halfPi;\r\n }\r\n\r\n // |x| > 1 or x is NaN\r\n return new Ctor(NaN);\r\n }\r\n\r\n // TODO? Special case asin(1/2) = pi/6 and asin(-1/2) = -pi/6\r\n\r\n Ctor.precision = pr + 6;\r\n Ctor.rounding = 1;\r\n\r\n x = x.div(new Ctor(1).minus(x.times(x)).sqrt().plus(1)).atan();\r\n\r\n Ctor.precision = pr;\r\n Ctor.rounding = rm;\r\n\r\n return x.times(2);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the arctangent (inverse tangent) in radians of the value\r\n * of this Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-pi/2, pi/2]\r\n *\r\n * atan(x) = x - x^3/3 + x^5/5 - x^7/7 + ...\r\n *\r\n * atan(0) = 0\r\n * atan(-0) = -0\r\n * atan(1) = pi/4\r\n * atan(-1) = -pi/4\r\n * atan(Infinity) = pi/2\r\n * atan(-Infinity) = -pi/2\r\n * atan(NaN) = NaN\r\n *\r\n */\r\nP.inverseTangent = P.atan = function () {\r\n var i, j, k, n, px, t, r, wpr, x2,\r\n x = this,\r\n Ctor = x.constructor,\r\n pr = Ctor.precision,\r\n rm = Ctor.rounding;\r\n\r\n if (!x.isFinite()) {\r\n if (!x.s) return new Ctor(NaN);\r\n if (pr + 4 <= PI_PRECISION) {\r\n r = getPi(Ctor, pr + 4, rm).times(0.5);\r\n r.s = x.s;\r\n return r;\r\n }\r\n } else if (x.isZero()) {\r\n return new Ctor(x);\r\n } else if (x.abs().eq(1) && pr + 4 <= PI_PRECISION) {\r\n r = getPi(Ctor, pr + 4, rm).times(0.25);\r\n r.s = x.s;\r\n return r;\r\n }\r\n\r\n Ctor.precision = wpr = pr + 10;\r\n Ctor.rounding = 1;\r\n\r\n // TODO? if (x >= 1 && pr <= PI_PRECISION) atan(x) = halfPi * x.s - atan(1 / x);\r\n\r\n // Argument reduction\r\n // Ensure |x| < 0.42\r\n // atan(x) = 2 * atan(x / (1 + sqrt(1 + x^2)))\r\n\r\n k = Math.min(28, wpr / LOG_BASE + 2 | 0);\r\n\r\n for (i = k; i; --i) x = x.div(x.times(x).plus(1).sqrt().plus(1));\r\n\r\n external = false;\r\n\r\n j = Math.ceil(wpr / LOG_BASE);\r\n n = 1;\r\n x2 = x.times(x);\r\n r = new Ctor(x);\r\n px = x;\r\n\r\n // atan(x) = x - x^3/3 + x^5/5 - x^7/7 + ...\r\n for (; i !== -1;) {\r\n px = px.times(x2);\r\n t = r.minus(px.div(n += 2));\r\n\r\n px = px.times(x2);\r\n r = t.plus(px.div(n += 2));\r\n\r\n if (r.d[j] !== void 0) for (i = j; r.d[i] === t.d[i] && i--;);\r\n }\r\n\r\n if (k) r = r.times(2 << (k - 1));\r\n\r\n external = true;\r\n\r\n return finalise(r, Ctor.precision = pr, Ctor.rounding = rm, true);\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is a finite number, otherwise return false.\r\n *\r\n */\r\nP.isFinite = function () {\r\n return !!this.d;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is an integer, otherwise return false.\r\n *\r\n */\r\nP.isInteger = P.isInt = function () {\r\n return !!this.d && mathfloor(this.e / LOG_BASE) > this.d.length - 2;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is NaN, otherwise return false.\r\n *\r\n */\r\nP.isNaN = function () {\r\n return !this.s;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is negative, otherwise return false.\r\n *\r\n */\r\nP.isNegative = P.isNeg = function () {\r\n return this.s < 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is positive, otherwise return false.\r\n *\r\n */\r\nP.isPositive = P.isPos = function () {\r\n return this.s > 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is 0 or -0, otherwise return false.\r\n *\r\n */\r\nP.isZero = function () {\r\n return !!this.d && this.d[0] === 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is less than `y`, otherwise return false.\r\n *\r\n */\r\nP.lessThan = P.lt = function (y) {\r\n return this.cmp(y) < 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is less than or equal to `y`, otherwise return false.\r\n *\r\n */\r\nP.lessThanOrEqualTo = P.lte = function (y) {\r\n return this.cmp(y) < 1;\r\n};\r\n\r\n\r\n/*\r\n * Return the logarithm of the value of this Decimal to the specified base, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * If no base is specified, return log[10](arg).\r\n *\r\n * log[base](arg) = ln(arg) / ln(base)\r\n *\r\n * The result will always be correctly rounded if the base of the log is 10, and 'almost always'\r\n * otherwise:\r\n *\r\n * Depending on the rounding mode, the result may be incorrectly rounded if the first fifteen\r\n * rounding digits are [49]99999999999999 or [50]00000000000000. In that case, the maximum error\r\n * between the result and the correctly rounded result will be one ulp (unit in the last place).\r\n *\r\n * log[-b](a) = NaN\r\n * log[0](a) = NaN\r\n * log[1](a) = NaN\r\n * log[NaN](a) = NaN\r\n * log[Infinity](a) = NaN\r\n * log[b](0) = -Infinity\r\n * log[b](-0) = -Infinity\r\n * log[b](-a) = NaN\r\n * log[b](1) = 0\r\n * log[b](Infinity) = Infinity\r\n * log[b](NaN) = NaN\r\n *\r\n * [base] {number|string|Decimal} The base of the logarithm.\r\n *\r\n */\r\nP.logarithm = P.log = function (base) {\r\n var isBase10, d, denominator, k, inf, num, sd, r,\r\n arg = this,\r\n Ctor = arg.constructor,\r\n pr = Ctor.precision,\r\n rm = Ctor.rounding,\r\n guard = 5;\r\n\r\n // Default base is 10.\r\n if (base == null) {\r\n base = new Ctor(10);\r\n isBase10 = true;\r\n } else {\r\n base = new Ctor(base);\r\n d = base.d;\r\n\r\n // Return NaN if base is negative, or non-finite, or is 0 or 1.\r\n if (base.s < 0 || !d || !d[0] || base.eq(1)) return new Ctor(NaN);\r\n\r\n isBase10 = base.eq(10);\r\n }\r\n\r\n d = arg.d;\r\n\r\n // Is arg negative, non-finite, 0 or 1?\r\n if (arg.s < 0 || !d || !d[0] || arg.eq(1)) {\r\n return new Ctor(d && !d[0] ? -1 / 0 : arg.s != 1 ? NaN : d ? 0 : 1 / 0);\r\n }\r\n\r\n // The result will have a non-terminating decimal expansion if base is 10 and arg is not an\r\n // integer power of 10.\r\n if (isBase10) {\r\n if (d.length > 1) {\r\n inf = true;\r\n } else {\r\n for (k = d[0]; k % 10 === 0;) k /= 10;\r\n inf = k !== 1;\r\n }\r\n }\r\n\r\n external = false;\r\n sd = pr + guard;\r\n num = naturalLogarithm(arg, sd);\r\n denominator = isBase10 ? getLn10(Ctor, sd + 10) : naturalLogarithm(base, sd);\r\n\r\n // The result will have 5 rounding digits.\r\n r = divide(num, denominator, sd, 1);\r\n\r\n // If at a rounding boundary, i.e. the result's rounding digits are [49]9999 or [50]0000,\r\n // calculate 10 further digits.\r\n //\r\n // If the result is known to have an infinite decimal expansion, repeat this until it is clear\r\n // that the result is above or below the boundary. Otherwise, if after calculating the 10\r\n // further digits, the last 14 are nines, round up and assume the result is exact.\r\n // Also assume the result is exact if the last 14 are zero.\r\n //\r\n // Example of a result that will be incorrectly rounded:\r\n // log[1048576](4503599627370502) = 2.60000000000000009610279511444746...\r\n // The above result correctly rounded using ROUND_CEIL to 1 decimal place should be 2.7, but it\r\n // will be given as 2.6 as there are 15 zeros immediately after the requested decimal place, so\r\n // the exact result would be assumed to be 2.6, which rounded using ROUND_CEIL to 1 decimal\r\n // place is still 2.6.\r\n if (checkRoundingDigits(r.d, k = pr, rm)) {\r\n\r\n do {\r\n sd += 10;\r\n num = naturalLogarithm(arg, sd);\r\n denominator = isBase10 ? getLn10(Ctor, sd + 10) : naturalLogarithm(base, sd);\r\n r = divide(num, denominator, sd, 1);\r\n\r\n if (!inf) {\r\n\r\n // Check for 14 nines from the 2nd rounding digit, as the first may be 4.\r\n if (+digitsToString(r.d).slice(k + 1, k + 15) + 1 == 1e14) {\r\n r = finalise(r, pr + 1, 0);\r\n }\r\n\r\n break;\r\n }\r\n } while (checkRoundingDigits(r.d, k += 10, rm));\r\n }\r\n\r\n external = true;\r\n\r\n return finalise(r, pr, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the maximum of the arguments and the value of this Decimal.\r\n *\r\n * arguments {number|string|Decimal}\r\n *\r\nP.max = function () {\r\n Array.prototype.push.call(arguments, this);\r\n return maxOrMin(this.constructor, arguments, 'lt');\r\n};\r\n */\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the minimum of the arguments and the value of this Decimal.\r\n *\r\n * arguments {number|string|Decimal}\r\n *\r\nP.min = function () {\r\n Array.prototype.push.call(arguments, this);\r\n return maxOrMin(this.constructor, arguments, 'gt');\r\n};\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 Decimal whose value is the value of this Decimal minus `y`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n */\r\nP.minus = P.sub = function (y) {\r\n var d, e, i, j, k, len, pr, rm, xd, xe, xLTy, yd,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n y = new Ctor(y);\r\n\r\n // If either is not finite...\r\n if (!x.d || !y.d) {\r\n\r\n // Return NaN if either is NaN.\r\n if (!x.s || !y.s) y = new Ctor(NaN);\r\n\r\n // Return y negated if x is finite and y is ±Infinity.\r\n else if (x.d) y.s = -y.s;\r\n\r\n // Return x if y is finite and x is ±Infinity.\r\n // Return x if both are ±Infinity with different signs.\r\n // Return NaN if both are ±Infinity with the same sign.\r\n else y = new Ctor(y.d || x.s !== y.s ? x : NaN);\r\n\r\n return y;\r\n }\r\n\r\n // If signs differ...\r\n if (x.s != y.s) {\r\n y.s = -y.s;\r\n return x.plus(y);\r\n }\r\n\r\n xd = x.d;\r\n yd = y.d;\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n\r\n // If either is zero...\r\n if (!xd[0] || !yd[0]) {\r\n\r\n // Return y negated if x is zero and y is non-zero.\r\n if (yd[0]) y.s = -y.s;\r\n\r\n // Return x if y is zero and x is non-zero.\r\n else if (xd[0]) y = new Ctor(x);\r\n\r\n // Return zero if both are zero.\r\n // From IEEE 754 (2008) 6.3: 0 - 0 = -0 - -0 = -0 when rounding to -Infinity.\r\n else return new Ctor(rm === 3 ? -0 : 0);\r\n\r\n return external ? finalise(y, pr, rm) : y;\r\n }\r\n\r\n // x and y are finite, non-zero numbers with the same sign.\r\n\r\n // Calculate base 1e7 exponents.\r\n e = mathfloor(y.e / LOG_BASE);\r\n xe = mathfloor(x.e / LOG_BASE);\r\n\r\n xd = xd.slice();\r\n k = xe - e;\r\n\r\n // If base 1e7 exponents differ...\r\n if (k) {\r\n xLTy = k < 0;\r\n\r\n if (xLTy) {\r\n d = xd;\r\n k = -k;\r\n len = yd.length;\r\n } else {\r\n d = yd;\r\n e = xe;\r\n len = xd.length;\r\n }\r\n\r\n // Numbers with massively different exponents would result in a very high number of\r\n // zeros needing to be prepended, but this can be avoided while still ensuring correct\r\n // rounding by limiting the number of zeros to `Math.ceil(pr / LOG_BASE) + 2`.\r\n i = Math.max(Math.ceil(pr / LOG_BASE), len) + 2;\r\n\r\n if (k > i) {\r\n k = i;\r\n d.length = 1;\r\n }\r\n\r\n // Prepend zeros to equalise exponents.\r\n d.reverse();\r\n for (i = k; i--;) d.push(0);\r\n d.reverse();\r\n\r\n // Base 1e7 exponents equal.\r\n } else {\r\n\r\n // Check digits to determine which is the bigger number.\r\n\r\n i = xd.length;\r\n len = yd.length;\r\n xLTy = i < len;\r\n if (xLTy) len = i;\r\n\r\n for (i = 0; i < len; i++) {\r\n if (xd[i] != yd[i]) {\r\n xLTy = xd[i] < yd[i];\r\n break;\r\n }\r\n }\r\n\r\n k = 0;\r\n }\r\n\r\n if (xLTy) {\r\n d = xd;\r\n xd = yd;\r\n yd = d;\r\n y.s = -y.s;\r\n }\r\n\r\n len = xd.length;\r\n\r\n // Append zeros to `xd` if shorter.\r\n // Don't add zeros to `yd` if shorter as subtraction only needs to start at `yd` length.\r\n for (i = yd.length - len; i > 0; --i) xd[len++] = 0;\r\n\r\n // Subtract yd from xd.\r\n for (i = yd.length; i > k;) {\r\n\r\n if (xd[--i] < yd[i]) {\r\n for (j = i; j && xd[--j] === 0;) xd[j] = BASE - 1;\r\n --xd[j];\r\n xd[i] += BASE;\r\n }\r\n\r\n xd[i] -= yd[i];\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (; xd[--len] === 0;) xd.pop();\r\n\r\n // Remove leading zeros and adjust exponent accordingly.\r\n for (; xd[0] === 0; xd.shift()) --e;\r\n\r\n // Zero?\r\n if (!xd[0]) return new Ctor(rm === 3 ? -0 : 0);\r\n\r\n y.d = xd;\r\n y.e = getBase10Exponent(xd, e);\r\n\r\n return external ? finalise(y, pr, rm) : y;\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 Decimal whose value is the value of this Decimal modulo `y`, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * The result depends on the modulo mode.\r\n *\r\n */\r\nP.modulo = P.mod = function (y) {\r\n var q,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n y = new Ctor(y);\r\n\r\n // Return NaN if x is ±Infinity or NaN, or y is NaN or ±0.\r\n if (!x.d || !y.s || y.d && !y.d[0]) return new Ctor(NaN);\r\n\r\n // Return x if y is ±Infinity or x is ±0.\r\n if (!y.d || x.d && !x.d[0]) {\r\n return finalise(new Ctor(x), Ctor.precision, Ctor.rounding);\r\n }\r\n\r\n // Prevent rounding of intermediate calculations.\r\n external = false;\r\n\r\n if (Ctor.modulo == 9) {\r\n\r\n // Euclidian division: q = sign(y) * floor(x / abs(y))\r\n // result = x - q * y where 0 <= result < abs(y)\r\n q = divide(x, y.abs(), 0, 3, 1);\r\n q.s *= y.s;\r\n } else {\r\n q = divide(x, y, 0, Ctor.modulo, 1);\r\n }\r\n\r\n q = q.times(y);\r\n\r\n external = true;\r\n\r\n return x.minus(q);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the natural exponential of the value of this Decimal,\r\n * i.e. the base e raised to the power the value of this Decimal, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n */\r\nP.naturalExponential = P.exp = function () {\r\n return naturalExponential(this);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the natural logarithm of the value of this Decimal,\r\n * rounded to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n */\r\nP.naturalLogarithm = P.ln = function () {\r\n return naturalLogarithm(this);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal negated, i.e. as if multiplied by\r\n * -1.\r\n *\r\n */\r\nP.negated = P.neg = function () {\r\n var x = new this.constructor(this);\r\n x.s = -x.s;\r\n return finalise(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 Decimal whose value is the value of this Decimal plus `y`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n */\r\nP.plus = P.add = function (y) {\r\n var carry, d, e, i, k, len, pr, rm, xd, yd,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n y = new Ctor(y);\r\n\r\n // If either is not finite...\r\n if (!x.d || !y.d) {\r\n\r\n // Return NaN if either is NaN.\r\n if (!x.s || !y.s) y = new Ctor(NaN);\r\n\r\n // Return x if y is finite and x is ±Infinity.\r\n // Return x if both are ±Infinity with the same sign.\r\n // Return NaN if both are ±Infinity with different signs.\r\n // Return y if x is finite and y is ±Infinity.\r\n else if (!x.d) y = new Ctor(y.d || x.s === y.s ? x : NaN);\r\n\r\n return y;\r\n }\r\n\r\n // If signs differ...\r\n if (x.s != y.s) {\r\n y.s = -y.s;\r\n return x.minus(y);\r\n }\r\n\r\n xd = x.d;\r\n yd = y.d;\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n\r\n // If either is zero...\r\n if (!xd[0] || !yd[0]) {\r\n\r\n // Return x if y is zero.\r\n // Return y if y is non-zero.\r\n if (!yd[0]) y = new Ctor(x);\r\n\r\n return external ? finalise(y, pr, rm) : y;\r\n }\r\n\r\n // x and y are finite, non-zero numbers with the same sign.\r\n\r\n // Calculate base 1e7 exponents.\r\n k = mathfloor(x.e / LOG_BASE);\r\n e = mathfloor(y.e / LOG_BASE);\r\n\r\n xd = xd.slice();\r\n i = k - e;\r\n\r\n // If base 1e7 exponents differ...\r\n if (i) {\r\n\r\n if (i < 0) {\r\n d = xd;\r\n i = -i;\r\n len = yd.length;\r\n } else {\r\n d = yd;\r\n e = k;\r\n len = xd.length;\r\n }\r\n\r\n // Limit number of zeros prepended to max(ceil(pr / LOG_BASE), len) + 1.\r\n k = Math.ceil(pr / LOG_BASE);\r\n len = k > len ? k + 1 : len + 1;\r\n\r\n if (i > len) {\r\n i = len;\r\n d.length = 1;\r\n }\r\n\r\n // Prepend zeros to equalise exponents. Note: Faster to use reverse then do unshifts.\r\n d.reverse();\r\n for (; i--;) d.push(0);\r\n d.reverse();\r\n }\r\n\r\n len = xd.length;\r\n i = yd.length;\r\n\r\n // If yd is longer than xd, swap xd and yd so xd points to the longer array.\r\n if (len - i < 0) {\r\n i = len;\r\n d = yd;\r\n yd = xd;\r\n xd = d;\r\n }\r\n\r\n // Only start adding at yd.length - 1 as the further digits of xd can be left as they are.\r\n for (carry = 0; i;) {\r\n carry = (xd[--i] = xd[i] + yd[i] + carry) / BASE | 0;\r\n xd[i] %= BASE;\r\n }\r\n\r\n if (carry) {\r\n xd.unshift(carry);\r\n ++e;\r\n }\r\n\r\n // Remove trailing zeros.\r\n // No need to check for zero, as +x + +y != 0 && -x + -y != 0\r\n for (len = xd.length; xd[--len] == 0;) xd.pop();\r\n\r\n y.d = xd;\r\n y.e = getBase10Exponent(xd, e);\r\n\r\n return external ? finalise(y, pr, rm) : y;\r\n};\r\n\r\n\r\n/*\r\n * Return the number of significant digits of the value of this Decimal.\r\n *\r\n * [z] {boolean|number} Whether to count integer-part trailing zeros: true, false, 1 or 0.\r\n *\r\n */\r\nP.precision = P.sd = function (z) {\r\n var k,\r\n x = this;\r\n\r\n if (z !== void 0 && z !== !!z && z !== 1 && z !== 0) throw Error(invalidArgument + z);\r\n\r\n if (x.d) {\r\n k = getPrecision(x.d);\r\n if (z && x.e + 1 > k) k = x.e + 1;\r\n } else {\r\n k = NaN;\r\n }\r\n\r\n return k;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a whole number using\r\n * rounding mode `rounding`.\r\n *\r\n */\r\nP.round = function () {\r\n var x = this,\r\n Ctor = x.constructor;\r\n\r\n return finalise(new Ctor(x), x.e + 1, Ctor.rounding);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the sine of the value in radians of this Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-1, 1]\r\n *\r\n * sin(x) = x - x^3/3! + x^5/5! - ...\r\n *\r\n * sin(0) = 0\r\n * sin(-0) = -0\r\n * sin(Infinity) = NaN\r\n * sin(-Infinity) = NaN\r\n * sin(NaN) = NaN\r\n *\r\n */\r\nP.sine = P.sin = function () {\r\n var pr, rm,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (!x.isFinite()) return new Ctor(NaN);\r\n if (x.isZero()) return new Ctor(x);\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n Ctor.precision = pr + Math.max(x.e, x.sd()) + LOG_BASE;\r\n Ctor.rounding = 1;\r\n\r\n x = sine(Ctor, toLessThanHalfPi(Ctor, x));\r\n\r\n Ctor.precision = pr;\r\n Ctor.rounding = rm;\r\n\r\n return finalise(quadrant > 2 ? x.neg() : x, pr, rm, true);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the square root of this Decimal, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\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 */\r\nP.squareRoot = P.sqrt = function () {\r\n var m, n, sd, r, rep, t,\r\n x = this,\r\n d = x.d,\r\n e = x.e,\r\n s = x.s,\r\n Ctor = x.constructor;\r\n\r\n // Negative/NaN/Infinity/zero?\r\n if (s !== 1 || !d || !d[0]) {\r\n return new Ctor(!s || s < 0 && (!d || d[0]) ? NaN : d ? x : 1 / 0);\r\n }\r\n\r\n external = false;\r\n\r\n // Initial estimate.\r\n s = Math.sqrt(+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 = digitsToString(d);\r\n\r\n if ((n.length + e) % 2 == 0) n += '0';\r\n s = Math.sqrt(n);\r\n e = mathfloor((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 Ctor(n);\r\n } else {\r\n r = new Ctor(s.toString());\r\n }\r\n\r\n sd = (e = Ctor.precision) + 3;\r\n\r\n // Newton-Raphson iteration.\r\n for (;;) {\r\n t = r;\r\n r = t.plus(divide(x, t, sd + 2, 1)).times(0.5);\r\n\r\n // TODO? Replace with for-loop and checkRoundingDigits.\r\n if (digitsToString(t.d).slice(0, sd) === (n = digitsToString(r.d)).slice(0, sd)) {\r\n n = n.slice(sd - 3, sd + 1);\r\n\r\n // The 4th rounding digit may be in error by -1 so if the 4 rounding digits are 9999 or\r\n // 4999, i.e. approaching a rounding boundary, continue the 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 exact result as the\r\n // nines may infinitely repeat.\r\n if (!rep) {\r\n finalise(t, e + 1, 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 sd += 4;\r\n rep = 1;\r\n } else {\r\n\r\n // If the rounding digits are null, 0{0,4} or 50{0,3}, check for an exact result.\r\n // 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 finalise(r, e + 1, 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 external = true;\r\n\r\n return finalise(r, e, Ctor.rounding, m);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the tangent of the value in radians of this Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-Infinity, Infinity]\r\n *\r\n * tan(0) = 0\r\n * tan(-0) = -0\r\n * tan(Infinity) = NaN\r\n * tan(-Infinity) = NaN\r\n * tan(NaN) = NaN\r\n *\r\n */\r\nP.tangent = P.tan = function () {\r\n var pr, rm,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (!x.isFinite()) return new Ctor(NaN);\r\n if (x.isZero()) return new Ctor(x);\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n Ctor.precision = pr + 10;\r\n Ctor.rounding = 1;\r\n\r\n x = x.sin();\r\n x.s = 1;\r\n x = divide(x, new Ctor(1).minus(x.times(x)).sqrt(), pr + 10, 0);\r\n\r\n Ctor.precision = pr;\r\n Ctor.rounding = rm;\r\n\r\n return finalise(quadrant == 2 || quadrant == 4 ? x.neg() : x, pr, rm, true);\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 Decimal whose value is this Decimal times `y`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n */\r\nP.times = P.mul = function (y) {\r\n var carry, e, i, k, r, rL, t, xdL, ydL,\r\n x = this,\r\n Ctor = x.constructor,\r\n xd = x.d,\r\n yd = (y = new Ctor(y)).d;\r\n\r\n y.s *= x.s;\r\n\r\n // If either is NaN, ±Infinity or ±0...\r\n if (!xd || !xd[0] || !yd || !yd[0]) {\r\n\r\n return new Ctor(!y.s || xd && !xd[0] && !yd || yd && !yd[0] && !xd\r\n\r\n // Return NaN if either is NaN.\r\n // Return NaN if x is ±0 and y is ±Infinity, or y is ±0 and x is ±Infinity.\r\n ? NaN\r\n\r\n // Return ±Infinity if either is ±Infinity.\r\n // Return ±0 if either is ±0.\r\n : !xd || !yd ? y.s / 0 : y.s * 0);\r\n }\r\n\r\n e = mathfloor(x.e / LOG_BASE) + mathfloor(y.e / LOG_BASE);\r\n xdL = xd.length;\r\n ydL = yd.length;\r\n\r\n // Ensure xd points to the longer array.\r\n if (xdL < ydL) {\r\n r = xd;\r\n xd = yd;\r\n yd = r;\r\n rL = xdL;\r\n xdL = ydL;\r\n ydL = rL;\r\n }\r\n\r\n // Initialise the result array with zeros.\r\n r = [];\r\n rL = xdL + ydL;\r\n for (i = rL; i--;) r.push(0);\r\n\r\n // Multiply!\r\n for (i = ydL; --i >= 0;) {\r\n carry = 0;\r\n for (k = xdL + i; k > i;) {\r\n t = r[k] + yd[i] * xd[k - i - 1] + carry;\r\n r[k--] = t % BASE | 0;\r\n carry = t / BASE | 0;\r\n }\r\n\r\n r[k] = (r[k] + carry) % BASE | 0;\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (; !r[--rL];) r.pop();\r\n\r\n if (carry) ++e;\r\n else r.shift();\r\n\r\n y.d = r;\r\n y.e = getBase10Exponent(r, e);\r\n\r\n return external ? finalise(y, Ctor.precision, Ctor.rounding) : y;\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal in base 2, round to `sd` significant\r\n * digits using rounding mode `rm`.\r\n *\r\n * If the optional `sd` argument is present then return binary exponential notation.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\nP.toBinary = function (sd, rm) {\r\n return toStringBinary(this, 2, sd, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a maximum of `dp`\r\n * decimal places using rounding mode `rm` or `rounding` if `rm` is omitted.\r\n *\r\n * If `dp` is omitted, return a new Decimal whose value is the value of this Decimal.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\nP.toDecimalPlaces = P.toDP = function (dp, rm) {\r\n var x = this,\r\n Ctor = x.constructor;\r\n\r\n x = new Ctor(x);\r\n if (dp === void 0) return x;\r\n\r\n checkInt32(dp, 0, MAX_DIGITS);\r\n\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n\r\n return finalise(x, dp + x.e + 1, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal in exponential notation rounded to\r\n * `dp` fixed decimal places using rounding mode `rounding`.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\nP.toExponential = function (dp, rm) {\r\n var str,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (dp === void 0) {\r\n str = finiteToString(x, true);\r\n } else {\r\n checkInt32(dp, 0, MAX_DIGITS);\r\n\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n\r\n x = finalise(new Ctor(x), dp + 1, rm);\r\n str = finiteToString(x, true, dp + 1);\r\n }\r\n\r\n return x.isNeg() && !x.isZero() ? '-' + str : str;\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal in normal (fixed-point) notation to\r\n * `dp` fixed decimal places and rounded using rounding mode `rm` or `rounding` if `rm` is\r\n * omitted.\r\n *\r\n * As with JavaScript numbers, (-0).toFixed(0) is '0', but e.g. (-0.00001).toFixed(0) is '-0'.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * (-0).toFixed(0) is '0', but (-0.1).toFixed(0) is '-0'.\r\n * (-0).toFixed(1) is '0.0', but (-0.01).toFixed(1) is '-0.0'.\r\n * (-0).toFixed(3) is '0.000'.\r\n * (-0.5).toFixed(0) is '-0'.\r\n *\r\n */\r\nP.toFixed = function (dp, rm) {\r\n var str, y,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (dp === void 0) {\r\n str = finiteToString(x);\r\n } else {\r\n checkInt32(dp, 0, MAX_DIGITS);\r\n\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n\r\n y = finalise(new Ctor(x), dp + x.e + 1, rm);\r\n str = finiteToString(y, false, dp + y.e + 1);\r\n }\r\n\r\n // To determine whether to add the minus sign look at the value before it was rounded,\r\n // i.e. look at `x` rather than `y`.\r\n return x.isNeg() && !x.isZero() ? '-' + str : str;\r\n};\r\n\r\n\r\n/*\r\n * Return an array representing the value of this Decimal as a simple fraction with an integer\r\n * numerator and an integer denominator.\r\n *\r\n * The denominator will be a positive non-zero value less than or equal to the specified maximum\r\n * denominator. If a maximum denominator is not specified, the denominator will be the lowest\r\n * value necessary to represent the number exactly.\r\n *\r\n * [maxD] {number|string|Decimal} Maximum denominator. Integer >= 1 and < Infinity.\r\n *\r\n */\r\nP.toFraction = function (maxD) {\r\n var d, d0, d1, d2, e, k, n, n0, n1, pr, q, r,\r\n x = this,\r\n xd = x.d,\r\n Ctor = x.constructor;\r\n\r\n if (!xd) return new Ctor(x);\r\n\r\n n1 = d0 = new Ctor(1);\r\n d1 = n0 = new Ctor(0);\r\n\r\n d = new Ctor(d1);\r\n e = d.e = getPrecision(xd) - x.e - 1;\r\n k = e % LOG_BASE;\r\n d.d[0] = mathpow(10, k < 0 ? LOG_BASE + k : k);\r\n\r\n if (maxD == null) {\r\n\r\n // d is 10**e, the minimum max-denominator needed.\r\n maxD = e > 0 ? d : n1;\r\n } else {\r\n n = new Ctor(maxD);\r\n if (!n.isInt() || n.lt(n1)) throw Error(invalidArgument + n);\r\n maxD = n.gt(d) ? (e > 0 ? d : n1) : n;\r\n }\r\n\r\n external = false;\r\n n = new Ctor(digitsToString(xd));\r\n pr = Ctor.precision;\r\n Ctor.precision = e = xd.length * LOG_BASE * 2;\r\n\r\n for (;;) {\r\n q = divide(n, d, 0, 1, 1);\r\n d2 = d0.plus(q.times(d1));\r\n if (d2.cmp(maxD) == 1) break;\r\n d0 = d1;\r\n d1 = d2;\r\n d2 = n1;\r\n n1 = n0.plus(q.times(d2));\r\n n0 = d2;\r\n d2 = d;\r\n d = n.minus(q.times(d2));\r\n n = d2;\r\n }\r\n\r\n d2 = divide(maxD.minus(d0), d1, 0, 1, 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\r\n // Determine which fraction is closer to x, n0/d0 or n1/d1?\r\n r = divide(n1, d1, e, 1).minus(x).abs().cmp(divide(n0, d0, e, 1).minus(x).abs()) < 1\r\n ? [n1, d1] : [n0, d0];\r\n\r\n Ctor.precision = pr;\r\n external = true;\r\n\r\n return r;\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal in base 16, round to `sd` significant\r\n * digits using rounding mode `rm`.\r\n *\r\n * If the optional `sd` argument is present then return binary exponential notation.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\nP.toHexadecimal = P.toHex = function (sd, rm) {\r\n return toStringBinary(this, 16, sd, rm);\r\n};\r\n\r\n\r\n/*\r\n * Returns a new Decimal whose value is the nearest multiple of `y` in the direction of rounding\r\n * mode `rm`, or `Decimal.rounding` if `rm` is omitted, to the value of this Decimal.\r\n *\r\n * The return value will always have the same sign as this Decimal, unless either this Decimal\r\n * or `y` is NaN, in which case the return value will be also be NaN.\r\n *\r\n * The return value is not affected by the value of `precision`.\r\n *\r\n * y {number|string|Decimal} The magnitude to round to a multiple of.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * 'toNearest() rounding mode not an integer: {rm}'\r\n * 'toNearest() rounding mode out of range: {rm}'\r\n *\r\n */\r\nP.toNearest = function (y, rm) {\r\n var x = this,\r\n Ctor = x.constructor;\r\n\r\n x = new Ctor(x);\r\n\r\n if (y == null) {\r\n\r\n // If x is not finite, return x.\r\n if (!x.d) return x;\r\n\r\n y = new Ctor(1);\r\n rm = Ctor.rounding;\r\n } else {\r\n y = new Ctor(y);\r\n if (rm === void 0) {\r\n rm = Ctor.rounding;\r\n } else {\r\n checkInt32(rm, 0, 8);\r\n }\r\n\r\n // If x is not finite, return x if y is not NaN, else NaN.\r\n if (!x.d) return y.s ? x : y;\r\n\r\n // If y is not finite, return Infinity with the sign of x if y is Infinity, else NaN.\r\n if (!y.d) {\r\n if (y.s) y.s = x.s;\r\n return y;\r\n }\r\n }\r\n\r\n // If y is not zero, calculate the nearest multiple of y to x.\r\n if (y.d[0]) {\r\n external = false;\r\n x = divide(x, y, 0, rm, 1).times(y);\r\n external = true;\r\n finalise(x);\r\n\r\n // If y is zero, return zero with the sign of x.\r\n } else {\r\n y.s = x.s;\r\n x = y;\r\n }\r\n\r\n return x;\r\n};\r\n\r\n\r\n/*\r\n * Return the value of this Decimal converted to a number primitive.\r\n * Zero keeps its sign.\r\n *\r\n */\r\nP.toNumber = function () {\r\n return +this;\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal in base 8, round to `sd` significant\r\n * digits using rounding mode `rm`.\r\n *\r\n * If the optional `sd` argument is present then return binary exponential notation.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\nP.toOctal = function (sd, rm) {\r\n return toStringBinary(this, 8, sd, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal raised to the power `y`, rounded\r\n * to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * ECMAScript compliant.\r\n *\r\n * pow(x, NaN) = NaN\r\n * pow(x, ±0) = 1\r\n\r\n * pow(NaN, non-zero) = NaN\r\n * pow(abs(x) > 1, +Infinity) = +Infinity\r\n * pow(abs(x) > 1, -Infinity) = +0\r\n * pow(abs(x) == 1, ±Infinity) = NaN\r\n * pow(abs(x) < 1, +Infinity) = +0\r\n * pow(abs(x) < 1, -Infinity) = +Infinity\r\n * pow(+Infinity, y > 0) = +Infinity\r\n * pow(+Infinity, y < 0) = +0\r\n * pow(-Infinity, odd integer > 0) = -Infinity\r\n * pow(-Infinity, even integer > 0) = +Infinity\r\n * pow(-Infinity, odd integer < 0) = -0\r\n * pow(-Infinity, even integer < 0) = +0\r\n * pow(+0, y > 0) = +0\r\n * pow(+0, y < 0) = +Infinity\r\n * pow(-0, odd integer > 0) = -0\r\n * pow(-0, even integer > 0) = +0\r\n * pow(-0, odd integer < 0) = -Infinity\r\n * pow(-0, even integer < 0) = +Infinity\r\n * pow(finite x < 0, finite non-integer) = NaN\r\n *\r\n * For non-integer or very large exponents pow(x, y) is calculated using\r\n *\r\n * x^y = exp(y*ln(x))\r\n *\r\n * Assuming the first 15 rounding digits are each equally likely to be any digit 0-9, the\r\n * probability of an incorrectly rounded result\r\n * P([49]9{14} | [50]0{14}) = 2 * 0.2 * 10^-14 = 4e-15 = 1/2.5e+14\r\n * i.e. 1 in 250,000,000,000,000\r\n *\r\n * If a result is incorrectly rounded the maximum error will be 1 ulp (unit in last place).\r\n *\r\n * y {number|string|Decimal} The power to which to raise this Decimal.\r\n *\r\n */\r\nP.toPower = P.pow = function (y) {\r\n var e, k, pr, r, rm, s,\r\n x = this,\r\n Ctor = x.constructor,\r\n yn = +(y = new Ctor(y));\r\n\r\n // Either ±Infinity, NaN or ±0?\r\n if (!x.d || !y.d || !x.d[0] || !y.d[0]) return new Ctor(mathpow(+x, yn));\r\n\r\n x = new Ctor(x);\r\n\r\n if (x.eq(1)) return x;\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n\r\n if (y.eq(1)) return finalise(x, pr, rm);\r\n\r\n // y exponent\r\n e = mathfloor(y.e / LOG_BASE);\r\n\r\n // If y is a small integer use the 'exponentiation by squaring' algorithm.\r\n if (e >= y.d.length - 1 && (k = yn < 0 ? -yn : yn) <= MAX_SAFE_INTEGER) {\r\n r = intPow(Ctor, x, k, pr);\r\n return y.s < 0 ? new Ctor(1).div(r) : finalise(r, pr, rm);\r\n }\r\n\r\n s = x.s;\r\n\r\n // if x is negative\r\n if (s < 0) {\r\n\r\n // if y is not an integer\r\n if (e < y.d.length - 1) return new Ctor(NaN);\r\n\r\n // Result is positive if x is negative and the last digit of integer y is even.\r\n if ((y.d[e] & 1) == 0) s = 1;\r\n\r\n // if x.eq(-1)\r\n if (x.e == 0 && x.d[0] == 1 && x.d.length == 1) {\r\n x.s = s;\r\n return x;\r\n }\r\n }\r\n\r\n // Estimate result exponent.\r\n // x^y = 10^e, where e = y * log10(x)\r\n // log10(x) = log10(x_significand) + x_exponent\r\n // log10(x_significand) = ln(x_significand) / ln(10)\r\n k = mathpow(+x, yn);\r\n e = k == 0 || !isFinite(k)\r\n ? mathfloor(yn * (Math.log('0.' + digitsToString(x.d)) / Math.LN10 + x.e + 1))\r\n : new Ctor(k + '').e;\r\n\r\n // Exponent estimate may be incorrect e.g. x: 0.999999999999999999, y: 2.29, e: 0, r.e: -1.\r\n\r\n // Overflow/underflow?\r\n if (e > Ctor.maxE + 1 || e < Ctor.minE - 1) return new Ctor(e > 0 ? s / 0 : 0);\r\n\r\n external = false;\r\n Ctor.rounding = x.s = 1;\r\n\r\n // Estimate the extra guard digits needed to ensure five correct rounding digits from\r\n // naturalLogarithm(x). Example of failure without these extra digits (precision: 10):\r\n // new Decimal(2.32456).pow('2087987436534566.46411')\r\n // should be 1.162377823e+764914905173815, but is 1.162355823e+764914905173815\r\n k = Math.min(12, (e + '').length);\r\n\r\n // r = x^y = exp(y*ln(x))\r\n r = naturalExponential(y.times(naturalLogarithm(x, pr + k)), pr);\r\n\r\n // r may be Infinity, e.g. (0.9999999999999999).pow(-1e+40)\r\n if (r.d) {\r\n\r\n // Truncate to the required precision plus five rounding digits.\r\n r = finalise(r, pr + 5, 1);\r\n\r\n // If the rounding digits are [49]9999 or [50]0000 increase the precision by 10 and recalculate\r\n // the result.\r\n if (checkRoundingDigits(r.d, pr, rm)) {\r\n e = pr + 10;\r\n\r\n // Truncate to the increased precision plus five rounding digits.\r\n r = finalise(naturalExponential(y.times(naturalLogarithm(x, e + k)), e), e + 5, 1);\r\n\r\n // Check for 14 nines from the 2nd rounding digit (the first rounding digit may be 4 or 9).\r\n if (+digitsToString(r.d).slice(pr + 1, pr + 15) + 1 == 1e14) {\r\n r = finalise(r, pr + 1, 0);\r\n }\r\n }\r\n }\r\n\r\n r.s = s;\r\n external = true;\r\n Ctor.rounding = rm;\r\n\r\n return finalise(r, pr, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal rounded to `sd` significant digits\r\n * using rounding mode `rounding`.\r\n *\r\n * Return exponential notation if `sd` is less than the number of digits necessary to represent\r\n * the integer part of the value in normal notation.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\nP.toPrecision = function (sd, rm) {\r\n var str,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (sd === void 0) {\r\n str = finiteToString(x, x.e <= Ctor.toExpNeg || x.e >= Ctor.toExpPos);\r\n } else {\r\n checkInt32(sd, 1, MAX_DIGITS);\r\n\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n\r\n x = finalise(new Ctor(x), sd, rm);\r\n str = finiteToString(x, sd <= x.e || x.e <= Ctor.toExpNeg, sd);\r\n }\r\n\r\n return x.isNeg() && !x.isZero() ? '-' + str : str;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a maximum of `sd`\r\n * significant digits using rounding mode `rm`, or to `precision` and `rounding` respectively if\r\n * omitted.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * 'toSD() digits out of range: {sd}'\r\n * 'toSD() digits not an integer: {sd}'\r\n * 'toSD() rounding mode not an integer: {rm}'\r\n * 'toSD() rounding mode out of range: {rm}'\r\n *\r\n */\r\nP.toSignificantDigits = P.toSD = function (sd, rm) {\r\n var x = this,\r\n Ctor = x.constructor;\r\n\r\n if (sd === void 0) {\r\n sd = Ctor.precision;\r\n rm = Ctor.rounding;\r\n } else {\r\n checkInt32(sd, 1, MAX_DIGITS);\r\n\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n }\r\n\r\n return finalise(new Ctor(x), sd, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal.\r\n *\r\n * Return exponential notation if this Decimal has a positive exponent equal to or greater than\r\n * `toExpPos`, or a negative exponent equal to or less than `toExpNeg`.\r\n *\r\n */\r\nP.toString = function () {\r\n var x = this,\r\n Ctor = x.constructor,\r\n str = finiteToString(x, x.e <= Ctor.toExpNeg || x.e >= Ctor.toExpPos);\r\n\r\n return x.isNeg() && !x.isZero() ? '-' + str : str;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal truncated to a whole number.\r\n *\r\n */\r\nP.truncated = P.trunc = function () {\r\n return finalise(new this.constructor(this), this.e + 1, 1);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal.\r\n * Unlike `toString`, negative zero will include the minus sign.\r\n *\r\n */\r\nP.valueOf = P.toJSON = function () {\r\n var x = this,\r\n Ctor = x.constructor,\r\n str = finiteToString(x, x.e <= Ctor.toExpNeg || x.e >= Ctor.toExpPos);\r\n\r\n return x.isNeg() ? '-' + str : str;\r\n};\r\n\r\n\r\n// Helper functions for Decimal.prototype (P) and/or Decimal methods, and their callers.\r\n\r\n\r\n/*\r\n * digitsToString P.cubeRoot, P.logarithm, P.squareRoot, P.toFraction, P.toPower,\r\n * finiteToString, naturalExponential, naturalLogarithm\r\n * checkInt32 P.toDecimalPlaces, P.toExponential, P.toFixed, P.toNearest,\r\n * P.toPrecision, P.toSignificantDigits, toStringBinary, random\r\n * checkRoundingDigits P.logarithm, P.toPower, naturalExponential, naturalLogarithm\r\n * convertBase toStringBinary, parseOther\r\n * cos P.cos\r\n * divide P.atanh, P.cubeRoot, P.dividedBy, P.dividedToIntegerBy,\r\n * P.logarithm, P.modulo, P.squareRoot, P.tan, P.tanh, P.toFraction,\r\n * P.toNearest, toStringBinary, naturalExponential, naturalLogarithm,\r\n * taylorSeries, atan2, parseOther\r\n * finalise P.absoluteValue, P.atan, P.atanh, P.ceil, P.cos, P.cosh,\r\n * P.cubeRoot, P.dividedToIntegerBy, P.floor, P.logarithm, P.minus,\r\n * P.modulo, P.negated, P.plus, P.round, P.sin, P.sinh, P.squareRoot,\r\n * P.tan, P.times, P.toDecimalPlaces, P.toExponential, P.toFixed,\r\n * P.toNearest, P.toPower, P.toPrecision, P.toSignificantDigits,\r\n * P.truncated, divide, getLn10, getPi, naturalExponential,\r\n * naturalLogarithm, ceil, floor, round, trunc\r\n * finiteToString P.toExponential, P.toFixed, P.toPrecision, P.toString, P.valueOf,\r\n * toStringBinary\r\n * getBase10Exponent P.minus, P.plus, P.times, parseOther\r\n * getLn10 P.logarithm, naturalLogarithm\r\n * getPi P.acos, P.asin, P.atan, toLessThanHalfPi, atan2\r\n * getPrecision P.precision, P.toFraction\r\n * getZeroString digitsToString, finiteToString\r\n * intPow P.toPower, parseOther\r\n * isOdd toLessThanHalfPi\r\n * maxOrMin max, min\r\n * naturalExponential P.naturalExponential, P.toPower\r\n * naturalLogarithm P.acosh, P.asinh, P.atanh, P.logarithm, P.naturalLogarithm,\r\n * P.toPower, naturalExponential\r\n * nonFiniteToString finiteToString, toStringBinary\r\n * parseDecimal Decimal\r\n * parseOther Decimal\r\n * sin P.sin\r\n * taylorSeries P.cosh, P.sinh, cos, sin\r\n * toLessThanHalfPi P.cos, P.sin\r\n * toStringBinary P.toBinary, P.toHexadecimal, P.toOctal\r\n * truncate intPow\r\n *\r\n * Throws: P.logarithm, P.precision, P.toFraction, checkInt32, getLn10, getPi,\r\n * naturalLogarithm, config, parseOther, random, Decimal\r\n */\r\n\r\n\r\nfunction digitsToString(d) {\r\n var i, k, ws,\r\n indexOfLastWord = d.length - 1,\r\n str = '',\r\n w = d[0];\r\n\r\n if (indexOfLastWord > 0) {\r\n str += w;\r\n for (i = 1; i < indexOfLastWord; i++) {\r\n ws = d[i] + '';\r\n k = LOG_BASE - ws.length;\r\n if (k) str += getZeroString(k);\r\n str += ws;\r\n }\r\n\r\n w = d[i];\r\n ws = w + '';\r\n k = LOG_BASE - ws.length;\r\n if (k) str += getZeroString(k);\r\n } else if (w === 0) {\r\n return '0';\r\n }\r\n\r\n // Remove trailing zeros of last w.\r\n for (; w % 10 === 0;) w /= 10;\r\n\r\n return str + w;\r\n}\r\n\r\n\r\nfunction checkInt32(i, min, max) {\r\n if (i !== ~~i || i < min || i > max) {\r\n throw Error(invalidArgument + i);\r\n }\r\n}\r\n\r\n\r\n/*\r\n * Check 5 rounding digits if `repeating` is null, 4 otherwise.\r\n * `repeating == null` if caller is `log` or `pow`,\r\n * `repeating != null` if caller is `naturalLogarithm` or `naturalExponential`.\r\n */\r\nfunction checkRoundingDigits(d, i, rm, repeating) {\r\n var di, k, r, rd;\r\n\r\n // Get the length of the first word of the array d.\r\n for (k = d[0]; k >= 10; k /= 10) --i;\r\n\r\n // Is the rounding digit in the first word of d?\r\n if (--i < 0) {\r\n i += LOG_BASE;\r\n di = 0;\r\n } else {\r\n di = Math.ceil((i + 1) / LOG_BASE);\r\n i %= LOG_BASE;\r\n }\r\n\r\n // i is the index (0 - 6) of the rounding digit.\r\n // E.g. if within the word 3487563 the first rounding digit is 5,\r\n // then i = 4, k = 1000, rd = 3487563 % 1000 = 563\r\n k = mathpow(10, LOG_BASE - i);\r\n rd = d[di] % k | 0;\r\n\r\n if (repeating == null) {\r\n if (i < 3) {\r\n if (i == 0) rd = rd / 100 | 0;\r\n else if (i == 1) rd = rd / 10 | 0;\r\n r = rm < 4 && rd == 99999 || rm > 3 && rd == 49999 || rd == 50000 || rd == 0;\r\n } else {\r\n r = (rm < 4 && rd + 1 == k || rm > 3 && rd + 1 == k / 2) &&\r\n (d[di + 1] / k / 100 | 0) == mathpow(10, i - 2) - 1 ||\r\n (rd == k / 2 || rd == 0) && (d[di + 1] / k / 100 | 0) == 0;\r\n }\r\n } else {\r\n if (i < 4) {\r\n if (i == 0) rd = rd / 1000 | 0;\r\n else if (i == 1) rd = rd / 100 | 0;\r\n else if (i == 2) rd = rd / 10 | 0;\r\n r = (repeating || rm < 4) && rd == 9999 || !repeating && rm > 3 && rd == 4999;\r\n } else {\r\n r = ((repeating || rm < 4) && rd + 1 == k ||\r\n (!repeating && rm > 3) && rd + 1 == k / 2) &&\r\n (d[di + 1] / k / 1000 | 0) == mathpow(10, i - 3) - 1;\r\n }\r\n }\r\n\r\n return r;\r\n}\r\n\r\n\r\n// Convert string of `baseIn` to an array of numbers of `baseOut`.\r\n// Eg. convertBase('255', 10, 16) returns [15, 15].\r\n// Eg. convertBase('ff', 16, 10) returns [2, 5, 5].\r\nfunction convertBase(str, baseIn, baseOut) {\r\n var j,\r\n arr = [0],\r\n arrL,\r\n i = 0,\r\n strL = str.length;\r\n\r\n for (; i < strL;) {\r\n for (arrL = arr.length; arrL--;) arr[arrL] *= baseIn;\r\n arr[0] += NUMERALS.indexOf(str.charAt(i++));\r\n for (j = 0; j < arr.length; j++) {\r\n if (arr[j] > baseOut - 1) {\r\n if (arr[j + 1] === void 0) 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\r\n/*\r\n * cos(x) = 1 - x^2/2! + x^4/4! - ...\r\n * |x| < pi/2\r\n *\r\n */\r\nfunction cosine(Ctor, x) {\r\n var k, len, y;\r\n\r\n if (x.isZero()) return x;\r\n\r\n // Argument reduction: cos(4x) = 8*(cos^4(x) - cos^2(x)) + 1\r\n // i.e. cos(x) = 8*(cos^4(x/4) - cos^2(x/4)) + 1\r\n\r\n // Estimate the optimum number of times to use the argument reduction.\r\n len = x.d.length;\r\n if (len < 32) {\r\n k = Math.ceil(len / 3);\r\n y = (1 / tinyPow(4, k)).toString();\r\n } else {\r\n k = 16;\r\n y = '2.3283064365386962890625e-10';\r\n }\r\n\r\n Ctor.precision += k;\r\n\r\n x = taylorSeries(Ctor, 1, x.times(y), new Ctor(1));\r\n\r\n // Reverse argument reduction\r\n for (var i = k; i--;) {\r\n var cos2x = x.times(x);\r\n x = cos2x.times(cos2x).minus(cos2x).times(8).plus(1);\r\n }\r\n\r\n Ctor.precision -= k;\r\n\r\n return x;\r\n}\r\n\r\n\r\n/*\r\n * Perform division in the specified base.\r\n */\r\nvar divide = (function () {\r\n\r\n // Assumes non-zero x and k, and hence non-zero result.\r\n function multiplyInteger(x, k, base) {\r\n var temp,\r\n carry = 0,\r\n i = x.length;\r\n\r\n for (x = x.slice(); i--;) {\r\n temp = x[i] * k + carry;\r\n x[i] = temp % base | 0;\r\n carry = temp / base | 0;\r\n }\r\n\r\n if (carry) x.unshift(carry);\r\n\r\n return x;\r\n }\r\n\r\n function compare(a, b, aL, bL) {\r\n var i, r;\r\n\r\n if (aL != bL) {\r\n r = aL > bL ? 1 : -1;\r\n } else {\r\n for (i = r = 0; i < aL; i++) {\r\n if (a[i] != b[i]) {\r\n r = a[i] > b[i] ? 1 : -1;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return r;\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.shift();\r\n }\r\n\r\n return function (x, y, pr, rm, dp, base) {\r\n var cmp, e, i, k, logBase, more, prod, prodL, q, qd, rem, remL, rem0, sd, t, xi, xL, yd0,\r\n yL, yz,\r\n Ctor = x.constructor,\r\n sign = x.s == y.s ? 1 : -1,\r\n xd = x.d,\r\n yd = y.d;\r\n\r\n // Either NaN, Infinity or 0?\r\n if (!xd || !xd[0] || !yd || !yd[0]) {\r\n\r\n return new Ctor(// Return NaN if either NaN, or both Infinity or 0.\r\n !x.s || !y.s || (xd ? yd && xd[0] == yd[0] : !yd) ? NaN :\r\n\r\n // Return ±0 if x is 0 or y is ±Infinity, or return ±Infinity as y is 0.\r\n xd && xd[0] == 0 || !yd ? sign * 0 : sign / 0);\r\n }\r\n\r\n if (base) {\r\n logBase = 1;\r\n e = x.e - y.e;\r\n } else {\r\n base = BASE;\r\n logBase = LOG_BASE;\r\n e = mathfloor(x.e / logBase) - mathfloor(y.e / logBase);\r\n }\r\n\r\n yL = yd.length;\r\n xL = xd.length;\r\n q = new Ctor(sign);\r\n qd = q.d = [];\r\n\r\n // Result exponent may be one less than e.\r\n // The digit array of a Decimal from toStringBinary may have trailing zeros.\r\n for (i = 0; yd[i] == (xd[i] || 0); i++);\r\n\r\n if (yd[i] > (xd[i] || 0)) e--;\r\n\r\n if (pr == null) {\r\n sd = pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n } else if (dp) {\r\n sd = pr + (x.e - y.e) + 1;\r\n } else {\r\n sd = pr;\r\n }\r\n\r\n if (sd < 0) {\r\n qd.push(1);\r\n more = true;\r\n } else {\r\n\r\n // Convert precision in number of base 10 digits to base 1e7 digits.\r\n sd = sd / logBase + 2 | 0;\r\n i = 0;\r\n\r\n // divisor < 1e7\r\n if (yL == 1) {\r\n k = 0;\r\n yd = yd[0];\r\n sd++;\r\n\r\n // k is the carry.\r\n for (; (i < xL || k) && sd--; i++) {\r\n t = k * base + (xd[i] || 0);\r\n qd[i] = t / yd | 0;\r\n k = t % yd | 0;\r\n }\r\n\r\n more = k || i < xL;\r\n\r\n // divisor >= 1e7\r\n } else {\r\n\r\n // Normalise xd and yd so highest order digit of yd is >= base/2\r\n k = base / (yd[0] + 1) | 0;\r\n\r\n if (k > 1) {\r\n yd = multiplyInteger(yd, k, base);\r\n xd = multiplyInteger(xd, k, base);\r\n yL = yd.length;\r\n xL = xd.length;\r\n }\r\n\r\n xi = yL;\r\n rem = xd.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\r\n yz = yd.slice();\r\n yz.unshift(0);\r\n yd0 = yd[0];\r\n\r\n if (yd[1] >= base / 2) ++yd0;\r\n\r\n do {\r\n k = 0;\r\n\r\n // Compare divisor and remainder.\r\n cmp = compare(yd, rem, yL, remL);\r\n\r\n // If divisor < remainder.\r\n if (cmp < 0) {\r\n\r\n // Calculate trial digit, k.\r\n rem0 = rem[0];\r\n if (yL != remL) rem0 = rem0 * base + (rem[1] || 0);\r\n\r\n // k will be how many times the divisor goes into the current remainder.\r\n k = rem0 / yd0 | 0;\r\n\r\n // Algorithm:\r\n // 1. product = divisor * trial digit (k)\r\n // 2. if product > remainder: product -= divisor, k--\r\n // 3. remainder -= product\r\n // 4. if product was < remainder at 2:\r\n // 5. compare new remainder and divisor\r\n // 6. If remainder > divisor: remainder -= divisor, k++\r\n\r\n if (k > 1) {\r\n if (k >= base) k = base - 1;\r\n\r\n // product = divisor * trial digit.\r\n prod = multiplyInteger(yd, k, base);\r\n prodL = prod.length;\r\n remL = rem.length;\r\n\r\n // Compare product and remainder.\r\n cmp = compare(prod, rem, prodL, remL);\r\n\r\n // product > remainder.\r\n if (cmp == 1) {\r\n k--;\r\n\r\n // Subtract divisor from product.\r\n subtract(prod, yL < prodL ? yz : yd, prodL, base);\r\n }\r\n } else {\r\n\r\n // cmp is -1.\r\n // If k is 0, there is no need to compare yd and rem again below, so change cmp to 1\r\n // to avoid it. If k is 1 there is a need to compare yd and rem again below.\r\n if (k == 0) cmp = k = 1;\r\n prod = yd.slice();\r\n }\r\n\r\n prodL = prod.length;\r\n if (prodL < remL) prod.unshift(0);\r\n\r\n // Subtract product from remainder.\r\n subtract(rem, prod, remL, base);\r\n\r\n // If product was < previous remainder.\r\n if (cmp == -1) {\r\n remL = rem.length;\r\n\r\n // Compare divisor and new remainder.\r\n cmp = compare(yd, rem, yL, remL);\r\n\r\n // If divisor < new remainder, subtract divisor from remainder.\r\n if (cmp < 1) {\r\n k++;\r\n\r\n // Subtract divisor from remainder.\r\n subtract(rem, yL < remL ? yz : yd, remL, base);\r\n }\r\n }\r\n\r\n remL = rem.length;\r\n } else if (cmp === 0) {\r\n k++;\r\n rem = [0];\r\n } // if cmp === 1, k will be 0\r\n\r\n // Add the next digit, k, to the result array.\r\n qd[i++] = k;\r\n\r\n // Update the remainder.\r\n if (cmp && rem[0]) {\r\n rem[remL++] = xd[xi] || 0;\r\n } else {\r\n rem = [xd[xi]];\r\n remL = 1;\r\n }\r\n\r\n } while ((xi++ < xL || rem[0] !== void 0) && sd--);\r\n\r\n more = rem[0] !== void 0;\r\n }\r\n\r\n // Leading zero?\r\n if (!qd[0]) qd.shift();\r\n }\r\n\r\n // logBase is 1 when divide is being used for base conversion.\r\n if (logBase == 1) {\r\n q.e = e;\r\n inexact = more;\r\n } else {\r\n\r\n // To calculate q.e, first get the number of digits of qd[0].\r\n for (i = 1, k = qd[0]; k >= 10; k /= 10) i++;\r\n q.e = i + e * logBase - 1;\r\n\r\n finalise(q, dp ? pr + q.e + 1 : pr, rm, more);\r\n }\r\n\r\n return q;\r\n };\r\n})();\r\n\r\n\r\n/*\r\n * Round `x` to `sd` significant digits using rounding mode `rm`.\r\n * Check for over/under-flow.\r\n */\r\n function finalise(x, sd, rm, isTruncated) {\r\n var digits, i, j, k, rd, roundUp, w, xd, xdi,\r\n Ctor = x.constructor;\r\n\r\n // Don't round if sd is null or undefined.\r\n out: if (sd != null) {\r\n xd = x.d;\r\n\r\n // Infinity/NaN.\r\n if (!xd) return x;\r\n\r\n // rd: the rounding digit, i.e. the digit after the digit that may be rounded up.\r\n // w: the word of xd containing rd, a base 1e7 number.\r\n // xdi: the index of w within xd.\r\n // digits: the number of digits of w.\r\n // i: what would be the index of rd within w if all the numbers were 7 digits long (i.e. if\r\n // they had leading zeros)\r\n // j: if > 0, the actual index of rd within w (if < 0, rd is a leading zero).\r\n\r\n // Get the length of the first word of the digits array xd.\r\n for (digits = 1, k = xd[0]; k >= 10; k /= 10) digits++;\r\n i = sd - digits;\r\n\r\n // Is the rounding digit in the first word of xd?\r\n if (i < 0) {\r\n i += LOG_BASE;\r\n j = sd;\r\n w = xd[xdi = 0];\r\n\r\n // Get the rounding digit at index j of w.\r\n rd = w / mathpow(10, digits - j - 1) % 10 | 0;\r\n } else {\r\n xdi = Math.ceil((i + 1) / LOG_BASE);\r\n k = xd.length;\r\n if (xdi >= k) {\r\n if (isTruncated) {\r\n\r\n // Needed by `naturalExponential`, `naturalLogarithm` and `squareRoot`.\r\n for (; k++ <= xdi;) xd.push(0);\r\n w = rd = 0;\r\n digits = 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 w = k = xd[xdi];\r\n\r\n // Get the number of digits of w.\r\n for (digits = 1; k >= 10; k /= 10) digits++;\r\n\r\n // Get the index of rd within w.\r\n i %= LOG_BASE;\r\n\r\n // Get the index of rd within w, adjusted for leading zeros.\r\n // The number of leading zeros of w is given by LOG_BASE - digits.\r\n j = i - LOG_BASE + digits;\r\n\r\n // Get the rounding digit at index j of w.\r\n rd = j < 0 ? 0 : w / mathpow(10, digits - j - 1) % 10 | 0;\r\n }\r\n }\r\n\r\n // Are there any non-zero digits after the rounding digit?\r\n isTruncated = isTruncated || sd < 0 ||\r\n xd[xdi + 1] !== void 0 || (j < 0 ? w : w % mathpow(10, digits - j - 1));\r\n\r\n // The expression `w % mathpow(10, digits - j - 1)` returns all the digits of w to the right\r\n // of the digit at (left-to-right) index j, e.g. if w is 908714 and j is 2, the expression\r\n // will give 714.\r\n\r\n roundUp = rm < 4\r\n ? (rd || isTruncated) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))\r\n : rd > 5 || rd == 5 && (rm == 4 || isTruncated || 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 ? w / mathpow(10, digits - j) : 0 : xd[xdi - 1]) % 10) & 1 ||\r\n rm == (x.s < 0 ? 8 : 7));\r\n\r\n if (sd < 1 || !xd[0]) {\r\n xd.length = 0;\r\n if (roundUp) {\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 xd[0] = mathpow(10, (LOG_BASE - sd % LOG_BASE) % LOG_BASE);\r\n x.e = -sd || 0;\r\n } else {\r\n\r\n // Zero.\r\n xd[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 xd.length = xdi;\r\n k = 1;\r\n xdi--;\r\n } else {\r\n xd.length = xdi + 1;\r\n k = mathpow(10, 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 w.\r\n xd[xdi] = j > 0 ? (w / mathpow(10, digits - j) % mathpow(10, j) | 0) * k : 0;\r\n }\r\n\r\n if (roundUp) {\r\n for (;;) {\r\n\r\n // Is the digit to be rounded up in the first word of xd?\r\n if (xdi == 0) {\r\n\r\n // i will be the length of xd[0] before k is added.\r\n for (i = 1, j = xd[0]; j >= 10; j /= 10) i++;\r\n j = xd[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 (xd[0] == BASE) xd[0] = 1;\r\n }\r\n\r\n break;\r\n } else {\r\n xd[xdi] += k;\r\n if (xd[xdi] != BASE) break;\r\n xd[xdi--] = 0;\r\n k = 1;\r\n }\r\n }\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (i = xd.length; xd[--i] === 0;) xd.pop();\r\n }\r\n\r\n if (external) {\r\n\r\n // Overflow?\r\n if (x.e > Ctor.maxE) {\r\n\r\n // Infinity.\r\n x.d = null;\r\n x.e = NaN;\r\n\r\n // Underflow?\r\n } else if (x.e < Ctor.minE) {\r\n\r\n // Zero.\r\n x.e = 0;\r\n x.d = [0];\r\n // Ctor.underflow = true;\r\n } // else Ctor.underflow = false;\r\n }\r\n\r\n return x;\r\n}\r\n\r\n\r\nfunction finiteToString(x, isExp, sd) {\r\n if (!x.isFinite()) return nonFiniteToString(x);\r\n var k,\r\n e = x.e,\r\n str = digitsToString(x.d),\r\n len = str.length;\r\n\r\n if (isExp) {\r\n if (sd && (k = sd - len) > 0) {\r\n str = str.charAt(0) + '.' + str.slice(1) + getZeroString(k);\r\n } else if (len > 1) {\r\n str = str.charAt(0) + '.' + str.slice(1);\r\n }\r\n\r\n str = str + (x.e < 0 ? 'e' : 'e+') + x.e;\r\n } else if (e < 0) {\r\n str = '0.' + getZeroString(-e - 1) + str;\r\n if (sd && (k = sd - len) > 0) str += getZeroString(k);\r\n } else if (e >= len) {\r\n str += getZeroString(e + 1 - len);\r\n if (sd && (k = sd - e - 1) > 0) str = str + '.' + getZeroString(k);\r\n } else {\r\n if ((k = e + 1) < len) str = str.slice(0, k) + '.' + str.slice(k);\r\n if (sd && (k = sd - len) > 0) {\r\n if (e + 1 === len) str += '.';\r\n str += getZeroString(k);\r\n }\r\n }\r\n\r\n return str;\r\n}\r\n\r\n\r\n// Calculate the base 10 exponent from the base 1e7 exponent.\r\nfunction getBase10Exponent(digits, e) {\r\n var w = digits[0];\r\n\r\n // Add the number of digits of the first word of the digits array.\r\n for ( e *= LOG_BASE; w >= 10; w /= 10) e++;\r\n return e;\r\n}\r\n\r\n\r\nfunction getLn10(Ctor, sd, pr) {\r\n if (sd > LN10_PRECISION) {\r\n\r\n // Reset global state in case the exception is caught.\r\n external = true;\r\n if (pr) Ctor.precision = pr;\r\n throw Error(precisionLimitExceeded);\r\n }\r\n return finalise(new Ctor(LN10), sd, 1, true);\r\n}\r\n\r\n\r\nfunction getPi(Ctor, sd, rm) {\r\n if (sd > PI_PRECISION) throw Error(precisionLimitExceeded);\r\n return finalise(new Ctor(PI), sd, rm, true);\r\n}\r\n\r\n\r\nfunction getPrecision(digits) {\r\n var w = digits.length - 1,\r\n len = w * LOG_BASE + 1;\r\n\r\n w = digits[w];\r\n\r\n // If non-zero...\r\n if (w) {\r\n\r\n // Subtract the number of trailing zeros of the last word.\r\n for (; w % 10 == 0; w /= 10) len--;\r\n\r\n // Add the number of digits of the first word.\r\n for (w = digits[0]; w >= 10; w /= 10) len++;\r\n }\r\n\r\n return len;\r\n}\r\n\r\n\r\nfunction getZeroString(k) {\r\n var zs = '';\r\n for (; k--;) zs += '0';\r\n return zs;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of Decimal `x` to the power `n`, where `n` is an\r\n * integer of type number.\r\n *\r\n * Implements 'exponentiation by squaring'. Called by `pow` and `parseOther`.\r\n *\r\n */\r\nfunction intPow(Ctor, x, n, pr) {\r\n var isTruncated,\r\n r = new Ctor(1),\r\n\r\n // Max n of 9007199254740991 takes 53 loop iterations.\r\n // Maximum digits array length; leaves [28, 34] guard digits.\r\n k = Math.ceil(pr / LOG_BASE + 4);\r\n\r\n external = false;\r\n\r\n for (;;) {\r\n if (n % 2) {\r\n r = r.times(x);\r\n if (truncate(r.d, k)) isTruncated = true;\r\n }\r\n\r\n n = mathfloor(n / 2);\r\n if (n === 0) {\r\n\r\n // To ensure correct rounding when r.d is truncated, increment the last word if it is zero.\r\n n = r.d.length - 1;\r\n if (isTruncated && r.d[n] === 0) ++r.d[n];\r\n break;\r\n }\r\n\r\n x = x.times(x);\r\n truncate(x.d, k);\r\n }\r\n\r\n external = true;\r\n\r\n return r;\r\n}\r\n\r\n\r\nfunction isOdd(n) {\r\n return n.d[n.d.length - 1] & 1;\r\n}\r\n\r\n\r\n/*\r\n * Handle `max` and `min`. `ltgt` is 'lt' or 'gt'.\r\n */\r\nfunction maxOrMin(Ctor, args, ltgt) {\r\n var y,\r\n x = new Ctor(args[0]),\r\n i = 0;\r\n\r\n for (; ++i < args.length;) {\r\n y = new Ctor(args[i]);\r\n if (!y.s) {\r\n x = y;\r\n break;\r\n } else if (x[ltgt](y)) {\r\n x = y;\r\n }\r\n }\r\n\r\n return x;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the natural exponential of `x` rounded to `sd` significant\r\n * digits.\r\n *\r\n * Taylor/Maclaurin series.\r\n *\r\n * exp(x) = x^0/0! + x^1/1! + x^2/2! + x^3/3! + ...\r\n *\r\n * Argument reduction:\r\n * Repeat x = x / 32, k += 5, until |x| < 0.1\r\n * exp(x) = exp(x / 2^k)^(2^k)\r\n *\r\n * Previously, the argument was initially reduced by\r\n * exp(x) = exp(r) * 10^k where r = x - k * ln10, k = floor(x / ln10)\r\n * to first put r in the range [0, ln10], before dividing by 32 until |x| < 0.1, but this was\r\n * found to be slower than just dividing repeatedly by 32 as above.\r\n *\r\n * Max integer argument: exp('20723265836946413') = 6.3e+9000000000000000\r\n * Min integer argument: exp('-20723265836946411') = 1.2e-9000000000000000\r\n * (Math object integer min/max: Math.exp(709) = 8.2e+307, Math.exp(-745) = 5e-324)\r\n *\r\n * exp(Infinity) = Infinity\r\n * exp(-Infinity) = 0\r\n * exp(NaN) = NaN\r\n * exp(±0) = 1\r\n *\r\n * exp(x) is non-terminating for any finite, non-zero x.\r\n *\r\n * The result will always be correctly rounded.\r\n *\r\n */\r\nfunction naturalExponential(x, sd) {\r\n var denominator, guard, j, pow, sum, t, wpr,\r\n rep = 0,\r\n i = 0,\r\n k = 0,\r\n Ctor = x.constructor,\r\n rm = Ctor.rounding,\r\n pr = Ctor.precision;\r\n\r\n // 0/NaN/Infinity?\r\n if (!x.d || !x.d[0] || x.e > 17) {\r\n\r\n return new Ctor(x.d\r\n ? !x.d[0] ? 1 : x.s < 0 ? 0 : 1 / 0\r\n : x.s ? x.s < 0 ? 0 : x : 0 / 0);\r\n }\r\n\r\n if (sd == null) {\r\n external = false;\r\n wpr = pr;\r\n } else {\r\n wpr = sd;\r\n }\r\n\r\n t = new Ctor(0.03125);\r\n\r\n // while abs(x) >= 0.1\r\n while (x.e > -2) {\r\n\r\n // x = x / 2^5\r\n x = x.times(t);\r\n k += 5;\r\n }\r\n\r\n // Use 2 * log10(2^k) + 5 (empirically derived) to estimate the increase in precision\r\n // necessary to ensure the first 4 rounding digits are correct.\r\n guard = Math.log(mathpow(2, k)) / Math.LN10 * 2 + 5 | 0;\r\n wpr += guard;\r\n denominator = pow = sum = new Ctor(1);\r\n Ctor.precision = wpr;\r\n\r\n for (;;) {\r\n pow = finalise(pow.times(x), wpr, 1);\r\n denominator = denominator.times(++i);\r\n t = sum.plus(divide(pow, denominator, wpr, 1));\r\n\r\n if (digitsToString(t.d).slice(0, wpr) === digitsToString(sum.d).slice(0, wpr)) {\r\n j = k;\r\n while (j--) sum = finalise(sum.times(sum), wpr, 1);\r\n\r\n // Check to see if the first 4 rounding digits are [49]999.\r\n // If so, repeat the summation with a higher precision, otherwise\r\n // e.g. with precision: 18, rounding: 1\r\n // exp(18.404272462595034083567793919843761) = 98372560.1229999999 (should be 98372560.123)\r\n // `wpr - guard` is the index of first rounding digit.\r\n if (sd == null) {\r\n\r\n if (rep < 3 && checkRoundingDigits(sum.d, wpr - guard, rm, rep)) {\r\n Ctor.precision = wpr += 10;\r\n denominator = pow = t = new Ctor(1);\r\n i = 0;\r\n rep++;\r\n } else {\r\n return finalise(sum, Ctor.precision = pr, rm, external = true);\r\n }\r\n } else {\r\n Ctor.precision = pr;\r\n return sum;\r\n }\r\n }\r\n\r\n sum = t;\r\n }\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the natural logarithm of `x` rounded to `sd` significant\r\n * digits.\r\n *\r\n * ln(-n) = NaN\r\n * ln(0) = -Infinity\r\n * ln(-0) = -Infinity\r\n * ln(1) = 0\r\n * ln(Infinity) = Infinity\r\n * ln(-Infinity) = NaN\r\n * ln(NaN) = NaN\r\n *\r\n * ln(n) (n != 1) is non-terminating.\r\n *\r\n */\r\nfunction naturalLogarithm(y, sd) {\r\n var c, c0, denominator, e, numerator, rep, sum, t, wpr, x1, x2,\r\n n = 1,\r\n guard = 10,\r\n x = y,\r\n xd = x.d,\r\n Ctor = x.constructor,\r\n rm = Ctor.rounding,\r\n pr = Ctor.precision;\r\n\r\n // Is x negative or Infinity, NaN, 0 or 1?\r\n if (x.s < 0 || !xd || !xd[0] || !x.e && xd[0] == 1 && xd.length == 1) {\r\n return new Ctor(xd && !xd[0] ? -1 / 0 : x.s != 1 ? NaN : xd ? 0 : x);\r\n }\r\n\r\n if (sd == null) {\r\n external = false;\r\n wpr = pr;\r\n } else {\r\n wpr = sd;\r\n }\r\n\r\n Ctor.precision = wpr += guard;\r\n c = digitsToString(xd);\r\n c0 = c.charAt(0);\r\n\r\n if (Math.abs(e = x.e) < 1.5e15) {\r\n\r\n // Argument reduction.\r\n // The series converges faster the closer the argument is to 1, so using\r\n // ln(a^b) = b * ln(a), ln(a) = ln(a^b) / b\r\n // multiply the argument by itself until the leading digits of the significand are 7, 8, 9,\r\n // 10, 11, 12 or 13, recording the number of multiplications so the sum of the series can\r\n // later be divided by this number, then separate out the power of 10 using\r\n // ln(a*10^b) = ln(a) + b*ln(10).\r\n\r\n // max n is 21 (gives 0.9, 1.0 or 1.1) (9e15 / 21 = 4.2e14).\r\n //while (c0 < 9 && c0 != 1 || c0 == 1 && c.charAt(1) > 1) {\r\n // max n is 6 (gives 0.7 - 1.3)\r\n while (c0 < 7 && c0 != 1 || c0 == 1 && c.charAt(1) > 3) {\r\n x = x.times(y);\r\n c = digitsToString(x.d);\r\n c0 = c.charAt(0);\r\n n++;\r\n }\r\n\r\n e = x.e;\r\n\r\n if (c0 > 1) {\r\n x = new Ctor('0.' + c);\r\n e++;\r\n } else {\r\n x = new Ctor(c0 + '.' + c.slice(1));\r\n }\r\n } else {\r\n\r\n // The argument reduction method above may result in overflow if the argument y is a massive\r\n // number with exponent >= 1500000000000000 (9e15 / 6 = 1.5e15), so instead recall this\r\n // function using ln(x*10^e) = ln(x) + e*ln(10).\r\n t = getLn10(Ctor, wpr + 2, pr).times(e + '');\r\n x = naturalLogarithm(new Ctor(c0 + '.' + c.slice(1)), wpr - guard).plus(t);\r\n Ctor.precision = pr;\r\n\r\n return sd == null ? finalise(x, pr, rm, external = true) : x;\r\n }\r\n\r\n // x1 is x reduced to a value near 1.\r\n x1 = x;\r\n\r\n // Taylor series.\r\n // ln(y) = ln((1 + x)/(1 - x)) = 2(x + x^3/3 + x^5/5 + x^7/7 + ...)\r\n // where x = (y - 1)/(y + 1) (|x| < 1)\r\n sum = numerator = x = divide(x.minus(1), x.plus(1), wpr, 1);\r\n x2 = finalise(x.times(x), wpr, 1);\r\n denominator = 3;\r\n\r\n for (;;) {\r\n numerator = finalise(numerator.times(x2), wpr, 1);\r\n t = sum.plus(divide(numerator, new Ctor(denominator), wpr, 1));\r\n\r\n if (digitsToString(t.d).slice(0, wpr) === digitsToString(sum.d).slice(0, wpr)) {\r\n sum = sum.times(2);\r\n\r\n // Reverse the argument reduction. Check that e is not 0 because, besides preventing an\r\n // unnecessary calculation, -0 + 0 = +0 and to ensure correct rounding -0 needs to stay -0.\r\n if (e !== 0) sum = sum.plus(getLn10(Ctor, wpr + 2, pr).times(e + ''));\r\n sum = divide(sum, new Ctor(n), wpr, 1);\r\n\r\n // Is rm > 3 and the first 4 rounding digits 4999, or rm < 4 (or the summation has\r\n // been repeated previously) and the first 4 rounding digits 9999?\r\n // If so, restart the summation with a higher precision, otherwise\r\n // e.g. with precision: 12, rounding: 1\r\n // ln(135520028.6126091714265381533) = 18.7246299999 when it should be 18.72463.\r\n // `wpr - guard` is the index of first rounding digit.\r\n if (sd == null) {\r\n if (checkRoundingDigits(sum.d, wpr - guard, rm, rep)) {\r\n Ctor.precision = wpr += guard;\r\n t = numerator = x = divide(x1.minus(1), x1.plus(1), wpr, 1);\r\n x2 = finalise(x.times(x), wpr, 1);\r\n denominator = rep = 1;\r\n } else {\r\n return finalise(sum, Ctor.precision = pr, rm, external = true);\r\n }\r\n } else {\r\n Ctor.precision = pr;\r\n return sum;\r\n }\r\n }\r\n\r\n sum = t;\r\n denominator += 2;\r\n }\r\n}\r\n\r\n\r\n// ±Infinity, NaN.\r\nfunction nonFiniteToString(x) {\r\n // Unsigned.\r\n return String(x.s * x.s / 0);\r\n}\r\n\r\n\r\n/*\r\n * Parse the value of a new Decimal `x` from string `str`.\r\n */\r\nfunction parseDecimal(x, str) {\r\n var e, i, len;\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 // 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 - 1) === 48; --len);\r\n str = str.slice(i, len);\r\n\r\n if (str) {\r\n len -= i;\r\n x.e = e = e - i - 1;\r\n x.d = [];\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 word of the digits array.\r\n i = (e + 1) % LOG_BASE;\r\n if (e < 0) i += LOG_BASE;\r\n\r\n if (i < len) {\r\n if (i) x.d.push(+str.slice(0, i));\r\n for (len -= LOG_BASE; i < len;) x.d.push(+str.slice(i, i += LOG_BASE));\r\n str = str.slice(i);\r\n i = LOG_BASE - str.length;\r\n } else {\r\n i -= len;\r\n }\r\n\r\n for (; i--;) str += '0';\r\n x.d.push(+str);\r\n\r\n if (external) {\r\n\r\n // Overflow?\r\n if (x.e > x.constructor.maxE) {\r\n\r\n // Infinity.\r\n x.d = null;\r\n x.e = NaN;\r\n\r\n // Underflow?\r\n } else if (x.e < x.constructor.minE) {\r\n\r\n // Zero.\r\n x.e = 0;\r\n x.d = [0];\r\n // x.constructor.underflow = true;\r\n } // else x.constructor.underflow = false;\r\n }\r\n } else {\r\n\r\n // Zero.\r\n x.e = 0;\r\n x.d = [0];\r\n }\r\n\r\n return x;\r\n}\r\n\r\n\r\n/*\r\n * Parse the value of a new Decimal `x` from a string `str`, which is not a decimal value.\r\n */\r\nfunction parseOther(x, str) {\r\n var base, Ctor, divisor, i, isFloat, len, p, xd, xe;\r\n\r\n if (str.indexOf('_') > -1) {\r\n str = str.replace(/(\\d)_(?=\\d)/g, '$1');\r\n if (isDecimal.test(str)) return parseDecimal(x, str);\r\n } else if (str === 'Infinity' || str === 'NaN') {\r\n if (!+str) x.s = NaN;\r\n x.e = NaN;\r\n x.d = null;\r\n return x;\r\n }\r\n\r\n if (isHex.test(str)) {\r\n base = 16;\r\n str = str.toLowerCase();\r\n } else if (isBinary.test(str)) {\r\n base = 2;\r\n } else if (isOctal.test(str)) {\r\n base = 8;\r\n } else {\r\n throw Error(invalidArgument + str);\r\n }\r\n\r\n // Is there a binary exponent part?\r\n i = str.search(/p/i);\r\n\r\n if (i > 0) {\r\n p = +str.slice(i + 1);\r\n str = str.substring(2, i);\r\n } else {\r\n str = str.slice(2);\r\n }\r\n\r\n // Convert `str` as an integer then divide the result by `base` raised to a power such that the\r\n // fraction part will be restored.\r\n i = str.indexOf('.');\r\n isFloat = i >= 0;\r\n Ctor = x.constructor;\r\n\r\n if (isFloat) {\r\n str = str.replace('.', '');\r\n len = str.length;\r\n i = len - i;\r\n\r\n // log[10](16) = 1.2041... , log[10](88) = 1.9444....\r\n divisor = intPow(Ctor, new Ctor(base), i, i * 2);\r\n }\r\n\r\n xd = convertBase(str, base, BASE);\r\n xe = xd.length - 1;\r\n\r\n // Remove trailing zeros.\r\n for (i = xe; xd[i] === 0; --i) xd.pop();\r\n if (i < 0) return new Ctor(x.s * 0);\r\n x.e = getBase10Exponent(xd, xe);\r\n x.d = xd;\r\n external = false;\r\n\r\n // At what precision to perform the division to ensure exact conversion?\r\n // maxDecimalIntegerPartDigitCount = ceil(log[10](b) * otherBaseIntegerPartDigitCount)\r\n // log[10](2) = 0.30103, log[10](8) = 0.90309, log[10](16) = 1.20412\r\n // E.g. ceil(1.2 * 3) = 4, so up to 4 decimal digits are needed to represent 3 hex int digits.\r\n // maxDecimalFractionPartDigitCount = {Hex:4|Oct:3|Bin:1} * otherBaseFractionPartDigitCount\r\n // Therefore using 4 * the number of digits of str will always be enough.\r\n if (isFloat) x = divide(x, divisor, len * 4);\r\n\r\n // Multiply by the binary exponent part if present.\r\n if (p) x = x.times(Math.abs(p) < 54 ? mathpow(2, p) : Decimal.pow(2, p));\r\n external = true;\r\n\r\n return x;\r\n}\r\n\r\n\r\n/*\r\n * sin(x) = x - x^3/3! + x^5/5! - ...\r\n * |x| < pi/2\r\n *\r\n */\r\nfunction sine(Ctor, x) {\r\n var k,\r\n len = x.d.length;\r\n\r\n if (len < 3) {\r\n return x.isZero() ? x : taylorSeries(Ctor, 2, x, x);\r\n }\r\n\r\n // Argument reduction: sin(5x) = 16*sin^5(x) - 20*sin^3(x) + 5*sin(x)\r\n // i.e. sin(x) = 16*sin^5(x/5) - 20*sin^3(x/5) + 5*sin(x/5)\r\n // and sin(x) = sin(x/5)(5 + sin^2(x/5)(16sin^2(x/5) - 20))\r\n\r\n // Estimate the optimum number of times to use the argument reduction.\r\n k = 1.4 * Math.sqrt(len);\r\n k = k > 16 ? 16 : k | 0;\r\n\r\n x = x.times(1 / tinyPow(5, k));\r\n x = taylorSeries(Ctor, 2, x, x);\r\n\r\n // Reverse argument reduction\r\n var sin2_x,\r\n d5 = new Ctor(5),\r\n d16 = new Ctor(16),\r\n d20 = new Ctor(20);\r\n for (; k--;) {\r\n sin2_x = x.times(x);\r\n x = x.times(d5.plus(sin2_x.times(d16.times(sin2_x).minus(d20))));\r\n }\r\n\r\n return x;\r\n}\r\n\r\n\r\n// Calculate Taylor series for `cos`, `cosh`, `sin` and `sinh`.\r\nfunction taylorSeries(Ctor, n, x, y, isHyperbolic) {\r\n var j, t, u, x2,\r\n i = 1,\r\n pr = Ctor.precision,\r\n k = Math.ceil(pr / LOG_BASE);\r\n\r\n external = false;\r\n x2 = x.times(x);\r\n u = new Ctor(y);\r\n\r\n for (;;) {\r\n t = divide(u.times(x2), new Ctor(n++ * n++), pr, 1);\r\n u = isHyperbolic ? y.plus(t) : y.minus(t);\r\n y = divide(t.times(x2), new Ctor(n++ * n++), pr, 1);\r\n t = u.plus(y);\r\n\r\n if (t.d[k] !== void 0) {\r\n for (j = k; t.d[j] === u.d[j] && j--;);\r\n if (j == -1) break;\r\n }\r\n\r\n j = u;\r\n u = y;\r\n y = t;\r\n t = j;\r\n i++;\r\n }\r\n\r\n external = true;\r\n t.d.length = k + 1;\r\n\r\n return t;\r\n}\r\n\r\n\r\n// Exponent e must be positive and non-zero.\r\nfunction tinyPow(b, e) {\r\n var n = b;\r\n while (--e) n *= b;\r\n return n;\r\n}\r\n\r\n\r\n// Return the absolute value of `x` reduced to less than or equal to half pi.\r\nfunction toLessThanHalfPi(Ctor, x) {\r\n var t,\r\n isNeg = x.s < 0,\r\n pi = getPi(Ctor, Ctor.precision, 1),\r\n halfPi = pi.times(0.5);\r\n\r\n x = x.abs();\r\n\r\n if (x.lte(halfPi)) {\r\n quadrant = isNeg ? 4 : 1;\r\n return x;\r\n }\r\n\r\n t = x.divToInt(pi);\r\n\r\n if (t.isZero()) {\r\n quadrant = isNeg ? 3 : 2;\r\n } else {\r\n x = x.minus(t.times(pi));\r\n\r\n // 0 <= x < pi\r\n if (x.lte(halfPi)) {\r\n quadrant = isOdd(t) ? (isNeg ? 2 : 3) : (isNeg ? 4 : 1);\r\n return x;\r\n }\r\n\r\n quadrant = isOdd(t) ? (isNeg ? 1 : 4) : (isNeg ? 3 : 2);\r\n }\r\n\r\n return x.minus(pi).abs();\r\n}\r\n\r\n\r\n/*\r\n * Return the value of Decimal `x` as a string in base `baseOut`.\r\n *\r\n * If the optional `sd` argument is present include a binary exponent suffix.\r\n */\r\nfunction toStringBinary(x, baseOut, sd, rm) {\r\n var base, e, i, k, len, roundUp, str, xd, y,\r\n Ctor = x.constructor,\r\n isExp = sd !== void 0;\r\n\r\n if (isExp) {\r\n checkInt32(sd, 1, MAX_DIGITS);\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n } else {\r\n sd = Ctor.precision;\r\n rm = Ctor.rounding;\r\n }\r\n\r\n if (!x.isFinite()) {\r\n str = nonFiniteToString(x);\r\n } else {\r\n str = finiteToString(x);\r\n i = str.indexOf('.');\r\n\r\n // Use exponential notation according to `toExpPos` and `toExpNeg`? No, but if required:\r\n // maxBinaryExponent = floor((decimalExponent + 1) * log[2](10))\r\n // minBinaryExponent = floor(decimalExponent * log[2](10))\r\n // log[2](10) = 3.321928094887362347870319429489390175864\r\n\r\n if (isExp) {\r\n base = 2;\r\n if (baseOut == 16) {\r\n sd = sd * 4 - 3;\r\n } else if (baseOut == 8) {\r\n sd = sd * 3 - 2;\r\n }\r\n } else {\r\n base = baseOut;\r\n }\r\n\r\n // Convert the number as an integer then divide the result by its base raised to a power such\r\n // that the fraction part will be restored.\r\n\r\n // Non-integer.\r\n if (i >= 0) {\r\n str = str.replace('.', '');\r\n y = new Ctor(1);\r\n y.e = str.length - i;\r\n y.d = convertBase(finiteToString(y), 10, base);\r\n y.e = y.d.length;\r\n }\r\n\r\n xd = convertBase(str, 10, base);\r\n e = len = xd.length;\r\n\r\n // Remove trailing zeros.\r\n for (; xd[--len] == 0;) xd.pop();\r\n\r\n if (!xd[0]) {\r\n str = isExp ? '0p+0' : '0';\r\n } else {\r\n if (i < 0) {\r\n e--;\r\n } else {\r\n x = new Ctor(x);\r\n x.d = xd;\r\n x.e = e;\r\n x = divide(x, y, sd, rm, 0, base);\r\n xd = x.d;\r\n e = x.e;\r\n roundUp = inexact;\r\n }\r\n\r\n // The rounding digit, i.e. the digit after the digit that may be rounded up.\r\n i = xd[sd];\r\n k = base / 2;\r\n roundUp = roundUp || xd[sd + 1] !== void 0;\r\n\r\n roundUp = rm < 4\r\n ? (i !== void 0 || roundUp) && (rm === 0 || rm === (x.s < 0 ? 3 : 2))\r\n : i > k || i === k && (rm === 4 || roundUp || rm === 6 && xd[sd - 1] & 1 ||\r\n rm === (x.s < 0 ? 8 : 7));\r\n\r\n xd.length = sd;\r\n\r\n if (roundUp) {\r\n\r\n // Rounding up may mean the previous digit has to be rounded up and so on.\r\n for (; ++xd[--sd] > base - 1;) {\r\n xd[sd] = 0;\r\n if (!sd) {\r\n ++e;\r\n xd.unshift(1);\r\n }\r\n }\r\n }\r\n\r\n // Determine trailing zeros.\r\n for (len = xd.length; !xd[len - 1]; --len);\r\n\r\n // E.g. [4, 11, 15] becomes 4bf.\r\n for (i = 0, str = ''; i < len; i++) str += NUMERALS.charAt(xd[i]);\r\n\r\n // Add binary exponent suffix?\r\n if (isExp) {\r\n if (len > 1) {\r\n if (baseOut == 16 || baseOut == 8) {\r\n i = baseOut == 16 ? 4 : 3;\r\n for (--len; len % i; len++) str += '0';\r\n xd = convertBase(str, base, baseOut);\r\n for (len = xd.length; !xd[len - 1]; --len);\r\n\r\n // xd[0] will always be be 1\r\n for (i = 1, str = '1.'; i < len; i++) str += NUMERALS.charAt(xd[i]);\r\n } else {\r\n str = str.charAt(0) + '.' + str.slice(1);\r\n }\r\n }\r\n\r\n str = str + (e < 0 ? 'p' : 'p+') + e;\r\n } else if (e < 0) {\r\n for (; ++e;) str = '0' + str;\r\n str = '0.' + str;\r\n } else {\r\n if (++e > len) for (e -= len; e-- ;) str += '0';\r\n else if (e < len) str = str.slice(0, e) + '.' + str.slice(e);\r\n }\r\n }\r\n\r\n str = (baseOut == 16 ? '0x' : baseOut == 2 ? '0b' : baseOut == 8 ? '0o' : '') + str;\r\n }\r\n\r\n return x.s < 0 ? '-' + str : str;\r\n}\r\n\r\n\r\n// Does not strip trailing zeros.\r\nfunction truncate(arr, len) {\r\n if (arr.length > len) {\r\n arr.length = len;\r\n return true;\r\n }\r\n}\r\n\r\n\r\n// Decimal methods\r\n\r\n\r\n/*\r\n * abs\r\n * acos\r\n * acosh\r\n * add\r\n * asin\r\n * asinh\r\n * atan\r\n * atanh\r\n * atan2\r\n * cbrt\r\n * ceil\r\n * clamp\r\n * clone\r\n * config\r\n * cos\r\n * cosh\r\n * div\r\n * exp\r\n * floor\r\n * hypot\r\n * ln\r\n * log\r\n * log2\r\n * log10\r\n * max\r\n * min\r\n * mod\r\n * mul\r\n * pow\r\n * random\r\n * round\r\n * set\r\n * sign\r\n * sin\r\n * sinh\r\n * sqrt\r\n * sub\r\n * sum\r\n * tan\r\n * tanh\r\n * trunc\r\n */\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the absolute value of `x`.\r\n *\r\n * x {number|string|Decimal}\r\n *\r\n */\r\nfunction abs(x) {\r\n return new this(x).abs();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the arccosine in radians of `x`.\r\n *\r\n * x {number|string|Decimal}\r\n *\r\n */\r\nfunction acos(x) {\r\n return new this(x).acos();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic cosine of `x`, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal} A value in radians.\r\n *\r\n */\r\nfunction acosh(x) {\r\n return new this(x).acosh();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the sum of `x` and `y`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal}\r\n * y {number|string|Decimal}\r\n *\r\n */\r\nfunction add(x, y) {\r\n return new this(x).plus(y);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the arcsine in radians of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal}\r\n *\r\n */\r\nfunction asin(x) {\r\n return new this(x).asin();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic sine of `x`, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal} A value in radians.\r\n *\r\n */\r\nfunction asinh(x) {\r\n return new this(x).asinh();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the arctangent in radians of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal}\r\n *\r\n */\r\nfunction atan(x) {\r\n return new this(x).atan();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic tangent of `x`, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal} A value in radians.\r\n *\r\n */\r\nfunction atanh(x) {\r\n return new this(x).atanh();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the arctangent in radians of `y/x` in the range -pi to pi\r\n * (inclusive), rounded to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-pi, pi]\r\n *\r\n * y {number|string|Decimal} The y-coordinate.\r\n * x {number|string|Decimal} The x-coordinate.\r\n *\r\n * atan2(±0, -0) = ±pi\r\n * atan2(±0, +0) = ±0\r\n * atan2(±0, -x) = ±pi for x > 0\r\n * atan2(±0, x) = ±0 for x > 0\r\n * atan2(-y, ±0) = -pi/2 for y > 0\r\n * atan2(y, ±0) = pi/2 for y > 0\r\n * atan2(±y, -Infinity) = ±pi for finite y > 0\r\n * atan2(±y, +Infinity) = ±0 for finite y > 0\r\n * atan2(±Infinity, x) = ±pi/2 for finite x\r\n * atan2(±Infinity, -Infinity) = ±3*pi/4\r\n * atan2(±Infinity, +Infinity) = ±pi/4\r\n * atan2(NaN, x) = NaN\r\n * atan2(y, NaN) = NaN\r\n *\r\n */\r\nfunction atan2(y, x) {\r\n y = new this(y);\r\n x = new this(x);\r\n var r,\r\n pr = this.precision,\r\n rm = this.rounding,\r\n wpr = pr + 4;\r\n\r\n // Either NaN\r\n if (!y.s || !x.s) {\r\n r = new this(NaN);\r\n\r\n // Both ±Infinity\r\n } else if (!y.d && !x.d) {\r\n r = getPi(this, wpr, 1).times(x.s > 0 ? 0.25 : 0.75);\r\n r.s = y.s;\r\n\r\n // x is ±Infinity or y is ±0\r\n } else if (!x.d || y.isZero()) {\r\n r = x.s < 0 ? getPi(this, pr, rm) : new this(0);\r\n r.s = y.s;\r\n\r\n // y is ±Infinity or x is ±0\r\n } else if (!y.d || x.isZero()) {\r\n r = getPi(this, wpr, 1).times(0.5);\r\n r.s = y.s;\r\n\r\n // Both non-zero and finite\r\n } else if (x.s < 0) {\r\n this.precision = wpr;\r\n this.rounding = 1;\r\n r = this.atan(divide(y, x, wpr, 1));\r\n x = getPi(this, wpr, 1);\r\n this.precision = pr;\r\n this.rounding = rm;\r\n r = y.s < 0 ? r.minus(x) : r.plus(x);\r\n } else {\r\n r = this.atan(divide(y, x, wpr, 1));\r\n }\r\n\r\n return r;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the cube root of `x`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal}\r\n *\r\n */\r\nfunction cbrt(x) {\r\n return new this(x).cbrt();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` rounded to an integer using `ROUND_CEIL`.\r\n *\r\n * x {number|string|Decimal}\r\n *\r\n */\r\nfunction ceil(x) {\r\n return finalise(x = new this(x), x.e + 1, 2);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` clamped to the range delineated by `min` and `max`.\r\n *\r\n * x {number|string|Decimal}\r\n * min {number|string|Decimal}\r\n * max {number|string|Decimal}\r\n *\r\n */\r\nfunction clamp(x, min, max) {\r\n return new this(x).clamp(min, max);\r\n}\r\n\r\n\r\n/*\r\n * Configure global settings for a Decimal constructor.\r\n *\r\n * `obj` is an object with one or more of the following properties,\r\n *\r\n * precision {number}\r\n * rounding {number}\r\n * toExpNeg {number}\r\n * toExpPos {number}\r\n * maxE {number}\r\n * minE {number}\r\n * modulo {number}\r\n * crypto {boolean|number}\r\n * defaults {true}\r\n *\r\n * E.g. Decimal.config({ precision: 20, rounding: 4 })\r\n *\r\n */\r\nfunction config(obj) {\r\n if (!obj || typeof obj !== 'object') throw Error(decimalError + 'Object expected');\r\n var i, p, v,\r\n useDefaults = obj.defaults === true,\r\n ps = [\r\n 'precision', 1, MAX_DIGITS,\r\n 'rounding', 0, 8,\r\n 'toExpNeg', -EXP_LIMIT, 0,\r\n 'toExpPos', 0, EXP_LIMIT,\r\n 'maxE', 0, EXP_LIMIT,\r\n 'minE', -EXP_LIMIT, 0,\r\n 'modulo', 0, 9\r\n ];\r\n\r\n for (i = 0; i < ps.length; i += 3) {\r\n if (p = ps[i], useDefaults) this[p] = DEFAULTS[p];\r\n if ((v = obj[p]) !== void 0) {\r\n if (mathfloor(v) === v && v >= ps[i + 1] && v <= ps[i + 2]) this[p] = v;\r\n else throw Error(invalidArgument + p + ': ' + v);\r\n }\r\n }\r\n\r\n if (p = 'crypto', useDefaults) this[p] = DEFAULTS[p];\r\n if ((v = obj[p]) !== void 0) {\r\n if (v === true || v === false || v === 0 || v === 1) {\r\n if (v) {\r\n if (typeof crypto != 'undefined' && crypto &&\r\n (crypto.getRandomValues || crypto.randomBytes)) {\r\n this[p] = true;\r\n } else {\r\n throw Error(cryptoUnavailable);\r\n }\r\n } else {\r\n this[p] = false;\r\n }\r\n } else {\r\n throw Error(invalidArgument + p + ': ' + v);\r\n }\r\n }\r\n\r\n return this;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the cosine of `x`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal} A value in radians.\r\n *\r\n */\r\nfunction cos(x) {\r\n return new this(x).cos();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the hyperbolic cosine of `x`, rounded to precision\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal} A value in radians.\r\n *\r\n */\r\nfunction cosh(x) {\r\n return new this(x).cosh();\r\n}\r\n\r\n\r\n/*\r\n * Create and return a Decimal constructor with the same configuration properties as this Decimal\r\n * constructor.\r\n *\r\n */\r\nfunction clone(obj) {\r\n var i, p, ps;\r\n\r\n /*\r\n * The Decimal constructor and exported function.\r\n * Return a new Decimal instance.\r\n *\r\n * v {number|string|Decimal} A numeric value.\r\n *\r\n */\r\n function Decimal(v) {\r\n var e, i, t,\r\n x = this;\r\n\r\n // Decimal called without new.\r\n if (!(x instanceof Decimal)) return new Decimal(v);\r\n\r\n // Retain a reference to this Decimal constructor, and shadow Decimal.prototype.constructor\r\n // which points to Object.\r\n x.constructor = Decimal;\r\n\r\n // Duplicate.\r\n if (isDecimalInstance(v)) {\r\n x.s = v.s;\r\n\r\n if (external) {\r\n if (!v.d || v.e > Decimal.maxE) {\r\n\r\n // Infinity.\r\n x.e = NaN;\r\n x.d = null;\r\n } else if (v.e < Decimal.minE) {\r\n\r\n // Zero.\r\n x.e = 0;\r\n x.d = [0];\r\n } else {\r\n x.e = v.e;\r\n x.d = v.d.slice();\r\n }\r\n } else {\r\n x.e = v.e;\r\n x.d = v.d ? v.d.slice() : v.d;\r\n }\r\n\r\n return;\r\n }\r\n\r\n t = typeof v;\r\n\r\n if (t === 'number') {\r\n if (v === 0) {\r\n x.s = 1 / v < 0 ? -1 : 1;\r\n x.e = 0;\r\n x.d = [0];\r\n return;\r\n }\r\n\r\n if (v < 0) {\r\n v = -v;\r\n x.s = -1;\r\n } else {\r\n x.s = 1;\r\n }\r\n\r\n // Fast path for small integers.\r\n if (v === ~~v && v < 1e7) {\r\n for (e = 0, i = v; i >= 10; i /= 10) e++;\r\n\r\n if (external) {\r\n if (e > Decimal.maxE) {\r\n x.e = NaN;\r\n x.d = null;\r\n } else if (e < Decimal.minE) {\r\n x.e = 0;\r\n x.d = [0];\r\n } else {\r\n x.e = e;\r\n x.d = [v];\r\n }\r\n } else {\r\n x.e = e;\r\n x.d = [v];\r\n }\r\n\r\n return;\r\n\r\n // Infinity, NaN.\r\n } else if (v * 0 !== 0) {\r\n if (!v) x.s = NaN;\r\n x.e = NaN;\r\n x.d = null;\r\n return;\r\n }\r\n\r\n return parseDecimal(x, v.toString());\r\n\r\n } else if (t !== 'string') {\r\n throw Error(invalidArgument + v);\r\n }\r\n\r\n // Minus sign?\r\n if ((i = v.charCodeAt(0)) === 45) {\r\n v = v.slice(1);\r\n x.s = -1;\r\n } else {\r\n // Plus sign?\r\n if (i === 43) v = v.slice(1);\r\n x.s = 1;\r\n }\r\n\r\n return isDecimal.test(v) ? parseDecimal(x, v) : parseOther(x, v);\r\n }\r\n\r\n Decimal.prototype = P;\r\n\r\n Decimal.ROUND_UP = 0;\r\n Decimal.ROUND_DOWN = 1;\r\n Decimal.ROUND_CEIL = 2;\r\n Decimal.ROUND_FLOOR = 3;\r\n Decimal.ROUND_HALF_UP = 4;\r\n Decimal.ROUND_HALF_DOWN = 5;\r\n Decimal.ROUND_HALF_EVEN = 6;\r\n Decimal.ROUND_HALF_CEIL = 7;\r\n Decimal.ROUND_HALF_FLOOR = 8;\r\n Decimal.EUCLID = 9;\r\n\r\n Decimal.config = Decimal.set = config;\r\n Decimal.clone = clone;\r\n Decimal.isDecimal = isDecimalInstance;\r\n\r\n Decimal.abs = abs;\r\n Decimal.acos = acos;\r\n Decimal.acosh = acosh; // ES6\r\n Decimal.add = add;\r\n Decimal.asin = asin;\r\n Decimal.asinh = asinh; // ES6\r\n Decimal.atan = atan;\r\n Decimal.atanh = atanh; // ES6\r\n Decimal.atan2 = atan2;\r\n Decimal.cbrt = cbrt; // ES6\r\n Decimal.ceil = ceil;\r\n Decimal.clamp = clamp;\r\n Decimal.cos = cos;\r\n Decimal.cosh = cosh; // ES6\r\n Decimal.div = div;\r\n Decimal.exp = exp;\r\n Decimal.floor = floor;\r\n Decimal.hypot = hypot; // ES6\r\n Decimal.ln = ln;\r\n Decimal.log = log;\r\n Decimal.log10 = log10; // ES6\r\n Decimal.log2 = log2; // ES6\r\n Decimal.max = max;\r\n Decimal.min = min;\r\n Decimal.mod = mod;\r\n Decimal.mul = mul;\r\n Decimal.pow = pow;\r\n Decimal.random = random;\r\n Decimal.round = round;\r\n Decimal.sign = sign; // ES6\r\n Decimal.sin = sin;\r\n Decimal.sinh = sinh; // ES6\r\n Decimal.sqrt = sqrt;\r\n Decimal.sub = sub;\r\n Decimal.sum = sum;\r\n Decimal.tan = tan;\r\n Decimal.tanh = tanh; // ES6\r\n Decimal.trunc = trunc; // ES6\r\n\r\n if (obj === void 0) obj = {};\r\n if (obj) {\r\n if (obj.defaults !== true) {\r\n ps = ['precision', 'rounding', 'toExpNeg', 'toExpPos', 'maxE', 'minE', 'modulo', 'crypto'];\r\n for (i = 0; i < ps.length;) if (!obj.hasOwnProperty(p = ps[i++])) obj[p] = this[p];\r\n }\r\n }\r\n\r\n Decimal.config(obj);\r\n\r\n return Decimal;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` divided by `y`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal}\r\n * y {number|string|Decimal}\r\n *\r\n */\r\nfunction div(x, y) {\r\n return new this(x).div(y);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the natural exponential of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal} The power to which to raise the base of the natural log.\r\n *\r\n */\r\nfunction exp(x) {\r\n return new this(x).exp();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` round to an integer using `ROUND_FLOOR`.\r\n *\r\n * x {number|string|Decimal}\r\n *\r\n */\r\nfunction floor(x) {\r\n return finalise(x = new this(x), x.e + 1, 3);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the square root of the sum of the squares of the arguments,\r\n * rounded to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * hypot(a, b, ...) = sqrt(a^2 + b^2 + ...)\r\n *\r\n * arguments {number|string|Decimal}\r\n *\r\n */\r\nfunction hypot() {\r\n var i, n,\r\n t = new this(0);\r\n\r\n external = false;\r\n\r\n for (i = 0; i < arguments.length;) {\r\n n = new this(arguments[i++]);\r\n if (!n.d) {\r\n if (n.s) {\r\n external = true;\r\n return new this(1 / 0);\r\n }\r\n t = n;\r\n } else if (t.d) {\r\n t = t.plus(n.times(n));\r\n }\r\n }\r\n\r\n external = true;\r\n\r\n return t.sqrt();\r\n}\r\n\r\n\r\n/*\r\n * Return true if object is a Decimal instance (where Decimal is any Decimal constructor),\r\n * otherwise return false.\r\n *\r\n */\r\nfunction isDecimalInstance(obj) {\r\n return obj instanceof Decimal || obj && obj.toStringTag === tag || false;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the natural logarithm of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal}\r\n *\r\n */\r\nfunction ln(x) {\r\n return new this(x).ln();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the log of `x` to the base `y`, or to base 10 if no base\r\n * is specified, rounded to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * log[y](x)\r\n *\r\n * x {number|string|Decimal} The argument of the logarithm.\r\n * y {number|string|Decimal} The base of the logarithm.\r\n *\r\n */\r\nfunction log(x, y) {\r\n return new this(x).log(y);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the base 2 logarithm of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal}\r\n *\r\n */\r\nfunction log2(x) {\r\n return new this(x).log(2);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the base 10 logarithm of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal}\r\n *\r\n */\r\nfunction log10(x) {\r\n return new this(x).log(10);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the maximum of the arguments.\r\n *\r\n * arguments {number|string|Decimal}\r\n *\r\n */\r\nfunction max() {\r\n return maxOrMin(this, arguments, 'lt');\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the minimum of the arguments.\r\n *\r\n * arguments {number|string|Decimal}\r\n *\r\n */\r\nfunction min() {\r\n return maxOrMin(this, arguments, 'gt');\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` modulo `y`, rounded to `precision` significant digits\r\n * using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal}\r\n * y {number|string|Decimal}\r\n *\r\n */\r\nfunction mod(x, y) {\r\n return new this(x).mod(y);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` multiplied by `y`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal}\r\n * y {number|string|Decimal}\r\n *\r\n */\r\nfunction mul(x, y) {\r\n return new this(x).mul(y);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` raised to the power `y`, rounded to precision\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal} The base.\r\n * y {number|string|Decimal} The exponent.\r\n *\r\n */\r\nfunction pow(x, y) {\r\n return new this(x).pow(y);\r\n}\r\n\r\n\r\n/*\r\n * Returns a new Decimal with a random value equal to or greater than 0 and less than 1, and with\r\n * `sd`, or `Decimal.precision` if `sd` is omitted, significant digits (or less if trailing zeros\r\n * are produced).\r\n *\r\n * [sd] {number} Significant digits. Integer, 0 to MAX_DIGITS inclusive.\r\n *\r\n */\r\nfunction random(sd) {\r\n var d, e, k, n,\r\n i = 0,\r\n r = new this(1),\r\n rd = [];\r\n\r\n if (sd === void 0) sd = this.precision;\r\n else checkInt32(sd, 1, MAX_DIGITS);\r\n\r\n k = Math.ceil(sd / LOG_BASE);\r\n\r\n if (!this.crypto) {\r\n for (; i < k;) rd[i++] = Math.random() * 1e7 | 0;\r\n\r\n // Browsers supporting crypto.getRandomValues.\r\n } else if (crypto.getRandomValues) {\r\n d = crypto.getRandomValues(new Uint32Array(k));\r\n\r\n for (; i < k;) {\r\n n = d[i];\r\n\r\n // 0 <= n < 4294967296\r\n // Probability n >= 4.29e9, is 4967296 / 4294967296 = 0.00116 (1 in 865).\r\n if (n >= 4.29e9) {\r\n d[i] = crypto.getRandomValues(new Uint32Array(1))[0];\r\n } else {\r\n\r\n // 0 <= n <= 4289999999\r\n // 0 <= (n % 1e7) <= 9999999\r\n rd[i++] = n % 1e7;\r\n }\r\n }\r\n\r\n // Node.js supporting crypto.randomBytes.\r\n } else if (crypto.randomBytes) {\r\n\r\n // buffer\r\n d = crypto.randomBytes(k *= 4);\r\n\r\n for (; i < k;) {\r\n\r\n // 0 <= n < 2147483648\r\n n = d[i] + (d[i + 1] << 8) + (d[i + 2] << 16) + ((d[i + 3] & 0x7f) << 24);\r\n\r\n // Probability n >= 2.14e9, is 7483648 / 2147483648 = 0.0035 (1 in 286).\r\n if (n >= 2.14e9) {\r\n crypto.randomBytes(4).copy(d, i);\r\n } else {\r\n\r\n // 0 <= n <= 2139999999\r\n // 0 <= (n % 1e7) <= 9999999\r\n rd.push(n % 1e7);\r\n i += 4;\r\n }\r\n }\r\n\r\n i = k / 4;\r\n } else {\r\n throw Error(cryptoUnavailable);\r\n }\r\n\r\n k = rd[--i];\r\n sd %= LOG_BASE;\r\n\r\n // Convert trailing digits to zeros according to sd.\r\n if (k && sd) {\r\n n = mathpow(10, LOG_BASE - sd);\r\n rd[i] = (k / n | 0) * n;\r\n }\r\n\r\n // Remove trailing words which are zero.\r\n for (; rd[i] === 0; i--) rd.pop();\r\n\r\n // Zero?\r\n if (i < 0) {\r\n e = 0;\r\n rd = [0];\r\n } else {\r\n e = -1;\r\n\r\n // Remove leading words which are zero and adjust exponent accordingly.\r\n for (; rd[0] === 0; e -= LOG_BASE) rd.shift();\r\n\r\n // Count the digits of the first word of rd to determine leading zeros.\r\n for (k = 1, n = rd[0]; n >= 10; n /= 10) k++;\r\n\r\n // Adjust the exponent for leading zeros of the first word of rd.\r\n if (k < LOG_BASE) e -= LOG_BASE - k;\r\n }\r\n\r\n r.e = e;\r\n r.d = rd;\r\n\r\n return r;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` rounded to an integer using rounding mode `rounding`.\r\n *\r\n * To emulate `Math.round`, set rounding to 7 (ROUND_HALF_CEIL).\r\n *\r\n * x {number|string|Decimal}\r\n *\r\n */\r\nfunction round(x) {\r\n return finalise(x = new this(x), x.e + 1, this.rounding);\r\n}\r\n\r\n\r\n/*\r\n * Return\r\n * 1 if x > 0,\r\n * -1 if x < 0,\r\n * 0 if x is 0,\r\n * -0 if x is -0,\r\n * NaN otherwise\r\n *\r\n * x {number|string|Decimal}\r\n *\r\n */\r\nfunction sign(x) {\r\n x = new this(x);\r\n return x.d ? (x.d[0] ? x.s : 0 * x.s) : x.s || NaN;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the sine of `x`, rounded to `precision` significant digits\r\n * using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal} A value in radians.\r\n *\r\n */\r\nfunction sin(x) {\r\n return new this(x).sin();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the hyperbolic sine of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal} A value in radians.\r\n *\r\n */\r\nfunction sinh(x) {\r\n return new this(x).sinh();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the square root of `x`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal}\r\n *\r\n */\r\nfunction sqrt(x) {\r\n return new this(x).sqrt();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` minus `y`, rounded to `precision` significant digits\r\n * using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal}\r\n * y {number|string|Decimal}\r\n *\r\n */\r\nfunction sub(x, y) {\r\n return new this(x).sub(y);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the sum of the arguments, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * Only the result is rounded, not the intermediate calculations.\r\n *\r\n * arguments {number|string|Decimal}\r\n *\r\n */\r\nfunction sum() {\r\n var i = 0,\r\n args = arguments,\r\n x = new this(args[i]);\r\n\r\n external = false;\r\n for (; x.s && ++i < args.length;) x = x.plus(args[i]);\r\n external = true;\r\n\r\n return finalise(x, this.precision, this.rounding);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the tangent of `x`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal} A value in radians.\r\n *\r\n */\r\nfunction tan(x) {\r\n return new this(x).tan();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the hyperbolic tangent of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal} A value in radians.\r\n *\r\n */\r\nfunction tanh(x) {\r\n return new this(x).tanh();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` truncated to an integer.\r\n *\r\n * x {number|string|Decimal}\r\n *\r\n */\r\nfunction trunc(x) {\r\n return finalise(x = new this(x), x.e + 1, 1);\r\n}\r\n\r\n\r\nP[Symbol.for('nodejs.util.inspect.custom')] = P.toString;\r\nP[Symbol.toStringTag] = 'Decimal';\r\n\r\n// Create and configure initial Decimal constructor.\r\nexport var Decimal = P.constructor = clone(DEFAULTS);\r\n\r\n// Create the internal constants from their string values.\r\nLN10 = new Decimal(LN10);\r\nPI = new Decimal(PI);\r\n\r\nexport default Decimal;\r\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n function next() {\n while (env.stack.length) {\n var rec = env.stack.pop();\n try {\n var result = rec.dispose && rec.dispose.call(rec.value);\n if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n catch (e) {\n fail(e);\n }\n }\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n};\n","/**\n * enumeration of compare result, there is only three state\n *\n * @export\n * @enum {number}\n */\nvar CompareResult;\n(function (CompareResult) {\n CompareResult[CompareResult[\"EQUAL\"] = 0] = \"EQUAL\";\n CompareResult[CompareResult[\"GREATER\"] = 1] = \"GREATER\";\n CompareResult[CompareResult[\"LESS\"] = -1] = \"LESS\";\n})(CompareResult || (CompareResult = {}));\n/**\n * a class that describe how compares two object\n *\n * @export\n * @class Comparator\n */\nvar Comparator = /** @class */ (function () {\n /**\n * Creates an instance of Comparator.\n * @param {compareFunction} compareFunction - function that implement compare operation\n * @memberof Comparator\n */\n function Comparator(compareFunction) {\n this.compare = compareFunction || Comparator.defaultCompareFunction;\n }\n /**\n * @param {(string|number)} a - compare target a\n * @param {(string|number)} b - compare target b\n * @returns {number}\n */\n Comparator.defaultCompareFunction = function (a, b) {\n if (a === b) {\n return CompareResult.EQUAL;\n }\n return a < b ? CompareResult.LESS : CompareResult.GREATER;\n };\n /**\n * compare if equal or not, a === b\n *\n * @param {*} a\n * @param {*} b\n * @returns {boolean}\n * @memberof Comparator\n */\n Comparator.prototype.equal = function (a, b) {\n return this.compare(a, b) === CompareResult.EQUAL;\n };\n /**\n * compare if smaller. a < b\n *\n * @param {*} a\n * @param {*} b\n * @returns {boolean}\n * @memberof Comparator\n */\n Comparator.prototype.lessThan = function (a, b) {\n return this.compare(a, b) === CompareResult.LESS;\n };\n /**\n * compare if greater. a > b\n *\n * @param {*} a\n * @param {*} b\n * @returns {boolean}\n * @memberof Comparator\n */\n Comparator.prototype.greaterThan = function (a, b) {\n return this.compare(a, b) === CompareResult.GREATER;\n };\n /**\n * compare if smaller or equal. a <= b\n *\n * @param {*} a\n * @param {*} b\n * @returns {boolean}\n * @memberof Comparator\n */\n Comparator.prototype.lessThanOrEqual = function (a, b) {\n return this.lessThan(a, b) || this.equal(a, b);\n };\n /**\n * compare if greater or equal. a >= b\n *\n * @param {*} a\n * @param {*} b\n * @returns {boolean}\n * @memberof Comparator\n */\n Comparator.prototype.greaterThanOrEqual = function (a, b) {\n return this.greaterThan(a, b) || this.equal(a, b);\n };\n /**\n * reverse the compare function\n *\n * @memberof Comparator\n */\n Comparator.prototype.reverse = function () {\n var compareOriginal = this.compare;\n this.compare = function (a, b) { return compareOriginal(b, a); };\n };\n return Comparator;\n}());\n\nexport default Comparator;\nexport { CompareResult };\n","import Comparator from 'ss-comparator';\n\nvar SinglyNode = /** @class */ (function () {\n function SinglyNode(val) {\n this.value = val;\n this.next = null;\n }\n return SinglyNode;\n}());\nvar DoublyNode = /** @class */ (function () {\n function DoublyNode(val) {\n this.value = val;\n this.next = null;\n this.prev = null;\n }\n return DoublyNode;\n}());\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nfunction __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nfunction __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nfunction __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nfunction __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\n\nvar OBFUSCATED_ERROR = 'obfuse error occur';\nfunction invariant(check, message) {\n if (!check)\n throw new Error('[linked-list] ' + (message || OBFUSCATED_ERROR));\n}\nvar INDEX_NOT_FOUND = -1;\n\nvar List = /** @class */ (function () {\n function List() {\n var _this = this;\n var values = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n values[_i] = arguments[_i];\n }\n this._head = null;\n this._tail = null;\n this._length = 0;\n this.compare = new Comparator();\n if (values.length > 0) {\n values.forEach(function (value) {\n _this.append(value);\n });\n }\n }\n Object.defineProperty(List.prototype, \"head\", {\n get: function () {\n return this._head ? this._head.value : void 0;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(List.prototype, \"tail\", {\n get: function () {\n return this._tail ? this._tail.value : void 0;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(List.prototype, \"length\", {\n get: function () {\n return this._length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(List.prototype, \"loopLength\", {\n get: function () {\n var isLoop = false;\n var loopLength = 1;\n if (!this._head) {\n return 0;\n }\n var p1 = this._head;\n var p2 = this._head;\n while (p2.next && p2.next.next) {\n p2 = p2.next.next;\n p1 = p1.next;\n if (p1 === p2) {\n isLoop = true;\n break;\n }\n }\n if (isLoop) {\n p2 = p2.next;\n while (p1 !== p2) {\n loopLength++;\n p2 = p2.next;\n }\n return loopLength;\n }\n else {\n return 0;\n }\n },\n enumerable: true,\n configurable: true\n });\n List.prototype.getNode = function (position) {\n var length = this._length;\n // 1st use-case: invalid position\n invariant(length > 0 && position >= 0 && position < length, \"[linked-list] index \" + position + \" out of scope of list, which length is \" + length);\n var currentNode = this._head;\n var count = 0;\n // 2nd use-case: a valid position\n while (count < position) {\n currentNode = currentNode.next;\n count++;\n }\n return currentNode;\n };\n List.prototype.get = function (position) {\n var node = this.getNode(position);\n return node ? node.value : null;\n };\n /**\n * 根据指定条件返回待查找的链表节点\n *\n * @param {IFindConition<T>} { value, callback }\n * @returns\n * @memberof List\n */\n List.prototype.find = function (_a) {\n var value = _a.value, callback = _a.callback;\n if (!this._head) {\n return null;\n }\n var currentNode = this._head;\n while (currentNode) {\n // If callback is specified then try to find node by callback.\n if (callback && callback(currentNode.value)) {\n return currentNode;\n }\n // If value is specified then try to compare by value..\n if (value !== undefined && this.compare.equal(currentNode.value, value)) {\n return currentNode;\n }\n currentNode = currentNode.next;\n }\n return null;\n };\n List.prototype.indexOf = function (val) {\n if (!this._head) {\n return INDEX_NOT_FOUND;\n }\n var currentNode = this._head;\n var count = -1;\n // 多余 1 个节点的情况\n while (currentNode.next) {\n count++;\n if (this.compare.equal(currentNode.value, val)) {\n return count;\n }\n currentNode = currentNode.next;\n }\n // 如果是末尾节点,需要额外处理\n if (currentNode === this._tail && this.compare.equal(currentNode.value, val)) {\n count += 1;\n }\n return count;\n };\n List.prototype.first = function (num) {\n invariant(num >= 0, \"[linked-list] param 'num' (\" + num + \") should not less than 0\");\n var iter = this.iterator();\n var result = [];\n var n = Math.min(num, this.length);\n for (var i = 0; i < n; i++) {\n var val = iter.next();\n result.push(val.value);\n }\n return result;\n };\n List.prototype.toArray = function () {\n return __spread(this);\n };\n List.prototype.isEmpty = function () {\n return this._head === null;\n };\n List.prototype.iterator = function () {\n var currentNode;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n currentNode = this._head;\n _a.label = 1;\n case 1:\n if (!currentNode) return [3 /*break*/, 3];\n return [4 /*yield*/, currentNode.value];\n case 2:\n _a.sent();\n currentNode = currentNode.next;\n return [3 /*break*/, 1];\n case 3: return [2 /*return*/];\n }\n });\n };\n List.prototype[Symbol.iterator] = function () {\n return this.iterator();\n };\n return List;\n}());\n\nvar SinglyList = /** @class */ (function (_super) {\n __extends(SinglyList, _super);\n function SinglyList() {\n var values = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n values[_i] = arguments[_i];\n }\n return _super.apply(this, __spread(values)) || this;\n }\n // Adds the element at the end of the linked list\n SinglyList.prototype.append = function (val) {\n var node = new SinglyNode(val);\n if (!this._tail) {\n this._head = this._tail = node;\n }\n else {\n this._tail.next = node;\n this._tail = node;\n }\n this._length++;\n return true;\n };\n // Add the element at the beginning of the linked list\n SinglyList.prototype.prepend = function (val) {\n var node = new SinglyNode(val);\n if (!this._head) {\n this._head = this._tail = node;\n }\n else {\n node.next = this._head;\n this._head = node;\n }\n this._length++;\n return true;\n };\n // remove by value\n SinglyList.prototype.remove = function (val) {\n var currentNode = this._head;\n if (!currentNode) {\n return;\n }\n if (this.compare.equal(currentNode.value, val)) {\n // 这里需要注意,有两种情况:\n if (currentNode.next) {\n // 链表多于 1 个元素\n this._head = currentNode.next;\n currentNode.next = null;\n }\n else {\n // 链表只有 1 个元素\n this._head = this._tail = null;\n }\n this._length--;\n return val;\n }\n else {\n var prevNode = currentNode;\n while (true) {\n if (this.compare.equal(currentNode.value, val)) {\n if (currentNode.next) {\n prevNode.next = currentNode.next;\n }\n else {\n // special case for last element\n this._tail = prevNode;\n this._tail.next = null;\n }\n currentNode.next = null;\n this._length--;\n return val;\n }\n else {\n if (currentNode.next) {\n prevNode = currentNode;\n currentNode = currentNode.next;\n }\n else {\n return;\n }\n }\n }\n }\n };\n SinglyList.prototype.removeHead = function () {\n var currentNode = this._head;\n // empty list\n if (!currentNode) {\n return;\n }\n // single item list\n if (!this._head.next) {\n this._head = null;\n this._tail = null;\n // full list\n }\n else {\n this._head = currentNode.next;\n currentNode.next = null;\n }\n this._length--;\n return currentNode.value;\n };\n SinglyList.prototype.removeTail = function () {\n var tailNode = this._tail;\n // empty list\n if (!tailNode) {\n return;\n }\n // single item list\n if (!this._head.next) {\n this._head = null;\n this._tail = null;\n // full list\n }\n else {\n // start traversal from head\n var currentNode = this._head;\n while (currentNode.next !== tailNode) {\n currentNode = currentNode.next;\n }\n currentNode.next = null;\n this._tail = currentNode;\n }\n this._length--;\n return tailNode.value;\n };\n SinglyList.prototype.reverse = function () {\n if (!this._head) {\n return;\n }\n var currentNode = this._head;\n var prevNode = null;\n var nextNode;\n this._tail = this._head;\n while (currentNode !== null) {\n nextNode = currentNode.next;\n currentNode.next = prevNode;\n prevNode = currentNode;\n currentNode = nextNode;\n }\n this._head = prevNode;\n };\n SinglyList.prototype.clone = function () {\n var arrValue = this.toArray();\n return new (SinglyList.bind.apply(SinglyList, __spread([void 0], arrValue)))();\n };\n return SinglyList;\n}(List));\nvar AbstractCircleSinglyList = /** @class */ (function (_super) {\n __extends(AbstractCircleSinglyList, _super);\n function AbstractCircleSinglyList() {\n var values = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n values[_i] = arguments[_i];\n }\n var _this = _super.apply(this, __spread(values)) || this;\n _this.cyclization();\n return _this;\n }\n AbstractCircleSinglyList.prototype.iterator = function () {\n var currentNode;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n currentNode = this._head;\n _a.label = 1;\n case 1:\n if (!currentNode) return [3 /*break*/, 3];\n return [4 /*yield*/, currentNode.value];\n case 2:\n _a.sent();\n currentNode = currentNode.next;\n // 如果下一个节点是 head,说明回到循环列表的头部了\n if (currentNode === this._head) {\n currentNode = null;\n }\n return [3 /*break*/, 1];\n case 3: return [2 /*return*/];\n }\n });\n };\n AbstractCircleSinglyList.prototype.circleIterator = function () {\n var currentNode;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n currentNode = this._head;\n _a.label = 1;\n case 1:\n if (!currentNode) return [3 /*break*/, 3];\n return [4 /*yield*/, currentNode.value];\n case 2:\n _a.sent();\n currentNode = currentNode.next;\n return [3 /*break*/, 1];\n case 3: return [2 /*return*/];\n }\n });\n };\n AbstractCircleSinglyList.prototype[Symbol.iterator] = function () {\n return this.iterator();\n };\n AbstractCircleSinglyList.prototype.mapToNormalListFn = function (name) {\n var params = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n params[_i - 1] = arguments[_i];\n }\n this.breakCircle();\n var result = _super.prototype[name].apply(this, params);\n this.cyclization();\n return result;\n };\n AbstractCircleSinglyList.prototype.getNode = function (position) {\n return this.mapToNormalListFn('getNode', position);\n };\n AbstractCircleSinglyList.prototype.append = function (val) {\n return this.mapToNormalListFn('append', val);\n };\n AbstractCircleSinglyList.prototype.prepend = function (val) {\n return this.mapToNormalListFn('prepend', val);\n };\n AbstractCircleSinglyList.prototype.find = function (condition) {\n return this.mapToNormalListFn('find', condition);\n };\n AbstractCircleSinglyList.prototype.indexOf = function (val) {\n return this.mapToNormalListFn('indexOf', val);\n };\n AbstractCircleSinglyList.prototype.remove = function (val) {\n return this.mapToNormalListFn('remove', val);\n };\n AbstractCircleSinglyList.prototype.removeHead = function () {\n return this.mapToNormalListFn('removeHead');\n };\n AbstractCircleSinglyList.prototype.removeTail = function () {\n return this.mapToNormalListFn('removeTail');\n };\n AbstractCircleSinglyList.prototype.first = function (num) {\n invariant(num >= 0, \"[linked-list] param 'num' (\" + num + \") should not less than 0\");\n var iter = this.circleIterator();\n var result = [];\n for (var i = 0; i < num; i++) {\n var val = iter.next();\n result.push(val.value);\n }\n return result;\n };\n AbstractCircleSinglyList.prototype.toArray = function () {\n return this.mapToNormalListFn('toArray');\n };\n AbstractCircleSinglyList.prototype.reverse = function () {\n return this.mapToNormalListFn('reverse');\n };\n return AbstractCircleSinglyList;\n}(SinglyList));\n// 循环链表中的大部分方法,都可以转换成单向链表\n// 每次操作之前将列表断开,执行完后再结合\nvar CircleSinglyList = /** @class */ (function (_super) {\n __extends(CircleSinglyList, _super);\n function CircleSinglyList() {\n var values = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n values[_i] = arguments[_i];\n }\n var _this = _super.apply(this, __spread(values)) || this;\n _this.cyclization();\n return _this;\n }\n CircleSinglyList.prototype.breakCircle = function () {\n if (this._tail && this._tail.next === this._head) {\n this._tail.next = null;\n }\n };\n CircleSinglyList.prototype.cyclization = function () {\n if (this._tail && this._tail.next === null) {\n this._tail.next = this._head;\n }\n };\n CircleSinglyList.prototype.clone = function () {\n var arrValue = this.toArray();\n return new (CircleSinglyList.bind.apply(CircleSinglyList, __spread([void 0], arrValue)))();\n };\n return CircleSinglyList;\n}(AbstractCircleSinglyList));\n\nvar DoublyList = /** @class */ (function (_super) {\n __extends(DoublyList, _super);\n function DoublyList() {\n var values = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n values[_i] = arguments[_i];\n }\n return _super.apply(this, __spread(values)) || this;\n }\n // Adds the element at the end of the linked list\n DoublyList.prototype.append = function (val) {\n var node = new DoublyNode(val);\n if (!this._tail) {\n this._head = this._tail = node;\n }\n else {\n this._tail.next = node;\n node.prev = this._tail;\n this._tail = node;\n }\n this._length++;\n return true;\n };\n // Add the element at the beginning of the linked list\n DoublyList.prototype.prepend = function (val) {\n var node = new DoublyNode(val);\n if (!this._head) {\n this._head = this._tail = node;\n }\n else {\n node.next = this._head;\n this._head.prev = node;\n this._head = node;\n }\n this._length++;\n return true;\n };\n // remove by value\n DoublyList.prototype.remove = function (val) {\n var currentNode = this._head;\n if (!currentNode) {\n return;\n }\n // 当首个元素恰好是目标值的时候\n if (this.compare.equal(currentNode.value, val)) {\n // 这里需要注意,有两种情况:\n if (currentNode.next) {\n // 链表多于 1 个元素\n this._head = currentNode.next;\n this._head.prev = null;\n currentNode.next = currentNode.prev = null;\n }\n else {\n // 链表只有 1 个元素\n this._head = this._tail = null;\n }\n this._length--;\n return val;\n }\n else {\n while (true) {\n if (this.compare.equal(currentNode.value, val)) {\n if (currentNode.next) {\n // special case for last element\n currentNode.prev.next = currentNode.next;\n currentNode.next.prev = currentNode.prev;\n currentNode.next = currentNode.prev = null;\n }\n else {\n currentNode.prev.next = null;\n this._tail = currentNode.prev;\n currentNode.next = currentNode.prev = null;\n }\n this._length--;\n return currentNode.value;\n }\n else {\n if (currentNode.next) {\n currentNode = currentNode.next;\n }\n else {\n return;\n }\n }\n }\n }\n };\n DoublyList.prototype.removeHead = function () {\n var currentNode = this._head;\n // empty list\n if (!currentNode) {\n return;\n }\n // single item list\n if (!this._head.next) {\n this._head = null;\n this._tail = null;\n // full list\n }\n else {\n currentNode.next.prev = null;\n this._head = currentNode.next;\n currentNode.next = null;\n }\n this._length--;\n return currentNode.value;\n };\n DoublyList.prototype.removeTail = function () {\n var tailNode = this._tail;\n // empty list\n if (!tailNode) {\n return;\n }\n // single item list\n if (!this._head.next) {\n this._head = null;\n this._tail = null;\n // full list\n }\n else {\n tailNode.prev.next = null;\n this._tail = tailNode.prev;\n tailNode.next = tailNode.prev = null;\n }\n this._length--;\n return tailNode.value;\n };\n DoublyList.prototype.reverse = function () {\n if (!this._head) {\n return;\n }\n var currentNode = this._head;\n var prevNode = null;\n var nextNode;\n this._tail = this._head;\n while (currentNode !== null) {\n nextNode = currentNode.next;\n currentNode.next = prevNode;\n currentNode.prev = nextNode;\n prevNode = currentNode;\n currentNode = nextNode;\n }\n this._head = prevNode;\n };\n DoublyList.prototype.clone = function () {\n var arrValue = this.toArray();\n return new (DoublyList.bind.apply(DoublyList, __spread([void 0], arrValue)))();\n };\n return DoublyList;\n}(List));\nvar AbstractCircleDoublyList = /** @class */ (function (_super) {\n __extends(AbstractCircleDoublyList, _super);\n function AbstractCircleDoublyList() {\n var values = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n values[_i] = arguments[_i];\n }\n var _this = _super.apply(this, __spread(values)) || this;\n _this.cyclization();\n return _this;\n }\n AbstractCircleDoublyList.prototype.iterator = function () {\n var currentNode;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n currentNode = this._head;\n _a.label = 1;\n case 1:\n if (!currentNode) return [3 /*break*/, 3];\n return [4 /*yield*/, currentNode.value];\n case 2:\n _a.sent();\n currentNode = currentNode.next;\n // 如果下一个节点是 head,说明回到循环列表的头部了\n if (currentNode === this._head) {\n currentNode = null;\n }\n return [3 /*break*/, 1];\n case 3: return [2 /*return*/];\n }\n });\n };\n AbstractCircleDoublyList.prototype.circleIterator = function () {\n var currentNode;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n currentNode = this._head;\n _a.label = 1;\n case 1:\n if (!currentNode) return [3 /*break*/, 3];\n return [4 /*yield*/, currentNode.value];\n case 2:\n _a.sent();\n currentNode = currentNode.next;\n return [3 /*break*/, 1];\n case 3: return [2 /*return*/];\n }\n });\n };\n AbstractCircleDoublyList.prototype[Symbol.iterator] = function () {\n return this.iterator();\n };\n AbstractCircleDoublyList.prototype.mapToNormalListFn = function (name) {\n var params = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n params[_i - 1] = arguments[_i];\n }\n this.breakCircle();\n var result = _super.prototype[name].apply(this, params);\n this.cyclization();\n return result;\n };\n AbstractCircleDoublyList.prototype.getNode = function (position) {\n return this.mapToNormalListFn('getNode', position);\n };\n AbstractCircleDoublyList.prototype.append = function (val) {\n return this.mapToNormalListFn('append', val);\n };\n AbstractCircleDoublyList.prototype.prepend = function (val) {\n return this.mapToNormalListFn('prepend', val);\n };\n AbstractCircleDoublyList.prototype.find = function (condition) {\n return this.mapToNormalListFn('find', condition);\n };\n AbstractCircleDoublyList.prototype.indexOf = function (val) {\n return this.mapToNormalListFn('indexOf', val);\n };\n AbstractCircleDoublyList.prototype.remove = function (val) {\n return this.mapToNormalListFn('remove', val);\n };\n AbstractCircleDoublyList.prototype.removeHead = function () {\n return this.mapToNormalListFn('removeHead');\n };\n AbstractCircleDoublyList.prototype.removeTail = function () {\n return this.mapToNormalListFn('removeTail');\n };\n AbstractCircleDoublyList.prototype.first = function (num) {\n invariant(num >= 0, \"[linked-list] param 'num' (\" + num + \") should not less than 0\");\n var iter = this.circleIterator();\n var result = [];\n for (var i = 0; i < num; i++) {\n var val = iter.next();\n result.push(val.value);\n }\n return result;\n };\n AbstractCircleDoublyList.prototype.toArray = function () {\n return this.mapToNormalListFn('toArray');\n };\n AbstractCircleDoublyList.prototype.reverse = function () {\n return this.mapToNormalListFn('reverse');\n };\n return AbstractCircleDoublyList;\n}(DoublyList));\n// 循环链表中的大部分方法,都可以转换成双向链表\n// 每次操作之前将列表断开,执行完后再结合\nvar CircleDoublyList = /** @class */ (function (_super) {\n __extends(CircleDoublyList, _super);\n function CircleDoublyList() {\n var values = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n values[_i] = arguments[_i];\n }\n var _this = _super.apply(this, __spread(values)) || this;\n _this.cyclization();\n return _this;\n }\n CircleDoublyList.prototype.breakCircle = function () {\n if (this._tail && this._head && this._tail.next === this._head) {\n this._tail.next = null;\n this._head.prev = null;\n }\n };\n CircleDoublyList.prototype.cyclization = function () {\n if (this._head && this._tail && this._tail.next === null) {\n this._tail.next = this._head;\n this._head.prev = this._tail;\n }\n };\n CircleDoublyList.prototype.clone = function () {\n var arrValue = this.toArray();\n return new (CircleDoublyList.bind.apply(CircleDoublyList, __spread([void 0], arrValue)))();\n };\n return CircleDoublyList;\n}(AbstractCircleDoublyList));\n\nexport { SinglyNode, DoublyNode, SinglyList, AbstractCircleSinglyList, CircleSinglyList, DoublyList, AbstractCircleDoublyList, CircleDoublyList };\n","import { SinglyList } from 'ss-linked-list';\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n\r\nfunction __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nfunction __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\n\nvar Queue = /** @class */ (function () {\n function Queue() {\n var values = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n values[_i] = arguments[_i];\n }\n // We're going to implement Queue based on LinkedList since the two\n // structures are quite similar. Namely, they both operate mostly on\n // the elements at the beginning and the end. Compare enqueue/dequeue\n // operations of Queue with append/deleteHead operations of LinkedList.\n this.queue = new (SinglyList.bind.apply(SinglyList, __spread([void 0], values)))();\n }\n Object.defineProperty(Queue.prototype, \"length\", {\n get: function () {\n return this.queue.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Queue.prototype, \"peek\", {\n /**\n * Read the element at the front of the queue without removing it.\n *\n * @returns {(T | void)}\n * @memberof Queue\n */\n get: function () {\n return this.queue.head;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * if is empty queue\n *\n * @returns {boolean}\n * @memberof Queue\n */\n Queue.prototype.isEmpty = function () {\n return this.queue.isEmpty();\n };\n /**\n * Add a new element to the end of the queue (the tail of the linked list).\n * This element will be processed after all elements ahead of it.\n *\n * @param {*} value\n * @returns {boolean}\n * @memberof Queue\n */\n Queue.prototype.enqueue = function (value) {\n return this.queue.append(value);\n };\n /**\n * Remove the element at the front of the queue (the head of the linked list).\n * If the queue is empty, return void.\n *\n * @returns {(T | void)}\n * @memberof Queue\n */\n Queue.prototype.dequeue = function () {\n var removedHead = this.queue.removeHead();\n return typeof removedHead !== 'undefined' ? removedHead : void 0;\n };\n /**\n * transform to array\n *\n * @returns {T[]}\n * @memberof Queue\n */\n Queue.prototype.toArray = function () {\n return this.queue.toArray();\n };\n return Queue;\n}());\n\nexport default Queue;\n","import { SinglyList } from 'ss-linked-list';\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n\r\nfunction __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nfunction __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\n\nvar stack = /** @class */ (function () {\n function stack() {\n var values = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n values[_i] = arguments[_i];\n }\n // We're going to implement Stack based on LinkedList since these\n // structures are quite similar. Compare push/pop operations of the Stack\n // with append/deleteTail operations of LinkedList.\n this.stack = new (SinglyList.bind.apply(SinglyList, __spread([void 0], values)))();\n }\n Object.defineProperty(stack.prototype, \"length\", {\n get: function () {\n return this.stack.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(stack.prototype, \"peek\", {\n /**\n * Read the element at the front of the queue without removing it.\n *\n * @returns {(T | void)}\n * @memberof Queue\n */\n get: function () {\n return this.stack.tail;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * if is empty queue\n *\n * @returns {boolean}\n * @memberof Queue\n */\n stack.prototype.isEmpty = function () {\n return this.stack.isEmpty();\n };\n /**\n * Add a new element to the end of the queue (the tail of the linked list).\n * This element will be processed after all elements ahead of it.\n *\n * @param {*} value\n * @returns {boolean}\n * @memberof Queue\n */\n stack.prototype.push = function (value) {\n return this.stack.append(value);\n };\n /**\n * Remove the element at the front of the queue (the tail of the linked list).\n * If the queue is empty, return void.\n *\n * @returns {(T | void)}\n * @memberof Queue\n */\n stack.prototype.pop = function () {\n var removedTail = this.stack.removeTail();\n return typeof removedTail !== 'undefined' ? removedTail : void 0;\n };\n /**\n * Remove the element at the bottom of the queue (the head of the linked list).\n * If the queue is empty, return void.\n *\n * @returns {(T | void)}\n * @memberof Queue\n */\n stack.prototype.popBottom = function () {\n var removedHead = this.stack.removeHead();\n return typeof removedHead !== 'undefined' ? removedHead : void 0;\n };\n /**\n * transform to array\n *\n * @returns {T[]}\n * @memberof Queue\n */\n stack.prototype.toArray = function () {\n return this.stack.toArray();\n };\n return stack;\n}());\n\nexport default stack;\n","import { __generator } from 'tslib';\nimport Queue from 'ss-queue';\nimport Stack from 'ss-stack';\n\nvar GraphEdge = /** @class */ (function () {\n /**\n * Creates an instance of GraphEdge.\n * @param {GraphVertex} startVertex - 开始节点\n * @param {GraphVertex} endVertex - 结束节点\n * @param {number} [weight=0] - 边的权重\n * @memberof GraphEdge\n */\n function GraphEdge(startVertex, endVertex, weight) {\n if (weight === void 0) { weight = 0; }\n this.startVertex = startVertex;\n this.endVertex = endVertex;\n this.weight = weight;\n }\n /**\n * 获取 edge 的 key 值\n *\n * @returns {string}\n * @memberof GraphEdge\n */\n GraphEdge.prototype.getKey = function () {\n var startVertexKey = this.startVertex.getKey();\n var endVertexKey = this.endVertex.getKey();\n return startVertexKey + \"_\" + endVertexKey;\n };\n /**\n * 翻转这条边的指向\n *\n * @returns {GraphEdge}\n * @memberof GraphEdge\n */\n GraphEdge.prototype.reverse = function () {\n var tmp = this.startVertex;\n this.startVertex = this.endVertex;\n this.endVertex = tmp;\n return this;\n };\n /**\n * 复制边\n *\n * @returns {GraphEdge}\n * @memberof GraphEdge\n */\n GraphEdge.prototype.clone = function () {\n return new GraphEdge(this.startVertex, this.endVertex, this.weight);\n };\n /**\n * 重写 toString 方法\n *\n * @returns {string}\n * @memberof GraphEdge\n */\n GraphEdge.prototype.toString = function () {\n return this.getKey();\n };\n return GraphEdge;\n}());\n\nfunction invariant(check, message, scope) {\n if (scope === void 0) { scope = 'cc-graph'; }\n if (!check) {\n throw new Error((scope ? '[' + scope + ']' : '') + \" Invariant failed: \" + message);\n }\n}\n/**\n * 判断对象是否存在\n * @param {*} val - 待判断的对象\n * @param {bool} andString - 也要考虑字符串的 'undefined' 和 'null' 情况\n */\nfunction isExist(val, andString) {\n if (andString === void 0) { andString = true; }\n var result = typeof val !== 'undefined' && val !== null;\n if (andString) {\n return result && val !== 'undefined' && val !== 'null';\n }\n else {\n return result;\n }\n}\n\nvar GraphVertex = /** @class */ (function () {\n /**\n * Creates an instance of GraphVertex.\n * @param {*} value - 节点值\n * @memberof GraphVertex\n */\n function GraphVertex(value) {\n invariant(isExist(value), 'Graph vertex must have a value');\n // Normally you would store string value like vertex name.\n // But generally it may be any object as well\n this.value = value;\n // 使用链表保存当前节点的边的集合\n this.edges = new Map();\n }\n /**\n * 将 edge 添加到当前节点的边链表中\n *\n * @param {GraphEdge} edge - edge 实例\n * @returns {GraphVertex}\n * @memberof GraphVertex\n */\n GraphVertex.prototype.addEdge = function (edge) {\n this.edges.set(edge.getKey(), edge);\n return this;\n };\n /**\n * 将 edge 从当前节点的边链表中删除\n *\n * @param {GraphEdge} edge - edge 实例\n * @memberof GraphVertex\n */\n GraphVertex.prototype.deleteEdge = function (edge) {\n this.edges.delete(edge.getKey());\n };\n /**\n * 获取所有当前节点的相邻节点\n *\n * @returns {GraphVertex[]}\n * @memberof GraphVertex\n */\n GraphVertex.prototype.getNeighbors = function () {\n var _this = this;\n var edges = this.getEdges();\n var neighborsConverter = function (edge) {\n return edge.startVertex === _this ? edge.endVertex : edge.startVertex;\n };\n // Return either start or end vertex.\n // For undirected graphs it is possible that current vertex will be the end one.\n return edges.map(neighborsConverter);\n };\n /**\n * 获取所有的边\n *\n * @returns {GraphEdge[]}\n * @memberof GraphVertex\n */\n GraphVertex.prototype.getEdges = function () {\n return Array.from(this.edges.values());\n };\n /**\n * 获取当前节点的度\n *\n * @returns {number}\n * @memberof GraphVertex\n */\n GraphVertex.prototype.getDegree = function () {\n return this.getEdges().length;\n };\n /**\n * 判断某条边是否存在于当前节点上\n *\n * @param {GraphEdge} requiredEdge\n * @returns {boolean}\n * @memberof GraphVertex\n */\n GraphVertex.prototype.hasEdge = function (requiredEdge) {\n var edgeNode = this.getEdges().find(function (edge) { return edge === requiredEdge; });\n return !!edgeNode;\n };\n /**\n * 判断某个节点是否是和当前节点连接\n *\n * @param {GraphVertex} vertex\n * @returns {boolean}\n * @memberof GraphVertex\n */\n GraphVertex.prototype.hasNeighbor = function (vertex) {\n var vertexNode = this.getEdges().find(function (edge) {\n return edge.startVertex === vertex || edge.endVertex === vertex;\n });\n return !!vertexNode;\n };\n /**\n * 查找当前节点到指定节点的边,\n * 如果存在返回该边,否则返回 null\n *\n * @param {GraphVertex} vertex\n * @returns {*}\n * @memberof GraphVertex\n */\n GraphVertex.prototype.findEdge = function (vertex) {\n var edgeFinder = function (edge) {\n return edge.startVertex === vertex || edge.endVertex === vertex;\n };\n var edge = this.getEdges().find(edgeFinder);\n return edge ? edge : null;\n };\n /**\n * 返回当前节点 key 值\n *\n * @returns {*}\n * @memberof GraphVertex\n */\n GraphVertex.prototype.getKey = function () {\n return this.value;\n };\n /**\n * 删除当前节点所有的边\n *\n * @returns {GraphVertex}\n * @memberof GraphVertex\n */\n GraphVertex.prototype.deleteAllEdges = function () {\n var _this = this;\n this.getEdges().forEach(function (edge) { return _this.deleteEdge(edge); });\n return this;\n };\n /**\n * 重写 toString 方法\n *\n * @param {(value: any)=>string} [callback] - 支持自定义 toString 格式\n * @returns {string}\n * @memberof GraphVertex\n */\n GraphVertex.prototype.toString = function (callback) {\n return callback ? callback(this.value) : \"\" + this.value;\n };\n return GraphVertex;\n}());\n\n/* ----------------------------------------------------\n util for find all path\n----------------------------------------------------- */\n/**\n * 根据当前节点构建双栈\n *\n * @param {GraphVertex} vertex - 当前节点\n * @param {Stack<GraphVertex>} mainStack - 主栈\n * @param {Stack<GraphVertex[]>} neighborStack - 邻接节点栈\n * @param {Map<string, boolean>} visited - 已访问缓存\n */\nfunction buildDualStack(vertex, mainStack, neighborStack, visited) {\n if (vertex) {\n mainStack.push(vertex); // 将主节点入栈\n visited.set(vertex.getKey(), true); // 标记已被访问过\n // 获取 vertex 的邻接节点\n var neighbors = vertex\n .getNeighbors()\n .filter(function (v) { return !visited.get(v.getKey()); });\n neighborStack.push(neighbors);\n }\n}\n/**\n * 削减双栈(让双栈都减少一层)\n *\n * @param {Stack<GraphVertex>} mainStack\n * @param {Stack<GraphVertex[]>} neighborStack\n * @param {Map<string, boolean>} visited\n */\nfunction cutdownDualStack(mainStack, neighborStack, visited) {\n // 将目标元素从 mainStack 中弹出,\n var droppedMain = mainStack.pop();\n // 同时标记当前节点可以再次访问\n if (droppedMain) {\n visited.set(droppedMain.getKey(), false);\n }\n // 同时一并将 neighborStack 弹出元素\n neighborStack.pop();\n}\n// ==============\nvar Graph = /** @class */ (function () {\n /**\n * Creates an instance of Graph.\n * @param {boolean} [isDirected=false] - 是否是有向图\n * @memberof Graph\n */\n function Graph(isDirected) {\n if (isDirected === void 0) { isDirected = false; }\n this.vertices = {};\n this.edges = {};\n this.isDirected = isDirected;\n }\n /**\n * 添加节点\n *\n * @param {GraphVertex} newVertex\n * @returns {Graph}\n * @memberof Graph\n */\n Graph.prototype.addVertex = function (newVertex) {\n this.vertices[newVertex.getKey()] = newVertex;\n return this;\n };\n /**\n * 根据 key 值返回指定节点\n *\n * @param {string} vertexKey\n * @returns {GraphVertex}\n * @memberof Graph\n */\n Graph.prototype.getVertexByKey = function (vertexKey) {\n return this.vertices[vertexKey];\n };\n /**\n * 返回指定节点的相邻节点\n *\n * @param {GraphVertex} vertex\n * @returns {GraphVertex[]}\n */\n Graph.prototype.getNeighbors = function (vertex) {\n return vertex.getNeighbors();\n };\n /**\n * 返回图中所有的节点\n *\n * @returns {GraphVertex[]}\n * @memberof Graph\n */\n Graph.prototype.getAllVertices = function () {\n return Object.values(this.vertices);\n };\n /**\n * 返回图中所有的边\n *\n * @returns {GraphEdge[]}\n * @memberof Graph\n */\n Graph.prototype.getAllEdges = function () {\n return Object.values(this.edges);\n };\n /**\n * 给图中添加边\n *\n * @param {GraphEdge} edge - 待添加的边\n * @param {boolean} [disableErrorWhenExist=false] - 是否关闭错误提示(当边已经存在图中的时候),默认是有错误提示\n * @returns {Graph}\n * @memberof Graph\n */\n Graph.prototype.addEdge = function (edge, disableErrorWhenExist) {\n if (disableErrorWhenExist === void 0) { disableErrorWhenExist = false; }\n // 判断边是否已经添加到图中\n if (this.edges[edge.getKey()]) {\n if (disableErrorWhenExist) {\n return this;\n }\n else {\n invariant(false, 'Edge has already been added before');\n }\n }\n // 首先找到开始和结束节点\n var startVertex = this.getVertexByKey(edge.startVertex.getKey());\n var endVertex = this.getVertexByKey(edge.endVertex.getKey());\n // 如果开始节点不存在图中,需要先添加\n if (!startVertex) {\n this.addVertex(edge.startVertex);\n startVertex = this.getVertexByKey(edge.startVertex.getKey()); // 注意:需要重新获取一次,不然 startVertex 不存在\n }\n // 如果结束节点不存在图中,需要先添加\n if (!endVertex) {\n this.addVertex(edge.endVertex);\n endVertex = this.getVertexByKey(edge.endVertex.getKey()); // 注意:需要重新获取一次,不然 endVertex 不存在\n }\n // 在图中添加这条边\n this.edges[edge.getKey()] = edge;\n // 根据是否是双向图\n if (this.isDirected) {\n // 如果是有向图,那么只用给 startVertex 添加此边\n startVertex.addEdge(edge);\n }\n else {\n // 否则就给开始、结束节点都添加该边\n startVertex.addEdge(edge);\n // 给结束节点添加边,需要 clone、然后再反向\n var clonedEdge = edge.clone();\n endVertex.addEdge(clonedEdge.reverse());\n }\n return this;\n };\n /**\n * 删除图中的某条边\n *\n * @param {GraphEdge} edge - 边的实例\n * @param {boolean} [disableErrorWhenExist=false] - 是否关闭错误提示(当图中不存在边时),默认是有错误提示\n * @returns {Graph}\n * @memberof Graph\n */\n Graph.prototype.deleteEdge = function (edge, disableErrorWhenExist) {\n if (disableErrorWhenExist === void 0) { disableErrorWhenExist = false; }\n // 判断边是否存在\n if (!this.edges[edge.getKey()]) {\n if (disableErrorWhenExist) {\n return this;\n }\n else {\n invariant(false, 'Edge not found in graph');\n }\n }\n // 先删除该边\n delete this.edges[edge.getKey()];\n // 同时找到该边所在开始节点和结束节点\n var startVertex = this.getVertexByKey(edge.startVertex.getKey());\n var endVertex = this.getVertexByKey(edge.endVertex.getKey());\n // 分别在节点上删除该边\n startVertex.deleteEdge(edge);\n endVertex.deleteEdge(edge);\n return this;\n };\n /**\n * 查找开始节点和结束节点之间的那条边\n *\n * @param {GraphVertex} startVertex - 开始节点\n * @param {GraphVertex} endVertex - 结束节点\n * @returns {(GraphEdge | null)}\n * @memberof Graph\n */\n Graph.prototype.findEdge = function (startVertex, endVertex) {\n // 首先判断开始节点是否在图中\n var vertex = this.getVertexByKey(startVertex.getKey());\n if (!vertex) {\n return null;\n }\n // 然后通过开始节点 - 结束节点对应的边的实例\n return vertex.findEdge(endVertex);\n };\n /**\n * 返回图中所有边的权重之和\n *\n * @returns {number}\n * @memberof Graph\n */\n Graph.prototype.getWeight = function () {\n return this.getAllEdges().reduce(function (weight, graphEdge) {\n return weight + graphEdge.weight;\n }, 0);\n };\n /**\n * 让图中所有的边都方向\n *\n * @returns {Graph}\n * @memberof Graph\n */\n Graph.prototype.reverse = function () {\n var _this = this;\n // 遍历所有的边\n this.getAllEdges().forEach(function (edge) {\n // 先将边从图中删除(反向操作之前一定要删除边,不然数据会存在不一致性 - key 没有反向,而 this.edges[key] 反向了 )\n _this.deleteEdge(edge);\n // 然后将边进行反向操作\n edge.reverse();\n // 再将边添加回图中\n _this.addEdge(edge);\n });\n return this;\n };\n /**\n * 返回“节点 - 索引”映射表\n *\n * @returns {{ [key: string]: number }} - 映射表对象\n * @memberof Graph\n */\n Graph.prototype.getVerticesIndices = function () {\n var verticesIndices = {};\n this.getAllVertices().forEach(function (vertex, index) {\n verticesIndices[vertex.getKey()] = index;\n });\n return verticesIndices;\n };\n /**\n * 生成邻接矩阵\n *\n * @returns {number[][]}\n * @memberof Graph\n */\n Graph.prototype.getAdjacencyMatrix = function () {\n var _this = this;\n // 获取所有的节点列表\n var vertices = this.getAllVertices();\n // 获取节点索引映射表\n var verticesIndices = this.getVerticesIndices();\n // 初始化邻接矩阵,赋值 `Infinity` 表示两点之间不可达\n // 邻接矩阵是 N x N 大小的\n var adjacencyMatrix = Array(vertices.length)\n .fill(null)\n .map(function () {\n return Array(vertices.length).fill(Infinity);\n });\n // 给每一列赋值\n vertices.forEach(function (vertex, vertexIndex) {\n vertex.getNeighbors().forEach(function (neighbor) {\n var neighborIndex = verticesIndices[neighbor.getKey()];\n var edge = _this.findEdge(vertex, neighbor);\n if (!!edge) {\n adjacencyMatrix[vertexIndex][neighborIndex] = edge.weight;\n }\n });\n });\n return adjacencyMatrix;\n };\n /**\n * 重写 toString 方法,仅仅是打印出所有节点的列表\n * @return {string}\n */\n Graph.prototype.toString = function () {\n return Object.keys(this.vertices).toString();\n };\n /**\n * Breadth-first search (BFS)\n *\n * @param {GraphVertex} first - first node to start the bfs\n * @memberof Graph\n */\n Graph.prototype.bfs = function (first) {\n var visited, nodeQueue, node;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n visited = new Map();\n nodeQueue = new Queue();\n // 将第一个节点入栈\n nodeQueue.enqueue(first);\n _a.label = 1;\n case 1:\n if (!!nodeQueue.isEmpty()) return [3 /*break*/, 4];\n node = nodeQueue.dequeue();\n if (!(node && !visited.has(node.getKey()))) return [3 /*break*/, 3];\n return [4 /*yield*/, node];\n case 2:\n _a.sent();\n visited.set(node.getKey(), node);\n // 挨个将相邻节点放到队列中去\n node\n .getNeighbors()\n .forEach(function (neighbor) { return nodeQueue.enqueue(neighbor); });\n _a.label = 3;\n case 3: return [3 /*break*/, 1];\n case 4: return [2 /*return*/];\n }\n });\n };\n /**\n * Depth-first search (DFS)\n *\n * @param {GraphVertex} first - first node to start the dfs\n * @memberof Graph\n */\n Graph.prototype.dfs = function (first) {\n var visited, nodeStack, node;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n visited = new Map();\n nodeStack = new Stack();\n nodeStack.push(first);\n _a.label = 1;\n case 1:\n if (!!nodeStack.isEmpty()) return [3 /*break*/, 4];\n node = nodeStack.pop();\n if (!(node && !visited.has(node.getKey()))) return [3 /*break*/, 3];\n return [4 /*yield*/, node];\n case 2:\n _a.sent();\n visited.set(node.getKey(), node);\n // 挨个将相邻节点放到 stack 中去\n node\n .getNeighbors()\n .forEach(function (neighbor) { return nodeStack.push(neighbor); });\n _a.label = 3;\n case 3: return [3 /*break*/, 1];\n case 4: return [2 /*return*/];\n }\n });\n };\n Graph.prototype.findAllPath = function (source, target) {\n var path, visited, mainStack, neighborStack, curNeighbors, nextVertex, peekNode;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n path = [];\n if (!(source === target)) return [3 /*break*/, 2];\n path.push(source);\n return [4 /*yield*/, path];\n case 1:\n _a.sent();\n return [2 /*return*/];\n case 2:\n visited = new Map();\n mainStack = new Stack();\n neighborStack = new Stack();\n buildDualStack(source, mainStack, neighborStack, visited);\n _a.label = 3;\n case 3:\n if (!!mainStack.isEmpty()) return [3 /*break*/, 6];\n curNeighbors = neighborStack.pop();\n // 如果邻接栈有元素可用,就将其堆放在 mainStack 上\n if (curNeighbors && curNeighbors.length) {\n nextVertex = curNeighbors.shift();\n neighborStack.push(curNeighbors); // 将其压栈压回去\n // 如果存在下一个节点\n if (nextVertex) {\n buildDualStack(nextVertex, mainStack, neighborStack, visited);\n }\n }\n else {\n neighborStack.push(curNeighbors); // 将其压栈压回去,不然接下来的 cutdownDualStack 会导致 pop 两次\n // 如果邻接节点是空数组,也削减一层\n cutdownDualStack(mainStack, neighborStack, visited);\n return [3 /*break*/, 3]; // 继续下一次循环\n }\n peekNode = mainStack.peek;\n if (!(peekNode === target)) return [3 /*break*/, 5];\n return [4 /*yield*/, mainStack.toArray()];\n case 4:\n _a.sent();\n // 削减一层\n cutdownDualStack(mainStack, neighborStack, visited);\n _a.label = 5;\n case 5: return [3 /*break*/, 3];\n case 6: return [2 /*return*/];\n }\n });\n };\n return Graph;\n}());\n\nexport { GraphEdge, GraphVertex, Graph };\n","/**\n * base64.ts\n *\n * Licensed under the BSD 3-Clause License.\n * http://opensource.org/licenses/BSD-3-Clause\n *\n * References:\n * http://en.wikipedia.org/wiki/Base64\n *\n * @author Dan Kogai (https://github.com/dankogai)\n */\nconst version = '3.7.7';\n/**\n * @deprecated use lowercase `version`.\n */\nconst VERSION = version;\nconst _hasBuffer = typeof Buffer === 'function';\nconst _TD = typeof TextDecoder === 'function' ? new TextDecoder() : undefined;\nconst _TE = typeof TextEncoder === 'function' ? new TextEncoder() : undefined;\nconst b64ch = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\nconst b64chs = Array.prototype.slice.call(b64ch);\nconst b64tab = ((a) => {\n let tab = {};\n a.forEach((c, i) => tab[c] = i);\n return tab;\n})(b64chs);\nconst b64re = /^(?:[A-Za-z\\d+\\/]{4})*?(?:[A-Za-z\\d+\\/]{2}(?:==)?|[A-Za-z\\d+\\/]{3}=?)?$/;\nconst _fromCC = String.fromCharCode.bind(String);\nconst _U8Afrom = typeof Uint8Array.from === 'function'\n ? Uint8Array.from.bind(Uint8Array)\n : (it) => new Uint8Array(Array.prototype.slice.call(it, 0));\nconst _mkUriSafe = (src) => src\n .replace(/=/g, '').replace(/[+\\/]/g, (m0) => m0 == '+' ? '-' : '_');\nconst _tidyB64 = (s) => s.replace(/[^A-Za-z0-9\\+\\/]/g, '');\n/**\n * polyfill version of `btoa`\n */\nconst btoaPolyfill = (bin) => {\n // console.log('polyfilled');\n let u32, c0, c1, c2, asc = '';\n const pad = bin.length % 3;\n for (let i = 0; i < bin.length;) {\n if ((c0 = bin.charCodeAt(i++)) > 255 ||\n (c1 = bin.charCodeAt(i++)) > 255 ||\n (c2 = bin.charCodeAt(i++)) > 255)\n throw new TypeError('invalid character found');\n u32 = (c0 << 16) | (c1 << 8) | c2;\n asc += b64chs[u32 >> 18 & 63]\n + b64chs[u32 >> 12 & 63]\n + b64chs[u32 >> 6 & 63]\n + b64chs[u32 & 63];\n }\n return pad ? asc.slice(0, pad - 3) + \"===\".substring(pad) : asc;\n};\n/**\n * does what `window.btoa` of web browsers do.\n * @param {String} bin binary string\n * @returns {string} Base64-encoded string\n */\nconst _btoa = typeof btoa === 'function' ? (bin) => btoa(bin)\n : _hasBuffer ? (bin) => Buffer.from(bin, 'binary').toString('base64')\n : btoaPolyfill;\nconst _fromUint8Array = _hasBuffer\n ? (u8a) => Buffer.from(u8a).toString('base64')\n : (u8a) => {\n // cf. https://stackoverflow.com/questions/12710001/how-to-convert-uint8-array-to-base64-encoded-string/12713326#12713326\n const maxargs = 0x1000;\n let strs = [];\n for (let i = 0, l = u8a.length; i < l; i += maxargs) {\n strs.push(_fromCC.apply(null, u8a.subarray(i, i + maxargs)));\n }\n return _btoa(strs.join(''));\n };\n/**\n * converts a Uint8Array to a Base64 string.\n * @param {boolean} [urlsafe] URL-and-filename-safe a la RFC4648 §5\n * @returns {string} Base64 string\n */\nconst fromUint8Array = (u8a, urlsafe = false) => urlsafe ? _mkUriSafe(_fromUint8Array(u8a)) : _fromUint8Array(u8a);\n// This trick is found broken https://github.com/dankogai/js-base64/issues/130\n// const utob = (src: string) => unescape(encodeURIComponent(src));\n// reverting good old fationed regexp\nconst cb_utob = (c) => {\n if (c.length < 2) {\n var cc = c.charCodeAt(0);\n return cc < 0x80 ? c\n : cc < 0x800 ? (_fromCC(0xc0 | (cc >>> 6))\n + _fromCC(0x80 | (cc & 0x3f)))\n : (_fromCC(0xe0 | ((cc >>> 12) & 0x0f))\n + _fromCC(0x80 | ((cc >>> 6) & 0x3f))\n + _fromCC(0x80 | (cc & 0x3f)));\n }\n else {\n var cc = 0x10000\n + (c.charCodeAt(0) - 0xD800) * 0x400\n + (c.charCodeAt(1) - 0xDC00);\n return (_fromCC(0xf0 | ((cc >>> 18) & 0x07))\n + _fromCC(0x80 | ((cc >>> 12) & 0x3f))\n + _fromCC(0x80 | ((cc >>> 6) & 0x3f))\n + _fromCC(0x80 | (cc & 0x3f)));\n }\n};\nconst re_utob = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFFF]|[^\\x00-\\x7F]/g;\n/**\n * @deprecated should have been internal use only.\n * @param {string} src UTF-8 string\n * @returns {string} UTF-16 string\n */\nconst utob = (u) => u.replace(re_utob, cb_utob);\n//\nconst _encode = _hasBuffer\n ? (s) => Buffer.from(s, 'utf8').toString('base64')\n : _TE\n ? (s) => _fromUint8Array(_TE.encode(s))\n : (s) => _btoa(utob(s));\n/**\n * converts a UTF-8-encoded string to a Base64 string.\n * @param {boolean} [urlsafe] if `true` make the result URL-safe\n * @returns {string} Base64 string\n */\nconst encode = (src, urlsafe = false) => urlsafe\n ? _mkUriSafe(_encode(src))\n : _encode(src);\n/**\n * converts a UTF-8-encoded string to URL-safe Base64 RFC4648 §5.\n * @returns {string} Base64 string\n */\nconst encodeURI = (src) => encode(src, true);\n// This trick is found broken https://github.com/dankogai/js-base64/issues/130\n// const btou = (src: string) => decodeURIComponent(escape(src));\n// reverting good old fationed regexp\nconst re_btou = /[\\xC0-\\xDF][\\x80-\\xBF]|[\\xE0-\\xEF][\\x80-\\xBF]{2}|[\\xF0-\\xF7][\\x80-\\xBF]{3}/g;\nconst cb_btou = (cccc) => {\n switch (cccc.length) {\n case 4:\n var cp = ((0x07 & cccc.charCodeAt(0)) << 18)\n | ((0x3f & cccc.charCodeAt(1)) << 12)\n | ((0x3f & cccc.charCodeAt(2)) << 6)\n | (0x3f & cccc.charCodeAt(3)), offset = cp - 0x10000;\n return (_fromCC((offset >>> 10) + 0xD800)\n + _fromCC((offset & 0x3FF) + 0xDC00));\n case 3:\n return _fromCC(((0x0f & cccc.charCodeAt(0)) << 12)\n | ((0x3f & cccc.charCodeAt(1)) << 6)\n | (0x3f & cccc.charCodeAt(2)));\n default:\n return _fromCC(((0x1f & cccc.charCodeAt(0)) << 6)\n | (0x3f & cccc.charCodeAt(1)));\n }\n};\n/**\n * @deprecated should have been internal use only.\n * @param {string} src UTF-16 string\n * @returns {string} UTF-8 string\n */\nconst btou = (b) => b.replace(re_btou, cb_btou);\n/**\n * polyfill version of `atob`\n */\nconst atobPolyfill = (asc) => {\n // console.log('polyfilled');\n asc = asc.replace(/\\s+/g, '');\n if (!b64re.test(asc))\n throw new TypeError('malformed base64.');\n asc += '=='.slice(2 - (asc.length & 3));\n let u24, bin = '', r1, r2;\n for (let i = 0; i < asc.length;) {\n u24 = b64tab[asc.charAt(i++)] << 18\n | b64tab[asc.charAt(i++)] << 12\n | (r1 = b64tab[asc.charAt(i++)]) << 6\n | (r2 = b64tab[asc.charAt(i++)]);\n bin += r1 === 64 ? _fromCC(u24 >> 16 & 255)\n : r2 === 64 ? _fromCC(u24 >> 16 & 255, u24 >> 8 & 255)\n : _fromCC(u24 >> 16 & 255, u24 >> 8 & 255, u24 & 255);\n }\n return bin;\n};\n/**\n * does what `window.atob` of web browsers do.\n * @param {String} asc Base64-encoded string\n * @returns {string} binary string\n */\nconst _atob = typeof atob === 'function' ? (asc) => atob(_tidyB64(asc))\n : _hasBuffer ? (asc) => Buffer.from(asc, 'base64').toString('binary')\n : atobPolyfill;\n//\nconst _toUint8Array = _hasBuffer\n ? (a) => _U8Afrom(Buffer.from(a, 'base64'))\n : (a) => _U8Afrom(_atob(a).split('').map(c => c.charCodeAt(0)));\n/**\n * converts a Base64 string to a Uint8Array.\n */\nconst toUint8Array = (a) => _toUint8Array(_unURI(a));\n//\nconst _decode = _hasBuffer\n ? (a) => Buffer.from(a, 'base64').toString('utf8')\n : _TD\n ? (a) => _TD.decode(_toUint8Array(a))\n : (a) => btou(_atob(a));\nconst _unURI = (a) => _tidyB64(a.replace(/[-_]/g, (m0) => m0 == '-' ? '+' : '/'));\n/**\n * converts a Base64 string to a UTF-8 string.\n * @param {String} src Base64 string. Both normal and URL-safe are supported\n * @returns {string} UTF-8 string\n */\nconst decode = (src) => _decode(_unURI(src));\n/**\n * check if a value is a valid Base64 string\n * @param {String} src a value to check\n */\nconst isValid = (src) => {\n if (typeof src !== 'string')\n return false;\n const s = src.replace(/\\s+/g, '').replace(/={0,2}$/, '');\n return !/[^\\s0-9a-zA-Z\\+/]/.test(s) || !/[^\\s0-9a-zA-Z\\-_]/.test(s);\n};\n//\nconst _noEnum = (v) => {\n return {\n value: v, enumerable: false, writable: true, configurable: true\n };\n};\n/**\n * extend String.prototype with relevant methods\n */\nconst extendString = function () {\n const _add = (name, body) => Object.defineProperty(String.prototype, name, _noEnum(body));\n _add('fromBase64', function () { return decode(this); });\n _add('toBase64', function (urlsafe) { return encode(this, urlsafe); });\n _add('toBase64URI', function () { return encode(this, true); });\n _add('toBase64URL', function () { return encode(this, true); });\n _add('toUint8Array', function () { return toUint8Array(this); });\n};\n/**\n * extend Uint8Array.prototype with relevant methods\n */\nconst extendUint8Array = function () {\n const _add = (name, body) => Object.defineProperty(Uint8Array.prototype, name, _noEnum(body));\n _add('toBase64', function (urlsafe) { return fromUint8Array(this, urlsafe); });\n _add('toBase64URI', function () { return fromUint8Array(this, true); });\n _add('toBase64URL', function () { return fromUint8Array(this, true); });\n};\n/**\n * extend Builtin prototypes with relevant methods\n */\nconst extendBuiltins = () => {\n extendString();\n extendUint8Array();\n};\nconst gBase64 = {\n version: version,\n VERSION: VERSION,\n atob: _atob,\n atobPolyfill: atobPolyfill,\n btoa: _btoa,\n btoaPolyfill: btoaPolyfill,\n fromBase64: decode,\n toBase64: encode,\n encode: encode,\n encodeURI: encodeURI,\n encodeURL: encodeURI,\n utob: utob,\n btou: btou,\n decode: decode,\n isValid: isValid,\n fromUint8Array: fromUint8Array,\n toUint8Array: toUint8Array,\n extendString: extendString,\n extendUint8Array: extendUint8Array,\n extendBuiltins: extendBuiltins\n};\n// makecjs:CUT //\nexport { version };\nexport { VERSION };\nexport { _atob as atob };\nexport { atobPolyfill };\nexport { _btoa as btoa };\nexport { btoaPolyfill };\nexport { decode as fromBase64 };\nexport { encode as toBase64 };\nexport { utob };\nexport { encode };\nexport { encodeURI };\nexport { encodeURI as encodeURL };\nexport { btou };\nexport { decode };\nexport { isValid };\nexport { fromUint8Array };\nexport { toUint8Array };\nexport { extendString };\nexport { extendUint8Array };\nexport { extendBuiltins };\n// and finally,\nexport { gBase64 as Base64 };\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"crypto\");","import crypto from 'crypto';\nexport default {\n randomUUID: crypto.randomUUID\n};","import crypto from 'crypto';\nconst rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate\n\nlet poolPtr = rnds8Pool.length;\nexport default function rng() {\n if (poolPtr > rnds8Pool.length - 16) {\n crypto.randomFillSync(rnds8Pool);\n poolPtr = 0;\n }\n\n return rnds8Pool.slice(poolPtr, poolPtr += 16);\n}","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\n\nexport function unsafeStringify(arr, offset = 0) {\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n return byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]];\n}\n\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\n\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n\n options = options || {};\n const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return unsafeStringify(rnds);\n}\n\nexport default v4;","'use strict';\n\nexport default function bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n","'use strict';\n\nimport bind from './helpers/bind.js';\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {toString} = Object.prototype;\nconst {getPrototypeOf} = Object;\n\nconst kindOf = (cache => thing => {\n const str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n type = type.toLowerCase();\n return (thing) => kindOf(thing) === type\n}\n\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {isArray} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n if (kindOf(val) !== 'object') {\n return false;\n }\n\n const prototype = getPrototypeOf(val);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in val) && !(Symbol.iterator in val);\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n let kind;\n return thing && (\n (typeof FormData === 'function' && thing instanceof FormData) || (\n isFunction(thing.append) && (\n (kind = kindOf(thing)) === 'formdata' ||\n // detect form-data instance\n (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')\n )\n )\n )\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\nconst [isReadableStream, isRequest, isResponse, isHeaders] = ['ReadableStream', 'Request', 'Response', 'Headers'].map(kindOfTest);\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) => str.trim ?\n str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {allOwnKeys = false} = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n let i;\n let l;\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n const len = keys.length;\n let key;\n\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\n\nfunction findKey(obj, key) {\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\n\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\" ? self : (typeof window !== 'undefined' ? window : global)\n})();\n\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n const {caseless} = isContextDefined(this) && this || {};\n const result = {};\n const assignValue = (val, key) => {\n const targetKey = caseless && findKey(result, key) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else {\n result[targetKey] = val;\n }\n }\n\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {allOwnKeys}= {}) => {\n forEach(b, (val, key) => {\n if (thisArg && isFunction(val)) {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n }, {allOwnKeys});\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n Object.defineProperty(constructor, 'super', {\n value: superConstructor.prototype\n });\n props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n}\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n}\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n // eslint-disable-next-line func-names\n return thing => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object<any, any>} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[Symbol.iterator];\n\n const iterator = generator.call(obj);\n\n let result;\n\n while ((result = iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n}\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array<boolean>}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n\n return arr;\n}\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\n\nconst toCamelCase = str => {\n return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g,\n function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n }\n );\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\n\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n\n forEach(descriptors, (descriptor, name) => {\n let ret;\n if ((ret = reducer(descriptor, name, obj)) !== false) {\n reducedDescriptors[name] = ret || descriptor;\n }\n });\n\n Object.defineProperties(obj, reducedDescriptors);\n}\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n return false;\n }\n\n const value = obj[name];\n\n if (!isFunction(value)) return;\n\n descriptor.enumerable = false;\n\n if ('writable' in descriptor) {\n descriptor.writable = false;\n return;\n }\n\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n };\n }\n });\n}\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n\n const define = (arr) => {\n arr.forEach(value => {\n obj[value] = true;\n });\n }\n\n isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n\n return obj;\n}\n\nconst noop = () => {}\n\nconst toFiniteNumber = (value, defaultValue) => {\n return value != null && Number.isFinite(value = +value) ? value : defaultValue;\n}\n\nconst ALPHA = 'abcdefghijklmnopqrstuvwxyz'\n\nconst DIGIT = '0123456789';\n\nconst ALPHABET = {\n DIGIT,\n ALPHA,\n ALPHA_DIGIT: ALPHA + ALPHA.toUpperCase() + DIGIT\n}\n\nconst generateString = (size = 16, alphabet = ALPHABET.ALPHA_DIGIT) => {\n let str = '';\n const {length} = alphabet;\n while (size--) {\n str += alphabet[Math.random() * length|0]\n }\n\n return str;\n}\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(thing && isFunction(thing.append) && thing[Symbol.toStringTag] === 'FormData' && thing[Symbol.iterator]);\n}\n\nconst toJSONObject = (obj) => {\n const stack = new Array(10);\n\n const visit = (source, i) => {\n\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n\n if(!('toJSON' in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n\n stack[i] = undefined;\n\n return target;\n }\n }\n\n return source;\n }\n\n return visit(obj, 0);\n}\n\nconst isAsyncFn = kindOfTest('AsyncFunction');\n\nconst isThenable = (thing) =>\n thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\n\nexport default {\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isReadableStream,\n isRequest,\n isResponse,\n isHeaders,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty,\n hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n ALPHABET,\n generateString,\n isSpecCompliantForm,\n toJSONObject,\n isAsyncFn,\n isThenable\n};\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = (new Error()).stack;\n }\n\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n response && (this.response = response);\n}\n\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: utils.toJSONObject(this.config),\n code: this.code,\n status: this.response && this.response.status ? this.response.status : null\n };\n }\n});\n\nconst prototype = AxiosError.prototype;\nconst descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED',\n 'ERR_NOT_SUPPORT',\n 'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n const axiosError = Object.create(prototype);\n\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n }, prop => {\n return prop !== 'isAxiosError';\n });\n\n AxiosError.call(axiosError, error.message, code, config, request, response);\n\n axiosError.cause = error;\n\n axiosError.name = error.name;\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\nexport default AxiosError;\n","import FormData from 'form-data';\n\nexport default FormData;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\nimport PlatformFormData from '../platform/node/classes/FormData.js';\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array<any>} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object<any, any>} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object<string, any>} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (PlatformFormData || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils.isUndefined(source[option]);\n });\n\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n\n if (!utils.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (!useBlob && utils.isBlob(value)) {\n throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array<String|Number>} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n\n if (value && !path && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (\n (utils.isArray(value) && isFlatArray(value)) ||\n ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))\n )) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n\n arr.forEach(function each(el, index) {\n !(utils.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n convertValue(el)\n );\n });\n return false;\n }\n }\n\n if (isVisitable(value)) {\n return true;\n }\n\n formData.append(renderKey(path, key, dots), convertValue(value));\n\n return false;\n }\n\n const stack = [];\n\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n\n function build(value, path) {\n if (utils.isUndefined(value)) return;\n\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n\n stack.push(value);\n\n utils.forEach(value, function each(el, key) {\n const result = !(utils.isUndefined(el) || el === null) && visitor.call(\n formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\n );\n\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n\n stack.pop();\n }\n\n if (!utils.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n\n build(obj);\n\n return formData;\n}\n\nexport default toFormData;\n","'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object<string, any>} params - The parameters to be converted to a FormData object.\n * @param {Object<string, any>} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n\n params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n const _encode = encoder ? function(value) {\n return encoder.call(this, value, encode);\n } : encode;\n\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n\nexport default AxiosURLSearchParams;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?object} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n \n const _encode = options && options.encode || encode;\n\n const serializeFn = options && options.serialize;\n\n let serializedParams;\n\n if (serializeFn) {\n serializedParams = serializeFn(params, options);\n } else {\n serializedParams = utils.isURLSearchParams(params) ?\n params.toString() :\n new AxiosURLSearchParams(params, options).toString(_encode);\n }\n\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\nclass InterceptorManager {\n constructor() {\n this.handlers = [];\n }\n\n /**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n }\n\n /**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n *\n * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\n }\n }\n\n /**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n *\n * @returns {void}\n */\n forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n\nexport default InterceptorManager;\n","'use strict';\n\nexport default {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n","import URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\n\nexport default {\n isNode: true,\n classes: {\n URLSearchParams,\n FormData,\n Blob: typeof Blob !== 'undefined' && Blob || null\n },\n protocols: [ 'http', 'https', 'file', 'data' ]\n};\n","'use strict';\n\nimport url from 'url';\nexport default url.URLSearchParams;\n","const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = (\n (product) => {\n return hasBrowserEnv && ['ReactNative', 'NativeScript', 'NS'].indexOf(product) < 0\n })(typeof navigator !== 'undefined' && navigator.product);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return (\n typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope &&\n typeof self.importScripts === 'function'\n );\n})();\n\nconst origin = hasBrowserEnv && window.location.href || 'http://localhost';\n\nexport {\n hasBrowserEnv,\n hasStandardBrowserWebWorkerEnv,\n hasStandardBrowserEnv,\n origin\n}\n","import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n ...utils,\n ...platform\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array<any>} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object<string, any> | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n\n if (name === '__proto__') return true;\n\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils.isArray(target) ? target.length : name;\n\n if (isLast) {\n if (utils.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n\n return !isNumericKey;\n }\n\n if (!target[name] || !utils.isObject(target[name])) {\n target[name] = [];\n }\n\n const result = buildPath(path, value, target[name], index);\n\n if (result && utils.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n\n return !isNumericKey;\n }\n\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n const obj = {};\n\n utils.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n\n return obj;\n }\n\n return null;\n}\n\nexport default formDataToJSON;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: ['xhr', 'http', 'fetch'],\n\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils.isObject(data);\n\n if (isObjectPayload && utils.isHTMLForm(data)) {\n data = new FormData(data);\n }\n\n const isFormData = utils.isFormData(data);\n\n if (isFormData) {\n return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n }\n\n if (utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data) ||\n utils.isReadableStream(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n\n let isFileList;\n\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n\n return toFormData(\n isFileList ? {'files[]': data} : data,\n _FormData && new _FormData(),\n this.formSerializer\n );\n }\n }\n\n if (isObjectPayload || hasJSONContentType ) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n\n if (utils.isResponse(data) || utils.isReadableStream(data)) {\n return data;\n }\n\n if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*',\n 'Content-Type': undefined\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\n defaults.headers[method] = {};\n});\n\nexport default defaults;\n","'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n return toFormData(data, new platform.classes.URLSearchParams(), Object.assign({\n visitor: function(value, key, path, helpers) {\n if (platform.isNode && utils.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n\n return helpers.defaultVisitor.apply(this, arguments);\n }\n }, options));\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n]);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n\n if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n return;\n }\n\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n\n return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n\n while ((match = tokensRE.exec(str))) {\n tokens[match[1]] = match[2];\n }\n\n return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (utils.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n\n if (isHeaderNameFilter) {\n value = header;\n }\n\n if (!utils.isString(value)) return;\n\n if (utils.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n\n if (utils.isRegExp(filter)) {\n return filter.test(value);\n }\n}\n\nfunction formatHeader(header) {\n return header.trim()\n .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\n\nfunction buildAccessors(obj, header) {\n const accessorName = utils.toCamelCase(' ' + header);\n\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function(arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\n\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n\n const key = utils.findKey(self, lHeader);\n\n if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n\n const setHeaders = (headers, _rewrite) =>\n utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite)\n } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else if (utils.isHeaders(header)) {\n for (const [key, value] of header.entries()) {\n setHeader(value, key, rewrite);\n }\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n\n return this;\n }\n\n get(header, parser) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n if (key) {\n const value = this[key];\n\n if (!parser) {\n return value;\n }\n\n if (parser === true) {\n return parseTokens(value);\n }\n\n if (utils.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n\n if (utils.isRegExp(parser)) {\n return parser.exec(value);\n }\n\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n\n has(header, matcher) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n\n return false;\n }\n\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n\n if (_header) {\n const key = utils.findKey(self, _header);\n\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n\n deleted = true;\n }\n }\n }\n\n if (utils.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n\n return deleted;\n }\n\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n\n while (i--) {\n const key = keys[i];\n if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n\n return deleted;\n }\n\n normalize(format) {\n const self = this;\n const headers = {};\n\n utils.forEach(this, (value, header) => {\n const key = utils.findKey(headers, header);\n\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n\n const normalized = format ? formatHeader(header) : String(header).trim();\n\n if (normalized !== header) {\n delete self[header];\n }\n\n self[normalized] = normalizeValue(value);\n\n headers[normalized] = true;\n });\n\n return this;\n }\n\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n\n toJSON(asStrings) {\n const obj = Object.create(null);\n\n utils.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n });\n\n return obj;\n }\n\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n\n static concat(first, ...targets) {\n const computed = new this(first);\n\n targets.forEach((target) => computed.set(target));\n\n return computed;\n }\n\n static accessor(header) {\n const internals = this[$internals] = (this[$internals] = {\n accessors: {}\n });\n\n const accessors = internals.accessors;\n const prototype = this.prototype;\n\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n return this;\n }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: () => value,\n set(headerValue) {\n this[mapped] = headerValue;\n }\n }\n});\n\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n","'use strict';\n\nimport utils from './../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n const config = this || defaults;\n const context = response || config;\n const headers = AxiosHeaders.from(context.headers);\n let data = context.data;\n\n utils.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n\n headers.normalize();\n\n return data;\n}\n","'use strict';\n\nexport default function isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n","'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\nimport utils from '../utils.js';\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n __CANCEL__: true\n});\n\nexport default CanceledError;\n","'use strict';\n\nimport AxiosError from './AxiosError.js';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n}\n","'use strict';\n\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"zlib\");","export const VERSION = \"1.7.2\";","'use strict';\n\nexport default function parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n","'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\nimport parseProtocol from './parseProtocol.js';\nimport platform from '../platform/index.js';\n\nconst DATA_URL_PATTERN = /^(?:([^;]+);)?(?:[^;]+;)?(base64|),([\\s\\S]*)$/;\n\n/**\n * Parse data uri to a Buffer or Blob\n *\n * @param {String} uri\n * @param {?Boolean} asBlob\n * @param {?Object} options\n * @param {?Function} options.Blob\n *\n * @returns {Buffer|Blob}\n */\nexport default function fromDataURI(uri, asBlob, options) {\n const _Blob = options && options.Blob || platform.classes.Blob;\n const protocol = parseProtocol(uri);\n\n if (asBlob === undefined && _Blob) {\n asBlob = true;\n }\n\n if (protocol === 'data') {\n uri = protocol.length ? uri.slice(protocol.length + 1) : uri;\n\n const match = DATA_URL_PATTERN.exec(uri);\n\n if (!match) {\n throw new AxiosError('Invalid URL', AxiosError.ERR_INVALID_URL);\n }\n\n const mime = match[1];\n const isBase64 = match[2];\n const body = match[3];\n const buffer = Buffer.from(decodeURIComponent(body), isBase64 ? 'base64' : 'utf8');\n\n if (asBlob) {\n if (!_Blob) {\n throw new AxiosError('Blob is not supported', AxiosError.ERR_NOT_SUPPORT);\n }\n\n return new _Blob([buffer], {type: mime});\n }\n\n return buffer;\n }\n\n throw new AxiosError('Unsupported protocol ' + protocol, AxiosError.ERR_NOT_SUPPORT);\n}\n","'use strict';\n\n/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n let timestamp = 0;\n const threshold = 1000 / freq;\n let timer = null;\n return function throttled() {\n const force = this === true;\n\n const now = Date.now();\n if (force || now - timestamp > threshold) {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n timestamp = now;\n return fn.apply(null, arguments);\n }\n if (!timer) {\n timer = setTimeout(() => {\n timer = null;\n timestamp = Date.now();\n return fn.apply(null, arguments);\n }, threshold - (now - timestamp));\n }\n };\n}\n\nexport default throttle;\n","'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n\n min = min !== undefined ? min : 1000;\n\n return function push(chunkLength) {\n const now = Date.now();\n\n const startedAt = timestamps[tail];\n\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n\n bytes[head] = chunkLength;\n timestamps[head] = now;\n\n let i = tail;\n let bytesCount = 0;\n\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n\n head = (head + 1) % samplesCount;\n\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n\n if (now - firstSampleTS < min) {\n return;\n }\n\n const passed = startedAt && now - startedAt;\n\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n\nexport default speedometer;\n","'use strict';\n\nimport stream from 'stream';\nimport utils from '../utils.js';\nimport throttle from './throttle.js';\nimport speedometer from './speedometer.js';\n\nconst kInternals = Symbol('internals');\n\nclass AxiosTransformStream extends stream.Transform{\n constructor(options) {\n options = utils.toFlatObject(options, {\n maxRate: 0,\n chunkSize: 64 * 1024,\n minChunkSize: 100,\n timeWindow: 500,\n ticksRate: 2,\n samplesCount: 15\n }, null, (prop, source) => {\n return !utils.isUndefined(source[prop]);\n });\n\n super({\n readableHighWaterMark: options.chunkSize\n });\n\n const self = this;\n\n const internals = this[kInternals] = {\n length: options.length,\n timeWindow: options.timeWindow,\n ticksRate: options.ticksRate,\n chunkSize: options.chunkSize,\n maxRate: options.maxRate,\n minChunkSize: options.minChunkSize,\n bytesSeen: 0,\n isCaptured: false,\n notifiedBytesLoaded: 0,\n ts: Date.now(),\n bytes: 0,\n onReadCallback: null\n };\n\n const _speedometer = speedometer(internals.ticksRate * options.samplesCount, internals.timeWindow);\n\n this.on('newListener', event => {\n if (event === 'progress') {\n if (!internals.isCaptured) {\n internals.isCaptured = true;\n }\n }\n });\n\n let bytesNotified = 0;\n\n internals.updateProgress = throttle(function throttledHandler() {\n const totalBytes = internals.length;\n const bytesTransferred = internals.bytesSeen;\n const progressBytes = bytesTransferred - bytesNotified;\n if (!progressBytes || self.destroyed) return;\n\n const rate = _speedometer(progressBytes);\n\n bytesNotified = bytesTransferred;\n\n process.nextTick(() => {\n self.emit('progress', {\n loaded: bytesTransferred,\n total: totalBytes,\n progress: totalBytes ? (bytesTransferred / totalBytes) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && totalBytes && bytesTransferred <= totalBytes ?\n (totalBytes - bytesTransferred) / rate : undefined,\n lengthComputable: totalBytes != null\n });\n });\n }, internals.ticksRate);\n\n const onFinish = () => {\n internals.updateProgress.call(true);\n };\n\n this.once('end', onFinish);\n this.once('error', onFinish);\n }\n\n _read(size) {\n const internals = this[kInternals];\n\n if (internals.onReadCallback) {\n internals.onReadCallback();\n }\n\n return super._read(size);\n }\n\n _transform(chunk, encoding, callback) {\n const self = this;\n const internals = this[kInternals];\n const maxRate = internals.maxRate;\n\n const readableHighWaterMark = this.readableHighWaterMark;\n\n const timeWindow = internals.timeWindow;\n\n const divider = 1000 / timeWindow;\n const bytesThreshold = (maxRate / divider);\n const minChunkSize = internals.minChunkSize !== false ? Math.max(internals.minChunkSize, bytesThreshold * 0.01) : 0;\n\n function pushChunk(_chunk, _callback) {\n const bytes = Buffer.byteLength(_chunk);\n internals.bytesSeen += bytes;\n internals.bytes += bytes;\n\n if (internals.isCaptured) {\n internals.updateProgress();\n }\n\n if (self.push(_chunk)) {\n process.nextTick(_callback);\n } else {\n internals.onReadCallback = () => {\n internals.onReadCallback = null;\n process.nextTick(_callback);\n };\n }\n }\n\n const transformChunk = (_chunk, _callback) => {\n const chunkSize = Buffer.byteLength(_chunk);\n let chunkRemainder = null;\n let maxChunkSize = readableHighWaterMark;\n let bytesLeft;\n let passed = 0;\n\n if (maxRate) {\n const now = Date.now();\n\n if (!internals.ts || (passed = (now - internals.ts)) >= timeWindow) {\n internals.ts = now;\n bytesLeft = bytesThreshold - internals.bytes;\n internals.bytes = bytesLeft < 0 ? -bytesLeft : 0;\n passed = 0;\n }\n\n bytesLeft = bytesThreshold - internals.bytes;\n }\n\n if (maxRate) {\n if (bytesLeft <= 0) {\n // next time window\n return setTimeout(() => {\n _callback(null, _chunk);\n }, timeWindow - passed);\n }\n\n if (bytesLeft < maxChunkSize) {\n maxChunkSize = bytesLeft;\n }\n }\n\n if (maxChunkSize && chunkSize > maxChunkSize && (chunkSize - maxChunkSize) > minChunkSize) {\n chunkRemainder = _chunk.subarray(maxChunkSize);\n _chunk = _chunk.subarray(0, maxChunkSize);\n }\n\n pushChunk(_chunk, chunkRemainder ? () => {\n process.nextTick(_callback, null, chunkRemainder);\n } : _callback);\n };\n\n transformChunk(chunk, function transformNextChunk(err, _chunk) {\n if (err) {\n return callback(err);\n }\n\n if (_chunk) {\n transformChunk(_chunk, transformNextChunk);\n } else {\n callback(null);\n }\n });\n }\n\n setLength(length) {\n this[kInternals].length = +length;\n return this;\n }\n}\n\nexport default AxiosTransformStream;\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"events\");","const {asyncIterator} = Symbol;\n\nconst readBlob = async function* (blob) {\n if (blob.stream) {\n yield* blob.stream()\n } else if (blob.arrayBuffer) {\n yield await blob.arrayBuffer()\n } else if (blob[asyncIterator]) {\n yield* blob[asyncIterator]();\n } else {\n yield blob;\n }\n}\n\nexport default readBlob;\n","import {TextEncoder} from 'util';\nimport {Readable} from 'stream';\nimport utils from \"../utils.js\";\nimport readBlob from \"./readBlob.js\";\n\nconst BOUNDARY_ALPHABET = utils.ALPHABET.ALPHA_DIGIT + '-_';\n\nconst textEncoder = new TextEncoder();\n\nconst CRLF = '\\r\\n';\nconst CRLF_BYTES = textEncoder.encode(CRLF);\nconst CRLF_BYTES_COUNT = 2;\n\nclass FormDataPart {\n constructor(name, value) {\n const {escapeName} = this.constructor;\n const isStringValue = utils.isString(value);\n\n let headers = `Content-Disposition: form-data; name=\"${escapeName(name)}\"${\n !isStringValue && value.name ? `; filename=\"${escapeName(value.name)}\"` : ''\n }${CRLF}`;\n\n if (isStringValue) {\n value = textEncoder.encode(String(value).replace(/\\r?\\n|\\r\\n?/g, CRLF));\n } else {\n headers += `Content-Type: ${value.type || \"application/octet-stream\"}${CRLF}`\n }\n\n this.headers = textEncoder.encode(headers + CRLF);\n\n this.contentLength = isStringValue ? value.byteLength : value.size;\n\n this.size = this.headers.byteLength + this.contentLength + CRLF_BYTES_COUNT;\n\n this.name = name;\n this.value = value;\n }\n\n async *encode(){\n yield this.headers;\n\n const {value} = this;\n\n if(utils.isTypedArray(value)) {\n yield value;\n } else {\n yield* readBlob(value);\n }\n\n yield CRLF_BYTES;\n }\n\n static escapeName(name) {\n return String(name).replace(/[\\r\\n\"]/g, (match) => ({\n '\\r' : '%0D',\n '\\n' : '%0A',\n '\"' : '%22',\n }[match]));\n }\n}\n\nconst formDataToStream = (form, headersHandler, options) => {\n const {\n tag = 'form-data-boundary',\n size = 25,\n boundary = tag + '-' + utils.generateString(size, BOUNDARY_ALPHABET)\n } = options || {};\n\n if(!utils.isFormData(form)) {\n throw TypeError('FormData instance required');\n }\n\n if (boundary.length < 1 || boundary.length > 70) {\n throw Error('boundary must be 10-70 characters long')\n }\n\n const boundaryBytes = textEncoder.encode('--' + boundary + CRLF);\n const footerBytes = textEncoder.encode('--' + boundary + '--' + CRLF + CRLF);\n let contentLength = footerBytes.byteLength;\n\n const parts = Array.from(form.entries()).map(([name, value]) => {\n const part = new FormDataPart(name, value);\n contentLength += part.size;\n return part;\n });\n\n contentLength += boundaryBytes.byteLength * parts.length;\n\n contentLength = utils.toFiniteNumber(contentLength);\n\n const computedHeaders = {\n 'Content-Type': `multipart/form-data; boundary=${boundary}`\n }\n\n if (Number.isFinite(contentLength)) {\n computedHeaders['Content-Length'] = contentLength;\n }\n\n headersHandler && headersHandler(computedHeaders);\n\n return Readable.from((async function *() {\n for(const part of parts) {\n yield boundaryBytes;\n yield* part.encode();\n }\n\n yield footerBytes;\n })());\n};\n\nexport default formDataToStream;\n","\"use strict\";\n\nimport stream from \"stream\";\n\nclass ZlibHeaderTransformStream extends stream.Transform {\n __transform(chunk, encoding, callback) {\n this.push(chunk);\n callback();\n }\n\n _transform(chunk, encoding, callback) {\n if (chunk.length !== 0) {\n this._transform = this.__transform;\n\n // Add Default Compression headers if no zlib headers are present\n if (chunk[0] !== 120) { // Hex: 78\n const header = Buffer.alloc(2);\n header[0] = 120; // Hex: 78\n header[1] = 156; // Hex: 9C \n this.push(header, encoding);\n }\n }\n\n this.__transform(chunk, encoding, callback);\n }\n}\n\nexport default ZlibHeaderTransformStream;\n","import utils from \"../utils.js\";\n\nconst callbackify = (fn, reducer) => {\n return utils.isAsyncFn(fn) ? function (...args) {\n const cb = args.pop();\n fn.apply(this, args).then((value) => {\n try {\n reducer ? cb(null, ...reducer(value)) : cb(null, value);\n } catch (err) {\n cb(err);\n }\n }, cb);\n } : fn;\n}\n\nexport default callbackify;\n","'use strict';\n\nimport utils from './../utils.js';\nimport settle from './../core/settle.js';\nimport buildFullPath from '../core/buildFullPath.js';\nimport buildURL from './../helpers/buildURL.js';\nimport {getProxyForUrl} from 'proxy-from-env';\nimport http from 'http';\nimport https from 'https';\nimport util from 'util';\nimport followRedirects from 'follow-redirects';\nimport zlib from 'zlib';\nimport {VERSION} from '../env/data.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport platform from '../platform/index.js';\nimport fromDataURI from '../helpers/fromDataURI.js';\nimport stream from 'stream';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport AxiosTransformStream from '../helpers/AxiosTransformStream.js';\nimport {EventEmitter} from 'events';\nimport formDataToStream from \"../helpers/formDataToStream.js\";\nimport readBlob from \"../helpers/readBlob.js\";\nimport ZlibHeaderTransformStream from '../helpers/ZlibHeaderTransformStream.js';\nimport callbackify from \"../helpers/callbackify.js\";\n\nconst zlibOptions = {\n flush: zlib.constants.Z_SYNC_FLUSH,\n finishFlush: zlib.constants.Z_SYNC_FLUSH\n};\n\nconst brotliOptions = {\n flush: zlib.constants.BROTLI_OPERATION_FLUSH,\n finishFlush: zlib.constants.BROTLI_OPERATION_FLUSH\n}\n\nconst isBrotliSupported = utils.isFunction(zlib.createBrotliDecompress);\n\nconst {http: httpFollow, https: httpsFollow} = followRedirects;\n\nconst isHttps = /https:?/;\n\nconst supportedProtocols = platform.protocols.map(protocol => {\n return protocol + ':';\n});\n\n/**\n * If the proxy or config beforeRedirects functions are defined, call them with the options\n * object.\n *\n * @param {Object<string, any>} options - The options object that was passed to the request.\n *\n * @returns {Object<string, any>}\n */\nfunction dispatchBeforeRedirect(options, responseDetails) {\n if (options.beforeRedirects.proxy) {\n options.beforeRedirects.proxy(options);\n }\n if (options.beforeRedirects.config) {\n options.beforeRedirects.config(options, responseDetails);\n }\n}\n\n/**\n * If the proxy or config afterRedirects functions are defined, call them with the options\n *\n * @param {http.ClientRequestArgs} options\n * @param {AxiosProxyConfig} configProxy configuration from Axios options object\n * @param {string} location\n *\n * @returns {http.ClientRequestArgs}\n */\nfunction setProxy(options, configProxy, location) {\n let proxy = configProxy;\n if (!proxy && proxy !== false) {\n const proxyUrl = getProxyForUrl(location);\n if (proxyUrl) {\n proxy = new URL(proxyUrl);\n }\n }\n if (proxy) {\n // Basic proxy authorization\n if (proxy.username) {\n proxy.auth = (proxy.username || '') + ':' + (proxy.password || '');\n }\n\n if (proxy.auth) {\n // Support proxy auth object form\n if (proxy.auth.username || proxy.auth.password) {\n proxy.auth = (proxy.auth.username || '') + ':' + (proxy.auth.password || '');\n }\n const base64 = Buffer\n .from(proxy.auth, 'utf8')\n .toString('base64');\n options.headers['Proxy-Authorization'] = 'Basic ' + base64;\n }\n\n options.headers.host = options.hostname + (options.port ? ':' + options.port : '');\n const proxyHost = proxy.hostname || proxy.host;\n options.hostname = proxyHost;\n // Replace 'host' since options is not a URL object\n options.host = proxyHost;\n options.port = proxy.port;\n options.path = location;\n if (proxy.protocol) {\n options.protocol = proxy.protocol.includes(':') ? proxy.protocol : `${proxy.protocol}:`;\n }\n }\n\n options.beforeRedirects.proxy = function beforeRedirect(redirectOptions) {\n // Configure proxy for redirected request, passing the original config proxy to apply\n // the exact same logic as if the redirected request was performed by axios directly.\n setProxy(redirectOptions, configProxy, redirectOptions.href);\n };\n}\n\nconst isHttpAdapterSupported = typeof process !== 'undefined' && utils.kindOf(process) === 'process';\n\n// temporary hotfix\n\nconst wrapAsync = (asyncExecutor) => {\n return new Promise((resolve, reject) => {\n let onDone;\n let isDone;\n\n const done = (value, isRejected) => {\n if (isDone) return;\n isDone = true;\n onDone && onDone(value, isRejected);\n }\n\n const _resolve = (value) => {\n done(value);\n resolve(value);\n };\n\n const _reject = (reason) => {\n done(reason, true);\n reject(reason);\n }\n\n asyncExecutor(_resolve, _reject, (onDoneHandler) => (onDone = onDoneHandler)).catch(_reject);\n })\n};\n\nconst resolveFamily = ({address, family}) => {\n if (!utils.isString(address)) {\n throw TypeError('address must be a string');\n }\n return ({\n address,\n family: family || (address.indexOf('.') < 0 ? 6 : 4)\n });\n}\n\nconst buildAddressEntry = (address, family) => resolveFamily(utils.isObject(address) ? address : {address, family});\n\n/*eslint consistent-return:0*/\nexport default isHttpAdapterSupported && function httpAdapter(config) {\n return wrapAsync(async function dispatchHttpRequest(resolve, reject, onDone) {\n let {data, lookup, family} = config;\n const {responseType, responseEncoding} = config;\n const method = config.method.toUpperCase();\n let isDone;\n let rejected = false;\n let req;\n\n if (lookup) {\n const _lookup = callbackify(lookup, (value) => utils.isArray(value) ? value : [value]);\n // hotfix to support opt.all option which is required for node 20.x\n lookup = (hostname, opt, cb) => {\n _lookup(hostname, opt, (err, arg0, arg1) => {\n if (err) {\n return cb(err);\n }\n\n const addresses = utils.isArray(arg0) ? arg0.map(addr => buildAddressEntry(addr)) : [buildAddressEntry(arg0, arg1)];\n\n opt.all ? cb(err, addresses) : cb(err, addresses[0].address, addresses[0].family);\n });\n }\n }\n\n // temporary internal emitter until the AxiosRequest class will be implemented\n const emitter = new EventEmitter();\n\n const onFinished = () => {\n if (config.cancelToken) {\n config.cancelToken.unsubscribe(abort);\n }\n\n if (config.signal) {\n config.signal.removeEventListener('abort', abort);\n }\n\n emitter.removeAllListeners();\n }\n\n onDone((value, isRejected) => {\n isDone = true;\n if (isRejected) {\n rejected = true;\n onFinished();\n }\n });\n\n function abort(reason) {\n emitter.emit('abort', !reason || reason.type ? new CanceledError(null, config, req) : reason);\n }\n\n emitter.once('abort', reject);\n\n if (config.cancelToken || config.signal) {\n config.cancelToken && config.cancelToken.subscribe(abort);\n if (config.signal) {\n config.signal.aborted ? abort() : config.signal.addEventListener('abort', abort);\n }\n }\n\n // Parse url\n const fullPath = buildFullPath(config.baseURL, config.url);\n const parsed = new URL(fullPath, 'http://localhost');\n const protocol = parsed.protocol || supportedProtocols[0];\n\n if (protocol === 'data:') {\n let convertedData;\n\n if (method !== 'GET') {\n return settle(resolve, reject, {\n status: 405,\n statusText: 'method not allowed',\n headers: {},\n config\n });\n }\n\n try {\n convertedData = fromDataURI(config.url, responseType === 'blob', {\n Blob: config.env && config.env.Blob\n });\n } catch (err) {\n throw AxiosError.from(err, AxiosError.ERR_BAD_REQUEST, config);\n }\n\n if (responseType === 'text') {\n convertedData = convertedData.toString(responseEncoding);\n\n if (!responseEncoding || responseEncoding === 'utf8') {\n convertedData = utils.stripBOM(convertedData);\n }\n } else if (responseType === 'stream') {\n convertedData = stream.Readable.from(convertedData);\n }\n\n return settle(resolve, reject, {\n data: convertedData,\n status: 200,\n statusText: 'OK',\n headers: new AxiosHeaders(),\n config\n });\n }\n\n if (supportedProtocols.indexOf(protocol) === -1) {\n return reject(new AxiosError(\n 'Unsupported protocol ' + protocol,\n AxiosError.ERR_BAD_REQUEST,\n config\n ));\n }\n\n const headers = AxiosHeaders.from(config.headers).normalize();\n\n // Set User-Agent (required by some servers)\n // See https://github.com/axios/axios/issues/69\n // User-Agent is specified; handle case where no UA header is desired\n // Only set header if it hasn't been set in config\n headers.set('User-Agent', 'axios/' + VERSION, false);\n\n const onDownloadProgress = config.onDownloadProgress;\n const onUploadProgress = config.onUploadProgress;\n const maxRate = config.maxRate;\n let maxUploadRate = undefined;\n let maxDownloadRate = undefined;\n\n // support for spec compliant FormData objects\n if (utils.isSpecCompliantForm(data)) {\n const userBoundary = headers.getContentType(/boundary=([-_\\w\\d]{10,70})/i);\n\n data = formDataToStream(data, (formHeaders) => {\n headers.set(formHeaders);\n }, {\n tag: `axios-${VERSION}-boundary`,\n boundary: userBoundary && userBoundary[1] || undefined\n });\n // support for https://www.npmjs.com/package/form-data api\n } else if (utils.isFormData(data) && utils.isFunction(data.getHeaders)) {\n headers.set(data.getHeaders());\n\n if (!headers.hasContentLength()) {\n try {\n const knownLength = await util.promisify(data.getLength).call(data);\n Number.isFinite(knownLength) && knownLength >= 0 && headers.setContentLength(knownLength);\n /*eslint no-empty:0*/\n } catch (e) {\n }\n }\n } else if (utils.isBlob(data)) {\n data.size && headers.setContentType(data.type || 'application/octet-stream');\n headers.setContentLength(data.size || 0);\n data = stream.Readable.from(readBlob(data));\n } else if (data && !utils.isStream(data)) {\n if (Buffer.isBuffer(data)) {\n // Nothing to do...\n } else if (utils.isArrayBuffer(data)) {\n data = Buffer.from(new Uint8Array(data));\n } else if (utils.isString(data)) {\n data = Buffer.from(data, 'utf-8');\n } else {\n return reject(new AxiosError(\n 'Data after transformation must be a string, an ArrayBuffer, a Buffer, or a Stream',\n AxiosError.ERR_BAD_REQUEST,\n config\n ));\n }\n\n // Add Content-Length header if data exists\n headers.setContentLength(data.length, false);\n\n if (config.maxBodyLength > -1 && data.length > config.maxBodyLength) {\n return reject(new AxiosError(\n 'Request body larger than maxBodyLength limit',\n AxiosError.ERR_BAD_REQUEST,\n config\n ));\n }\n }\n\n const contentLength = utils.toFiniteNumber(headers.getContentLength());\n\n if (utils.isArray(maxRate)) {\n maxUploadRate = maxRate[0];\n maxDownloadRate = maxRate[1];\n } else {\n maxUploadRate = maxDownloadRate = maxRate;\n }\n\n if (data && (onUploadProgress || maxUploadRate)) {\n if (!utils.isStream(data)) {\n data = stream.Readable.from(data, {objectMode: false});\n }\n\n data = stream.pipeline([data, new AxiosTransformStream({\n length: contentLength,\n maxRate: utils.toFiniteNumber(maxUploadRate)\n })], utils.noop);\n\n onUploadProgress && data.on('progress', progress => {\n onUploadProgress(Object.assign(progress, {\n upload: true\n }));\n });\n }\n\n // HTTP basic authentication\n let auth = undefined;\n if (config.auth) {\n const username = config.auth.username || '';\n const password = config.auth.password || '';\n auth = username + ':' + password;\n }\n\n if (!auth && parsed.username) {\n const urlUsername = parsed.username;\n const urlPassword = parsed.password;\n auth = urlUsername + ':' + urlPassword;\n }\n\n auth && headers.delete('authorization');\n\n let path;\n\n try {\n path = buildURL(\n parsed.pathname + parsed.search,\n config.params,\n config.paramsSerializer\n ).replace(/^\\?/, '');\n } catch (err) {\n const customErr = new Error(err.message);\n customErr.config = config;\n customErr.url = config.url;\n customErr.exists = true;\n return reject(customErr);\n }\n\n headers.set(\n 'Accept-Encoding',\n 'gzip, compress, deflate' + (isBrotliSupported ? ', br' : ''), false\n );\n\n const options = {\n path,\n method: method,\n headers: headers.toJSON(),\n agents: { http: config.httpAgent, https: config.httpsAgent },\n auth,\n protocol,\n family,\n beforeRedirect: dispatchBeforeRedirect,\n beforeRedirects: {}\n };\n\n // cacheable-lookup integration hotfix\n !utils.isUndefined(lookup) && (options.lookup = lookup);\n\n if (config.socketPath) {\n options.socketPath = config.socketPath;\n } else {\n options.hostname = parsed.hostname;\n options.port = parsed.port;\n setProxy(options, config.proxy, protocol + '//' + parsed.hostname + (parsed.port ? ':' + parsed.port : '') + options.path);\n }\n\n let transport;\n const isHttpsRequest = isHttps.test(options.protocol);\n options.agent = isHttpsRequest ? config.httpsAgent : config.httpAgent;\n if (config.transport) {\n transport = config.transport;\n } else if (config.maxRedirects === 0) {\n transport = isHttpsRequest ? https : http;\n } else {\n if (config.maxRedirects) {\n options.maxRedirects = config.maxRedirects;\n }\n if (config.beforeRedirect) {\n options.beforeRedirects.config = config.beforeRedirect;\n }\n transport = isHttpsRequest ? httpsFollow : httpFollow;\n }\n\n if (config.maxBodyLength > -1) {\n options.maxBodyLength = config.maxBodyLength;\n } else {\n // follow-redirects does not skip comparison, so it should always succeed for axios -1 unlimited\n options.maxBodyLength = Infinity;\n }\n\n if (config.insecureHTTPParser) {\n options.insecureHTTPParser = config.insecureHTTPParser;\n }\n\n // Create the request\n req = transport.request(options, function handleResponse(res) {\n if (req.destroyed) return;\n\n const streams = [res];\n\n const responseLength = +res.headers['content-length'];\n\n if (onDownloadProgress) {\n const transformStream = new AxiosTransformStream({\n length: utils.toFiniteNumber(responseLength),\n maxRate: utils.toFiniteNumber(maxDownloadRate)\n });\n\n onDownloadProgress && transformStream.on('progress', progress => {\n onDownloadProgress(Object.assign(progress, {\n download: true\n }));\n });\n\n streams.push(transformStream);\n }\n\n // decompress the response body transparently if required\n let responseStream = res;\n\n // return the last request in case of redirects\n const lastRequest = res.req || req;\n\n // if decompress disabled we should not decompress\n if (config.decompress !== false && res.headers['content-encoding']) {\n // if no content, but headers still say that it is encoded,\n // remove the header not confuse downstream operations\n if (method === 'HEAD' || res.statusCode === 204) {\n delete res.headers['content-encoding'];\n }\n\n switch ((res.headers['content-encoding'] || '').toLowerCase()) {\n /*eslint default-case:0*/\n case 'gzip':\n case 'x-gzip':\n case 'compress':\n case 'x-compress':\n // add the unzipper to the body stream processing pipeline\n streams.push(zlib.createUnzip(zlibOptions));\n\n // remove the content-encoding in order to not confuse downstream operations\n delete res.headers['content-encoding'];\n break;\n case 'deflate':\n streams.push(new ZlibHeaderTransformStream());\n\n // add the unzipper to the body stream processing pipeline\n streams.push(zlib.createUnzip(zlibOptions));\n\n // remove the content-encoding in order to not confuse downstream operations\n delete res.headers['content-encoding'];\n break;\n case 'br':\n if (isBrotliSupported) {\n streams.push(zlib.createBrotliDecompress(brotliOptions));\n delete res.headers['content-encoding'];\n }\n }\n }\n\n responseStream = streams.length > 1 ? stream.pipeline(streams, utils.noop) : streams[0];\n\n const offListeners = stream.finished(responseStream, () => {\n offListeners();\n onFinished();\n });\n\n const response = {\n status: res.statusCode,\n statusText: res.statusMessage,\n headers: new AxiosHeaders(res.headers),\n config,\n request: lastRequest\n };\n\n if (responseType === 'stream') {\n response.data = responseStream;\n settle(resolve, reject, response);\n } else {\n const responseBuffer = [];\n let totalResponseBytes = 0;\n\n responseStream.on('data', function handleStreamData(chunk) {\n responseBuffer.push(chunk);\n totalResponseBytes += chunk.length;\n\n // make sure the content length is not over the maxContentLength if specified\n if (config.maxContentLength > -1 && totalResponseBytes > config.maxContentLength) {\n // stream.destroy() emit aborted event before calling reject() on Node.js v16\n rejected = true;\n responseStream.destroy();\n reject(new AxiosError('maxContentLength size of ' + config.maxContentLength + ' exceeded',\n AxiosError.ERR_BAD_RESPONSE, config, lastRequest));\n }\n });\n\n responseStream.on('aborted', function handlerStreamAborted() {\n if (rejected) {\n return;\n }\n\n const err = new AxiosError(\n 'maxContentLength size of ' + config.maxContentLength + ' exceeded',\n AxiosError.ERR_BAD_RESPONSE,\n config,\n lastRequest\n );\n responseStream.destroy(err);\n reject(err);\n });\n\n responseStream.on('error', function handleStreamError(err) {\n if (req.destroyed) return;\n reject(AxiosError.from(err, null, config, lastRequest));\n });\n\n responseStream.on('end', function handleStreamEnd() {\n try {\n let responseData = responseBuffer.length === 1 ? responseBuffer[0] : Buffer.concat(responseBuffer);\n if (responseType !== 'arraybuffer') {\n responseData = responseData.toString(responseEncoding);\n if (!responseEncoding || responseEncoding === 'utf8') {\n responseData = utils.stripBOM(responseData);\n }\n }\n response.data = responseData;\n } catch (err) {\n return reject(AxiosError.from(err, null, config, response.request, response));\n }\n settle(resolve, reject, response);\n });\n }\n\n emitter.once('abort', err => {\n if (!responseStream.destroyed) {\n responseStream.emit('error', err);\n responseStream.destroy();\n }\n });\n });\n\n emitter.once('abort', err => {\n reject(err);\n req.destroy(err);\n });\n\n // Handle errors\n req.on('error', function handleRequestError(err) {\n // @todo remove\n // if (req.aborted && err.code !== AxiosError.ERR_FR_TOO_MANY_REDIRECTS) return;\n reject(AxiosError.from(err, null, config, req));\n });\n\n // set tcp keep alive to prevent drop connection by peer\n req.on('socket', function handleRequestSocket(socket) {\n // default interval of sending ack packet is 1 minute\n socket.setKeepAlive(true, 1000 * 60);\n });\n\n // Handle request timeout\n if (config.timeout) {\n // This is forcing a int timeout to avoid problems if the `req` interface doesn't handle other types.\n const timeout = parseInt(config.timeout, 10);\n\n if (Number.isNaN(timeout)) {\n reject(new AxiosError(\n 'error trying to parse `config.timeout` to int',\n AxiosError.ERR_BAD_OPTION_VALUE,\n config,\n req\n ));\n\n return;\n }\n\n // Sometime, the response will be very slow, and does not respond, the connect event will be block by event loop system.\n // And timer callback will be fired, and abort() will be invoked before connection, then get \"socket hang up\" and code ECONNRESET.\n // At this time, if we have a large number of request, nodejs will hang up some socket on background. and the number will up and up.\n // And then these socket which be hang up will devouring CPU little by little.\n // ClientRequest.setTimeout will be fired on the specify milliseconds, and can make sure that abort() will be fired after connect.\n req.setTimeout(timeout, function handleRequestTimeout() {\n if (isDone) return;\n let timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = config.transitional || transitionalDefaults;\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n req\n ));\n abort();\n });\n }\n\n\n // Send the request\n if (utils.isStream(data)) {\n let ended = false;\n let errored = false;\n\n data.on('end', () => {\n ended = true;\n });\n\n data.once('error', err => {\n errored = true;\n req.destroy(err);\n });\n\n data.on('close', () => {\n if (!ended && !errored) {\n abort(new CanceledError('Request stream has been aborted', config, req));\n }\n });\n\n data.pipe(req);\n } else {\n req.end(data);\n }\n });\n}\n\nexport const __setProxy = setProxy;\n","import speedometer from \"./speedometer.js\";\nimport throttle from \"./throttle.js\";\n\nexport default (listener, isDownloadStream, freq = 3) => {\n let bytesNotified = 0;\n const _speedometer = speedometer(50, 250);\n\n return throttle(e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n\n bytesNotified = loaded;\n\n const data = {\n loaded,\n total,\n progress: total ? (loaded / total) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e,\n lengthComputable: total != null\n };\n\n data[isDownloadStream ? 'download' : 'upload'] = true;\n\n listener(data);\n }, freq);\n}\n","'use strict';\n\nimport utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n// Standard browser envs have full support of the APIs needed to test\n// whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n const msie = /(msie|trident)/i.test(navigator.userAgent);\n const urlParsingNode = document.createElement('a');\n let originURL;\n\n /**\n * Parse a URL to discover its components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n let href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n const parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })();\n","import utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n // Standard browser envs support document.cookie\n {\n write(name, value, expires, path, domain, secure) {\n const cookie = [name + '=' + encodeURIComponent(value)];\n\n utils.isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString());\n\n utils.isString(path) && cookie.push('path=' + path);\n\n utils.isString(domain) && cookie.push('domain=' + domain);\n\n secure === true && cookie.push('secure');\n\n document.cookie = cookie.join('; ');\n },\n\n read(name) {\n const match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n }\n\n :\n\n // Non-standard browser env (web workers, react-native) lack needed support.\n {\n write() {},\n read() {\n return null;\n },\n remove() {}\n };\n\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosHeaders from \"./AxiosHeaders.js\";\n\nconst headersToObject = (thing) => thing instanceof AxiosHeaders ? { ...thing } : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n\n function getMergedValue(target, source, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({caseless}, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(a, b, caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b) => mergeDeepProperties(headersToObject(a), headersToObject(b), true)\n };\n\n utils.forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) {\n const merge = mergeMap[prop] || mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport isURLSameOrigin from \"./isURLSameOrigin.js\";\nimport cookies from \"./cookies.js\";\nimport buildFullPath from \"../core/buildFullPath.js\";\nimport mergeConfig from \"../core/mergeConfig.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport buildURL from \"./buildURL.js\";\n\nexport default (config) => {\n const newConfig = mergeConfig({}, config);\n\n let {data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth} = newConfig;\n\n newConfig.headers = headers = AxiosHeaders.from(headers);\n\n newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url), config.params, config.paramsSerializer);\n\n // HTTP basic authentication\n if (auth) {\n headers.set('Authorization', 'Basic ' +\n btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : ''))\n );\n }\n\n let contentType;\n\n if (utils.isFormData(data)) {\n if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n headers.setContentType(undefined); // Let the browser set it\n } else if ((contentType = headers.getContentType()) !== false) {\n // fix semicolon duplication issue for ReactNative FormData implementation\n const [type, ...tokens] = contentType ? contentType.split(';').map(token => token.trim()).filter(Boolean) : [];\n headers.setContentType([type || 'multipart/form-data', ...tokens].join('; '));\n }\n }\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n\n if (platform.hasStandardBrowserEnv) {\n withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));\n\n if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) {\n // Add xsrf header\n const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);\n\n if (xsrfValue) {\n headers.set(xsrfHeaderName, xsrfValue);\n }\n }\n }\n\n return newConfig;\n}\n\n","import utils from './../utils.js';\nimport settle from './../core/settle.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport progressEventReducer from '../helpers/progressEventReducer.js';\nimport resolveConfig from \"../helpers/resolveConfig.js\";\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n const _config = resolveConfig(config);\n let requestData = _config.data;\n const requestHeaders = AxiosHeaders.from(_config.headers).normalize();\n let {responseType} = _config;\n let onCanceled;\n function done() {\n if (_config.cancelToken) {\n _config.cancelToken.unsubscribe(onCanceled);\n }\n\n if (_config.signal) {\n _config.signal.removeEventListener('abort', onCanceled);\n }\n }\n\n let request = new XMLHttpRequest();\n\n request.open(_config.method.toUpperCase(), _config.url, true);\n\n // Set the request timeout in MS\n request.timeout = _config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = AxiosHeaders.from(\n 'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n );\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, _config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, _config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = _config.transitional || transitionalDefaults;\n if (_config.timeoutErrorMessage) {\n timeoutErrorMessage = _config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n _config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(_config.withCredentials)) {\n request.withCredentials = !!_config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = _config.responseType;\n }\n\n // Handle progress if needed\n if (typeof _config.onDownloadProgress === 'function') {\n request.addEventListener('progress', progressEventReducer(_config.onDownloadProgress, true));\n }\n\n // Not all browsers support upload events\n if (typeof _config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', progressEventReducer(_config.onUploadProgress));\n }\n\n if (_config.cancelToken || _config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n\n _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n if (_config.signal) {\n _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n const protocol = parseProtocol(_config.url);\n\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData || null);\n });\n}\n","import CanceledError from \"../cancel/CanceledError.js\";\nimport AxiosError from \"../core/AxiosError.js\";\n\nconst composeSignals = (signals, timeout) => {\n let controller = new AbortController();\n\n let aborted;\n\n const onabort = function (cancel) {\n if (!aborted) {\n aborted = true;\n unsubscribe();\n const err = cancel instanceof Error ? cancel : this.reason;\n controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));\n }\n }\n\n let timer = timeout && setTimeout(() => {\n onabort(new AxiosError(`timeout ${timeout} of ms exceeded`, AxiosError.ETIMEDOUT))\n }, timeout)\n\n const unsubscribe = () => {\n if (signals) {\n timer && clearTimeout(timer);\n timer = null;\n signals.forEach(signal => {\n signal &&\n (signal.removeEventListener ? signal.removeEventListener('abort', onabort) : signal.unsubscribe(onabort));\n });\n signals = null;\n }\n }\n\n signals.forEach((signal) => signal && signal.addEventListener && signal.addEventListener('abort', onabort));\n\n const {signal} = controller;\n\n signal.unsubscribe = unsubscribe;\n\n return [signal, () => {\n timer && clearTimeout(timer);\n timer = null;\n }];\n}\n\nexport default composeSignals;\n","\n\nexport const streamChunk = function* (chunk, chunkSize) {\n let len = chunk.byteLength;\n\n if (!chunkSize || len < chunkSize) {\n yield chunk;\n return;\n }\n\n let pos = 0;\n let end;\n\n while (pos < len) {\n end = pos + chunkSize;\n yield chunk.slice(pos, end);\n pos = end;\n }\n}\n\nexport const readBytes = async function* (iterable, chunkSize, encode) {\n for await (const chunk of iterable) {\n yield* streamChunk(ArrayBuffer.isView(chunk) ? chunk : (await encode(String(chunk))), chunkSize);\n }\n}\n\nexport const trackStream = (stream, chunkSize, onProgress, onFinish, encode) => {\n const iterator = readBytes(stream, chunkSize, encode);\n\n let bytes = 0;\n\n return new ReadableStream({\n type: 'bytes',\n\n async pull(controller) {\n const {done, value} = await iterator.next();\n\n if (done) {\n controller.close();\n onFinish();\n return;\n }\n\n let len = value.byteLength;\n onProgress && onProgress(bytes += len);\n controller.enqueue(new Uint8Array(value));\n },\n cancel(reason) {\n onFinish(reason);\n return iterator.return();\n }\n }, {\n highWaterMark: 2\n })\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport composeSignals from \"../helpers/composeSignals.js\";\nimport {trackStream} from \"../helpers/trackStream.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport progressEventReducer from \"../helpers/progressEventReducer.js\";\nimport resolveConfig from \"../helpers/resolveConfig.js\";\nimport settle from \"../core/settle.js\";\n\nconst fetchProgressDecorator = (total, fn) => {\n const lengthComputable = total != null;\n return (loaded) => setTimeout(() => fn({\n lengthComputable,\n total,\n loaded\n }));\n}\n\nconst isFetchSupported = typeof fetch === 'function' && typeof Request === 'function' && typeof Response === 'function';\nconst isReadableStreamSupported = isFetchSupported && typeof ReadableStream === 'function';\n\n// used only inside the fetch adapter\nconst encodeText = isFetchSupported && (typeof TextEncoder === 'function' ?\n ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) :\n async (str) => new Uint8Array(await new Response(str).arrayBuffer())\n);\n\nconst supportsRequestStream = isReadableStreamSupported && (() => {\n let duplexAccessed = false;\n\n const hasContentType = new Request(platform.origin, {\n body: new ReadableStream(),\n method: 'POST',\n get duplex() {\n duplexAccessed = true;\n return 'half';\n },\n }).headers.has('Content-Type');\n\n return duplexAccessed && !hasContentType;\n})();\n\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\n\nconst supportsResponseStream = isReadableStreamSupported && !!(()=> {\n try {\n return utils.isReadableStream(new Response('').body);\n } catch(err) {\n // return undefined\n }\n})();\n\nconst resolvers = {\n stream: supportsResponseStream && ((res) => res.body)\n};\n\nisFetchSupported && (((res) => {\n ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => {\n !resolvers[type] && (resolvers[type] = utils.isFunction(res[type]) ? (res) => res[type]() :\n (_, config) => {\n throw new AxiosError(`Response type '${type}' is not supported`, AxiosError.ERR_NOT_SUPPORT, config);\n })\n });\n})(new Response));\n\nconst getBodyLength = async (body) => {\n if (body == null) {\n return 0;\n }\n\n if(utils.isBlob(body)) {\n return body.size;\n }\n\n if(utils.isSpecCompliantForm(body)) {\n return (await new Request(body).arrayBuffer()).byteLength;\n }\n\n if(utils.isArrayBufferView(body)) {\n return body.byteLength;\n }\n\n if(utils.isURLSearchParams(body)) {\n body = body + '';\n }\n\n if(utils.isString(body)) {\n return (await encodeText(body)).byteLength;\n }\n}\n\nconst resolveBodyLength = async (headers, body) => {\n const length = utils.toFiniteNumber(headers.getContentLength());\n\n return length == null ? getBodyLength(body) : length;\n}\n\nexport default isFetchSupported && (async (config) => {\n let {\n url,\n method,\n data,\n signal,\n cancelToken,\n timeout,\n onDownloadProgress,\n onUploadProgress,\n responseType,\n headers,\n withCredentials = 'same-origin',\n fetchOptions\n } = resolveConfig(config);\n\n responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n\n let [composedSignal, stopTimeout] = (signal || cancelToken || timeout) ?\n composeSignals([signal, cancelToken], timeout) : [];\n\n let finished, request;\n\n const onFinish = () => {\n !finished && setTimeout(() => {\n composedSignal && composedSignal.unsubscribe();\n });\n\n finished = true;\n }\n\n let requestContentLength;\n\n try {\n if (\n onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' &&\n (requestContentLength = await resolveBodyLength(headers, data)) !== 0\n ) {\n let _request = new Request(url, {\n method: 'POST',\n body: data,\n duplex: \"half\"\n });\n\n let contentTypeHeader;\n\n if (utils.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {\n headers.setContentType(contentTypeHeader)\n }\n\n if (_request.body) {\n data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, fetchProgressDecorator(\n requestContentLength,\n progressEventReducer(onUploadProgress)\n ), null, encodeText);\n }\n }\n\n if (!utils.isString(withCredentials)) {\n withCredentials = withCredentials ? 'cors' : 'omit';\n }\n\n request = new Request(url, {\n ...fetchOptions,\n signal: composedSignal,\n method: method.toUpperCase(),\n headers: headers.normalize().toJSON(),\n body: data,\n duplex: \"half\",\n withCredentials\n });\n\n let response = await fetch(request);\n\n const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n if (supportsResponseStream && (onDownloadProgress || isStreamResponse)) {\n const options = {};\n\n ['status', 'statusText', 'headers'].forEach(prop => {\n options[prop] = response[prop];\n });\n\n const responseContentLength = utils.toFiniteNumber(response.headers.get('content-length'));\n\n response = new Response(\n trackStream(response.body, DEFAULT_CHUNK_SIZE, onDownloadProgress && fetchProgressDecorator(\n responseContentLength,\n progressEventReducer(onDownloadProgress, true)\n ), isStreamResponse && onFinish, encodeText),\n options\n );\n }\n\n responseType = responseType || 'text';\n\n let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](response, config);\n\n !isStreamResponse && onFinish();\n\n stopTimeout && stopTimeout();\n\n return await new Promise((resolve, reject) => {\n settle(resolve, reject, {\n data: responseData,\n headers: AxiosHeaders.from(response.headers),\n status: response.status,\n statusText: response.statusText,\n config,\n request\n })\n })\n } catch (err) {\n onFinish();\n\n if (err && err.name === 'TypeError' && /fetch/i.test(err.message)) {\n throw Object.assign(\n new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request),\n {\n cause: err.cause || err\n }\n )\n }\n\n throw AxiosError.from(err, err && err.code, config, request);\n }\n});\n\n\n","import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport fetchAdapter from './fetch.js';\nimport AxiosError from \"../core/AxiosError.js\";\n\nconst knownAdapters = {\n http: httpAdapter,\n xhr: xhrAdapter,\n fetch: fetchAdapter\n}\n\nutils.forEach(knownAdapters, (fn, value) => {\n if (fn) {\n try {\n Object.defineProperty(fn, 'name', {value});\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', {value});\n }\n});\n\nconst renderReason = (reason) => `- ${reason}`;\n\nconst isResolvedHandle = (adapter) => utils.isFunction(adapter) || adapter === null || adapter === false;\n\nexport default {\n getAdapter: (adapters) => {\n adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n const {length} = adapters;\n let nameOrAdapter;\n let adapter;\n\n const rejectedReasons = {};\n\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n let id;\n\n adapter = nameOrAdapter;\n\n if (!isResolvedHandle(nameOrAdapter)) {\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n if (adapter === undefined) {\n throw new AxiosError(`Unknown adapter '${id}'`);\n }\n }\n\n if (adapter) {\n break;\n }\n\n rejectedReasons[id || '#' + i] = adapter;\n }\n\n if (!adapter) {\n\n const reasons = Object.entries(rejectedReasons)\n .map(([id, state]) => `adapter ${id} ` +\n (state === false ? 'is not supported by the environment' : 'is not available in the build')\n );\n\n let s = length ?\n (reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0])) :\n 'as no adapter specified';\n\n throw new AxiosError(\n `There is no suitable adapter to dispatch the request ` + s,\n 'ERR_NOT_SUPPORT'\n );\n }\n\n return adapter;\n },\n adapters: knownAdapters\n}\n","'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from \"../adapters/adapters.js\";\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError(null, config);\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n config.headers = AxiosHeaders.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.transformRequest\n );\n\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n\n const adapter = adapters.getAdapter(config.adapter || defaults.adapter);\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n config.transformResponse,\n response\n );\n\n response.headers = AxiosHeaders.from(response.headers);\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n config.transformResponse,\n reason.response\n );\n reason.response.headers = AxiosHeaders.from(reason.response.headers);\n }\n }\n\n return Promise.reject(reason);\n });\n}\n","'use strict';\n\nimport {VERSION} from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nexport default {\n assertOptions,\n validators\n};\n","'use strict';\n\nimport utils from './../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n }\n\n /**\n * Dispatch a request\n *\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n async request(configOrUrl, config) {\n try {\n return await this._request(configOrUrl, config);\n } catch (err) {\n if (err instanceof Error) {\n let dummy;\n\n Error.captureStackTrace ? Error.captureStackTrace(dummy = {}) : (dummy = new Error());\n\n // slice off the Error: ... line\n const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n try {\n if (!err.stack) {\n err.stack = stack;\n // match without the 2 top stack lines\n } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n err.stack += '\\n' + stack\n }\n } catch (e) {\n // ignore the case where \"stack\" is an un-writable property\n }\n }\n\n throw err;\n }\n }\n\n _request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n const {transitional, paramsSerializer, headers} = config;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n if (paramsSerializer != null) {\n if (utils.isFunction(paramsSerializer)) {\n config.paramsSerializer = {\n serialize: paramsSerializer\n }\n } else {\n validator.assertOptions(paramsSerializer, {\n encode: validators.function,\n serialize: validators.function\n }, true);\n }\n }\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n // Flatten headers\n let contextHeaders = headers && utils.merge(\n headers.common,\n headers[config.method]\n );\n\n headers && utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n (method) => {\n delete headers[method];\n }\n );\n\n config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n let promise;\n let i = 0;\n let len;\n\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift.apply(chain, requestInterceptorChain);\n chain.push.apply(chain, responseInterceptorChain);\n len = chain.length;\n\n promise = Promise.resolve(config);\n\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n\n return promise;\n }\n\n len = requestInterceptorChain.length;\n\n let newConfig = config;\n\n i = 0;\n\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n i = 0;\n len = responseInterceptorChain.length;\n\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n\n return promise;\n }\n\n getUri(config) {\n config = mergeConfig(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nexport default Axios;\n","'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n let resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n\n let i = token._listeners.length;\n\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n\nexport default CancelToken;\n","const HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n HttpStatusCode[value] = key;\n});\n\nexport default HttpStatusCode;\n","'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport {VERSION} from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from \"./core/AxiosHeaders.js\";\nimport adapters from './adapters/adapters.js';\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new Axios(defaultConfig);\n const instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});\n\n // Copy context to instance\n utils.extend(instance, context, null, {allOwnKeys: true});\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode;\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nexport default function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n}\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\n\n// src/modules/poolModule.ts\nimport { normalizeSuiAddress } from \"@mysten/sui/utils\";\nimport { Transaction as Transaction4 } from \"@mysten/sui/transactions\";\n\n// src/utils/cachedContent.ts\nvar cacheTime5min = 5 * 60 * 1e3;\nvar cacheTime24h = 24 * 60 * 60 * 1e3;\nfunction getFutureTime(interval) {\n return Date.parse((/* @__PURE__ */ new Date()).toString()) + interval;\n}\nvar CachedContent = class {\n overdueTime;\n value;\n constructor(value, overdueTime = 0) {\n this.overdueTime = overdueTime;\n this.value = value;\n }\n isValid() {\n if (this.value === null) {\n return false;\n }\n if (this.overdueTime === 0) {\n return true;\n }\n if (Date.parse((/* @__PURE__ */ new Date()).toString()) > this.overdueTime) {\n return false;\n }\n return true;\n }\n};\n\n// src/utils/common.ts\nimport BN11 from \"bn.js\";\nimport { fromB64, fromHEX } from \"@mysten/bcs\";\nimport { Ed25519Keypair } from \"@mysten/sui/keypairs/ed25519\";\nimport { Secp256k1Keypair } from \"@mysten/sui/keypairs/secp256k1\";\n\n// src/types/clmmpool.ts\nimport BN2 from \"bn.js\";\n\n// src/math/utils.ts\nimport BN from \"bn.js\";\n\n// src/utils/decimal.ts\nimport Decimal from \"decimal.js\";\nDecimal.config({\n precision: 64,\n rounding: Decimal.ROUND_DOWN,\n toExpNeg: -64,\n toExpPos: 64\n});\nvar decimal_default = Decimal;\n\n// src/errors/errors.ts\nvar ClmmpoolsError = class extends Error {\n message;\n errorCode;\n constructor(message, errorCode) {\n super(message);\n this.message = message;\n this.errorCode = errorCode;\n }\n static isClmmpoolsErrorCode(e, code) {\n return e instanceof ClmmpoolsError && e.errorCode === code;\n }\n};\n\n// src/math/utils.ts\nvar ZERO = new BN(0);\nvar ONE = new BN(1);\nvar TWO = new BN(2);\nvar U128 = TWO.pow(new BN(128));\nvar U64_MAX = TWO.pow(new BN(64)).sub(ONE);\nvar U128_MAX = TWO.pow(new BN(128)).sub(ONE);\nvar MathUtil = class {\n static toX64_BN(num) {\n return num.mul(new BN(2).pow(new BN(64)));\n }\n static toX64_Decimal(num) {\n return num.mul(decimal_default.pow(2, 64));\n }\n static toX64(num) {\n return new BN(num.mul(decimal_default.pow(2, 64)).floor().toFixed());\n }\n static fromX64(num) {\n return new decimal_default(num.toString()).mul(decimal_default.pow(2, -64));\n }\n static fromX64_Decimal(num) {\n return num.mul(decimal_default.pow(2, -64));\n }\n static fromX64_BN(num) {\n return num.div(new BN(2).pow(new BN(64)));\n }\n static shiftRightRoundUp(n) {\n let result = n.shrn(64);\n if (n.mod(U64_MAX).gt(ZERO)) {\n result = result.add(ONE);\n }\n return result;\n }\n static divRoundUp(n0, n1) {\n const hasRemainder = !n0.mod(n1).eq(ZERO);\n if (hasRemainder) {\n return n0.div(n1).add(new BN(1));\n }\n return n0.div(n1);\n }\n static subUnderflowU128(n0, n1) {\n if (n0.lt(n1)) {\n return n0.sub(n1).add(U128_MAX);\n }\n return n0.sub(n1);\n }\n static checkUnsignedSub(n0, n1) {\n const n = n0.sub(n1);\n if (n.isNeg()) {\n throw new ClmmpoolsError(\"Unsigned integer sub overflow\", \"UnsignedIntegerOverflow\" /* UnsignedIntegerOverflow */);\n }\n return n;\n }\n static checkMul(n0, n1, limit) {\n const n = n0.mul(n1);\n if (this.isOverflow(n, limit)) {\n throw new ClmmpoolsError(\"Multiplication overflow\", \"MultiplicationOverflow\" /* MulOverflow */);\n }\n return n;\n }\n static checkMulDivFloor(n0, n1, denom, limit) {\n if (denom.eq(ZERO)) {\n throw new ClmmpoolsError(\"Devide by zero\", \"DivideByZero\" /* DivideByZero */);\n }\n const n = n0.mul(n1).div(denom);\n if (this.isOverflow(n, limit)) {\n throw new ClmmpoolsError(\"Multiplication div overflow\", \"MulDivOverflow\" /* MulDivOverflow */);\n }\n return n;\n }\n static checkMulDivCeil(n0, n1, denom, limit) {\n if (denom.eq(ZERO)) {\n throw new ClmmpoolsError(\"Devide by zero\", \"DivideByZero\" /* DivideByZero */);\n }\n const n = n0.mul(n1).add(denom.sub(ONE)).div(denom);\n if (this.isOverflow(n, limit)) {\n throw new ClmmpoolsError(\"Multiplication div overflow\", \"MulDivOverflow\" /* MulDivOverflow */);\n }\n return n;\n }\n static checkMulDivRound(n0, n1, denom, limit) {\n if (denom.eq(ZERO)) {\n throw new ClmmpoolsError(\"Devide by zero\", \"DivideByZero\" /* DivideByZero */);\n }\n const n = n0.mul(n1.add(denom.shrn(1))).div(denom);\n if (this.isOverflow(n, limit)) {\n throw new ClmmpoolsError(\"Multiplication div overflow\", \"MulDivOverflow\" /* MulDivOverflow */);\n }\n return n;\n }\n static checkMulShiftRight(n0, n1, shift, limit) {\n const n = n0.mul(n1).div(new BN(2).pow(new BN(shift)));\n if (this.isOverflow(n, limit)) {\n throw new ClmmpoolsError(\"Multiplication shift right overflow\", \"MulShiftRightOverflow\" /* MulShiftRightOverflow */);\n }\n return n;\n }\n static checkMulShiftRight64RoundUpIf(n0, n1, limit, roundUp) {\n const p = n0.mul(n1);\n const shoudRoundUp = roundUp && p.and(U64_MAX).gt(ZERO);\n const result = shoudRoundUp ? p.shrn(64).add(ONE) : p.shrn(64);\n if (this.isOverflow(result, limit)) {\n throw new ClmmpoolsError(\"Multiplication shift right overflow\", \"MulShiftRightOverflow\" /* MulShiftRightOverflow */);\n }\n return result;\n }\n static checkMulShiftLeft(n0, n1, shift, limit) {\n const n = n0.mul(n1).shln(shift);\n if (this.isOverflow(n, limit)) {\n throw new ClmmpoolsError(\"Multiplication shift left overflow\", \"MulShiftLeftOverflow\" /* MulShiftLeftOverflow */);\n }\n return n;\n }\n static checkDivRoundUpIf(n0, n1, roundUp) {\n if (n1.eq(ZERO)) {\n throw new ClmmpoolsError(\"Devide by zero\", \"DivideByZero\" /* DivideByZero */);\n }\n if (roundUp) {\n return this.divRoundUp(n0, n1);\n }\n return n0.div(n1);\n }\n static isOverflow(n, bit) {\n return n.gte(TWO.pow(new BN(bit)));\n }\n static sign(v) {\n const signBit = v.testn(127) ? 1 : 0;\n return signBit;\n }\n static is_neg(v) {\n return this.sign(v) === 1;\n }\n static abs_u128(v) {\n if (v.gt(ZERO)) {\n return v;\n }\n return this.u128_neg(v.subn(1));\n }\n static u128_neg(v) {\n return v.uxor(new BN(\"ffffffffffffffffffffffffffffffff\", 16));\n }\n static neg(v) {\n if (this.is_neg(v)) {\n return v.abs();\n }\n return this.neg_from(v);\n }\n static abs(v) {\n if (this.sign(v) === 0) {\n return v;\n }\n return this.u128_neg(v.sub(new BN(1)));\n }\n static neg_from(v) {\n if (v.eq(ZERO)) {\n return v;\n }\n return this.u128_neg(v).add(new BN(1)).or(new BN(1).shln(127));\n }\n};\n\n// src/types/clmmpool.ts\nfunction transClmmpoolDataWithoutTicks(pool) {\n const poolData = {\n coinA: pool.coinTypeA,\n // string\n coinB: pool.coinTypeB,\n // string\n currentSqrtPrice: new BN2(pool.current_sqrt_price),\n // BN\n currentTickIndex: pool.current_tick_index,\n // number\n feeGrowthGlobalA: new BN2(pool.fee_growth_global_a),\n // BN\n feeGrowthGlobalB: new BN2(pool.fee_growth_global_b),\n // BN\n feeProtocolCoinA: new BN2(pool.fee_protocol_coin_a),\n // BN\n feeProtocolCoinB: new BN2(pool.fee_protocol_coin_b),\n // BN\n feeRate: new BN2(pool.fee_rate),\n // number\n liquidity: new BN2(pool.liquidity),\n // BN\n tickIndexes: [],\n // number[]\n tickSpacing: Number(pool.tickSpacing),\n // number\n ticks: [],\n // Array<TickData>\n collection_name: \"\"\n };\n return poolData;\n}\nfunction newBits(index) {\n const index_BN = new BN2(index);\n if (index_BN.lt(ZERO)) {\n return {\n bits: index_BN.neg().xor(new BN2(2).pow(new BN2(64)).sub(new BN2(1))).add(new BN2(1)).toString()\n };\n }\n return {\n bits: index_BN.toString()\n };\n}\n\n// src/types/constants.ts\nimport BN3 from \"bn.js\";\nvar MAX_TICK_INDEX = 443636;\nvar MIN_TICK_INDEX = -443636;\nvar MAX_SQRT_PRICE = \"79226673515401279992447579055\";\nvar TICK_ARRAY_SIZE = 64;\nvar MIN_SQRT_PRICE = \"4295048016\";\nvar FEE_RATE_DENOMINATOR = new BN3(1e6);\n\n// src/types/sui.ts\nvar CLOCK_ADDRESS = \"0x0000000000000000000000000000000000000000000000000000000000000006\";\nvar ClmmPartnerModule = \"partner\";\nvar ClmmIntegratePoolModule = \"pool_script\";\nvar ClmmIntegratePoolV2Module = \"pool_script_v2\";\nvar ClmmIntegratePoolV3Module = \"pool_script_v3\";\nvar ClmmIntegrateRouterModule = \"router\";\nvar ClmmIntegrateRouterWithPartnerModule = \"router_with_partner\";\nvar ClmmFetcherModule = \"fetcher_script\";\nvar ClmmExpectSwapModule = \"expect_swap\";\nvar ClmmIntegrateUtilsModule = \"utils\";\nvar CoinInfoAddress = \"0x1::coin::CoinInfo\";\nvar CoinStoreAddress = \"0x1::coin::CoinStore\";\nvar DeepbookCustodianV2Moudle = \"custodian_v2\";\nvar DeepbookClobV2Moudle = \"clob_v2\";\nvar DeepbookEndpointsV2Moudle = \"endpoints_v2\";\nvar getDefaultSuiInputType = (value) => {\n if (typeof value === \"string\" && value.startsWith(\"0x\")) {\n return \"object\";\n }\n if (typeof value === \"number\" || typeof value === \"bigint\") {\n return \"u64\";\n }\n if (typeof value === \"boolean\") {\n return \"bool\";\n }\n throw new ClmmpoolsError(`Unknown type for value: ${value}`, \"InvalidType\" /* InvalidType */);\n};\n\n// src/types/clmm_type.ts\nvar ClmmPositionStatus = /* @__PURE__ */ ((ClmmPositionStatus2) => {\n ClmmPositionStatus2[\"Deleted\"] = \"Deleted\";\n ClmmPositionStatus2[\"Exists\"] = \"Exists\";\n ClmmPositionStatus2[\"NotExists\"] = \"NotExists\";\n return ClmmPositionStatus2;\n})(ClmmPositionStatus || {});\nfunction getPackagerConfigs(packageObj) {\n if (packageObj.config === void 0) {\n throw new ClmmpoolsError(`package: ${packageObj.package_id} not config in sdk SdkOptions`, \"InvalidConfig\" /* InvalidConfig */);\n }\n return packageObj.config;\n}\n\n// src/types/liquidity.ts\nvar SwapDirection = /* @__PURE__ */ ((SwapDirection2) => {\n SwapDirection2[\"A2B\"] = \"a2b\";\n SwapDirection2[\"B2A\"] = \"b2a\";\n return SwapDirection2;\n})(SwapDirection || {});\n\n// src/math/apr.ts\nimport BN5 from \"bn.js\";\nimport Decimal2 from \"decimal.js\";\n\n// src/math/tick.ts\nimport BN4 from \"bn.js\";\nvar BIT_PRECISION = 14;\nvar LOG_B_2_X32 = \"59543866431248\";\nvar LOG_B_P_ERR_MARGIN_LOWER_X64 = \"184467440737095516\";\nvar LOG_B_P_ERR_MARGIN_UPPER_X64 = \"15793534762490258745\";\nvar TICK_BOUND = 443636;\nfunction signedShiftLeft(n0, shiftBy, bitWidth) {\n const twosN0 = n0.toTwos(bitWidth).shln(shiftBy);\n twosN0.imaskn(bitWidth + 1);\n return twosN0.fromTwos(bitWidth);\n}\nfunction signedShiftRight(n0, shiftBy, bitWidth) {\n const twoN0 = n0.toTwos(bitWidth).shrn(shiftBy);\n twoN0.imaskn(bitWidth - shiftBy + 1);\n return twoN0.fromTwos(bitWidth - shiftBy);\n}\nfunction tickIndexToSqrtPricePositive(tick) {\n let ratio;\n if ((tick & 1) !== 0) {\n ratio = new BN4(\"79232123823359799118286999567\");\n } else {\n ratio = new BN4(\"79228162514264337593543950336\");\n }\n if ((tick & 2) !== 0) {\n ratio = signedShiftRight(ratio.mul(new BN4(\"79236085330515764027303304731\")), 96, 256);\n }\n if ((tick & 4) !== 0) {\n ratio = signedShiftRight(ratio.mul(new BN4(\"79244008939048815603706035061\")), 96, 256);\n }\n if ((tick & 8) !== 0) {\n ratio = signedShiftRight(ratio.mul(new BN4(\"79259858533276714757314932305\")), 96, 256);\n }\n if ((tick & 16) !== 0) {\n ratio = signedShiftRight(ratio.mul(new BN4(\"79291567232598584799939703904\")), 96, 256);\n }\n if ((tick & 32) !== 0) {\n ratio = signedShiftRight(ratio.mul(new BN4(\"79355022692464371645785046466\")), 96, 256);\n }\n if ((tick & 64) !== 0) {\n ratio = signedShiftRight(ratio.mul(new BN4(\"79482085999252804386437311141\")), 96, 256);\n }\n if ((tick & 128) !== 0) {\n ratio = signedShiftRight(ratio.mul(new BN4(\"79736823300114093921829183326\")), 96, 256);\n }\n if ((tick & 256) !== 0) {\n ratio = signedShiftRight(ratio.mul(new BN4(\"80248749790819932309965073892\")), 96, 256);\n }\n if ((tick & 512) !== 0) {\n ratio = signedShiftRight(ratio.mul(new BN4(\"81282483887344747381513967011\")), 96, 256);\n }\n if ((tick & 1024) !== 0) {\n ratio = signedShiftRight(ratio.mul(new BN4(\"83390072131320151908154831281\")), 96, 256);\n }\n if ((tick & 2048) !== 0) {\n ratio = signedShiftRight(ratio.mul(new BN4(\"87770609709833776024991924138\")), 96, 256);\n }\n if ((tick & 4096) !== 0) {\n ratio = signedShiftRight(ratio.mul(new BN4(\"97234110755111693312479820773\")), 96, 256);\n }\n if ((tick & 8192) !== 0) {\n ratio = signedShiftRight(ratio.mul(new BN4(\"119332217159966728226237229890\")), 96, 256);\n }\n if ((tick & 16384) !== 0) {\n ratio = signedShiftRight(ratio.mul(new BN4(\"179736315981702064433883588727\")), 96, 256);\n }\n if ((tick & 32768) !== 0) {\n ratio = signedShiftRight(ratio.mul(new BN4(\"407748233172238350107850275304\")), 96, 256);\n }\n if ((tick & 65536) !== 0) {\n ratio = signedShiftRight(ratio.mul(new BN4(\"2098478828474011932436660412517\")), 96, 256);\n }\n if ((tick & 131072) !== 0) {\n ratio = signedShiftRight(ratio.mul(new BN4(\"55581415166113811149459800483533\")), 96, 256);\n }\n if ((tick & 262144) !== 0) {\n ratio = signedShiftRight(ratio.mul(new BN4(\"38992368544603139932233054999993551\")), 96, 256);\n }\n return signedShiftRight(ratio, 32, 256);\n}\nfunction tickIndexToSqrtPriceNegative(tickIndex) {\n const tick = Math.abs(tickIndex);\n let ratio;\n if ((tick & 1) !== 0) {\n ratio = new BN4(\"18445821805675392311\");\n } else {\n ratio = new BN4(\"18446744073709551616\");\n }\n if ((tick & 2) !== 0) {\n ratio = signedShiftRight(ratio.mul(new BN4(\"18444899583751176498\")), 64, 256);\n }\n if ((tick & 4) !== 0) {\n ratio = signedShiftRight(ratio.mul(new BN4(\"18443055278223354162\")), 64, 256);\n }\n if ((tick & 8) !== 0) {\n ratio = signedShiftRight(ratio.mul(new BN4(\"18439367220385604838\")), 64, 256);\n }\n if ((tick & 16) !== 0) {\n ratio = signedShiftRight(ratio.mul(new BN4(\"18431993317065449817\")), 64, 256);\n }\n if ((tick & 32) !== 0) {\n ratio = signedShiftRight(ratio.mul(new BN4(\"18417254355718160513\")), 64, 256);\n }\n if ((tick & 64) !== 0) {\n ratio = signedShiftRight(ratio.mul(new BN4(\"18387811781193591352\")), 64, 256);\n }\n if ((tick & 128) !== 0) {\n ratio = signedShiftRight(ratio.mul(new BN4(\"18329067761203520168\")), 64, 256);\n }\n if ((tick & 256) !== 0) {\n ratio = signedShiftRight(ratio.mul(new BN4(\"18212142134806087854\")), 64, 256);\n }\n if ((tick & 512) !== 0) {\n ratio = signedShiftRight(ratio.mul(new BN4(\"17980523815641551639\")), 64, 256);\n }\n if ((tick & 1024) !== 0) {\n ratio = signedShiftRight(ratio.mul(new BN4(\"17526086738831147013\")), 64, 256);\n }\n if ((tick & 2048) !== 0) {\n ratio = signedShiftRight(ratio.mul(new BN4(\"16651378430235024244\")), 64, 256);\n }\n if ((tick & 4096) !== 0) {\n ratio = signedShiftRight(ratio.mul(new BN4(\"15030750278693429944\")), 64, 256);\n }\n if ((tick & 8192) !== 0) {\n ratio = signedShiftRight(ratio.mul(new BN4(\"12247334978882834399\")), 64, 256);\n }\n if ((tick & 16384) !== 0) {\n ratio = signedShiftRight(ratio.mul(new BN4(\"8131365268884726200\")), 64, 256);\n }\n if ((tick & 32768) !== 0) {\n ratio = signedShiftRight(ratio.mul(new BN4(\"3584323654723342297\")), 64, 256);\n }\n if ((tick & 65536) !== 0) {\n ratio = signedShiftRight(ratio.mul(new BN4(\"696457651847595233\")), 64, 256);\n }\n if ((tick & 131072) !== 0) {\n ratio = signedShiftRight(ratio.mul(new BN4(\"26294789957452057\")), 64, 256);\n }\n if ((tick & 262144) !== 0) {\n ratio = signedShiftRight(ratio.mul(new BN4(\"37481735321082\")), 64, 256);\n }\n return ratio;\n}\nvar TickMath = class {\n static priceToSqrtPriceX64(price, decimalsA, decimalsB) {\n return MathUtil.toX64(price.mul(decimal_default.pow(10, decimalsB - decimalsA)).sqrt());\n }\n static sqrtPriceX64ToPrice(sqrtPriceX64, decimalsA, decimalsB) {\n return MathUtil.fromX64(sqrtPriceX64).pow(2).mul(decimal_default.pow(10, decimalsA - decimalsB));\n }\n static tickIndexToSqrtPriceX64(tickIndex) {\n if (tickIndex > 0) {\n return new BN4(tickIndexToSqrtPricePositive(tickIndex));\n }\n return new BN4(tickIndexToSqrtPriceNegative(tickIndex));\n }\n static sqrtPriceX64ToTickIndex(sqrtPriceX64) {\n if (sqrtPriceX64.gt(new BN4(MAX_SQRT_PRICE)) || sqrtPriceX64.lt(new BN4(MIN_SQRT_PRICE))) {\n throw new ClmmpoolsError(\"Provided sqrtPrice is not within the supported sqrtPrice range.\", \"InvalidSqrtPrice\" /* InvalidSqrtPrice */);\n }\n const msb = sqrtPriceX64.bitLength() - 1;\n const adjustedMsb = new BN4(msb - 64);\n const log2pIntegerX32 = signedShiftLeft(adjustedMsb, 32, 128);\n let bit = new BN4(\"8000000000000000\", \"hex\");\n let precision = 0;\n let log2pFractionX64 = new BN4(0);\n let r = msb >= 64 ? sqrtPriceX64.shrn(msb - 63) : sqrtPriceX64.shln(63 - msb);\n while (bit.gt(new BN4(0)) && precision < BIT_PRECISION) {\n r = r.mul(r);\n const rMoreThanTwo = r.shrn(127);\n r = r.shrn(63 + rMoreThanTwo.toNumber());\n log2pFractionX64 = log2pFractionX64.add(bit.mul(rMoreThanTwo));\n bit = bit.shrn(1);\n precision += 1;\n }\n const log2pFractionX32 = log2pFractionX64.shrn(32);\n const log2pX32 = log2pIntegerX32.add(log2pFractionX32);\n const logbpX64 = log2pX32.mul(new BN4(LOG_B_2_X32));\n const tickLow = signedShiftRight(logbpX64.sub(new BN4(LOG_B_P_ERR_MARGIN_LOWER_X64)), 64, 128).toNumber();\n const tickHigh = signedShiftRight(logbpX64.add(new BN4(LOG_B_P_ERR_MARGIN_UPPER_X64)), 64, 128).toNumber();\n if (tickLow === tickHigh) {\n return tickLow;\n }\n const derivedTickHighSqrtPriceX64 = TickMath.tickIndexToSqrtPriceX64(tickHigh);\n if (derivedTickHighSqrtPriceX64.lte(sqrtPriceX64)) {\n return tickHigh;\n }\n return tickLow;\n }\n static tickIndexToPrice(tickIndex, decimalsA, decimalsB) {\n return TickMath.sqrtPriceX64ToPrice(TickMath.tickIndexToSqrtPriceX64(tickIndex), decimalsA, decimalsB);\n }\n static priceToTickIndex(price, decimalsA, decimalsB) {\n return TickMath.sqrtPriceX64ToTickIndex(TickMath.priceToSqrtPriceX64(price, decimalsA, decimalsB));\n }\n static priceToInitializableTickIndex(price, decimalsA, decimalsB, tickSpacing) {\n return TickMath.getInitializableTickIndex(TickMath.priceToTickIndex(price, decimalsA, decimalsB), tickSpacing);\n }\n static getInitializableTickIndex(tickIndex, tickSpacing) {\n return tickIndex - tickIndex % tickSpacing;\n }\n /**\n *\n * @param tickIndex\n * @param tickSpacing\n * @returns\n */\n static getNextInitializableTickIndex(tickIndex, tickSpacing) {\n return TickMath.getInitializableTickIndex(tickIndex, tickSpacing) + tickSpacing;\n }\n static getPrevInitializableTickIndex(tickIndex, tickSpacing) {\n return TickMath.getInitializableTickIndex(tickIndex, tickSpacing) - tickSpacing;\n }\n};\nfunction getTickDataFromUrlData(ticks) {\n const tickdatas = [];\n for (const tick of ticks) {\n const td = {\n objectId: tick.objectId,\n index: Number(asIntN(BigInt(tick.index)).toString()),\n sqrtPrice: tick.sqrtPrice,\n liquidityNet: new BN4(BigInt.asIntN(128, BigInt(BigInt(tick.liquidityNet.toString()))).toString()),\n liquidityGross: tick.liquidityGross,\n feeGrowthOutsideA: tick.feeGrowthOutsideA,\n feeGrowthOutsideB: tick.feeGrowthOutsideB,\n rewardersGrowthOutside: [\n new BN4(tick.rewardersGrowthOutside[0]),\n new BN4(tick.rewardersGrowthOutside[1]),\n new BN4(tick.rewardersGrowthOutside[2])\n ]\n };\n tickdatas.push(td);\n }\n return tickdatas;\n}\nfunction tickScore(tickIndex) {\n return d(tickIndex).add(d(TICK_BOUND));\n}\n\n// src/math/apr.ts\nvar D365 = new BN5(365);\nvar H24 = new BN5(24);\nvar S3600 = new BN5(3600);\nvar B05 = new BN5(0.5);\nfunction estPoolAPR(preBlockReward, rewardPrice, totalTradingFee, totalLiquidityValue) {\n const annualRate = D365.mul(H24).mul(S3600).mul(B05);\n const APR = annualRate.mul(preBlockReward.mul(rewardPrice).add(totalTradingFee).div(totalLiquidityValue));\n return APR;\n}\nfunction calculatePoolValidTVL(amountA, amountB, decimalsA, decimalsB, coinAPrice, coinBPrice) {\n const poolValidAmountA = new Decimal2(amountA.toString()).div(new Decimal2(10 ** decimalsA));\n const poolValidAmountB = new Decimal2(amountB.toString()).div(new Decimal2(10 ** decimalsB));\n const TVL = poolValidAmountA.mul(coinAPrice).add(poolValidAmountB.mul(coinBPrice));\n return TVL;\n}\nfunction estPositionAPRWithDeltaMethod(currentTickIndex, lowerTickIndex, upperTickIndex, currentSqrtPriceX64, poolLiquidity, decimalsA, decimalsB, decimalsRewarder0, decimalsRewarder1, decimalsRewarder2, feeRate, amountAStr, amountBStr, poolAmountA, poolAmountB, swapVolumeStr, poolRewarders0Str, poolRewarders1Str, poolRewarders2Str, coinAPriceStr, coinBPriceStr, rewarder0PriceStr, rewarder1PriceStr, rewarder2PriceStr) {\n const amountA = new Decimal2(amountAStr);\n const amountB = new Decimal2(amountBStr);\n const swapVolume = new Decimal2(swapVolumeStr);\n const poolRewarders0 = new Decimal2(poolRewarders0Str);\n const poolRewarders1 = new Decimal2(poolRewarders1Str);\n const poolRewarders2 = new Decimal2(poolRewarders2Str);\n const coinAPrice = new Decimal2(coinAPriceStr);\n const coinBPrice = new Decimal2(coinBPriceStr);\n const rewarder0Price = new Decimal2(rewarder0PriceStr);\n const rewarder1Price = new Decimal2(rewarder1PriceStr);\n const rewarder2Price = new Decimal2(rewarder2PriceStr);\n const lowerSqrtPriceX64 = TickMath.tickIndexToSqrtPriceX64(lowerTickIndex);\n const upperSqrtPriceX64 = TickMath.tickIndexToSqrtPriceX64(upperTickIndex);\n const lowerSqrtPriceD = MathUtil.toX64_Decimal(MathUtil.fromX64(lowerSqrtPriceX64)).round();\n const upperSqrtPriceD = MathUtil.toX64_Decimal(MathUtil.fromX64(upperSqrtPriceX64)).round();\n const currentSqrtPriceD = MathUtil.toX64_Decimal(MathUtil.fromX64(currentSqrtPriceX64)).round();\n let deltaLiquidity;\n const liquidityAmount0 = amountA.mul(new Decimal2(10 ** decimalsA)).mul(upperSqrtPriceD.mul(lowerSqrtPriceD)).div(upperSqrtPriceD.sub(lowerSqrtPriceD)).round();\n const liquidityAmount1 = amountB.mul(new Decimal2(10 ** decimalsB)).div(upperSqrtPriceD.sub(lowerSqrtPriceD)).round();\n if (currentTickIndex < lowerTickIndex) {\n deltaLiquidity = liquidityAmount0;\n } else if (currentTickIndex > upperTickIndex) {\n deltaLiquidity = liquidityAmount1;\n } else {\n deltaLiquidity = Decimal2.min(liquidityAmount0, liquidityAmount1);\n }\n const deltaY = deltaLiquidity.mul(currentSqrtPriceD.sub(lowerSqrtPriceD));\n const deltaX = deltaLiquidity.mul(upperSqrtPriceD.sub(currentSqrtPriceD)).div(currentSqrtPriceD.mul(upperSqrtPriceD));\n const posValidTVL = deltaX.div(new Decimal2(10 ** decimalsA)).mul(coinAPrice).add(deltaY.div(new Decimal2(10 ** decimalsB).mul(coinBPrice)));\n const poolValidTVL = calculatePoolValidTVL(poolAmountA, poolAmountB, decimalsA, decimalsB, coinAPrice, coinBPrice);\n const posValidRate = posValidTVL.div(poolValidTVL);\n const feeAPR = deltaLiquidity.eq(new Decimal2(0)) ? new Decimal2(0) : new Decimal2(feeRate / 1e4).mul(swapVolume).mul(new Decimal2(deltaLiquidity.toString()).div(new Decimal2(poolLiquidity.toString()).add(new Decimal2(deltaLiquidity.toString())))).div(posValidTVL);\n const aprCoe = posValidRate.eq(new Decimal2(0)) ? new Decimal2(0) : posValidRate.mul(new Decimal2(36500 / 7)).div(posValidTVL);\n const posRewarder0APR = poolRewarders0.div(new Decimal2(10 ** decimalsRewarder0)).mul(rewarder0Price).mul(aprCoe);\n const posRewarder1APR = poolRewarders1.div(new Decimal2(10 ** decimalsRewarder1)).mul(rewarder1Price).mul(aprCoe);\n const posRewarder2APR = poolRewarders2.div(new Decimal2(10 ** decimalsRewarder2)).mul(rewarder2Price).mul(aprCoe);\n return {\n feeAPR,\n posRewarder0APR,\n posRewarder1APR,\n posRewarder2APR\n };\n}\nfunction estPositionAPRWithMultiMethod(lowerUserPrice, upperUserPrice, lowerHistPrice, upperHistPrice) {\n const retroLower = Math.max(lowerUserPrice, lowerHistPrice);\n const retroUpper = Math.min(upperUserPrice, upperHistPrice);\n const retroRange = retroUpper - retroLower;\n const userRange = upperUserPrice - lowerUserPrice;\n const histRange = upperHistPrice - lowerHistPrice;\n const userRangeD = new Decimal2(userRange.toString());\n const histRangeD = new Decimal2(histRange.toString());\n const retroRangeD = new Decimal2(retroRange.toString());\n let m = new Decimal2(\"0\");\n if (retroRange < 0) {\n m = new Decimal2(\"0\");\n } else if (userRange === retroRange) {\n m = histRangeD.div(retroRangeD);\n } else if (histRange === retroRange) {\n m = retroRangeD.div(userRangeD);\n } else {\n m = retroRangeD.mul(retroRangeD).div(histRangeD).div(userRangeD);\n }\n return m;\n}\n\n// src/math/clmm.ts\nimport BN7 from \"bn.js\";\n\n// src/math/swap.ts\nimport BN6 from \"bn.js\";\nvar SwapUtils = class {\n /**\n * Get the default sqrt price limit for a swap.\n *\n * @param a2b - true if the swap is A to B, false if the swap is B to A.\n * @returns The default sqrt price limit for the swap.\n */\n static getDefaultSqrtPriceLimit(a2b) {\n return new BN6(a2b ? MIN_SQRT_PRICE : MAX_SQRT_PRICE);\n }\n /**\n * Get the default values for the otherAmountThreshold in a swap.\n *\n * @param amountSpecifiedIsInput - The direction of a swap\n * @returns The default values for the otherAmountThreshold parameter in a swap.\n */\n static getDefaultOtherAmountThreshold(amountSpecifiedIsInput) {\n return amountSpecifiedIsInput ? ZERO : U64_MAX;\n }\n};\nfunction getLowerSqrtPriceFromCoinA(amount, liquidity, sqrtPriceX64) {\n const numerator = liquidity.mul(sqrtPriceX64).shln(64);\n const denominator = liquidity.shln(64).add(amount.mul(sqrtPriceX64));\n return MathUtil.divRoundUp(numerator, denominator);\n}\nfunction getUpperSqrtPriceFromCoinA(amount, liquidity, sqrtPriceX64) {\n const numerator = liquidity.mul(sqrtPriceX64).shln(64);\n const denominator = liquidity.shln(64).sub(amount.mul(sqrtPriceX64));\n return MathUtil.divRoundUp(numerator, denominator);\n}\nfunction getLowerSqrtPriceFromCoinB(amount, liquidity, sqrtPriceX64) {\n return sqrtPriceX64.sub(MathUtil.divRoundUp(amount.shln(64), liquidity));\n}\nfunction getUpperSqrtPriceFromCoinB(amount, liquidity, sqrtPriceX64) {\n return sqrtPriceX64.add(amount.shln(64).div(liquidity));\n}\n\n// src/math/clmm.ts\nfunction toCoinAmount(a, b) {\n return {\n coinA: new BN7(a.toString()),\n coinB: new BN7(b.toString())\n };\n}\nfunction getDeltaA(sqrtPrice0, sqrtPrice1, liquidity, roundUp) {\n const sqrtPriceDiff = sqrtPrice0.gt(sqrtPrice1) ? sqrtPrice0.sub(sqrtPrice1) : sqrtPrice1.sub(sqrtPrice0);\n const numberator = liquidity.mul(sqrtPriceDiff).shln(64);\n const denomminator = sqrtPrice0.mul(sqrtPrice1);\n const quotient = numberator.div(denomminator);\n const remainder = numberator.mod(denomminator);\n const result = roundUp && !remainder.eq(ZERO) ? quotient.add(new BN7(1)) : quotient;\n return result;\n}\nfunction getDeltaB(sqrtPrice0, sqrtPrice1, liquidity, roundUp) {\n const sqrtPriceDiff = sqrtPrice0.gt(sqrtPrice1) ? sqrtPrice0.sub(sqrtPrice1) : sqrtPrice1.sub(sqrtPrice0);\n if (liquidity.eq(ZERO) || sqrtPriceDiff.eq(ZERO)) {\n return ZERO;\n }\n const p = liquidity.mul(sqrtPriceDiff);\n const shoudRoundUp = roundUp && p.and(U64_MAX).gt(ZERO);\n const result = shoudRoundUp ? p.shrn(64).add(ONE) : p.shrn(64);\n if (MathUtil.isOverflow(result, 64)) {\n throw new ClmmpoolsError(\"Result large than u64 max\", \"IntegerDowncastOverflow\" /* IntegerDowncastOverflow */);\n }\n return result;\n}\nfunction getNextSqrtPriceAUp(sqrtPrice, liquidity, amount, byAmountIn) {\n if (amount.eq(ZERO)) {\n return sqrtPrice;\n }\n const numberator = MathUtil.checkMulShiftLeft(sqrtPrice, liquidity, 64, 256);\n const liquidityShl64 = liquidity.shln(64);\n const product = MathUtil.checkMul(sqrtPrice, amount, 256);\n if (!byAmountIn && liquidityShl64.lte(product)) {\n throw new ClmmpoolsError(\"getNextSqrtPriceAUp - Unable to divide liquidityShl64 by product\", \"DivideByZero\" /* DivideByZero */);\n }\n const nextSqrtPrice = byAmountIn ? MathUtil.checkDivRoundUpIf(numberator, liquidityShl64.add(product), true) : MathUtil.checkDivRoundUpIf(numberator, liquidityShl64.sub(product), true);\n if (nextSqrtPrice.lt(new BN7(MIN_SQRT_PRICE))) {\n throw new ClmmpoolsError(\"getNextSqrtPriceAUp - Next sqrt price less than min sqrt price\", \"CoinAmountMinSubceeded \" /* CoinAmountMinSubceeded */);\n }\n if (nextSqrtPrice.gt(new BN7(MAX_SQRT_PRICE))) {\n throw new ClmmpoolsError(\"getNextSqrtPriceAUp - Next sqrt price greater than max sqrt price\", \"CoinAmountMaxExceeded\" /* CoinAmountMaxExceeded */);\n }\n return nextSqrtPrice;\n}\nfunction getNextSqrtPriceBDown(sqrtPrice, liquidity, amount, byAmountIn) {\n const deltaSqrtPrice = MathUtil.checkDivRoundUpIf(amount.shln(64), liquidity, !byAmountIn);\n const nextSqrtPrice = byAmountIn ? sqrtPrice.add(deltaSqrtPrice) : sqrtPrice.sub(deltaSqrtPrice);\n if (nextSqrtPrice.lt(new BN7(MIN_SQRT_PRICE)) || nextSqrtPrice.gt(new BN7(MAX_SQRT_PRICE))) {\n throw new ClmmpoolsError(\"getNextSqrtPriceAUp - Next sqrt price out of bounds\", \"SqrtPriceOutOfBounds\" /* SqrtPriceOutOfBounds */);\n }\n return nextSqrtPrice;\n}\nfunction getNextSqrtPriceFromInput(sqrtPrice, liquidity, amount, aToB) {\n return aToB ? getNextSqrtPriceAUp(sqrtPrice, liquidity, amount, true) : getNextSqrtPriceBDown(sqrtPrice, liquidity, amount, true);\n}\nfunction getNextSqrtPriceFromOutput(sqrtPrice, liquidity, amount, a2b) {\n return a2b ? getNextSqrtPriceBDown(sqrtPrice, liquidity, amount, false) : getNextSqrtPriceAUp(sqrtPrice, liquidity, amount, false);\n}\nfunction getDeltaUpFromInput(currentSqrtPrice, targetSqrtPrice, liquidity, a2b) {\n const sqrtPriceDiff = currentSqrtPrice.gt(targetSqrtPrice) ? currentSqrtPrice.sub(targetSqrtPrice) : targetSqrtPrice.sub(currentSqrtPrice);\n if (liquidity.lte(ZERO) || sqrtPriceDiff.eq(ZERO)) {\n return ZERO;\n }\n let result;\n if (a2b) {\n const numberator = new BN7(liquidity).mul(new BN7(sqrtPriceDiff)).shln(64);\n const denomminator = targetSqrtPrice.mul(currentSqrtPrice);\n const quotient = numberator.div(denomminator);\n const remainder = numberator.mod(denomminator);\n result = !remainder.eq(ZERO) ? quotient.add(ONE) : quotient;\n } else {\n const product = new BN7(liquidity).mul(new BN7(sqrtPriceDiff));\n const shoudRoundUp = product.and(U64_MAX).gt(ZERO);\n result = shoudRoundUp ? product.shrn(64).add(ONE) : product.shrn(64);\n }\n return result;\n}\nfunction getDeltaDownFromOutput(currentSqrtPrice, targetSqrtPrice, liquidity, a2b) {\n const sqrtPriceDiff = currentSqrtPrice.gt(targetSqrtPrice) ? currentSqrtPrice.sub(targetSqrtPrice) : targetSqrtPrice.sub(currentSqrtPrice);\n if (liquidity.lte(ZERO) || sqrtPriceDiff.eq(ZERO)) {\n return ZERO;\n }\n let result;\n if (a2b) {\n const product = liquidity.mul(sqrtPriceDiff);\n result = product.shrn(64);\n } else {\n const numberator = liquidity.mul(sqrtPriceDiff).shln(64);\n const denomminator = targetSqrtPrice.mul(currentSqrtPrice);\n result = numberator.div(denomminator);\n }\n return result;\n}\nfunction computeSwapStep(currentSqrtPrice, targetSqrtPrice, liquidity, amount, feeRate, byAmountIn) {\n if (liquidity === ZERO) {\n return {\n amountIn: ZERO,\n amountOut: ZERO,\n nextSqrtPrice: targetSqrtPrice,\n feeAmount: ZERO\n };\n }\n const a2b = currentSqrtPrice.gte(targetSqrtPrice);\n let amountIn;\n let amountOut;\n let nextSqrtPrice;\n let feeAmount;\n if (byAmountIn) {\n const amountRemain = MathUtil.checkMulDivFloor(\n amount,\n MathUtil.checkUnsignedSub(FEE_RATE_DENOMINATOR, feeRate),\n FEE_RATE_DENOMINATOR,\n 64\n );\n const maxAmountIn = getDeltaUpFromInput(currentSqrtPrice, targetSqrtPrice, liquidity, a2b);\n if (maxAmountIn.gt(amountRemain)) {\n amountIn = amountRemain;\n feeAmount = MathUtil.checkUnsignedSub(amount, amountRemain);\n nextSqrtPrice = getNextSqrtPriceFromInput(currentSqrtPrice, liquidity, amountRemain, a2b);\n } else {\n amountIn = maxAmountIn;\n feeAmount = MathUtil.checkMulDivCeil(amountIn, feeRate, FEE_RATE_DENOMINATOR.sub(feeRate), 64);\n nextSqrtPrice = targetSqrtPrice;\n }\n amountOut = getDeltaDownFromOutput(currentSqrtPrice, nextSqrtPrice, liquidity, a2b);\n } else {\n const maxAmountOut = getDeltaDownFromOutput(currentSqrtPrice, targetSqrtPrice, liquidity, a2b);\n if (maxAmountOut.gt(amount)) {\n amountOut = amount;\n nextSqrtPrice = getNextSqrtPriceFromOutput(currentSqrtPrice, liquidity, amount, a2b);\n } else {\n amountOut = maxAmountOut;\n nextSqrtPrice = targetSqrtPrice;\n }\n amountIn = getDeltaUpFromInput(currentSqrtPrice, nextSqrtPrice, liquidity, a2b);\n feeAmount = MathUtil.checkMulDivCeil(amountIn, feeRate, FEE_RATE_DENOMINATOR.sub(feeRate), 64);\n }\n return {\n amountIn,\n amountOut,\n nextSqrtPrice,\n feeAmount\n };\n}\nfunction computeSwap(aToB, byAmountIn, amount, poolData, swapTicks) {\n let remainerAmount = amount;\n let currentLiquidity = poolData.liquidity;\n let { currentSqrtPrice } = poolData;\n const swapResult = {\n amountIn: ZERO,\n amountOut: ZERO,\n feeAmount: ZERO,\n refAmount: ZERO,\n nextSqrtPrice: ZERO,\n crossTickNum: 0\n };\n let targetSqrtPrice;\n let signedLiquidityChange;\n const sqrtPriceLimit = SwapUtils.getDefaultSqrtPriceLimit(aToB);\n for (const tick of swapTicks) {\n if (aToB && poolData.currentTickIndex < tick.index) {\n continue;\n }\n if (!aToB && poolData.currentTickIndex >= tick.index) {\n continue;\n }\n if (tick === null) {\n continue;\n }\n if (aToB && sqrtPriceLimit.gt(tick.sqrtPrice) || !aToB && sqrtPriceLimit.lt(tick.sqrtPrice)) {\n targetSqrtPrice = sqrtPriceLimit;\n } else {\n targetSqrtPrice = tick.sqrtPrice;\n }\n const stepResult = computeSwapStep(currentSqrtPrice, targetSqrtPrice, currentLiquidity, remainerAmount, poolData.feeRate, byAmountIn);\n if (!stepResult.amountIn.eq(ZERO)) {\n remainerAmount = byAmountIn ? remainerAmount.sub(stepResult.amountIn.add(stepResult.feeAmount)) : remainerAmount.sub(stepResult.amountOut);\n }\n swapResult.amountIn = swapResult.amountIn.add(stepResult.amountIn);\n swapResult.amountOut = swapResult.amountOut.add(stepResult.amountOut);\n swapResult.feeAmount = swapResult.feeAmount.add(stepResult.feeAmount);\n if (stepResult.nextSqrtPrice.eq(tick.sqrtPrice)) {\n signedLiquidityChange = tick.liquidityNet.mul(new BN7(-1));\n if (aToB) {\n if (MathUtil.is_neg(signedLiquidityChange)) {\n currentLiquidity = currentLiquidity.add(new BN7(asUintN(BigInt(signedLiquidityChange.toString()), 128)));\n } else {\n currentLiquidity = currentLiquidity.add(signedLiquidityChange);\n }\n } else if (MathUtil.is_neg(signedLiquidityChange)) {\n currentLiquidity = currentLiquidity.sub(new BN7(asUintN(BigInt(signedLiquidityChange.toString()), 128)));\n } else {\n currentLiquidity = currentLiquidity.sub(signedLiquidityChange);\n }\n currentSqrtPrice = tick.sqrtPrice;\n } else {\n currentSqrtPrice = stepResult.nextSqrtPrice;\n }\n swapResult.crossTickNum += 1;\n if (remainerAmount.eq(ZERO)) {\n break;\n }\n }\n swapResult.amountIn = swapResult.amountIn.add(swapResult.feeAmount);\n swapResult.nextSqrtPrice = currentSqrtPrice;\n return swapResult;\n}\nfunction estimateLiquidityForCoinA(sqrtPriceX, sqrtPriceY, coinAmount) {\n const lowerSqrtPriceX64 = BN7.min(sqrtPriceX, sqrtPriceY);\n const upperSqrtPriceX64 = BN7.max(sqrtPriceX, sqrtPriceY);\n const num = MathUtil.fromX64_BN(coinAmount.mul(upperSqrtPriceX64).mul(lowerSqrtPriceX64));\n const dem = upperSqrtPriceX64.sub(lowerSqrtPriceX64);\n return num.div(dem);\n}\nfunction estimateLiquidityForCoinB(sqrtPriceX, sqrtPriceY, coinAmount) {\n const lowerSqrtPriceX64 = BN7.min(sqrtPriceX, sqrtPriceY);\n const upperSqrtPriceX64 = BN7.max(sqrtPriceX, sqrtPriceY);\n const delta = upperSqrtPriceX64.sub(lowerSqrtPriceX64);\n return coinAmount.shln(64).div(delta);\n}\nvar ClmmPoolUtil = class {\n /**\n * Update fee rate.\n * @param clmm - clmmpool data\n * @param feeAmount - fee Amount\n * @param refRate - ref rate\n * @param protocolFeeRate - protocol fee rate\n * @param iscoinA - is token A\n * @returns percentage\n */\n static updateFeeRate(clmm, feeAmount, refRate, protocolFeeRate, iscoinA) {\n const protocolFee = MathUtil.checkMulDivCeil(feeAmount, new BN7(protocolFeeRate), FEE_RATE_DENOMINATOR, 64);\n const refFee = refRate === 0 ? ZERO : MathUtil.checkMulDivFloor(feeAmount, new BN7(refRate), FEE_RATE_DENOMINATOR, 64);\n const poolFee = feeAmount.mul(protocolFee).mul(refFee);\n if (iscoinA) {\n clmm.feeProtocolCoinA = clmm.feeProtocolCoinA.add(protocolFee);\n } else {\n clmm.feeProtocolCoinB = clmm.feeProtocolCoinB.add(protocolFee);\n }\n if (poolFee.eq(ZERO) || clmm.liquidity.eq(ZERO)) {\n return { refFee, clmm };\n }\n const growthFee = poolFee.shln(64).div(clmm.liquidity);\n if (iscoinA) {\n clmm.feeGrowthGlobalA = clmm.feeGrowthGlobalA.add(growthFee);\n } else {\n clmm.feeGrowthGlobalB = clmm.feeGrowthGlobalB.add(growthFee);\n }\n return { refFee, clmm };\n }\n /**\n * Get token amount fron liquidity.\n * @param liquidity - liquidity\n * @param curSqrtPrice - Pool current sqrt price\n * @param lowerSqrtPrice - position lower sqrt price\n * @param upperSqrtPrice - position upper sqrt price\n * @param roundUp - is round up\n * @returns\n */\n static getCoinAmountFromLiquidity(liquidity, curSqrtPrice, lowerSqrtPrice, upperSqrtPrice, roundUp) {\n const liq = new decimal_default(liquidity.toString());\n const curSqrtPriceStr = new decimal_default(curSqrtPrice.toString());\n const lowerPriceStr = new decimal_default(lowerSqrtPrice.toString());\n const upperPriceStr = new decimal_default(upperSqrtPrice.toString());\n let coinA;\n let coinB;\n if (curSqrtPrice.lt(lowerSqrtPrice)) {\n coinA = MathUtil.toX64_Decimal(liq).mul(upperPriceStr.sub(lowerPriceStr)).div(lowerPriceStr.mul(upperPriceStr));\n coinB = new decimal_default(0);\n } else if (curSqrtPrice.lt(upperSqrtPrice)) {\n coinA = MathUtil.toX64_Decimal(liq).mul(upperPriceStr.sub(curSqrtPriceStr)).div(curSqrtPriceStr.mul(upperPriceStr));\n coinB = MathUtil.fromX64_Decimal(liq.mul(curSqrtPriceStr.sub(lowerPriceStr)));\n } else {\n coinA = new decimal_default(0);\n coinB = MathUtil.fromX64_Decimal(liq.mul(upperPriceStr.sub(lowerPriceStr)));\n }\n if (roundUp) {\n return {\n coinA: new BN7(coinA.ceil().toString()),\n coinB: new BN7(coinB.ceil().toString())\n };\n }\n return {\n coinA: new BN7(coinA.floor().toString()),\n coinB: new BN7(coinB.floor().toString())\n };\n }\n /**\n * Estimate liquidity and token amount from one amounts\n * @param lowerTick - lower tick\n * @param upperTick - upper tick\n * @param coinAmount - token amount\n * @param iscoinA - is token A\n * @param roundUp - is round up\n * @param isIncrease - is increase\n * @param slippage - slippage percentage\n * @param curSqrtPrice - current sqrt price.\n * @return IncreaseLiquidityInput\n */\n static estLiquidityAndcoinAmountFromOneAmounts(lowerTick, upperTick, coinAmount, iscoinA, roundUp, slippage, curSqrtPrice) {\n const currentTick = TickMath.sqrtPriceX64ToTickIndex(curSqrtPrice);\n const lowerSqrtPrice = TickMath.tickIndexToSqrtPriceX64(lowerTick);\n const upperSqrtPrice = TickMath.tickIndexToSqrtPriceX64(upperTick);\n let liquidity;\n if (currentTick < lowerTick) {\n if (!iscoinA) {\n throw new ClmmpoolsError(\"lower tick cannot calculate liquidity by coinB\", \"NotSupportedThisCoin\" /* NotSupportedThisCoin */);\n }\n liquidity = estimateLiquidityForCoinA(lowerSqrtPrice, upperSqrtPrice, coinAmount);\n } else if (currentTick > upperTick) {\n if (iscoinA) {\n throw new ClmmpoolsError(\"upper tick cannot calculate liquidity by coinA\", \"NotSupportedThisCoin\" /* NotSupportedThisCoin */);\n }\n liquidity = estimateLiquidityForCoinB(upperSqrtPrice, lowerSqrtPrice, coinAmount);\n } else if (iscoinA) {\n liquidity = estimateLiquidityForCoinA(curSqrtPrice, upperSqrtPrice, coinAmount);\n } else {\n liquidity = estimateLiquidityForCoinB(curSqrtPrice, lowerSqrtPrice, coinAmount);\n }\n const coinAmounts = ClmmPoolUtil.getCoinAmountFromLiquidity(liquidity, curSqrtPrice, lowerSqrtPrice, upperSqrtPrice, roundUp);\n const tokenLimitA = roundUp ? d(coinAmounts.coinA.toString()).mul(1 + slippage).toString() : d(coinAmounts.coinA.toString()).mul(1 - slippage).toString();\n const tokenLimitB = roundUp ? d(coinAmounts.coinB.toString()).mul(1 + slippage).toString() : d(coinAmounts.coinB.toString()).mul(1 - slippage).toString();\n return {\n coinAmountA: coinAmounts.coinA,\n coinAmountB: coinAmounts.coinB,\n tokenMaxA: roundUp ? new BN7(decimal_default.ceil(tokenLimitA).toString()) : new BN7(decimal_default.floor(tokenLimitA).toString()),\n tokenMaxB: roundUp ? new BN7(decimal_default.ceil(tokenLimitB).toString()) : new BN7(decimal_default.floor(tokenLimitB).toString()),\n liquidityAmount: liquidity,\n fix_amount_a: iscoinA\n };\n }\n /**\n * Estimate liquidity from token amounts\n * @param curSqrtPrice - current sqrt price.\n * @param lowerTick - lower tick\n * @param upperTick - upper tick\n * @param tokenAmount - token amount\n * @return\n */\n static estimateLiquidityFromcoinAmounts(curSqrtPrice, lowerTick, upperTick, tokenAmount) {\n if (lowerTick > upperTick) {\n throw new ClmmpoolsError(\"lower tick cannot be greater than lower tick\", \"InvalidTwoTickIndex\" /* InvalidTwoTickIndex */);\n }\n const currTick = TickMath.sqrtPriceX64ToTickIndex(curSqrtPrice);\n const lowerSqrtPrice = TickMath.tickIndexToSqrtPriceX64(lowerTick);\n const upperSqrtPrice = TickMath.tickIndexToSqrtPriceX64(upperTick);\n if (currTick < lowerTick) {\n return estimateLiquidityForCoinA(lowerSqrtPrice, upperSqrtPrice, tokenAmount.coinA);\n }\n if (currTick >= upperTick) {\n return estimateLiquidityForCoinB(upperSqrtPrice, lowerSqrtPrice, tokenAmount.coinB);\n }\n const estimateLiquidityAmountA = estimateLiquidityForCoinA(curSqrtPrice, upperSqrtPrice, tokenAmount.coinA);\n const estimateLiquidityAmountB = estimateLiquidityForCoinB(curSqrtPrice, lowerSqrtPrice, tokenAmount.coinB);\n return BN7.min(estimateLiquidityAmountA, estimateLiquidityAmountB);\n }\n /**\n * Estimate coin amounts from total amount\n * @param lowerTick\n * @param upperTick\n * @param decimalsA\n * @param decimalsB\n * @param curSqrtPrice\n * @param totalAmount\n * @param tokenPriceA\n * @param tokenPriceB\n * @returns\n */\n static estCoinAmountsFromTotalAmount(lowerTick, upperTick, curSqrtPrice, totalAmount, tokenPriceA, tokenPriceB) {\n const { ratioA, ratioB } = ClmmPoolUtil.calculateDepositRatioFixTokenA(lowerTick, upperTick, curSqrtPrice);\n const amountA = d(totalAmount).mul(ratioA).div(tokenPriceA);\n const amountB = d(totalAmount).mul(ratioB).div(tokenPriceB);\n return { amountA, amountB };\n }\n static calculateDepositRatioFixTokenA(lowerTick, upperTick, curSqrtPrice) {\n const coinAmountA = new BN7(1e8);\n const { coinAmountB } = ClmmPoolUtil.estLiquidityAndcoinAmountFromOneAmounts(\n lowerTick,\n upperTick,\n coinAmountA,\n true,\n true,\n 0,\n curSqrtPrice\n );\n const currPrice = TickMath.sqrtPriceX64ToPrice(curSqrtPrice, 0, 0);\n const transformAmountB = d(coinAmountA.toString()).mul(currPrice);\n const totalAmount = transformAmountB.add(coinAmountB.toString());\n const ratioA = transformAmountB.div(totalAmount);\n const ratioB = d(coinAmountB.toString()).div(totalAmount);\n return { ratioA, ratioB };\n }\n};\n\n// src/utils/contracts.ts\nimport { normalizeSuiObjectId } from \"@mysten/sui/utils\";\n\n// src/utils/hex.ts\nvar HEX_REGEXP = /^[-+]?[0-9A-Fa-f]+\\.?[0-9A-Fa-f]*?$/;\nfunction addHexPrefix(hex) {\n return !hex.startsWith(\"0x\") ? `0x${hex}` : hex;\n}\nfunction removeHexPrefix(hex) {\n return hex.startsWith(\"0x\") ? `${hex.slice(2)}` : hex;\n}\nfunction shortString(str, start = 4, end = 4) {\n const slen = Math.max(start, 1);\n const elen = Math.max(end, 1);\n return `${str.slice(0, slen + 2)} ... ${str.slice(-elen)}`;\n}\nfunction shortAddress(address, start = 4, end = 4) {\n return shortString(addHexPrefix(address), start, end);\n}\nfunction checkAddress(address, options = { leadingZero: true }) {\n if (typeof address !== \"string\") {\n return false;\n }\n let str = address;\n if (options.leadingZero) {\n if (!address.startsWith(\"0x\")) {\n return false;\n }\n str = str.substring(2);\n }\n return HEX_REGEXP.test(str);\n}\nfunction toBuffer(v) {\n if (!Buffer.isBuffer(v)) {\n if (Array.isArray(v)) {\n v = Buffer.from(v);\n } else if (typeof v === \"string\") {\n if (exports.isHexString(v)) {\n v = Buffer.from(exports.padToEven(exports.stripHexPrefix(v)), \"hex\");\n } else {\n v = Buffer.from(v);\n }\n } else if (typeof v === \"number\") {\n v = exports.intToBuffer(v);\n } else if (v === null || v === void 0) {\n v = Buffer.allocUnsafe(0);\n } else if (v.toArray) {\n v = Buffer.from(v.toArray());\n } else {\n throw new ClmmpoolsError(`Invalid type`, \"InvalidType\" /* InvalidType */);\n }\n }\n return v;\n}\nfunction bufferToHex(buffer) {\n return addHexPrefix(toBuffer(buffer).toString(\"hex\"));\n}\nfunction hexToNumber(binaryData) {\n const buffer = new ArrayBuffer(4);\n const view = new DataView(buffer);\n for (let i = 0; i < binaryData.length; i++) {\n view.setUint8(i, binaryData.charCodeAt(i));\n }\n const number = view.getUint32(0, true);\n return number;\n}\nfunction utf8to16(str) {\n let out;\n let i;\n let c;\n let char2;\n let char3;\n out = \"\";\n const len = str.length;\n i = 0;\n while (i < len) {\n c = str.charCodeAt(i++);\n switch (c >> 4) {\n case 0:\n case 1:\n case 2:\n case 3:\n case 4:\n case 5:\n case 6:\n case 7:\n out += str.charAt(i - 1);\n break;\n case 12:\n case 13:\n char2 = str.charCodeAt(i++);\n out += String.fromCharCode((c & 31) << 6 | char2 & 63);\n break;\n case 14:\n char2 = str.charCodeAt(i++);\n char3 = str.charCodeAt(i++);\n out += String.fromCharCode((c & 15) << 12 | (char2 & 63) << 6 | (char3 & 63) << 0);\n break;\n }\n }\n return out;\n}\nfunction hexToString(str) {\n let val = \"\";\n const newStr = removeHexPrefix(str);\n const len = newStr.length / 2;\n for (let i = 0; i < len; i++) {\n val += String.fromCharCode(parseInt(newStr.substr(i * 2, 2), 16));\n }\n return utf8to16(val);\n}\n\n// src/utils/contracts.ts\nvar EQUAL = 0;\nvar LESS_THAN = 1;\nvar GREATER_THAN = 2;\nfunction cmp(a, b) {\n if (a === b) {\n return EQUAL;\n }\n if (a < b) {\n return LESS_THAN;\n }\n return GREATER_THAN;\n}\nfunction compare(symbolX, symbolY) {\n let i = 0;\n const len = symbolX.length <= symbolY.length ? symbolX.length : symbolY.length;\n const lenCmp = cmp(symbolX.length, symbolY.length);\n while (i < len) {\n const elemCmp = cmp(symbolX.charCodeAt(i), symbolY.charCodeAt(i));\n i += 1;\n if (elemCmp !== 0) {\n return elemCmp;\n }\n }\n return lenCmp;\n}\nfunction isSortedSymbols(symbolX, symbolY) {\n return compare(symbolX, symbolY) === LESS_THAN;\n}\nfunction composeType(address, ...args) {\n const generics = Array.isArray(args[args.length - 1]) ? args.pop() : [];\n const chains = [address, ...args].filter(Boolean);\n let result = chains.join(\"::\");\n if (generics && generics.length) {\n result += `<${generics.join(\", \")}>`;\n }\n return result;\n}\nfunction extractAddressFromType(type) {\n return type.split(\"::\")[0];\n}\nfunction extractStructTagFromType(type) {\n try {\n let _type = type.replace(/\\s/g, \"\");\n const genericsString = _type.match(/(<.+>)$/);\n const generics = genericsString?.[0]?.match(/(\\w+::\\w+::\\w+)(?:<.*?>(?!>))?/g);\n if (generics) {\n _type = _type.slice(0, _type.indexOf(\"<\"));\n const tag = extractStructTagFromType(_type);\n const structTag2 = {\n ...tag,\n type_arguments: generics.map((item) => extractStructTagFromType(item).source_address)\n };\n structTag2.type_arguments = structTag2.type_arguments.map((item) => {\n return CoinAssist.isSuiCoin(item) ? item : extractStructTagFromType(item).source_address;\n });\n structTag2.source_address = composeType(structTag2.full_address, structTag2.type_arguments);\n return structTag2;\n }\n const parts = _type.split(\"::\");\n const isSuiCoin = _type === GAS_TYPE_ARG || _type === GAS_TYPE_ARG_LONG;\n const structTag = {\n full_address: _type,\n address: isSuiCoin ? \"0x2\" : normalizeSuiObjectId(parts[0]),\n module: parts[1],\n name: parts[2],\n type_arguments: [],\n source_address: \"\"\n };\n structTag.full_address = `${structTag.address}::${structTag.module}::${structTag.name}`;\n structTag.source_address = composeType(structTag.full_address, structTag.type_arguments);\n return structTag;\n } catch (error) {\n return {\n full_address: type,\n address: \"\",\n module: \"\",\n name: \"\",\n type_arguments: [],\n source_address: type\n };\n }\n}\nfunction normalizeCoinType(coinType) {\n return extractStructTagFromType(coinType).source_address;\n}\nfunction fixSuiObjectId(value) {\n if (value.toLowerCase().startsWith(\"0x\")) {\n return normalizeSuiObjectId(value);\n }\n return value;\n}\nvar fixCoinType = (coinType, removePrefix = true) => {\n const arr = coinType.split(\"::\");\n const address = arr.shift();\n let normalizeAddress = normalizeSuiObjectId(address);\n if (removePrefix) {\n normalizeAddress = removeHexPrefix(normalizeAddress);\n }\n return `${normalizeAddress}::${arr.join(\"::\")}`;\n};\nfunction patchFixSuiObjectId(data) {\n for (const key in data) {\n const type = typeof data[key];\n if (type === \"object\") {\n patchFixSuiObjectId(data[key]);\n } else if (type === \"string\") {\n const value = data[key];\n if (value && !value.includes(\"::\")) {\n data[key] = fixSuiObjectId(value);\n }\n }\n }\n}\n\n// src/math/CoinAssist.ts\nvar COIN_TYPE = \"0x2::coin::Coin\";\nvar COIN_TYPE_ARG_REGEX = /^0x2::coin::Coin<(.+)>$/;\nvar DEFAULT_GAS_BUDGET_FOR_SPLIT = 1e3;\nvar DEFAULT_GAS_BUDGET_FOR_MERGE = 500;\nvar DEFAULT_GAS_BUDGET_FOR_TRANSFER = 100;\nvar DEFAULT_GAS_BUDGET_FOR_TRANSFER_SUI = 100;\nvar DEFAULT_GAS_BUDGET_FOR_STAKE = 1e3;\nvar GAS_TYPE_ARG = \"0x2::sui::SUI\";\nvar GAS_TYPE_ARG_LONG = \"0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI\";\nvar GAS_SYMBOL = \"SUI\";\nvar DEFAULT_NFT_TRANSFER_GAS_FEE = 450;\nvar SUI_SYSTEM_STATE_OBJECT_ID = \"0x0000000000000000000000000000000000000005\";\nvar CoinAssist = class {\n /**\n * Get the coin type argument from a SuiMoveObject.\n *\n * @param obj The SuiMoveObject to get the coin type argument from.\n * @returns The coin type argument, or null if it is not found.\n */\n static getCoinTypeArg(obj) {\n const res = obj.type.match(COIN_TYPE_ARG_REGEX);\n return res ? res[1] : null;\n }\n /**\n * Get whether a SuiMoveObject is a SUI coin.\n *\n * @param obj The SuiMoveObject to check.\n * @returns Whether the SuiMoveObject is a SUI coin.\n */\n static isSUI(obj) {\n const arg = CoinAssist.getCoinTypeArg(obj);\n return arg ? CoinAssist.getCoinSymbol(arg) === \"SUI\" : false;\n }\n /**\n * Get the coin symbol from a coin type argument.\n *\n * @param coinTypeArg The coin type argument to get the symbol from.\n * @returns The coin symbol.\n */\n static getCoinSymbol(coinTypeArg) {\n return coinTypeArg.substring(coinTypeArg.lastIndexOf(\":\") + 1);\n }\n /**\n * Get the balance of a SuiMoveObject.\n *\n * @param obj The SuiMoveObject to get the balance from.\n * @returns The balance of the SuiMoveObject.\n */\n static getBalance(obj) {\n return BigInt(obj.fields.balance);\n }\n /**\n * Get the total balance of a list of CoinAsset objects for a given coin address.\n *\n * @param objs The list of CoinAsset objects to get the total balance for.\n * @param coinAddress The coin address to get the total balance for.\n * @returns The total balance of the CoinAsset objects for the given coin address.\n */\n static totalBalance(objs, coinAddress) {\n let balanceTotal = BigInt(0);\n objs.forEach((obj) => {\n if (coinAddress === obj.coinAddress) {\n balanceTotal += BigInt(obj.balance);\n }\n });\n return balanceTotal;\n }\n /**\n * Get the ID of a SuiMoveObject.\n *\n * @param obj The SuiMoveObject to get the ID from.\n * @returns The ID of the SuiMoveObject.\n */\n static getID(obj) {\n return obj.fields.id.id;\n }\n /**\n * Get the coin type from a coin type argument.\n *\n * @param coinTypeArg The coin type argument to get the coin type from.\n * @returns The coin type.\n */\n static getCoinTypeFromArg(coinTypeArg) {\n return `${COIN_TYPE}<${coinTypeArg}>`;\n }\n /**\n * Get the FaucetCoin objects from a SuiTransactionBlockResponse.\n *\n * @param suiTransactionResponse The SuiTransactionBlockResponse to get the FaucetCoin objects from.\n * @returns The FaucetCoin objects.\n */\n static getFaucetCoins(suiTransactionResponse) {\n const { events } = suiTransactionResponse;\n const faucetCoin = [];\n events?.forEach((item) => {\n const { type } = item;\n if (extractStructTagFromType(type).name === \"InitEvent\") {\n const fields = item.parsedJson;\n faucetCoin.push({\n transactionModule: item.transactionModule,\n suplyID: fields.suplyID,\n decimals: fields.decimals\n });\n }\n });\n return faucetCoin;\n }\n /**\n * Get the CoinAsset objects for a given coin type.\n *\n * @param coinType The coin type to get the CoinAsset objects for.\n * @param allSuiObjects The list of all SuiMoveObjects.\n * @returns The CoinAsset objects for the given coin type.\n */\n static getCoinAssets(coinType, allSuiObjects) {\n const coins = [];\n allSuiObjects.forEach((anObj) => {\n if (normalizeCoinType(anObj.coinAddress) === normalizeCoinType(coinType)) {\n coins.push(anObj);\n }\n });\n return coins;\n }\n /**\n * Get whether a coin address is a SUI coin.\n *\n * @param coinAddress The coin address to check.\n * @returns Whether the coin address is a SUI coin.\n */\n static isSuiCoin(coinAddress) {\n return extractStructTagFromType(coinAddress).full_address === GAS_TYPE_ARG;\n }\n /**\n * Select the CoinAsset objects from a list of CoinAsset objects that have a balance greater than or equal to a given amount.\n *\n * @param coins The list of CoinAsset objects to select from.\n * @param amount The amount to select CoinAsset objects with a balance greater than or equal to.\n * @param exclude A list of CoinAsset objects to exclude from the selection.\n * @returns The CoinAsset objects that have a balance greater than or equal to the given amount.\n */\n static selectCoinObjectIdGreaterThanOrEqual(coins, amount, exclude = []) {\n const selectedResult = CoinAssist.selectCoinAssetGreaterThanOrEqual(coins, amount, exclude);\n const objectArray = selectedResult.selectedCoins.map((item) => item.coinObjectId);\n const remainCoins = selectedResult.remainingCoins;\n const amountArray = selectedResult.selectedCoins.map((item) => item.balance.toString());\n return { objectArray, remainCoins, amountArray };\n }\n /**\n * Select the CoinAsset objects from a list of CoinAsset objects that have a balance greater than or equal to a given amount.\n *\n * @param coins The list of CoinAsset objects to select from.\n * @param amount The amount to select CoinAsset objects with a balance greater than or equal to.\n * @param exclude A list of CoinAsset objects to exclude from the selection.\n * @returns The CoinAsset objects that have a balance greater than or equal to the given amount.\n */\n static selectCoinAssetGreaterThanOrEqual(coins, amount, exclude = []) {\n const sortedCoins = CoinAssist.sortByBalance(coins.filter((c) => !exclude.includes(c.coinObjectId)));\n const total = CoinAssist.calculateTotalBalance(sortedCoins);\n if (total < amount) {\n return { selectedCoins: [], remainingCoins: sortedCoins };\n }\n if (total === amount) {\n return { selectedCoins: sortedCoins, remainingCoins: [] };\n }\n let sum = BigInt(0);\n const selectedCoins = [];\n const remainingCoins = [...sortedCoins];\n while (sum < total) {\n const target = amount - sum;\n const coinWithSmallestSufficientBalanceIndex = remainingCoins.findIndex((c) => c.balance >= target);\n if (coinWithSmallestSufficientBalanceIndex !== -1) {\n selectedCoins.push(remainingCoins[coinWithSmallestSufficientBalanceIndex]);\n remainingCoins.splice(coinWithSmallestSufficientBalanceIndex, 1);\n break;\n }\n const coinWithLargestBalance = remainingCoins.pop();\n if (coinWithLargestBalance.balance > 0) {\n selectedCoins.push(coinWithLargestBalance);\n sum += coinWithLargestBalance.balance;\n }\n }\n return { selectedCoins: CoinAssist.sortByBalance(selectedCoins), remainingCoins: CoinAssist.sortByBalance(remainingCoins) };\n }\n /**\n * Sort the CoinAsset objects by their balance.\n *\n * @param coins The CoinAsset objects to sort.\n * @returns The sorted CoinAsset objects.\n */\n static sortByBalance(coins) {\n return coins.sort((a, b) => a.balance < b.balance ? -1 : a.balance > b.balance ? 1 : 0);\n }\n static sortByBalanceDes(coins) {\n return coins.sort((a, b) => a.balance > b.balance ? -1 : a.balance < b.balance ? 0 : 1);\n }\n /**\n * Calculate the total balance of a list of CoinAsset objects.\n *\n * @param coins The list of CoinAsset objects to calculate the total balance for.\n * @returns The total balance of the CoinAsset objects.\n */\n static calculateTotalBalance(coins) {\n return coins.reduce((partialSum, c) => partialSum + c.balance, BigInt(0));\n }\n};\n\n// src/math/collect-fees.ts\nimport BN8 from \"bn.js\";\nfunction getFeeInTickRange(clmmpool, tickLower, tickUpper) {\n let fee_growth_below_a = new BN8(0);\n let fee_growth_below_b = new BN8(0);\n if (clmmpool.current_tick_index < tickLower.index) {\n fee_growth_below_a = MathUtil.subUnderflowU128(new BN8(clmmpool.fee_growth_global_a), new BN8(tickLower.feeGrowthOutsideA));\n fee_growth_below_b = MathUtil.subUnderflowU128(new BN8(clmmpool.fee_growth_global_b), new BN8(tickLower.feeGrowthOutsideB));\n } else {\n fee_growth_below_a = new BN8(tickLower.feeGrowthOutsideA);\n fee_growth_below_b = new BN8(tickLower.feeGrowthOutsideB);\n }\n let fee_growth_above_a = new BN8(0);\n let fee_growth_above_b = new BN8(0);\n if (clmmpool.current_tick_index < tickUpper.index) {\n fee_growth_above_a = new BN8(tickUpper.feeGrowthOutsideA);\n fee_growth_above_b = new BN8(tickUpper.feeGrowthOutsideB);\n } else {\n fee_growth_above_a = MathUtil.subUnderflowU128(new BN8(clmmpool.fee_growth_global_a), new BN8(tickUpper.feeGrowthOutsideA));\n fee_growth_above_b = MathUtil.subUnderflowU128(new BN8(clmmpool.fee_growth_global_b), new BN8(tickUpper.feeGrowthOutsideB));\n }\n const fee_growth_inside_a = MathUtil.subUnderflowU128(\n MathUtil.subUnderflowU128(new BN8(clmmpool.fee_growth_global_a), fee_growth_below_a),\n fee_growth_above_a\n );\n const fee_growth_inside_b = MathUtil.subUnderflowU128(\n MathUtil.subUnderflowU128(new BN8(clmmpool.fee_growth_global_b), fee_growth_below_b),\n fee_growth_above_b\n );\n return { fee_growth_inside_a, fee_growth_inside_b };\n}\nfunction updateFees(position, fee_growth_inside_a, fee_growth_inside_b) {\n const growth_delta_a = MathUtil.subUnderflowU128(fee_growth_inside_a, new BN8(position.fee_growth_inside_a));\n const fee_delta_a = new BN8(position.liquidity).mul(growth_delta_a).shrn(64);\n const growth_delta_b = MathUtil.subUnderflowU128(fee_growth_inside_b, new BN8(position.fee_growth_inside_b));\n const fee_delta_b = new BN8(position.liquidity).mul(growth_delta_b).shrn(64);\n const fee_owed_a = new BN8(position.fee_owed_a).add(fee_delta_a);\n const fee_owed_b = new BN8(position.fee_owed_b).add(fee_delta_b);\n return {\n position_id: position.pos_object_id,\n feeOwedA: fee_owed_a,\n feeOwedB: fee_owed_b\n };\n}\nfunction collectFeesQuote(param) {\n const { fee_growth_inside_a, fee_growth_inside_b } = getFeeInTickRange(param.clmmpool, param.tickLower, param.tickUpper);\n return updateFees(param.position, fee_growth_inside_a, fee_growth_inside_b);\n}\n\n// src/math/percentage.ts\nimport BN9 from \"bn.js\";\nvar Percentage = class {\n numerator;\n denominator;\n constructor(numerator, denominator) {\n this.toString = () => {\n return `${this.numerator.toString()}/${this.denominator.toString()}`;\n };\n this.numerator = numerator;\n this.denominator = denominator;\n }\n /**\n * Get the percentage of a number.\n *\n * @param number\n * @returns\n */\n static fromDecimal(number) {\n return Percentage.fromFraction(number.toDecimalPlaces(1).mul(10).toNumber(), 1e3);\n }\n /**\n * Get the percentage of a fraction.\n *\n * @param numerator\n * @param denominator\n * @returns\n */\n static fromFraction(numerator, denominator) {\n const num = typeof numerator === \"number\" ? new BN9(numerator.toString()) : numerator;\n const denom = typeof denominator === \"number\" ? new BN9(denominator.toString()) : denominator;\n return new Percentage(num, denom);\n }\n};\n\n// src/math/position.ts\nvar AmountSpecified = /* @__PURE__ */ ((AmountSpecified2) => {\n AmountSpecified2[\"Input\"] = \"Specified input amount\";\n AmountSpecified2[\"Output\"] = \"Specified output amount\";\n return AmountSpecified2;\n})(AmountSpecified || {});\nvar PositionStatus = /* @__PURE__ */ ((PositionStatus2) => {\n PositionStatus2[PositionStatus2[\"BelowRange\"] = 0] = \"BelowRange\";\n PositionStatus2[PositionStatus2[\"InRange\"] = 1] = \"InRange\";\n PositionStatus2[PositionStatus2[\"AboveRange\"] = 2] = \"AboveRange\";\n return PositionStatus2;\n})(PositionStatus || {});\nvar PositionUtil = class {\n /**\n * Get the position status for the given tick indices.\n *\n * @param currentTickIndex The current tick index.\n * @param lowerTickIndex The lower tick index.\n * @param upperTickIndex The upper tick index.\n * @returns The position status.\n */\n static getPositionStatus(currentTickIndex, lowerTickIndex, upperTickIndex) {\n if (currentTickIndex < lowerTickIndex) {\n return 0 /* BelowRange */;\n }\n if (currentTickIndex < upperTickIndex) {\n return 1 /* InRange */;\n }\n return 2 /* AboveRange */;\n }\n};\nfunction orderSqrtPrice(sqrtPrice0X64, sqrtPrice1X64) {\n if (sqrtPrice0X64.lt(sqrtPrice1X64)) {\n return [sqrtPrice0X64, sqrtPrice1X64];\n }\n return [sqrtPrice1X64, sqrtPrice0X64];\n}\nfunction getCoinAFromLiquidity(liquidity, sqrtPrice0X64, sqrtPrice1X64, roundUp) {\n const [sqrtPriceLowerX64, sqrtPriceUpperX64] = orderSqrtPrice(sqrtPrice0X64, sqrtPrice1X64);\n const numerator = liquidity.mul(sqrtPriceUpperX64.sub(sqrtPriceLowerX64)).shln(64);\n const denominator = sqrtPriceUpperX64.mul(sqrtPriceLowerX64);\n if (roundUp) {\n return MathUtil.divRoundUp(numerator, denominator);\n }\n return numerator.div(denominator);\n}\nfunction getCoinBFromLiquidity(liquidity, sqrtPrice0X64, sqrtPrice1X64, roundUp) {\n const [sqrtPriceLowerX64, sqrtPriceUpperX64] = orderSqrtPrice(sqrtPrice0X64, sqrtPrice1X64);\n const result = liquidity.mul(sqrtPriceUpperX64.sub(sqrtPriceLowerX64));\n if (roundUp) {\n return MathUtil.shiftRightRoundUp(result);\n }\n return result.shrn(64);\n}\nfunction getLiquidityFromCoinA(amount, sqrtPriceLowerX64, sqrtPriceUpperX64, roundUp) {\n const result = amount.mul(sqrtPriceLowerX64).mul(sqrtPriceUpperX64).div(sqrtPriceUpperX64.sub(sqrtPriceLowerX64));\n if (roundUp) {\n return MathUtil.shiftRightRoundUp(result);\n }\n return result.shrn(64);\n}\nfunction getLiquidityFromCoinB(amount, sqrtPriceLowerX64, sqrtPriceUpperX64, roundUp) {\n const numerator = amount.shln(64);\n const denominator = sqrtPriceUpperX64.sub(sqrtPriceLowerX64);\n if (roundUp) {\n return MathUtil.divRoundUp(numerator, denominator);\n }\n return numerator.div(denominator);\n}\nfunction getAmountFixedDelta(currentSqrtPriceX64, targetSqrtPriceX64, liquidity, amountSpecified, swapDirection) {\n if (amountSpecified === \"Specified input amount\" /* Input */ === (swapDirection === \"a2b\" /* A2B */)) {\n return getCoinAFromLiquidity(liquidity, currentSqrtPriceX64, targetSqrtPriceX64, amountSpecified === \"Specified input amount\" /* Input */);\n }\n return getCoinBFromLiquidity(liquidity, currentSqrtPriceX64, targetSqrtPriceX64, amountSpecified === \"Specified input amount\" /* Input */);\n}\nfunction getAmountUnfixedDelta(currentSqrtPriceX64, targetSqrtPriceX64, liquidity, amountSpecified, swapDirection) {\n if (amountSpecified === \"Specified input amount\" /* Input */ === (swapDirection === \"a2b\" /* A2B */)) {\n return getCoinBFromLiquidity(liquidity, currentSqrtPriceX64, targetSqrtPriceX64, amountSpecified === \"Specified output amount\" /* Output */);\n }\n return getCoinAFromLiquidity(liquidity, currentSqrtPriceX64, targetSqrtPriceX64, amountSpecified === \"Specified output amount\" /* Output */);\n}\nfunction adjustForSlippage(n, { numerator, denominator }, adjustUp) {\n if (adjustUp) {\n return n.mul(denominator.add(numerator)).div(denominator);\n }\n return n.mul(denominator).div(denominator.add(numerator));\n}\nfunction adjustForCoinSlippage(tokenAmount, slippage, adjustUp) {\n return {\n tokenMaxA: adjustForSlippage(tokenAmount.coinA, slippage, adjustUp),\n tokenMaxB: adjustForSlippage(tokenAmount.coinB, slippage, adjustUp)\n };\n}\n\n// src/math/SplitSwap.ts\nimport BN10 from \"bn.js\";\nvar SplitUnit = /* @__PURE__ */ ((SplitUnit2) => {\n SplitUnit2[SplitUnit2[\"FIVE\"] = 5] = \"FIVE\";\n SplitUnit2[SplitUnit2[\"TEN\"] = 10] = \"TEN\";\n SplitUnit2[SplitUnit2[\"TWENTY\"] = 20] = \"TWENTY\";\n SplitUnit2[SplitUnit2[\"TWENTY_FIVE\"] = 25] = \"TWENTY_FIVE\";\n SplitUnit2[SplitUnit2[\"FIVETY\"] = 50] = \"FIVETY\";\n SplitUnit2[SplitUnit2[\"HUNDRED\"] = 100] = \"HUNDRED\";\n return SplitUnit2;\n})(SplitUnit || {});\nfunction createSplitArray(minSplitUnit) {\n let unit;\n switch (minSplitUnit) {\n case 5 /* FIVE */:\n unit = 5;\n break;\n case 10 /* TEN */:\n unit = 10;\n break;\n case 20 /* TWENTY */:\n unit = 20;\n break;\n case 25 /* TWENTY_FIVE */:\n unit = 25;\n break;\n case 50 /* FIVETY */:\n unit = 50;\n break;\n case 100 /* HUNDRED */:\n unit = 100;\n break;\n default:\n unit = 1;\n }\n const length = 100 / unit + 1;\n const splitArray = new Array(length);\n for (let i = 0; i < length; i += 1) {\n splitArray[i] = i * unit;\n }\n return splitArray;\n}\nfunction createSplitAmountArray(amount, minSplitUnit) {\n const splitArray = createSplitArray(minSplitUnit);\n const splitAmountArray = new Array(splitArray.length);\n for (let i = 0; i < splitArray.length; i += 1) {\n splitAmountArray[i] = amount.muln(splitArray[i]).divn(100);\n }\n return splitAmountArray;\n}\nfunction updateSplitSwapResult(maxIndex, currentIndex, splitSwapResult, stepResult) {\n for (let index = currentIndex; index < maxIndex; index += 1) {\n splitSwapResult.amountInArray[index] = splitSwapResult.amountInArray[index].add(stepResult.amountIn);\n splitSwapResult.amountOutArray[index] = splitSwapResult.amountOutArray[index].add(stepResult.amountOut);\n splitSwapResult.feeAmountArray[index] = splitSwapResult.feeAmountArray[index].add(stepResult.feeAmount);\n }\n return splitSwapResult;\n}\nfunction computeSplitSwap(a2b, byAmountIn, amounts, poolData, swapTicks) {\n let currentLiquidity = new BN10(poolData.liquidity);\n let { currentSqrtPrice } = poolData;\n let splitSwapResult = {\n amountInArray: [],\n amountOutArray: [],\n feeAmountArray: [],\n nextSqrtPriceArray: [],\n isExceed: []\n };\n amounts.forEach(() => {\n splitSwapResult.amountInArray.push(ZERO);\n splitSwapResult.amountOutArray.push(ZERO);\n splitSwapResult.feeAmountArray.push(ZERO);\n splitSwapResult.nextSqrtPriceArray.push(ZERO);\n });\n let targetSqrtPrice;\n let signedLiquidityChange;\n const sqrtPriceLimit = SwapUtils.getDefaultSqrtPriceLimit(a2b);\n const maxIndex = amounts.length;\n let remainerAmount = amounts[1];\n let currentIndex = 1;\n let ticks;\n if (a2b) {\n ticks = swapTicks.sort((a, b) => {\n return b.index - a.index;\n });\n } else {\n ticks = swapTicks.sort((a, b) => {\n return a.index - b.index;\n });\n }\n for (const tick of ticks) {\n if (a2b) {\n if (poolData.currentTickIndex < tick.index) {\n continue;\n }\n } else if (poolData.currentTickIndex > tick.index) {\n continue;\n }\n if (tick === null) {\n continue;\n }\n if (a2b && sqrtPriceLimit.gt(tick.sqrtPrice) || !a2b && sqrtPriceLimit.lt(tick.sqrtPrice)) {\n targetSqrtPrice = sqrtPriceLimit;\n } else {\n targetSqrtPrice = tick.sqrtPrice;\n }\n let tempStepResult = {\n amountIn: ZERO,\n amountOut: ZERO,\n nextSqrtPrice: ZERO,\n feeAmount: ZERO\n };\n const tempSqrtPrice = currentSqrtPrice;\n const tempLiquidity = currentLiquidity;\n let tempRemainerAmount = remainerAmount;\n let currentTempIndex = currentIndex;\n for (let i = currentIndex; i < maxIndex; i += 1) {\n const stepResult = computeSwapStep(\n currentSqrtPrice,\n targetSqrtPrice,\n currentLiquidity,\n remainerAmount,\n new BN10(poolData.feeRate),\n byAmountIn\n );\n tempStepResult = stepResult;\n if (!stepResult.amountIn.eq(ZERO)) {\n remainerAmount = byAmountIn ? remainerAmount.sub(stepResult.amountIn.add(stepResult.feeAmount)) : remainerAmount.sub(stepResult.amountOut);\n }\n if (remainerAmount.eq(ZERO)) {\n splitSwapResult.amountInArray[i] = splitSwapResult.amountInArray[i].add(stepResult.amountIn);\n splitSwapResult.amountOutArray[i] = splitSwapResult.amountOutArray[i].add(stepResult.amountOut);\n splitSwapResult.feeAmountArray[i] = splitSwapResult.feeAmountArray[i].add(stepResult.feeAmount);\n if (stepResult.nextSqrtPrice.eq(tick.sqrtPrice)) {\n signedLiquidityChange = a2b ? tick.liquidityNet.mul(new BN10(-1)) : tick.liquidityNet;\n currentLiquidity = signedLiquidityChange.gt(ZERO) ? currentLiquidity.add(signedLiquidityChange) : currentLiquidity.sub(signedLiquidityChange.abs());\n currentSqrtPrice = tick.sqrtPrice;\n } else {\n currentSqrtPrice = stepResult.nextSqrtPrice;\n }\n splitSwapResult.amountInArray[i] = splitSwapResult.amountInArray[i].add(splitSwapResult.feeAmountArray[i]);\n splitSwapResult.nextSqrtPriceArray[i] = currentSqrtPrice;\n currentLiquidity = tempLiquidity;\n currentSqrtPrice = tempSqrtPrice;\n if (i !== maxIndex - 1) {\n remainerAmount = tempRemainerAmount.add(amounts[i + 1].sub(amounts[currentTempIndex]));\n }\n currentIndex += 1;\n } else {\n splitSwapResult = updateSplitSwapResult(maxIndex, i, splitSwapResult, stepResult);\n tempRemainerAmount = remainerAmount;\n currentTempIndex = currentIndex;\n break;\n }\n }\n if (currentIndex === maxIndex) {\n break;\n }\n if (tempStepResult.nextSqrtPrice.eq(tick.sqrtPrice)) {\n signedLiquidityChange = a2b ? tick.liquidityNet.mul(new BN10(-1)) : tick.liquidityNet;\n currentLiquidity = signedLiquidityChange.gt(ZERO) ? currentLiquidity.add(signedLiquidityChange) : currentLiquidity.sub(signedLiquidityChange.abs());\n currentSqrtPrice = tick.sqrtPrice;\n } else {\n currentSqrtPrice = tempStepResult.nextSqrtPrice;\n }\n }\n if (byAmountIn) {\n amounts.forEach((a, i) => {\n splitSwapResult.isExceed.push(splitSwapResult.amountInArray[i].lt(a));\n });\n } else {\n amounts.forEach((a, i) => {\n splitSwapResult.isExceed.push(splitSwapResult.amountOutArray[i].lt(a));\n });\n }\n return splitSwapResult;\n}\nvar SplitSwap = class {\n minSplitUnit;\n amountArray;\n byAmountIn;\n a2b;\n clmmpool;\n ticks;\n splitSwapResult;\n constructor(amount, unit, clmmpool, a2b, byAmountIn, tickData) {\n this.minSplitUnit = unit;\n this.a2b = a2b;\n this.byAmountIn = byAmountIn;\n this.clmmpool = clmmpool;\n this.ticks = tickData;\n this.amountArray = [];\n this.createSplitSwapParams = this.createSplitSwapParams.bind(this);\n this.createSplitSwapParams(amount, unit);\n this.splitSwapResult = {\n amountInArray: [],\n amountOutArray: [],\n feeAmountArray: [],\n nextSqrtPriceArray: [],\n isExceed: []\n };\n this.computeSwap = this.computeSwap.bind(this);\n }\n createSplitSwapParams(amount, unit) {\n const amountArray = createSplitAmountArray(amount, unit);\n this.amountArray = amountArray;\n }\n computeSwap() {\n const pool = transClmmpoolDataWithoutTicks(this.clmmpool);\n this.splitSwapResult = computeSplitSwap(this.a2b, this.byAmountIn, this.amountArray, pool, this.ticks);\n return this.splitSwapResult;\n }\n};\n\n// src/utils/numbers.ts\nimport Decimal3 from \"decimal.js\";\nfunction d(value) {\n if (Decimal3.isDecimal(value)) {\n return value;\n }\n return new Decimal3(value === void 0 ? 0 : value);\n}\nfunction decimalsMultiplier(decimals) {\n return d(10).pow(d(decimals).abs());\n}\n\n// src/utils/objects.ts\nfunction getSuiObjectData(resp) {\n return resp.data;\n}\nfunction getObjectDeletedResponse(resp) {\n if (resp.error && \"object_id\" in resp.error && \"version\" in resp.error && \"digest\" in resp.error) {\n const { error } = resp;\n return {\n objectId: error.object_id,\n version: error.version,\n digest: error.digest\n };\n }\n return void 0;\n}\nfunction getObjectNotExistsResponse(resp) {\n if (resp.error && \"object_id\" in resp.error && !(\"version\" in resp.error) && !(\"digest\" in resp.error)) {\n return resp.error.object_id;\n }\n return void 0;\n}\nfunction getObjectReference(resp) {\n if (\"reference\" in resp) {\n return resp.reference;\n }\n const exists = getSuiObjectData(resp);\n if (exists) {\n return {\n objectId: exists.objectId,\n version: exists.version,\n digest: exists.digest\n };\n }\n return getObjectDeletedResponse(resp);\n}\nfunction getObjectId(data) {\n if (\"objectId\" in data) {\n return data.objectId;\n }\n return getObjectReference(data)?.objectId ?? getObjectNotExistsResponse(data);\n}\nfunction getObjectVersion(data) {\n if (\"version\" in data) {\n return data.version;\n }\n return getObjectReference(data)?.version;\n}\nfunction isSuiObjectResponse(resp) {\n return resp.data !== void 0;\n}\nfunction isSuiObjectDataWithContent(data) {\n return data.content !== void 0;\n}\nfunction getMovePackageContent(data) {\n const suiObject = getSuiObjectData(data);\n if (suiObject?.content?.dataType !== \"package\") {\n return void 0;\n }\n return suiObject.content.disassembled;\n}\nfunction getMoveObject(data) {\n const suiObject = \"data\" in data ? getSuiObjectData(data) : data;\n if (!suiObject || !isSuiObjectDataWithContent(suiObject) || suiObject.content.dataType !== \"moveObject\") {\n return void 0;\n }\n return suiObject.content;\n}\nfunction getMoveObjectType(resp) {\n return getMoveObject(resp)?.type;\n}\nfunction getObjectType(resp) {\n const data = isSuiObjectResponse(resp) ? resp.data : resp;\n if (!data?.type && \"data\" in resp) {\n if (data?.content?.dataType === \"package\") {\n return \"package\";\n }\n return getMoveObjectType(resp);\n }\n return data?.type;\n}\nfunction getObjectPreviousTransactionDigest(resp) {\n return getSuiObjectData(resp)?.previousTransaction;\n}\nfunction getObjectOwner(resp) {\n return getSuiObjectData(resp)?.owner;\n}\nfunction getObjectDisplay(resp) {\n const display = getSuiObjectData(resp)?.display;\n if (!display) {\n return { data: null, error: null };\n }\n return display;\n}\nfunction getObjectFields(object) {\n const fields = getMoveObject(object)?.fields;\n if (fields) {\n if (\"fields\" in fields) {\n return fields.fields;\n }\n return fields;\n }\n return void 0;\n}\nfunction hasPublicTransfer(data) {\n return getMoveObject(data)?.hasPublicTransfer ?? false;\n}\n\n// src/utils/common.ts\nfunction toDecimalsAmount(amount, decimals) {\n const mul = decimalsMultiplier(d(decimals));\n return Number(d(amount).mul(mul));\n}\nfunction asUintN(int, bits = 32) {\n return BigInt.asUintN(bits, BigInt(int)).toString();\n}\nfunction asIntN(int, bits = 32) {\n return Number(BigInt.asIntN(bits, BigInt(int)));\n}\nfunction fromDecimalsAmount(amount, decimals) {\n const mul = decimalsMultiplier(d(decimals));\n return Number(d(amount).div(mul));\n}\nfunction secretKeyToEd25519Keypair(secretKey, ecode = \"hex\") {\n if (secretKey instanceof Uint8Array) {\n const key = Buffer.from(secretKey);\n return Ed25519Keypair.fromSecretKey(key);\n }\n const hexKey = ecode === \"hex\" ? fromHEX(secretKey) : fromB64(secretKey);\n return Ed25519Keypair.fromSecretKey(hexKey);\n}\nfunction secretKeyToSecp256k1Keypair(secretKey, ecode = \"hex\") {\n if (secretKey instanceof Uint8Array) {\n const key = Buffer.from(secretKey);\n return Secp256k1Keypair.fromSecretKey(key);\n }\n const hexKey = ecode === \"hex\" ? fromHEX(secretKey) : fromB64(secretKey);\n return Secp256k1Keypair.fromSecretKey(hexKey);\n}\nfunction buildPoolName(coin_type_a, coin_type_b, tick_spacing) {\n const coinNameA = extractStructTagFromType(coin_type_a).name;\n const coinNameB = extractStructTagFromType(coin_type_b).name;\n return `${coinNameA}-${coinNameB}[${tick_spacing}]`;\n}\nfunction buildPool(objects) {\n const type = getMoveObjectType(objects);\n const formatType = extractStructTagFromType(type);\n const fields = getObjectFields(objects);\n if (fields == null) {\n throw new ClmmpoolsError(`Pool id ${getObjectId(objects)} not exists.`, \"InvalidPoolObject\" /* InvalidPoolObject */);\n }\n const rewarders = [];\n fields.rewarder_manager.fields.rewarders.forEach((item) => {\n const { emissions_per_second } = item.fields;\n const emissionSeconds = MathUtil.fromX64(new BN11(emissions_per_second));\n const emissionsEveryDay = Math.floor(emissionSeconds.toNumber() * 60 * 60 * 24);\n rewarders.push({\n emissions_per_second,\n coinAddress: extractStructTagFromType(item.fields.reward_coin.fields.name).source_address,\n growth_global: item.fields.growth_global,\n emissionsEveryDay\n });\n });\n const pool = {\n poolAddress: getObjectId(objects),\n poolType: type,\n coinTypeA: formatType.type_arguments[0],\n coinTypeB: formatType.type_arguments[1],\n coinAmountA: fields.coin_a,\n coinAmountB: fields.coin_b,\n current_sqrt_price: fields.current_sqrt_price,\n current_tick_index: asIntN(BigInt(fields.current_tick_index.fields.bits)),\n fee_growth_global_a: fields.fee_growth_global_a,\n fee_growth_global_b: fields.fee_growth_global_b,\n fee_protocol_coin_a: fields.fee_protocol_coin_a,\n fee_protocol_coin_b: fields.fee_protocol_coin_b,\n fee_rate: fields.fee_rate,\n is_pause: fields.is_pause,\n liquidity: fields.liquidity,\n position_manager: {\n positions_handle: fields.position_manager.fields.positions.fields.id.id,\n size: fields.position_manager.fields.positions.fields.size\n },\n rewarder_infos: rewarders,\n rewarder_last_updated_time: fields.rewarder_manager.fields.last_updated_time,\n tickSpacing: fields.tick_spacing,\n ticks_handle: fields.tick_manager.fields.ticks.fields.id.id,\n uri: fields.url,\n index: Number(fields.index),\n name: \"\"\n };\n pool.name = buildPoolName(pool.coinTypeA, pool.coinTypeB, pool.tickSpacing);\n return pool;\n}\nfunction buildNFT(objects) {\n const fields = getObjectDisplay(objects).data;\n const nft = {\n creator: \"\",\n description: \"\",\n image_url: \"\",\n link: \"\",\n name: \"\",\n project_url: \"\"\n };\n if (fields) {\n nft.creator = fields.creator;\n nft.description = fields.description;\n nft.image_url = fields.image_url;\n nft.link = fields.link;\n nft.name = fields.name;\n nft.project_url = fields.project_url;\n }\n return nft;\n}\nfunction buildPosition(object) {\n if (object.error != null || object.data?.content?.dataType !== \"moveObject\") {\n throw new ClmmpoolsError(`Position not exists. Get Position error:${object.error}`, \"InvalidPositionObject\" /* InvalidPositionObject */);\n }\n let nft = {\n creator: \"\",\n description: \"\",\n image_url: \"\",\n link: \"\",\n name: \"\",\n project_url: \"\"\n };\n let position = {\n ...nft,\n pos_object_id: \"\",\n owner: \"\",\n type: \"\",\n coin_type_a: \"\",\n coin_type_b: \"\",\n liquidity: \"\",\n tick_lower_index: 0,\n tick_upper_index: 0,\n index: 0,\n pool: \"\",\n reward_amount_owed_0: \"0\",\n reward_amount_owed_1: \"0\",\n reward_amount_owed_2: \"0\",\n reward_growth_inside_0: \"0\",\n reward_growth_inside_1: \"0\",\n reward_growth_inside_2: \"0\",\n fee_growth_inside_a: \"0\",\n fee_owed_a: \"0\",\n fee_growth_inside_b: \"0\",\n fee_owed_b: \"0\",\n position_status: \"Exists\" /* Exists */\n };\n let fields = getObjectFields(object);\n if (fields) {\n const type = getMoveObjectType(object);\n const ownerWarp = getObjectOwner(object);\n if (\"nft\" in fields) {\n fields = fields.nft.fields;\n nft.description = fields.description;\n nft.name = fields.name;\n nft.link = fields.url;\n } else {\n nft = buildNFT(object);\n }\n position = {\n ...nft,\n pos_object_id: fields.id.id,\n owner: ownerWarp.AddressOwner,\n type,\n liquidity: fields.liquidity,\n coin_type_a: fields.coin_type_a.fields.name,\n coin_type_b: fields.coin_type_b.fields.name,\n tick_lower_index: asIntN(BigInt(fields.tick_lower_index.fields.bits)),\n tick_upper_index: asIntN(BigInt(fields.tick_upper_index.fields.bits)),\n index: fields.index,\n pool: fields.pool,\n reward_amount_owed_0: \"0\",\n reward_amount_owed_1: \"0\",\n reward_amount_owed_2: \"0\",\n reward_growth_inside_0: \"0\",\n reward_growth_inside_1: \"0\",\n reward_growth_inside_2: \"0\",\n fee_growth_inside_a: \"0\",\n fee_owed_a: \"0\",\n fee_growth_inside_b: \"0\",\n fee_owed_b: \"0\",\n position_status: \"Exists\" /* Exists */\n };\n }\n const deletedResponse = getObjectDeletedResponse(object);\n if (deletedResponse) {\n position.pos_object_id = deletedResponse.objectId;\n position.position_status = \"Deleted\" /* Deleted */;\n }\n const objectNotExistsResponse = getObjectNotExistsResponse(object);\n if (objectNotExistsResponse) {\n position.pos_object_id = objectNotExistsResponse;\n position.position_status = \"NotExists\" /* NotExists */;\n }\n return position;\n}\nfunction buildPositionReward(fields) {\n const rewarders = {\n reward_amount_owed_0: \"0\",\n reward_amount_owed_1: \"0\",\n reward_amount_owed_2: \"0\",\n reward_growth_inside_0: \"0\",\n reward_growth_inside_1: \"0\",\n reward_growth_inside_2: \"0\"\n };\n fields = \"fields\" in fields ? fields.fields : fields;\n fields.rewards.forEach((item, index) => {\n const { amount_owned, growth_inside } = \"fields\" in item ? item.fields : item;\n if (index === 0) {\n rewarders.reward_amount_owed_0 = amount_owned;\n rewarders.reward_growth_inside_0 = growth_inside;\n } else if (index === 1) {\n rewarders.reward_amount_owed_1 = amount_owned;\n rewarders.reward_growth_inside_1 = growth_inside;\n } else if (index === 2) {\n rewarders.reward_amount_owed_2 = amount_owned;\n rewarders.reward_growth_inside_2 = growth_inside;\n }\n });\n const tick_lower_index = \"fields\" in fields.tick_lower_index ? fields.tick_lower_index.fields.bits : fields.tick_lower_index.bits;\n const tick_upper_index = \"fields\" in fields.tick_upper_index ? fields.tick_upper_index.fields.bits : fields.tick_upper_index.bits;\n const possition = {\n liquidity: fields.liquidity,\n tick_lower_index: asIntN(BigInt(tick_lower_index)),\n tick_upper_index: asIntN(BigInt(tick_upper_index)),\n ...rewarders,\n fee_growth_inside_a: fields.fee_growth_inside_a,\n fee_owed_a: fields.fee_owned_a,\n fee_growth_inside_b: fields.fee_growth_inside_b,\n fee_owed_b: fields.fee_owned_b,\n pos_object_id: fields.position_id\n };\n return possition;\n}\nfunction buildTickData(objects) {\n if (objects.error != null || objects.data?.content?.dataType !== \"moveObject\") {\n throw new ClmmpoolsError(`Tick not exists. Get tick data error:${objects.error}`, \"InvalidTickObject\" /* InvalidTickObject */);\n }\n const fields = getObjectFields(objects);\n const valueItem = fields.value.fields.value.fields;\n const possition = {\n objectId: getObjectId(objects),\n index: asIntN(BigInt(valueItem.index.fields.bits)),\n sqrtPrice: new BN11(valueItem.sqrt_price),\n liquidityNet: new BN11(valueItem.liquidity_net.fields.bits),\n liquidityGross: new BN11(valueItem.liquidity_gross),\n feeGrowthOutsideA: new BN11(valueItem.fee_growth_outside_a),\n feeGrowthOutsideB: new BN11(valueItem.fee_growth_outside_b),\n rewardersGrowthOutside: valueItem.rewards_growth_outside\n };\n return possition;\n}\nfunction buildTickDataByEvent(fields) {\n if (!fields || !fields.index || !fields.sqrt_price || !fields.liquidity_net || !fields.liquidity_gross || !fields.fee_growth_outside_a || !fields.fee_growth_outside_b) {\n throw new ClmmpoolsError(`Invalid tick fields.`, \"InvalidTickFields\" /* InvalidTickFields */);\n }\n const index = asIntN(BigInt(fields.index.bits));\n const sqrtPrice = new BN11(fields.sqrt_price);\n const liquidityNet = new BN11(fields.liquidity_net.bits);\n const liquidityGross = new BN11(fields.liquidity_gross);\n const feeGrowthOutsideA = new BN11(fields.fee_growth_outside_a);\n const feeGrowthOutsideB = new BN11(fields.fee_growth_outside_b);\n const rewardersGrowthOutside = fields.rewards_growth_outside || [];\n const tick = {\n objectId: \"\",\n index,\n sqrtPrice,\n liquidityNet,\n liquidityGross,\n feeGrowthOutsideA,\n feeGrowthOutsideB,\n rewardersGrowthOutside\n };\n return tick;\n}\nfunction buildClmmPositionName(pool_index, position_index) {\n return `Cetus LP | Pool${pool_index}-${position_index}`;\n}\n\n// src/utils/tick.ts\nimport BN12 from \"bn.js\";\nvar TickUtil = class {\n /**\n * Get min tick index.\n * @param tick_spacing tick spacing\n * @retruns min tick index\n */\n static getMinIndex(tickSpacing) {\n return MIN_TICK_INDEX + Math.abs(MIN_TICK_INDEX) % tickSpacing;\n }\n /**\n * Get max tick index.\n * @param tick_spacing - tick spacing\n * @retruns max tick index\n */\n // eslint-disable-next-line camelcase\n static getMaxIndex(tickSpacing) {\n return MAX_TICK_INDEX - MAX_TICK_INDEX % tickSpacing;\n }\n};\nfunction getNearestTickByTick(tickIndex, tickSpacing) {\n const mod = Math.abs(tickIndex) % tickSpacing;\n if (tickIndex > 0) {\n if (mod > tickSpacing / 2) {\n return tickIndex + tickSpacing - mod;\n }\n return tickIndex - mod;\n }\n if (mod > tickSpacing / 2) {\n return tickIndex - tickSpacing + mod;\n }\n return tickIndex + mod;\n}\nfunction getRewardInTickRange(pool, tickLower, tickUpper, tickLowerIndex, tickUpperIndex, growthGlobal) {\n const rewarderInfos = pool.rewarder_infos;\n const rewarderGrowthInside = [];\n for (let i = 0; i < rewarderInfos.length; i += 1) {\n let rewarder_growth_below = growthGlobal[i];\n if (tickLower !== null) {\n if (pool.current_tick_index < tickLowerIndex) {\n rewarder_growth_below = growthGlobal[i].sub(new BN12(tickLower.rewardersGrowthOutside[i]));\n } else {\n rewarder_growth_below = tickLower.rewardersGrowthOutside[i];\n }\n }\n let rewarder_growth_above = new BN12(0);\n if (tickUpper !== null) {\n if (pool.current_tick_index >= tickUpperIndex) {\n rewarder_growth_above = growthGlobal[i].sub(new BN12(tickUpper.rewardersGrowthOutside[i]));\n } else {\n rewarder_growth_above = tickUpper.rewardersGrowthOutside[i];\n }\n }\n const rewGrowthInside = MathUtil.subUnderflowU128(\n MathUtil.subUnderflowU128(new BN12(growthGlobal[i]), new BN12(rewarder_growth_below)),\n new BN12(rewarder_growth_above)\n );\n rewarderGrowthInside.push(rewGrowthInside);\n }\n return rewarderGrowthInside;\n}\n\n// src/utils/transaction-util.ts\nimport BN13 from \"bn.js\";\nimport Decimal4 from \"decimal.js\";\nimport { Transaction } from \"@mysten/sui/transactions\";\nfunction findAdjustCoin(coinPair) {\n const isAdjustCoinA = CoinAssist.isSuiCoin(coinPair.coinTypeA);\n const isAdjustCoinB = CoinAssist.isSuiCoin(coinPair.coinTypeB);\n return { isAdjustCoinA, isAdjustCoinB };\n}\nfunction reverSlippageAmount(slippageAmount, slippage) {\n return Decimal4.ceil(d(slippageAmount).div(1 + slippage)).toString();\n}\nasync function printTransaction(tx, isPrint = true) {\n console.log(`inputs`, tx.blockData.inputs);\n tx.blockData.transactions.forEach((item, index) => {\n if (isPrint) {\n console.log(`transaction ${index}: `, item);\n }\n });\n}\nvar _TransactionUtil = class {\n static createCollectRewarderAndFeeParams(sdk, tx, params, allCoinAsset, allCoinAssetA, allCoinAssetB) {\n if (allCoinAssetA === void 0) {\n allCoinAssetA = [...allCoinAsset];\n }\n if (allCoinAssetB === void 0) {\n allCoinAssetB = [...allCoinAsset];\n }\n const coinTypeA = normalizeCoinType(params.coinTypeA);\n const coinTypeB = normalizeCoinType(params.coinTypeB);\n if (params.collect_fee) {\n const primaryCoinAInput = _TransactionUtil.buildCoinForAmount(tx, allCoinAssetA, BigInt(0), coinTypeA, false);\n allCoinAssetA = primaryCoinAInput.remainCoins;\n const primaryCoinBInput = _TransactionUtil.buildCoinForAmount(tx, allCoinAssetB, BigInt(0), coinTypeB, false);\n allCoinAssetB = primaryCoinBInput.remainCoins;\n tx = sdk.Position.createCollectFeePaylod(\n {\n pool_id: params.pool_id,\n pos_id: params.pos_id,\n coinTypeA: params.coinTypeA,\n coinTypeB: params.coinTypeB\n },\n tx,\n primaryCoinAInput.targetCoin,\n primaryCoinBInput.targetCoin\n );\n }\n const primaryCoinInputs = [];\n params.rewarder_coin_types.forEach((type) => {\n switch (normalizeCoinType(type)) {\n case coinTypeA:\n primaryCoinInputs.push(_TransactionUtil.buildCoinForAmount(tx, allCoinAssetA, BigInt(0), type, false).targetCoin);\n break;\n case coinTypeB:\n primaryCoinInputs.push(_TransactionUtil.buildCoinForAmount(tx, allCoinAssetB, BigInt(0), type, false).targetCoin);\n break;\n default:\n primaryCoinInputs.push(_TransactionUtil.buildCoinForAmount(tx, allCoinAsset, BigInt(0), type, false).targetCoin);\n break;\n }\n });\n tx = sdk.Rewarder.createCollectRewarderPaylod(params, tx, primaryCoinInputs);\n return tx;\n }\n /**\n * adjust transaction for gas\n * @param sdk\n * @param amount\n * @param tx\n * @returns\n */\n static async adjustTransactionForGas(sdk, allCoins, amount, tx) {\n tx.setSender(sdk.senderAddress);\n const amountCoins = CoinAssist.selectCoinAssetGreaterThanOrEqual(allCoins, amount).selectedCoins;\n if (amountCoins.length === 0) {\n throw new ClmmpoolsError(`Insufficient balance`, \"InsufficientBalance\" /* InsufficientBalance */);\n }\n const totalAmount = CoinAssist.calculateTotalBalance(allCoins);\n if (totalAmount - amount > 1e9) {\n return { fixAmount: amount };\n }\n const estimateGas = await sdk.fullClient.calculationTxGas(tx);\n const gasCoins = CoinAssist.selectCoinAssetGreaterThanOrEqual(\n allCoins,\n BigInt(estimateGas),\n amountCoins.map((item) => item.coinObjectId)\n ).selectedCoins;\n if (gasCoins.length === 0) {\n const newGas = BigInt(estimateGas) + BigInt(500);\n if (totalAmount - amount < newGas) {\n amount -= newGas;\n if (amount < 0) {\n throw new ClmmpoolsError(`gas Insufficient balance`, \"InsufficientBalance\" /* InsufficientBalance */);\n }\n const newTx = new Transaction();\n return { fixAmount: amount, newTx };\n }\n }\n return { fixAmount: amount };\n }\n // -----------------------------------------liquidity-----------------------------------------------//\n /**\n * build add liquidity transaction\n * @param params\n * @param slippage\n * @param curSqrtPrice\n * @returns\n */\n static async buildAddLiquidityFixTokenForGas(sdk, allCoins, params, gasEstimateArg, tx, inputCoinA, inputCoinB) {\n tx = await _TransactionUtil.buildAddLiquidityFixToken(sdk, allCoins, params, tx, inputCoinA, inputCoinB);\n const { isAdjustCoinA } = findAdjustCoin(params);\n const suiAmount = isAdjustCoinA ? params.amount_a : params.amount_b;\n const newResult = await _TransactionUtil.adjustTransactionForGas(\n sdk,\n CoinAssist.getCoinAssets(isAdjustCoinA ? params.coinTypeA : params.coinTypeB, allCoins),\n BigInt(suiAmount),\n tx\n );\n const { fixAmount } = newResult;\n const { newTx } = newResult;\n if (newTx != null) {\n let primaryCoinAInputs;\n let primaryCoinBInputs;\n if (isAdjustCoinA) {\n params.amount_a = Number(fixAmount);\n primaryCoinAInputs = _TransactionUtil.buildAddLiquidityFixTokenCoinInput(\n newTx,\n !params.fix_amount_a,\n fixAmount.toString(),\n params.slippage,\n params.coinTypeA,\n allCoins,\n false\n );\n primaryCoinBInputs = _TransactionUtil.buildAddLiquidityFixTokenCoinInput(\n newTx,\n params.fix_amount_a,\n params.amount_b,\n params.slippage,\n params.coinTypeB,\n allCoins,\n false\n );\n } else {\n params.amount_b = Number(fixAmount);\n primaryCoinAInputs = _TransactionUtil.buildAddLiquidityFixTokenCoinInput(\n newTx,\n !params.fix_amount_a,\n params.amount_a,\n params.slippage,\n params.coinTypeA,\n allCoins,\n false\n );\n primaryCoinBInputs = _TransactionUtil.buildAddLiquidityFixTokenCoinInput(\n newTx,\n params.fix_amount_a,\n fixAmount.toString(),\n params.slippage,\n params.coinTypeB,\n allCoins,\n false\n );\n params = _TransactionUtil.fixAddLiquidityFixTokenParams(params, gasEstimateArg.slippage, gasEstimateArg.curSqrtPrice);\n tx = await _TransactionUtil.buildAddLiquidityFixTokenArgs(newTx, sdk, allCoins, params, primaryCoinAInputs, primaryCoinBInputs);\n return tx;\n }\n }\n return tx;\n }\n /**\n * build add liquidity transaction\n * @param params\n * @param packageId\n * @returns\n */\n static async buildAddLiquidityFixToken(sdk, allCoinAsset, params, tx, inputCoinA, inputCoinB) {\n if (sdk.senderAddress.length === 0) {\n throw Error(\"this config sdk senderAddress is empty\");\n }\n tx = tx || new Transaction();\n let primaryCoinAInputs;\n let primaryCoinBInputs;\n if (inputCoinA == null || inputCoinB == null) {\n primaryCoinAInputs = _TransactionUtil.buildAddLiquidityFixTokenCoinInput(\n tx,\n !params.fix_amount_a,\n params.amount_a,\n params.slippage,\n params.coinTypeA,\n allCoinAsset,\n false\n );\n primaryCoinBInputs = _TransactionUtil.buildAddLiquidityFixTokenCoinInput(\n tx,\n params.fix_amount_a,\n params.amount_b,\n params.slippage,\n params.coinTypeB,\n allCoinAsset,\n false\n );\n } else {\n primaryCoinAInputs = {\n targetCoin: inputCoinA,\n remainCoins: [],\n isMintZeroCoin: false,\n tragetCoinAmount: \"0\"\n };\n primaryCoinBInputs = {\n targetCoin: inputCoinB,\n remainCoins: [],\n isMintZeroCoin: false,\n tragetCoinAmount: \"0\"\n };\n }\n tx = _TransactionUtil.buildAddLiquidityFixTokenArgs(\n tx,\n sdk,\n allCoinAsset,\n params,\n primaryCoinAInputs,\n primaryCoinBInputs\n );\n return tx;\n }\n static buildAddLiquidityFixTokenCoinInput(tx, need_interval_amount, amount, slippage, coinType, allCoinAsset, buildVector = true) {\n return need_interval_amount ? _TransactionUtil.buildCoinForAmountInterval(\n tx,\n allCoinAsset,\n { amountSecond: BigInt(reverSlippageAmount(amount, slippage)), amountFirst: BigInt(amount) },\n coinType,\n buildVector\n ) : _TransactionUtil.buildCoinForAmount(tx, allCoinAsset, BigInt(amount), coinType, buildVector);\n }\n /**\n * fix add liquidity fix token for coin amount\n * @param params\n * @param slippage\n * @param curSqrtPrice\n * @returns\n */\n static fixAddLiquidityFixTokenParams(params, slippage, curSqrtPrice) {\n const coinAmount = params.fix_amount_a ? params.amount_a : params.amount_b;\n const liquidityInput = ClmmPoolUtil.estLiquidityAndcoinAmountFromOneAmounts(\n Number(params.tick_lower),\n Number(params.tick_upper),\n new BN13(coinAmount),\n params.fix_amount_a,\n true,\n slippage,\n curSqrtPrice\n );\n params.amount_a = params.fix_amount_a ? params.amount_a : liquidityInput.tokenMaxA.toNumber();\n params.amount_b = params.fix_amount_a ? liquidityInput.tokenMaxB.toNumber() : params.amount_b;\n return params;\n }\n static buildAddLiquidityFixTokenArgs(tx, sdk, allCoinAsset, params, primaryCoinAInputs, primaryCoinBInputs) {\n const typeArguments = [params.coinTypeA, params.coinTypeB];\n const functionName = params.is_open ? \"open_position_with_liquidity_by_fix_coin\" : \"add_liquidity_by_fix_coin\";\n const { clmm_pool, integrate } = sdk.sdkOptions;\n if (!params.is_open) {\n tx = _TransactionUtil.createCollectRewarderAndFeeParams(\n sdk,\n tx,\n params,\n allCoinAsset,\n primaryCoinAInputs.remainCoins,\n primaryCoinBInputs.remainCoins\n );\n }\n const clmmConfig = getPackagerConfigs(clmm_pool);\n const args = params.is_open ? [\n tx.object(clmmConfig.global_config_id),\n tx.object(params.pool_id),\n tx.pure.u32(Number(asUintN(BigInt(params.tick_lower)).toString())),\n tx.pure.u32(Number(asUintN(BigInt(params.tick_upper)).toString())),\n primaryCoinAInputs.targetCoin,\n primaryCoinBInputs.targetCoin,\n tx.pure.u64(params.amount_a),\n tx.pure.u64(params.amount_b),\n tx.pure.bool(params.fix_amount_a),\n tx.object(CLOCK_ADDRESS)\n ] : [\n tx.object(clmmConfig.global_config_id),\n tx.object(params.pool_id),\n tx.object(params.pos_id),\n primaryCoinAInputs.targetCoin,\n primaryCoinBInputs.targetCoin,\n tx.pure.u64(params.amount_a),\n tx.pure.u64(params.amount_b),\n tx.pure.bool(params.fix_amount_a),\n tx.object(CLOCK_ADDRESS)\n ];\n tx.moveCall({\n target: `${integrate.published_at}::${ClmmIntegratePoolV2Module}::${functionName}`,\n typeArguments,\n arguments: args\n });\n return tx;\n }\n // -------------------------------------------swap--------------------------------------------------//\n /**\n * build add liquidity transaction\n * @param params\n * @param slippage\n * @param curSqrtPrice\n * @returns\n */\n static async buildSwapTransactionForGas(sdk, params, allCoinAsset, gasEstimateArg) {\n let tx = _TransactionUtil.buildSwapTransaction(sdk, params, allCoinAsset);\n tx.setSender(sdk.senderAddress);\n const newResult = await _TransactionUtil.adjustTransactionForGas(\n sdk,\n CoinAssist.getCoinAssets(params.a2b ? params.coinTypeA : params.coinTypeB, allCoinAsset),\n BigInt(params.by_amount_in ? params.amount : params.amount_limit),\n tx\n );\n const { fixAmount, newTx } = newResult;\n if (newTx !== void 0) {\n newTx.setSender(sdk.senderAddress);\n if (params.by_amount_in) {\n params.amount = fixAmount.toString();\n } else {\n params.amount_limit = fixAmount.toString();\n }\n params = await _TransactionUtil.fixSwapParams(sdk, params, gasEstimateArg);\n const primaryCoinInputA = _TransactionUtil.buildCoinForAmount(\n tx,\n allCoinAsset,\n params.a2b ? BigInt(params.by_amount_in ? params.amount : params.amount_limit) : BigInt(0),\n params.coinTypeA\n );\n const primaryCoinInputB = _TransactionUtil.buildCoinForAmount(\n tx,\n allCoinAsset,\n params.a2b ? BigInt(0) : BigInt(params.by_amount_in ? params.amount : params.amount_limit),\n params.coinTypeB\n );\n tx = _TransactionUtil.buildSwapTransactionArgs(newTx, params, sdk.sdkOptions, primaryCoinInputA, primaryCoinInputB);\n }\n return tx;\n }\n /**\n * build swap transaction\n * @param params\n * @param packageId\n * @returns\n */\n static buildSwapTransaction(sdk, params, allCoinAsset) {\n let tx = new Transaction();\n tx.setSender(sdk.senderAddress);\n const primaryCoinInputA = _TransactionUtil.buildCoinForAmount(\n tx,\n allCoinAsset,\n params.a2b ? BigInt(params.by_amount_in ? params.amount : params.amount_limit) : BigInt(0),\n params.coinTypeA,\n false\n );\n const primaryCoinInputB = _TransactionUtil.buildCoinForAmount(\n tx,\n allCoinAsset,\n params.a2b ? BigInt(0) : BigInt(params.by_amount_in ? params.amount : params.amount_limit),\n params.coinTypeB,\n false\n );\n tx = _TransactionUtil.buildSwapTransactionArgs(tx, params, sdk.sdkOptions, primaryCoinInputA, primaryCoinInputB);\n return tx;\n }\n /**\n * build swap transaction\n * @param params\n * @param packageId\n * @returns\n */\n static buildSwapTransactionArgs(tx, params, sdkOptions, primaryCoinInputA, primaryCoinInputB) {\n const { clmm_pool, integrate } = sdkOptions;\n const sqrtPriceLimit = SwapUtils.getDefaultSqrtPriceLimit(params.a2b);\n const typeArguments = [params.coinTypeA, params.coinTypeB];\n const { global_config_id } = getPackagerConfigs(clmm_pool);\n if (global_config_id === void 0) {\n throw Error(\"clmm.config.global_config_id is undefined\");\n }\n const hasSwapPartner = params.swap_partner !== void 0;\n const functionName = hasSwapPartner ? params.a2b ? \"swap_a2b_with_partner\" : \"swap_b2a_with_partner\" : params.a2b ? \"swap_a2b\" : \"swap_b2a\";\n const args = hasSwapPartner ? [\n tx.object(global_config_id),\n tx.object(params.pool_id),\n tx.object(params.swap_partner),\n primaryCoinInputA.targetCoin,\n primaryCoinInputB.targetCoin,\n tx.pure.bool(params.by_amount_in),\n tx.pure.u64(params.amount),\n tx.pure.u64(params.amount_limit),\n tx.pure.u128(sqrtPriceLimit.toString()),\n tx.object(CLOCK_ADDRESS)\n ] : [\n tx.object(global_config_id),\n tx.object(params.pool_id),\n primaryCoinInputA.targetCoin,\n primaryCoinInputB.targetCoin,\n tx.pure.bool(params.by_amount_in),\n tx.pure.u64(params.amount),\n tx.pure.u64(params.amount_limit),\n tx.pure.u128(sqrtPriceLimit.toString()),\n tx.object(CLOCK_ADDRESS)\n ];\n tx.moveCall({\n target: `${integrate.published_at}::${ClmmIntegratePoolV2Module}::${functionName}`,\n typeArguments,\n arguments: args\n });\n return tx;\n }\n // -------------------------------------swap-with-out-transfer-coin-----------------------------------------//\n /**\n * build add liquidity transaction with out transfer coins\n * @param params\n * @param slippage\n * @param curSqrtPrice\n * @returns\n */\n static async buildSwapTransactionWithoutTransferCoinsForGas(sdk, params, allCoinAsset, gasEstimateArg) {\n let { tx, coinABs } = _TransactionUtil.buildSwapTransactionWithoutTransferCoins(sdk, params, allCoinAsset);\n tx.setSender(sdk.senderAddress);\n const newResult = await _TransactionUtil.adjustTransactionForGas(\n sdk,\n CoinAssist.getCoinAssets(params.a2b ? params.coinTypeA : params.coinTypeB, allCoinAsset),\n BigInt(params.by_amount_in ? params.amount : params.amount_limit),\n tx\n );\n const { fixAmount, newTx } = newResult;\n if (newTx !== void 0) {\n newTx.setSender(sdk.senderAddress);\n if (params.by_amount_in) {\n params.amount = fixAmount.toString();\n } else {\n params.amount_limit = fixAmount.toString();\n }\n params = await _TransactionUtil.fixSwapParams(sdk, params, gasEstimateArg);\n const primaryCoinInputA = _TransactionUtil.buildCoinForAmount(\n tx,\n allCoinAsset,\n params.a2b ? BigInt(params.by_amount_in ? params.amount : params.amount_limit) : BigInt(0),\n params.coinTypeA,\n false,\n true\n );\n const primaryCoinInputB = _TransactionUtil.buildCoinForAmount(\n tx,\n allCoinAsset,\n params.a2b ? BigInt(0) : BigInt(params.by_amount_in ? params.amount : params.amount_limit),\n params.coinTypeB,\n false,\n true\n );\n const res = _TransactionUtil.buildSwapTransactionWithoutTransferCoinArgs(\n sdk,\n newTx,\n params,\n sdk.sdkOptions,\n primaryCoinInputA,\n primaryCoinInputB\n );\n tx = res.tx;\n coinABs = res.txRes;\n }\n return { tx, coinABs };\n }\n /**\n * build swap transaction and return swaped coin\n * @param params\n * @param packageId\n * @returns\n */\n static buildSwapTransactionWithoutTransferCoins(sdk, params, allCoinAsset) {\n const tx = new Transaction();\n tx.setSender(sdk.senderAddress);\n const primaryCoinInputA = _TransactionUtil.buildCoinForAmount(\n tx,\n allCoinAsset,\n params.a2b ? BigInt(params.by_amount_in ? params.amount : params.amount_limit) : BigInt(0),\n params.coinTypeA,\n false,\n true\n );\n const primaryCoinInputB = _TransactionUtil.buildCoinForAmount(\n tx,\n allCoinAsset,\n params.a2b ? BigInt(0) : BigInt(params.by_amount_in ? params.amount : params.amount_limit),\n params.coinTypeB,\n false,\n true\n );\n const res = _TransactionUtil.buildSwapTransactionWithoutTransferCoinArgs(\n sdk,\n tx,\n params,\n sdk.sdkOptions,\n primaryCoinInputA,\n primaryCoinInputB\n );\n return { tx: res.tx, coinABs: res.txRes };\n }\n /**\n * build swap transaction\n * @param params\n * @param packageId\n * @returns\n */\n static buildSwapTransactionWithoutTransferCoinArgs(sdk, tx, params, sdkOptions, primaryCoinInputA, primaryCoinInputB) {\n const { clmm_pool, integrate } = sdkOptions;\n const sqrtPriceLimit = SwapUtils.getDefaultSqrtPriceLimit(params.a2b);\n const { global_config_id } = getPackagerConfigs(clmm_pool);\n if (global_config_id === void 0) {\n throw Error(\"clmm.config.global_config_id is undefined\");\n }\n const hasSwapPartner = params.swap_partner !== void 0;\n const functionName = hasSwapPartner ? \"swap_with_partner\" : \"swap\";\n const moduleName = hasSwapPartner ? ClmmIntegrateRouterWithPartnerModule : ClmmIntegrateRouterModule;\n const args = hasSwapPartner ? [\n tx.object(global_config_id),\n tx.object(params.pool_id),\n tx.object(params.swap_partner),\n primaryCoinInputA.targetCoin,\n primaryCoinInputB.targetCoin,\n tx.pure.bool(params.a2b),\n tx.pure.bool(params.by_amount_in),\n tx.pure.u64(params.amount),\n tx.pure.u128(sqrtPriceLimit.toString()),\n tx.pure.bool(false),\n // use coin value always set false.\n tx.object(CLOCK_ADDRESS)\n ] : [\n tx.object(global_config_id),\n tx.object(params.pool_id),\n primaryCoinInputA.targetCoin,\n primaryCoinInputB.targetCoin,\n tx.pure.bool(params.a2b),\n tx.pure.bool(params.by_amount_in),\n tx.pure.u64(params.amount),\n tx.pure.u128(sqrtPriceLimit.toString()),\n tx.pure.bool(false),\n // use coin value always set false.\n tx.object(CLOCK_ADDRESS)\n ];\n const typeArguments = [params.coinTypeA, params.coinTypeB];\n const coinABs = tx.moveCall({\n target: `${integrate.published_at}::${moduleName}::${functionName}`,\n typeArguments,\n arguments: args\n });\n if (params.by_amount_in) {\n const toCoinType = params.a2b ? params.coinTypeB : params.coinTypeA;\n const toCoin = params.a2b ? coinABs[1] : coinABs[0];\n const totalAmount = Number(params.amount_limit);\n this.checkCoinThreshold(sdk, params.by_amount_in, tx, toCoin, totalAmount, toCoinType);\n }\n return { tx, txRes: coinABs };\n }\n static async fixSwapParams(sdk, params, gasEstimateArg) {\n const { currentPool } = gasEstimateArg;\n try {\n const res = await sdk.Swap.preswap({\n decimalsA: gasEstimateArg.decimalsA,\n decimalsB: gasEstimateArg.decimalsB,\n a2b: params.a2b,\n byAmountIn: params.by_amount_in,\n amount: params.amount,\n pool: currentPool,\n currentSqrtPrice: currentPool.current_sqrt_price,\n coinTypeA: currentPool.coinTypeA,\n coinTypeB: currentPool.coinTypeB\n });\n const toAmount = gasEstimateArg.byAmountIn ? res.estimatedAmountOut : res.estimatedAmountIn;\n const amountLimit = adjustForSlippage(toAmount, gasEstimateArg.slippage, !gasEstimateArg.byAmountIn);\n params.amount_limit = amountLimit.toString();\n } catch (error) {\n console.log(\"fixSwapParams\", error);\n }\n return params;\n }\n static async syncBuildCoinInputForAmount(sdk, tx, amount, coinType, buildVector = true) {\n if (sdk.senderAddress.length === 0) {\n throw Error(\"this config sdk senderAddress is empty\");\n }\n const allCoins = await sdk.getOwnerCoinAssets(sdk.senderAddress, coinType);\n const primaryCoinInput = _TransactionUtil.buildCoinForAmount(tx, allCoins, amount, coinType, buildVector).targetCoin;\n return primaryCoinInput;\n }\n static buildCoinForAmount(tx, allCoins, amount, coinType, buildVector = true, fixAmount = false) {\n const coinAssets = CoinAssist.getCoinAssets(coinType, allCoins);\n if (amount === BigInt(0) && coinAssets.length === 0) {\n return _TransactionUtil.buildZeroValueCoin(allCoins, tx, coinType, buildVector);\n }\n const amountTotal = CoinAssist.calculateTotalBalance(coinAssets);\n if (amountTotal < amount) {\n throw new ClmmpoolsError(\n `The amount(${amountTotal}) is Insufficient balance for ${coinType} , expect ${amount} `,\n \"InsufficientBalance\" /* InsufficientBalance */\n );\n }\n return _TransactionUtil.buildCoin(tx, allCoins, coinAssets, amount, coinType, buildVector, fixAmount);\n }\n static buildCoin(tx, allCoins, coinAssets, amount, coinType, buildVector = true, fixAmount = false) {\n if (CoinAssist.isSuiCoin(coinType)) {\n if (buildVector) {\n const amountCoin2 = tx.splitCoins(tx.gas, [tx.pure.u64(amount)]);\n return {\n targetCoin: tx.makeMoveVec({ elements: [amountCoin2] }),\n remainCoins: allCoins,\n tragetCoinAmount: amount.toString(),\n isMintZeroCoin: false,\n originalSplitedCoin: tx.gas\n };\n }\n if (amount === 0n && coinAssets.length > 1) {\n const selectedCoinsResult3 = CoinAssist.selectCoinObjectIdGreaterThanOrEqual(coinAssets, amount);\n return {\n targetCoin: tx.object(selectedCoinsResult3.objectArray[0]),\n remainCoins: selectedCoinsResult3.remainCoins,\n tragetCoinAmount: selectedCoinsResult3.amountArray[0],\n isMintZeroCoin: false\n };\n }\n const selectedCoinsResult2 = CoinAssist.selectCoinObjectIdGreaterThanOrEqual(coinAssets, amount);\n const amountCoin = tx.splitCoins(tx.gas, [tx.pure.u64(amount)]);\n return {\n targetCoin: amountCoin,\n remainCoins: selectedCoinsResult2.remainCoins,\n tragetCoinAmount: amount.toString(),\n isMintZeroCoin: false,\n originalSplitedCoin: tx.gas\n };\n }\n const selectedCoinsResult = CoinAssist.selectCoinObjectIdGreaterThanOrEqual(coinAssets, amount);\n const totalSelectedCoinAmount = selectedCoinsResult.amountArray.reduce((a, b) => Number(a) + Number(b), 0).toString();\n const coinObjectIds = selectedCoinsResult.objectArray;\n if (buildVector) {\n return {\n targetCoin: tx.makeMoveVec({ elements: coinObjectIds.map((id) => tx.object(id)) }),\n remainCoins: selectedCoinsResult.remainCoins,\n tragetCoinAmount: selectedCoinsResult.amountArray.reduce((a, b) => Number(a) + Number(b), 0).toString(),\n isMintZeroCoin: false\n };\n }\n const [primaryCoinA, ...mergeCoinAs] = coinObjectIds;\n const primaryCoinAObject = tx.object(primaryCoinA);\n let targetCoin = primaryCoinAObject;\n let tragetCoinAmount = selectedCoinsResult.amountArray.reduce((a, b) => Number(a) + Number(b), 0).toString();\n let originalSplitedCoin;\n if (mergeCoinAs.length > 0) {\n tx.mergeCoins(\n primaryCoinAObject,\n mergeCoinAs.map((coin) => tx.object(coin))\n );\n }\n if (fixAmount && Number(totalSelectedCoinAmount) > Number(amount)) {\n targetCoin = tx.splitCoins(primaryCoinAObject, [tx.pure.u64(amount)]);\n tragetCoinAmount = amount.toString();\n originalSplitedCoin = primaryCoinAObject;\n }\n return {\n targetCoin,\n remainCoins: selectedCoinsResult.remainCoins,\n originalSplitedCoin,\n tragetCoinAmount,\n isMintZeroCoin: false\n };\n }\n static buildZeroValueCoin(allCoins, tx, coinType, buildVector = true) {\n const zeroCoin = _TransactionUtil.callMintZeroValueCoin(tx, coinType);\n let targetCoin;\n if (buildVector) {\n targetCoin = tx.makeMoveVec({ elements: [zeroCoin] });\n } else {\n targetCoin = zeroCoin;\n }\n return {\n targetCoin,\n remainCoins: allCoins,\n isMintZeroCoin: true,\n tragetCoinAmount: \"0\"\n };\n }\n static buildCoinForAmountInterval(tx, allCoins, amounts, coinType, buildVector = true) {\n const coinAssets = CoinAssist.getCoinAssets(coinType, allCoins);\n if (amounts.amountFirst === BigInt(0)) {\n if (coinAssets.length > 0) {\n return _TransactionUtil.buildCoin(tx, [...allCoins], [...coinAssets], amounts.amountFirst, coinType, buildVector);\n }\n return _TransactionUtil.buildZeroValueCoin(allCoins, tx, coinType, buildVector);\n }\n const amountTotal = CoinAssist.calculateTotalBalance(coinAssets);\n if (amountTotal >= amounts.amountFirst) {\n return _TransactionUtil.buildCoin(tx, [...allCoins], [...coinAssets], amounts.amountFirst, coinType, buildVector);\n }\n if (amountTotal < amounts.amountSecond) {\n throw new ClmmpoolsError(\n `The amount(${amountTotal}) is Insufficient balance for ${coinType} , expect ${amounts.amountSecond} `,\n \"InsufficientBalance\" /* InsufficientBalance */\n );\n }\n return _TransactionUtil.buildCoin(tx, [...allCoins], [...coinAssets], amounts.amountSecond, coinType, buildVector);\n }\n // ------------------------------------------router-v1-------------------------------------------------//\n static async buildRouterSwapTransaction(sdk, params, byAmountIn, allCoinAsset, recipient) {\n let tx = new Transaction();\n if (params.paths.length > 1) {\n params.partner = \"\";\n }\n tx = await this.buildRouterBasePathTx(sdk, params, byAmountIn, allCoinAsset, tx, recipient);\n return tx;\n }\n static async buildRouterBasePathTx(sdk, params, byAmountIn, allCoinAsset, tx, recipient) {\n const validPaths = params.paths.filter((path) => path && path.poolAddress);\n const inputAmount = Number(validPaths.reduce((total, path) => total.add(path.amountIn), ZERO).toString());\n const outputAmount = Number(validPaths.reduce((total, path) => total.add(path.amountOut), ZERO).toString());\n const totalAmountLimit = byAmountIn ? Math.round(Number(outputAmount.toString()) * (1 - params.priceSlippagePoint)) : Math.round(Number(inputAmount.toString()) * (1 + params.priceSlippagePoint));\n const fromCoinType = params.paths[0].coinType[0];\n const toCoinType = params.paths[0].coinType[params.paths[0].coinType.length - 1];\n const fromCoinBuildResult = _TransactionUtil.buildCoinForAmount(\n tx,\n allCoinAsset,\n byAmountIn ? BigInt(inputAmount) : BigInt(totalAmountLimit),\n fromCoinType,\n false,\n true\n );\n const isSplited = fromCoinBuildResult.originalSplitedCoin !== void 0;\n const toCoinBuildResult = _TransactionUtil.buildCoinForAmount(tx, allCoinAsset, 0n, toCoinType, false);\n const buildRouterBasePathReturnCoin = await this.buildRouterBasePathReturnCoins(\n sdk,\n params,\n byAmountIn,\n fromCoinBuildResult,\n toCoinBuildResult,\n tx\n );\n const transferedCoins = [];\n const { toCoin, fromCoin } = buildRouterBasePathReturnCoin;\n tx = buildRouterBasePathReturnCoin.tx;\n if (toCoinBuildResult.isMintZeroCoin) {\n transferedCoins.push({\n coinType: toCoinType,\n coin: toCoin\n });\n } else if (toCoinBuildResult.originalSplitedCoin !== void 0) {\n tx.mergeCoins(toCoinBuildResult.originalSplitedCoin, [toCoin]);\n } else {\n tx.mergeCoins(toCoinBuildResult.targetCoin, [toCoin]);\n }\n if (isSplited) {\n const originalSplitedFromCoin = fromCoinBuildResult?.originalSplitedCoin;\n tx.mergeCoins(originalSplitedFromCoin, [fromCoin]);\n } else {\n transferedCoins.push({\n coinType: fromCoinType,\n coin: fromCoin\n });\n }\n for (let i = 0; i < transferedCoins.length; i++) {\n this.buildTransferCoin(sdk, tx, transferedCoins[i].coin, transferedCoins[i].coinType, recipient);\n }\n return tx;\n }\n static async buildRouterBasePathReturnCoins(sdk, params, byAmountIn, fromCoinBuildRes, toCoinBuildRes, tx) {\n const { clmm_pool, integrate } = sdk.sdkOptions;\n const globalConfigID = getPackagerConfigs(clmm_pool).global_config_id;\n const validPaths = params.paths.filter((path) => path && path.poolAddress);\n const inputAmount = Number(validPaths.reduce((total, path) => total.add(path.amountIn), ZERO).toString());\n const outputAmount = Number(validPaths.reduce((total, path) => total.add(path.amountOut), ZERO).toString());\n const totalAmountLimit = byAmountIn ? Math.round(Number(outputAmount.toString()) * (1 - params.priceSlippagePoint)) : Math.round(Number(inputAmount.toString()) * (1 + params.priceSlippagePoint));\n const fromCoinType = params.paths[0].coinType[0];\n const toCoinType = params.paths[0].coinType[params.paths[0].coinType.length - 1];\n let fromCoin = fromCoinBuildRes.targetCoin;\n let toCoin;\n if (toCoinBuildRes.isMintZeroCoin || toCoinBuildRes.originalSplitedCoin !== void 0) {\n toCoin = toCoinBuildRes.targetCoin;\n } else {\n toCoin = _TransactionUtil.callMintZeroValueCoin(tx, toCoinType);\n }\n const noPartner = params.partner === \"\";\n const moduleName = noPartner ? ClmmIntegrateRouterModule : ClmmIntegrateRouterWithPartnerModule;\n for (const path of validPaths) {\n if (path.poolAddress.length === 1) {\n const a2b = path.a2b[0];\n const swapParams = {\n amount: Number(path.amountIn.toString()),\n amountLimit: totalAmountLimit,\n poolCoinA: path.a2b[0] ? fromCoinType : toCoinType,\n poolCoinB: path.a2b[0] ? toCoinType : fromCoinType\n };\n const functionName = noPartner ? \"swap\" : \"swap_with_partner\";\n const poolCoinA = a2b ? fromCoin : toCoin;\n const poolCoinB = a2b ? toCoin : fromCoin;\n const amount = byAmountIn ? path.amountIn.toString() : path.amountOut.toString();\n const sqrtPriceLimit = SwapUtils.getDefaultSqrtPriceLimit(a2b).toString();\n const args = noPartner ? [\n tx.object(globalConfigID),\n tx.object(path.poolAddress[0]),\n poolCoinA,\n poolCoinB,\n tx.pure.bool(a2b),\n tx.pure.bool(byAmountIn),\n tx.pure.u64(amount),\n tx.pure.u128(sqrtPriceLimit),\n tx.pure.bool(false),\n tx.object(CLOCK_ADDRESS)\n ] : [\n tx.object(globalConfigID),\n tx.object(path.poolAddress[0]),\n tx.object(params.partner),\n poolCoinA,\n poolCoinB,\n tx.pure.bool(a2b),\n tx.pure.bool(byAmountIn),\n tx.pure.u64(amount),\n tx.pure.u128(sqrtPriceLimit),\n tx.pure.bool(false),\n tx.object(CLOCK_ADDRESS)\n ];\n const typeArguments = [swapParams.poolCoinA, swapParams.poolCoinB];\n const coinABs = tx.moveCall({\n target: `${sdk.sdkOptions.integrate.published_at}::${moduleName}::${functionName}`,\n typeArguments,\n arguments: args\n });\n fromCoin = a2b ? coinABs[0] : coinABs[1];\n toCoin = a2b ? coinABs[1] : coinABs[0];\n } else {\n const amount0 = byAmountIn ? path.amountIn : path.rawAmountLimit[0];\n const amount1 = byAmountIn ? 0 : path.amountOut;\n let functionName = \"\";\n if (path.a2b[0]) {\n if (path.a2b[1]) {\n functionName = \"swap_ab_bc\";\n } else {\n functionName = \"swap_ab_cb\";\n }\n } else if (path.a2b[1]) {\n functionName = \"swap_ba_bc\";\n } else {\n functionName = \"swap_ba_cb\";\n }\n if (!noPartner) {\n functionName = `${functionName}_with_partner`;\n }\n const sqrtPriceLimit0 = SwapUtils.getDefaultSqrtPriceLimit(path.a2b[0]);\n const sqrtPriceLimit1 = SwapUtils.getDefaultSqrtPriceLimit(path.a2b[1]);\n const args = noPartner ? [\n tx.object(globalConfigID),\n tx.object(path.poolAddress[0]),\n tx.object(path.poolAddress[1]),\n fromCoin,\n toCoin,\n tx.pure.bool(byAmountIn),\n tx.pure.u64(amount0.toString()),\n tx.pure.u64(amount1.toString()),\n tx.pure.u128(sqrtPriceLimit0.toString()),\n tx.pure.u128(sqrtPriceLimit1.toString()),\n tx.object(CLOCK_ADDRESS)\n ] : [\n tx.object(globalConfigID),\n tx.object(path.poolAddress[0]),\n tx.object(path.poolAddress[1]),\n tx.object(params.partner),\n fromCoin,\n toCoin,\n tx.pure.bool(byAmountIn),\n tx.pure.u64(amount0.toString()),\n tx.pure.u64(amount1.toString()),\n tx.pure.u128(sqrtPriceLimit0.toString()),\n tx.pure.u128(sqrtPriceLimit1.toString()),\n tx.object(CLOCK_ADDRESS)\n ];\n const typeArguments = [path.coinType[0], path.coinType[1], path.coinType[2]];\n const fromToCoins = tx.moveCall({\n target: `${integrate.published_at}::${moduleName}::${functionName}`,\n typeArguments,\n arguments: args\n });\n fromCoin = fromToCoins[0];\n toCoin = fromToCoins[1];\n }\n }\n this.checkCoinThreshold(sdk, byAmountIn, tx, toCoin, totalAmountLimit, toCoinType);\n return { fromCoin, toCoin, tx };\n }\n // ------------------------------------------router-v2-------------------------------------------------//\n static async buildAggregatorSwapReturnCoins(sdk, param, fromCoinBuildRes, toCoinBuildRes, partner, priceSplitPoint, tx, recipient) {\n if (recipient == null) {\n if (sdk.senderAddress.length === 0) {\n throw Error(\"recipient and this config sdk senderAddress all not set\");\n }\n recipient = sdk.senderAddress;\n }\n if (param.splitPaths.length > 1) {\n partner = \"\";\n }\n let fromCoin;\n let toCoin;\n const hasExternalPool = param.splitPaths.some((splitPath) => splitPath.basePaths.some((basePath) => basePath.label === \"Deepbook\"));\n if ((!param.byAmountIn || param.splitPaths.length === 1) && !hasExternalPool) {\n const onePaths = [];\n for (const splitPath of param.splitPaths) {\n const a2b = [];\n const poolAddress = [];\n const rawAmountLimit = [];\n const coinType = [];\n for (let i = 0; i < splitPath.basePaths.length; i += 1) {\n const basePath = splitPath.basePaths[i];\n a2b.push(basePath.direction);\n poolAddress.push(basePath.poolAddress);\n rawAmountLimit.push(new BN13(basePath.inputAmount.toString()));\n if (i === 0) {\n coinType.push(basePath.fromCoin, basePath.toCoin);\n } else {\n coinType.push(basePath.toCoin);\n }\n }\n const onePath = {\n amountIn: new BN13(splitPath.inputAmount.toString()),\n amountOut: new BN13(splitPath.outputAmount.toString()),\n poolAddress,\n a2b,\n rawAmountLimit,\n isExceed: false,\n coinType\n };\n onePaths.push(onePath);\n }\n const params = {\n paths: onePaths,\n partner,\n priceSlippagePoint: priceSplitPoint\n };\n const buildRouterBasePathReturnCoinRes = await this.buildRouterBasePathReturnCoins(\n sdk,\n params,\n param.byAmountIn,\n fromCoinBuildRes,\n toCoinBuildRes,\n tx\n );\n fromCoin = buildRouterBasePathReturnCoinRes.fromCoin;\n toCoin = buildRouterBasePathReturnCoinRes.toCoin;\n tx = buildRouterBasePathReturnCoinRes.tx;\n } else {\n const amountLimit = Math.round(param.outputAmount * (1 - priceSplitPoint));\n fromCoin = fromCoinBuildRes.targetCoin;\n if (toCoinBuildRes.isMintZeroCoin || toCoinBuildRes.originalSplitedCoin !== void 0) {\n toCoin = toCoinBuildRes.targetCoin;\n } else {\n toCoin = _TransactionUtil.callMintZeroValueCoin(tx, param.toCoin);\n }\n let isCreateAccountCap = false;\n let accountCap;\n if (hasExternalPool) {\n const [cap, createAccountCapTX] = DeepbookUtils.createAccountCap(recipient, sdk.sdkOptions, tx);\n tx = createAccountCapTX;\n accountCap = cap;\n isCreateAccountCap = true;\n }\n for (let i = 0; i < param.splitPaths.length; i += 1) {\n const splitPath = param.splitPaths[i];\n let middleCoin;\n for (let i2 = 0; i2 < splitPath.basePaths.length; i2 += 1) {\n const basePath = splitPath.basePaths[i2];\n if (basePath.label === \"Deepbook\") {\n if (i2 === 0) {\n if (splitPath.basePaths.length === 1) {\n const deepbookTxBuild = this.buildDeepbookBasePathTx(sdk, basePath, tx, accountCap, fromCoin, toCoin, false);\n fromCoin = deepbookTxBuild.from;\n toCoin = deepbookTxBuild.to;\n } else {\n middleCoin = _TransactionUtil.callMintZeroValueCoin(tx, basePath.toCoin);\n const deepbookTxBuild = this.buildDeepbookBasePathTx(sdk, basePath, tx, accountCap, fromCoin, middleCoin, false);\n fromCoin = deepbookTxBuild.from;\n middleCoin = deepbookTxBuild.to;\n }\n } else {\n const deepbookTxBuild = this.buildDeepbookBasePathTx(sdk, basePath, tx, accountCap, middleCoin, toCoin, true);\n middleCoin = deepbookTxBuild.from;\n toCoin = deepbookTxBuild.to;\n }\n }\n if (basePath.label === \"Cetus\") {\n if (i2 === 0) {\n if (splitPath.basePaths.length === 1) {\n const clmmTxBuild = this.buildClmmBasePathTx(sdk, basePath, tx, param.byAmountIn, fromCoin, toCoin, false, partner);\n fromCoin = clmmTxBuild.from;\n toCoin = clmmTxBuild.to;\n } else {\n middleCoin = _TransactionUtil.callMintZeroValueCoin(tx, basePath.toCoin);\n const clmmTxBuild = this.buildClmmBasePathTx(sdk, basePath, tx, param.byAmountIn, fromCoin, middleCoin, false, partner);\n fromCoin = clmmTxBuild.from;\n middleCoin = clmmTxBuild.to;\n }\n } else {\n const clmmTxBuild = this.buildClmmBasePathTx(sdk, basePath, tx, param.byAmountIn, middleCoin, toCoin, true, partner);\n middleCoin = clmmTxBuild.from;\n toCoin = clmmTxBuild.to;\n tx.moveCall({\n target: `${sdk.sdkOptions.integrate.published_at}::${ClmmIntegrateUtilsModule}::send_coin`,\n typeArguments: [basePath.fromCoin],\n arguments: [middleCoin, tx.pure.address(recipient)]\n });\n }\n }\n }\n }\n this.checkCoinThreshold(sdk, param.byAmountIn, tx, toCoin, amountLimit, param.toCoin);\n if (isCreateAccountCap) {\n tx = DeepbookUtils.deleteAccountCapByObject(accountCap, sdk.sdkOptions, tx);\n }\n }\n return { fromCoin, toCoin, tx };\n }\n static async buildAggregatorSwapTransaction(sdk, param, allCoinAsset, partner, priceSlippagePoint, recipient) {\n let tx = new Transaction();\n const amountLimit = param.byAmountIn ? Math.round(param.outputAmount * (1 - priceSlippagePoint)) : Math.round(param.inputAmount * (1 + priceSlippagePoint));\n const fromCoinBuildResult = _TransactionUtil.buildCoinForAmount(\n tx,\n allCoinAsset,\n param.byAmountIn ? BigInt(param.inputAmount) : BigInt(amountLimit),\n param.fromCoin,\n false,\n true\n );\n const isSplited = fromCoinBuildResult.originalSplitedCoin != null;\n const toCoinBuildResult = _TransactionUtil.buildCoinForAmount(tx, allCoinAsset, 0n, param.toCoin, false);\n const buildAggregatorSwapReturnCoinsRes = await this.buildAggregatorSwapReturnCoins(\n sdk,\n param,\n fromCoinBuildResult,\n toCoinBuildResult,\n partner,\n priceSlippagePoint,\n tx,\n recipient\n );\n const { fromCoin, toCoin } = buildAggregatorSwapReturnCoinsRes;\n tx = buildAggregatorSwapReturnCoinsRes.tx;\n const transferedCoins = [];\n if (toCoinBuildResult.isMintZeroCoin) {\n transferedCoins.push({\n coinType: param.toCoin,\n coin: toCoin\n });\n } else if (toCoinBuildResult.originalSplitedCoin != null) {\n tx.mergeCoins(toCoinBuildResult.originalSplitedCoin, [toCoin]);\n } else {\n tx.mergeCoins(toCoinBuildResult.targetCoin, [toCoin]);\n }\n if (isSplited) {\n const originalSplitedFromCoin = fromCoinBuildResult.originalSplitedCoin;\n tx.mergeCoins(originalSplitedFromCoin, [fromCoin]);\n } else {\n transferedCoins.push({\n coinType: param.fromCoin,\n coin: fromCoin\n });\n }\n for (let i = 0; i < transferedCoins.length; i++) {\n this.buildTransferCoin(sdk, tx, transferedCoins[i].coin, transferedCoins[i].coinType, recipient);\n }\n return tx;\n }\n static checkCoinThreshold(sdk, byAmountIn, tx, coin, amountLimit, coinType) {\n if (byAmountIn) {\n tx.moveCall({\n target: `${sdk.sdkOptions.integrate.published_at}::${ClmmIntegrateRouterModule}::check_coin_threshold`,\n typeArguments: [coinType],\n arguments: [coin, tx.pure.u64(amountLimit)]\n });\n }\n }\n static buildDeepbookBasePathTx(sdk, basePath, tx, accountCap, from, to, middleStep) {\n const base = basePath.direction ? from : to;\n const quote = basePath.direction ? to : from;\n const args = [\n tx.object(basePath.poolAddress),\n accountCap,\n tx.pure.u64(basePath.inputAmount),\n tx.pure.u64(0),\n tx.pure.bool(basePath.direction),\n base,\n quote,\n tx.pure.bool(middleStep),\n tx.object(CLOCK_ADDRESS)\n ];\n const typeArguments = basePath.direction ? [basePath.fromCoin, basePath.toCoin] : [basePath.toCoin, basePath.fromCoin];\n const coinAB = tx.moveCall({\n target: `${sdk.sdkOptions.deepbook_endpoint_v2.published_at}::endpoints_v2::swap`,\n typeArguments,\n arguments: args\n });\n from = basePath.direction ? coinAB[0] : coinAB[1];\n to = basePath.direction ? coinAB[1] : coinAB[0];\n return {\n from,\n to,\n tx\n };\n }\n static buildClmmBasePathTx(sdk, basePath, tx, byAmountIn, from, to, middleStep, partner) {\n const { clmm_pool, integrate } = sdk.sdkOptions;\n const globalConfigID = getPackagerConfigs(clmm_pool).global_config_id;\n let coinA = basePath.direction ? from : to;\n let coinB = basePath.direction ? to : from;\n const noPartner = partner === \"\";\n const moduleName = noPartner ? ClmmIntegrateRouterModule : ClmmIntegrateRouterWithPartnerModule;\n const functionName = noPartner ? \"swap\" : \"swap_with_partner\";\n const amount = byAmountIn ? basePath.inputAmount.toString() : basePath.outputAmount.toString();\n const sqrtPriceLimit = SwapUtils.getDefaultSqrtPriceLimit(basePath.direction);\n const args = noPartner ? [\n tx.object(globalConfigID),\n tx.object(basePath.poolAddress),\n coinA,\n coinB,\n tx.pure.bool(basePath.direction),\n tx.pure.bool(byAmountIn),\n tx.pure.u64(amount),\n tx.pure.u128(sqrtPriceLimit.toString()),\n tx.pure.bool(middleStep),\n tx.object(CLOCK_ADDRESS)\n ] : [\n tx.object(globalConfigID),\n tx.object(basePath.poolAddress),\n tx.object(partner),\n coinA,\n coinB,\n tx.pure.bool(basePath.direction),\n tx.pure.bool(byAmountIn),\n tx.pure.u64(amount),\n tx.pure.u128(sqrtPriceLimit.toString()),\n tx.pure.bool(middleStep),\n tx.object(CLOCK_ADDRESS)\n ];\n const typeArguments = basePath.direction ? [basePath.fromCoin, basePath.toCoin] : [basePath.toCoin, basePath.fromCoin];\n const coinAB = tx.moveCall({\n target: `${integrate.published_at}::${moduleName}::${functionName}`,\n typeArguments,\n arguments: args\n });\n coinA = coinAB[0];\n coinB = coinAB[1];\n from = basePath.direction ? coinA : coinB;\n to = basePath.direction ? coinB : coinA;\n return {\n from,\n to,\n tx\n };\n }\n static buildCoinTypePair(coinTypes, partitionQuantities) {\n const coinTypePair = [];\n if (coinTypes.length === 2) {\n const pair = [];\n pair.push(coinTypes[0], coinTypes[1]);\n coinTypePair.push(pair);\n } else {\n const directPair = [];\n directPair.push(coinTypes[0], coinTypes[coinTypes.length - 1]);\n coinTypePair.push(directPair);\n for (let i = 1; i < coinTypes.length - 1; i += 1) {\n if (partitionQuantities[i - 1] === 0) {\n continue;\n }\n const pair = [];\n pair.push(coinTypes[0], coinTypes[i], coinTypes[coinTypes.length - 1]);\n coinTypePair.push(pair);\n }\n }\n return coinTypePair;\n }\n // ------------------------------------------utils-------------------------------------------------//\n static buildTransferCoinToSender(sdk, tx, coin, coinType) {\n tx.moveCall({\n target: `${sdk.sdkOptions.integrate.published_at}::${ClmmIntegrateUtilsModule}::transfer_coin_to_sender`,\n typeArguments: [coinType],\n arguments: [coin]\n });\n }\n // If recipient not set, transfer objects move call will use ctx sender\n static buildTransferCoin(sdk, tx, coin, coinType, recipient) {\n if (recipient != null) {\n tx.transferObjects([coin], tx.pure.address(recipient));\n } else {\n _TransactionUtil.buildTransferCoinToSender(sdk, tx, coin, coinType);\n }\n }\n};\nvar TransactionUtil = _TransactionUtil;\n__publicField(TransactionUtil, \"callMintZeroValueCoin\", (txb, coinType) => {\n return txb.moveCall({\n target: \"0x2::coin::zero\",\n typeArguments: [coinType]\n });\n});\n\n// src/utils/tx-block.ts\nimport { Transaction as Transaction2 } from \"@mysten/sui/transactions\";\nfunction checkInvalidSuiAddress(address) {\n if (!address.startsWith(\"0x\") || address.length !== 66) {\n return false;\n }\n return true;\n}\nvar TxBlock = class {\n txBlock;\n constructor() {\n this.txBlock = new Transaction2();\n }\n /**\n * Transfer sui to many recipoents.\n * @param {string[]}recipients The recipient addresses.\n * @param {number[]}amounts The amounts of sui coins to be transferred.\n * @returns this\n */\n transferSuiToMany(recipients, amounts) {\n if (recipients.length !== amounts.length) {\n throw new ClmmpoolsError(\"The length of recipients and amounts must be the same\", \"InvalidRecipientAndAmountLength\" /* InvalidRecipientAndAmountLength */);\n }\n for (const recipient of recipients) {\n if (!checkInvalidSuiAddress(recipient) === false) {\n throw new ClmmpoolsError(\"Invalid recipient address\", \"InvalidRecipientAddress\" /* InvalidRecipientAddress */);\n }\n }\n const tx = this.txBlock;\n const coins = tx.splitCoins(\n tx.gas,\n amounts.map((amount) => tx.pure.u64(amount))\n );\n recipients.forEach((recipient, index) => {\n tx.transferObjects([coins[index]], tx.pure.address(recipient));\n });\n return this;\n }\n /**\n * Transfer sui to one recipient.\n * @param {string}recipient recipient cannot be empty or invalid sui address.\n * @param {number}amount\n * @returns this\n */\n transferSui(recipient, amount) {\n if (!checkInvalidSuiAddress(recipient) === false) {\n throw new ClmmpoolsError(\"Invalid recipient address\", \"InvalidRecipientAddress\" /* InvalidRecipientAddress */);\n }\n return this.transferSuiToMany([recipient], [amount]);\n }\n /**\n * Transfer coin to many recipients.\n * @param {string}recipient recipient cannot be empty or invalid sui address.\n * @param {number}amount amount cannot be empty or invalid sui address.\n * @param {string[]}coinObjectIds object ids of coins to be transferred.\n * @returns this\n * @deprecated use transferAndDestoryZeroCoin instead\n */\n transferCoin(recipient, amount, coinObjectIds) {\n if (!checkInvalidSuiAddress(recipient) === false) {\n throw new ClmmpoolsError(\"Invalid recipient address\", \"InvalidRecipientAddress\" /* InvalidRecipientAddress */);\n }\n const tx = this.txBlock;\n const [primaryCoinA, ...mergeCoinAs] = coinObjectIds;\n const primaryCoinAInput = tx.object(primaryCoinA);\n if (mergeCoinAs.length > 0) {\n tx.mergeCoins(\n primaryCoinAInput,\n mergeCoinAs.map((coin) => tx.object(coin))\n );\n }\n const spitAmount = tx.splitCoins(primaryCoinAInput, [tx.pure.u64(amount)]);\n tx.transferObjects([spitAmount], tx.pure.address(recipient));\n return this;\n }\n};\n\n// src/utils/deepbook-utils.ts\nimport BN14 from \"bn.js\";\nimport { Transaction as Transaction3 } from \"@mysten/sui/transactions\";\nvar FLOAT_SCALING = new BN14(1e9);\nvar DeepbookUtils = class {\n static createAccountCap(senderAddress, sdkOptions, tx, isTransfer = false) {\n if (senderAddress.length === 0) {\n throw Error(\"this config sdk senderAddress is empty\");\n }\n const { deepbook } = sdkOptions;\n const [cap] = tx.moveCall({\n target: `${deepbook.published_at}::${DeepbookClobV2Moudle}::create_account`,\n typeArguments: [],\n arguments: []\n });\n if (isTransfer) {\n tx.transferObjects([cap], tx.pure.address(senderAddress));\n }\n return [cap, tx];\n }\n static deleteAccountCap(accountCap, sdkOptions, tx) {\n const { deepbook } = sdkOptions;\n const args = [tx.object(accountCap)];\n tx.moveCall({\n target: `${deepbook.published_at}::${DeepbookCustodianV2Moudle}::delete_account_cap`,\n typeArguments: [],\n arguments: args\n });\n return tx;\n }\n static deleteAccountCapByObject(accountCap, sdkOptions, tx) {\n const { deepbook } = sdkOptions;\n const args = [accountCap];\n tx.moveCall({\n target: `${deepbook.published_at}::${DeepbookCustodianV2Moudle}::delete_account_cap`,\n typeArguments: [],\n arguments: args\n });\n return tx;\n }\n static async getAccountCap(sdk, showDisplay = true) {\n const ownerRes = await sdk.fullClient.getOwnedObjectsByPage(sdk.senderAddress, {\n options: { showType: true, showContent: true, showDisplay, showOwner: true },\n filter: {\n MoveModule: {\n package: sdk.sdkOptions.deepbook.package_id,\n module: DeepbookCustodianV2Moudle\n }\n }\n });\n if (ownerRes.data.length === 0) {\n return \"\";\n }\n const accountCap = ownerRes.data[0].data.objectId;\n return accountCap;\n }\n static async getPools(sdk) {\n const deepbook = sdk.sdkOptions.deepbook.package_id;\n const allPools = [];\n try {\n const objects = await sdk.fullClient.queryEventsByPage({ MoveEventType: `${deepbook}::clob_v2::PoolCreated` });\n objects.data.forEach((object) => {\n const fields = object.parsedJson;\n if (fields) {\n allPools.push({\n poolID: fields.pool_id,\n tickSize: Number(fields.tick_size),\n lotSize: Number(fields.lot_size),\n takerFeeRate: Number(fields.taker_fee_rate),\n makerRebateRate: Number(fields.maker_rebate_rate),\n baseAsset: fields.base_asset.name,\n quoteAsset: fields.quote_asset.name\n });\n }\n });\n } catch (error) {\n console.log(\"getPoolImmutables\", error);\n }\n return allPools;\n }\n static async getPoolAsks(sdk, poolAddress, baseCoin, quoteCoin) {\n const { simulationAccount } = sdk.sdkOptions;\n const { deepbook_endpoint_v2 } = sdk.sdkOptions;\n const tx = new Transaction3();\n const asks = [];\n const typeArguments = [baseCoin, quoteCoin];\n const args = [tx.object(poolAddress), tx.pure.u64(\"0\"), tx.pure.u64(\"999999999999\"), tx.object(CLOCK_ADDRESS)];\n tx.moveCall({\n target: `${deepbook_endpoint_v2.published_at}::endpoints_v2::get_level2_book_status_ask_side`,\n arguments: args,\n typeArguments\n });\n const simulateRes = await sdk.fullClient.devInspectTransactionBlock({\n transactionBlock: tx,\n sender: simulationAccount.address\n });\n const valueData = simulateRes.events?.filter((item) => {\n return extractStructTagFromType(item.type).name === `BookStatus`;\n });\n if (valueData.length === 0) {\n return asks;\n }\n for (let i = 0; i < valueData[0].parsedJson.depths.length; i++) {\n const price = valueData[0].parsedJson.price[i];\n const depth = valueData[0].parsedJson.depths[i];\n const ask = {\n price: parseInt(price, 10),\n quantity: parseInt(depth, 10)\n };\n asks.push(ask);\n }\n return asks;\n }\n static async getPoolBids(sdk, poolAddress, baseCoin, quoteCoin) {\n const { simulationAccount } = sdk.sdkOptions;\n const { deepbook_endpoint_v2 } = sdk.sdkOptions;\n const tx = new Transaction3();\n const bids = [];\n const typeArguments = [baseCoin, quoteCoin];\n const args = [tx.object(poolAddress), tx.pure.u64(\"0\"), tx.pure.u64(\"999999999999\"), tx.object(CLOCK_ADDRESS)];\n tx.moveCall({\n target: `${deepbook_endpoint_v2.published_at}::endpoints_v2::get_level2_book_status_bid_side`,\n arguments: args,\n typeArguments\n });\n const simulateRes = await sdk.fullClient.devInspectTransactionBlock({\n transactionBlock: tx,\n sender: simulationAccount.address\n });\n const valueData = simulateRes.events?.filter((item) => {\n return extractStructTagFromType(item.type).name === `BookStatus`;\n });\n if (valueData.length === 0) {\n return bids;\n }\n for (let i = 0; i < valueData[0].parsedJson.depths.length; i++) {\n const price = valueData[0].parsedJson.price[i];\n const depth = valueData[0].parsedJson.depths[i];\n const bid = {\n price: parseInt(price, 10),\n quantity: parseInt(depth, 10)\n };\n bids.push(bid);\n }\n return bids;\n }\n static async preSwap(sdk, pool, a2b, amountIn) {\n let isExceed = false;\n let amountOut = ZERO;\n let remainAmount = new BN14(amountIn);\n let feeAmount = ZERO;\n const initAmountIn = new BN14(amountIn);\n if (a2b) {\n let bids = await this.getPoolBids(sdk, pool.poolID, pool.baseAsset, pool.quoteAsset);\n if (bids === null) {\n isExceed = true;\n }\n bids = bids.sort((a, b) => {\n return b.price - a.price;\n });\n for (let i = 0; i < bids.length; i += 1) {\n const curBidAmount = new BN14(bids[i].quantity);\n const curBidPrice = new BN14(bids[i].price);\n const fee = curBidAmount.mul(new BN14(curBidPrice)).mul(new BN14(pool.takerFeeRate)).div(FLOAT_SCALING).div(FLOAT_SCALING);\n if (remainAmount.gt(curBidAmount)) {\n remainAmount = remainAmount.sub(curBidAmount);\n amountOut = amountOut.add(curBidAmount.mul(curBidPrice).div(FLOAT_SCALING).sub(fee));\n feeAmount = feeAmount.add(fee);\n } else {\n const curOut = remainAmount.mul(new BN14(bids[i].price)).div(FLOAT_SCALING);\n const curFee = curOut.mul(new BN14(pool.takerFeeRate)).div(FLOAT_SCALING);\n amountOut = amountOut.add(curOut.sub(curFee));\n remainAmount = remainAmount.sub(remainAmount);\n feeAmount = feeAmount.add(curFee);\n }\n if (remainAmount.eq(ZERO)) {\n break;\n }\n }\n } else {\n const asks = await this.getPoolAsks(sdk, pool.poolID, pool.baseAsset, pool.quoteAsset);\n if (asks === null) {\n isExceed = true;\n }\n for (let i = 0; i < asks.length; i += 1) {\n const curAskAmount = new BN14(asks[i].price).mul(new BN14(asks[i].quantity)).div(new BN14(1e9));\n const fee = curAskAmount.mul(new BN14(pool.takerFeeRate)).div(FLOAT_SCALING);\n const curAskAmountWithFee = curAskAmount.add(fee);\n if (remainAmount.gt(curAskAmount)) {\n amountOut = amountOut.add(new BN14(asks[i].quantity));\n remainAmount = remainAmount.sub(curAskAmountWithFee);\n feeAmount = feeAmount.add(fee);\n } else {\n const splitNums = new BN14(asks[i].quantity).div(new BN14(pool.lotSize));\n const splitAmount = curAskAmountWithFee.div(splitNums);\n const swapSplitNum = remainAmount.div(splitAmount);\n amountOut = amountOut.add(swapSplitNum.muln(pool.lotSize));\n remainAmount = remainAmount.sub(swapSplitNum.mul(splitAmount));\n feeAmount = feeAmount.add(swapSplitNum.div(splitNums).mul(fee));\n }\n if (remainAmount.eq(ZERO)) {\n break;\n }\n }\n }\n return {\n poolAddress: pool.poolID,\n // currentSqrtPrice: current_sqrt_price,\n estimatedAmountIn: initAmountIn.sub(remainAmount).toNumber(),\n estimatedAmountOut: amountOut.toNumber(),\n // estimatedEndSqrtPrice: target_sqrt_price,\n estimatedFeeAmount: feeAmount,\n isExceed,\n amount: Number(amountIn),\n aToB: a2b,\n byAmountIn: true\n };\n }\n static async simulateSwap(sdk, poolID, baseCoin, quoteCoin, a2b, amount) {\n const { deepbook_endpoint_v2 } = sdk.sdkOptions;\n let tx = new Transaction3();\n const accountCapStr = await this.getAccountCap(sdk);\n let accountCap;\n if (accountCapStr === \"\") {\n const getAccoutCapResult = this.createAccountCap(sdk.senderAddress, sdk.sdkOptions, tx);\n const cap = getAccoutCapResult[0];\n tx = getAccoutCapResult[1];\n accountCap = cap;\n } else {\n accountCap = tx.object(accountCapStr);\n }\n const allCoins = await sdk.getOwnerCoinAssets(sdk.senderAddress);\n const primaryBaseInput = TransactionUtil.buildCoinForAmount(tx, allCoins, BigInt(amount), baseCoin, false);\n const baseAsset = primaryBaseInput?.targetCoin;\n const primaryQuoteInput = TransactionUtil.buildCoinForAmount(tx, allCoins, BigInt(amount), quoteCoin, false);\n const quoteAsset = primaryQuoteInput?.targetCoin;\n const typeArguments = [baseCoin, quoteCoin];\n const args = [\n tx.object(poolID),\n accountCap,\n tx.pure.u64(amount),\n tx.pure.u64(0),\n tx.pure.bool(a2b),\n baseAsset,\n quoteAsset,\n tx.object(CLOCK_ADDRESS)\n ];\n tx.moveCall({\n target: `${deepbook_endpoint_v2.published_at}::${DeepbookEndpointsV2Moudle}::swap`,\n arguments: args,\n typeArguments\n });\n const { simulationAccount } = sdk.sdkOptions;\n const simulateRes = await sdk.fullClient.devInspectTransactionBlock({\n transactionBlock: tx,\n sender: simulationAccount.address\n });\n const valueData = simulateRes.events?.filter((item) => {\n return extractStructTagFromType(item.type).name === `DeepbookSwapEvent`;\n });\n if (valueData.length === 0) {\n return null;\n }\n const params = valueData[0].parsedJson;\n return {\n poolAddress: params.pool,\n estimatedAmountIn: params.amount_in,\n estimatedAmountOut: params.amount_out,\n aToB: params.atob\n };\n }\n};\n\n// src/modules/poolModule.ts\nvar PoolModule = class {\n _sdk;\n _cache = {};\n constructor(sdk) {\n this._sdk = sdk;\n }\n get sdk() {\n return this._sdk;\n }\n /**\n * Gets a list of positions for the given positionHandle.\n * @param {string} positionHandle The handle for the position.\n * @returns {DataPage<Position>} A promise that resolves to an array of Position objects.\n */\n async getPositionList(positionHandle, paginationArgs = \"all\") {\n const dataPage = {\n data: [],\n hasNextPage: true\n };\n const objects = await this._sdk.fullClient.getDynamicFieldsByPage(positionHandle, paginationArgs);\n dataPage.hasNextPage = objects.hasNextPage;\n dataPage.nextCursor = objects.nextCursor;\n const positionObjectIDs = objects.data.map((item) => {\n if (item.error != null) {\n throw new ClmmpoolsError(\n `when getPositionList get position objects error: ${item.error}, please check the rpc, contracts address config and position id.`,\n \"InvalidConfig\" /* InvalidConfig */\n );\n }\n return item.name.value;\n });\n const allPosition = await this._sdk.Position.getSipmlePositionList(positionObjectIDs);\n dataPage.data = allPosition;\n return dataPage;\n }\n /**\n * Gets a list of pool immutables.\n * @param {string[]} assignPoolIDs An array of pool IDs to get.\n * @param {number} offset The offset to start at.\n * @param {number} limit The number of pools to get.\n * @param {boolean} forceRefresh Whether to force a refresh of the cache.\n * @returns {Promise<PoolImmutables[]>} array of PoolImmutable objects.\n */\n async getPoolImmutables(assignPoolIDs = [], offset = 0, limit = 100, forceRefresh = false) {\n const { package_id } = this._sdk.sdkOptions.clmm_pool;\n const cacheKey = `${package_id}_getInitPoolEvent`;\n const cacheData = this.getCache(cacheKey, forceRefresh);\n const allPools = [];\n const filterPools = [];\n if (cacheData !== void 0) {\n allPools.push(...cacheData);\n }\n if (allPools.length === 0) {\n try {\n const objects = await this._sdk.fullClient.queryEventsByPage({ MoveEventType: `${package_id}::factory::CreatePoolEvent` });\n objects.data.forEach((object) => {\n const fields = object.parsedJson;\n if (fields) {\n allPools.push({\n poolAddress: fields.pool_id,\n tickSpacing: fields.tick_spacing,\n coinTypeA: extractStructTagFromType(fields.coin_type_a).full_address,\n coinTypeB: extractStructTagFromType(fields.coin_type_b).full_address\n });\n }\n });\n this.updateCache(cacheKey, allPools, cacheTime24h);\n } catch (error) {\n console.log(\"getPoolImmutables\", error);\n }\n }\n const hasAssignPools = assignPoolIDs.length > 0;\n for (let index = 0; index < allPools.length; index += 1) {\n const item = allPools[index];\n if (hasAssignPools && !assignPoolIDs.includes(item.poolAddress))\n continue;\n if (!hasAssignPools && (index < offset || index >= offset + limit))\n continue;\n filterPools.push(item);\n }\n return filterPools;\n }\n /**\n * Gets a list of pools.\n * @param {string[]} assignPools An array of pool IDs to get.\n * @param {number} offset The offset to start at.\n * @param {number} limit The number of pools to get.\n * @returns {Promise<Pool[]>} array of Pool objects.\n */\n async getPools(assignPools = [], offset = 0, limit = 100) {\n const allPool = [];\n let poolObjectIds = [];\n if (assignPools.length > 0) {\n poolObjectIds = [...assignPools];\n } else {\n const poolImmutables = await this.getPoolImmutables([], offset, limit, false);\n poolImmutables.forEach((item) => poolObjectIds.push(item.poolAddress));\n }\n const objectDataResponses = await this._sdk.fullClient.batchGetObjects(poolObjectIds, {\n showContent: true,\n showType: true\n });\n for (const suiObj of objectDataResponses) {\n if (suiObj.error != null || suiObj.data?.content?.dataType !== \"moveObject\") {\n throw new ClmmpoolsError(\n `getPools error code: ${suiObj.error?.code ?? \"unknown error\"}, please check config and object ids`,\n \"InvalidPoolObject\" /* InvalidPoolObject */\n );\n }\n const pool = buildPool(suiObj);\n allPool.push(pool);\n const cacheKey = `${pool.poolAddress}_getPoolObject`;\n this.updateCache(cacheKey, pool, cacheTime24h);\n }\n return allPool;\n }\n /**\n * Gets a list of pool immutables.\n * @param {PaginationArgs} paginationArgs The cursor and limit to start at.\n * @returns {Promise<DataPage<PoolImmutables>>} Array of PoolImmutable objects.\n */\n async getPoolImmutablesWithPage(paginationArgs = \"all\", forceRefresh = false) {\n const { package_id } = this._sdk.sdkOptions.clmm_pool;\n const allPools = [];\n const dataPage = {\n data: [],\n hasNextPage: false\n };\n const queryAll = paginationArgs === \"all\";\n const cacheAllKey = `${package_id}_getPoolImmutables`;\n if (queryAll) {\n const cacheDate = this.getCache(cacheAllKey, forceRefresh);\n if (cacheDate) {\n allPools.push(...cacheDate);\n }\n }\n if (allPools.length === 0) {\n try {\n const moveEventType = `${package_id}::factory::CreatePoolEvent`;\n const objects = await this._sdk.fullClient.queryEventsByPage({ MoveEventType: moveEventType }, paginationArgs);\n dataPage.hasNextPage = objects.hasNextPage;\n dataPage.nextCursor = objects.nextCursor;\n objects.data.forEach((object) => {\n const fields = object.parsedJson;\n if (fields) {\n const poolImmutables = {\n poolAddress: fields.pool_id,\n tickSpacing: fields.tick_spacing,\n coinTypeA: extractStructTagFromType(fields.coin_type_a).full_address,\n coinTypeB: extractStructTagFromType(fields.coin_type_b).full_address\n };\n allPools.push(poolImmutables);\n }\n });\n } catch (error) {\n console.log(\"getPoolImmutables\", error);\n }\n }\n dataPage.data = allPools;\n if (queryAll) {\n this.updateCache(`${package_id}_getPoolImmutables`, allPools, cacheTime24h);\n }\n return dataPage;\n }\n /**\n * Gets a list of pools.\n * @param {string[]} assignPools An array of pool IDs to get.\n * @param {PaginationArgs} paginationArgs The cursor and limit to start at.\n * @param {boolean} forceRefresh Whether to force a refresh of the cache.\n * @returns {Promise<Pool[]>} An array of Pool objects.\n */\n async getPoolsWithPage(assignPools = [], paginationArgs = \"all\", forceRefresh = false) {\n const allPool = [];\n let poolObjectIds = [];\n if (assignPools.length > 0) {\n poolObjectIds = [...assignPools];\n } else {\n const poolImmutables = (await this.getPoolImmutablesWithPage(paginationArgs, forceRefresh)).data;\n poolImmutables.forEach((item) => poolObjectIds.push(item.poolAddress));\n }\n const objectDataResponses = await this._sdk.fullClient.batchGetObjects(poolObjectIds, {\n showContent: true,\n showType: true\n });\n for (const suiObj of objectDataResponses) {\n if (suiObj.error != null || suiObj.data?.content?.dataType !== \"moveObject\") {\n throw new ClmmpoolsError(\n `getPoolWithPages error code: ${suiObj.error?.code ?? \"unknown error\"}, please check config and object ids`,\n \"InvalidPoolObject\" /* InvalidPoolObject */\n );\n }\n const pool = buildPool(suiObj);\n allPool.push(pool);\n const cacheKey = `${pool.poolAddress}_getPoolObject`;\n this.updateCache(cacheKey, pool, cacheTime24h);\n }\n return allPool;\n }\n /**\n * Gets a pool by its object ID.\n * @param {string} poolID The object ID of the pool to get.\n * @param {true} forceRefresh Whether to force a refresh of the cache.\n * @returns {Promise<Pool>} A promise that resolves to a Pool object.\n */\n async getPool(poolID, forceRefresh = true) {\n const cacheKey = `${poolID}_getPoolObject`;\n const cacheData = this.getCache(cacheKey, forceRefresh);\n if (cacheData !== void 0) {\n return cacheData;\n }\n const object = await this._sdk.fullClient.getObject({\n id: poolID,\n options: {\n showType: true,\n showContent: true\n }\n });\n if (object.error != null || object.data?.content?.dataType !== \"moveObject\") {\n throw new ClmmpoolsError(\n `getPool error code: ${object.error?.code ?? \"unknown error\"}, please check config and object id`,\n \"InvalidPoolObject\" /* InvalidPoolObject */\n );\n }\n const pool = buildPool(object);\n this.updateCache(cacheKey, pool);\n return pool;\n }\n /**\n * Creates a transaction payload for creating multiple pools.\n * @param {CreatePoolParams[]} paramss The parameters for the pools.\n * @returns {Promise<Transaction>} A promise that resolves to the transaction payload.\n */\n async creatPoolsTransactionPayload(paramss) {\n for (const params of paramss) {\n if (isSortedSymbols(normalizeSuiAddress(params.coinTypeA), normalizeSuiAddress(params.coinTypeB))) {\n const swpaCoinTypeB = params.coinTypeB;\n params.coinTypeB = params.coinTypeA;\n params.coinTypeA = swpaCoinTypeB;\n }\n }\n const payload = await this.creatPool(paramss);\n return payload;\n }\n /**\n * Create a pool of clmmpool protocol. The pool is identified by (CoinTypeA, CoinTypeB, tick_spacing).\n * @param {CreatePoolParams | CreatePoolAddLiquidityParams} params\n * @returns {Promise<Transaction>}\n */\n async creatPoolTransactionPayload(params) {\n if (isSortedSymbols(normalizeSuiAddress(params.coinTypeA), normalizeSuiAddress(params.coinTypeB))) {\n const swpaCoinTypeB = params.coinTypeB;\n params.coinTypeB = params.coinTypeA;\n params.coinTypeA = swpaCoinTypeB;\n }\n if (\"fix_amount_a\" in params) {\n return await this.creatPoolAndAddLiquidity(params);\n }\n return await this.creatPool([params]);\n }\n /**\n * Gets the ClmmConfig object for the given package object ID.\n * @param {boolean} forceRefresh Whether to force a refresh of the cache.\n * @returns the ClmmConfig object.\n */\n async getClmmConfigs(forceRefresh = false) {\n const { package_id } = this._sdk.sdkOptions.clmm_pool;\n const cacheKey = `${package_id}_getInitEvent`;\n const cacheData = this.getCache(cacheKey, forceRefresh);\n if (cacheData !== void 0) {\n return cacheData;\n }\n const packageObject = await this._sdk.fullClient.getObject({\n id: package_id,\n options: { showPreviousTransaction: true }\n });\n const previousTx = getObjectPreviousTransactionDigest(packageObject);\n const objects = (await this._sdk.fullClient.queryEventsByPage({ Transaction: previousTx })).data;\n const clmmConfig = {\n pools_id: \"\",\n global_config_id: \"\",\n global_vault_id: \"\",\n admin_cap_id: \"\"\n };\n if (objects.length > 0) {\n objects.forEach((item) => {\n const fields = item.parsedJson;\n if (item.type) {\n switch (extractStructTagFromType(item.type).full_address) {\n case `${package_id}::config::InitConfigEvent`:\n clmmConfig.global_config_id = fields.global_config_id;\n clmmConfig.admin_cap_id = fields.admin_cap_id;\n break;\n case `${package_id}::factory::InitFactoryEvent`:\n clmmConfig.pools_id = fields.pools_id;\n break;\n case `${package_id}::rewarder::RewarderInitEvent`:\n clmmConfig.global_vault_id = fields.global_vault_id;\n break;\n case `${package_id}::partner::InitPartnerEvent`:\n clmmConfig.partners_id = fields.partners_id;\n break;\n default:\n break;\n }\n }\n });\n this.updateCache(cacheKey, clmmConfig, cacheTime24h);\n return clmmConfig;\n }\n return clmmConfig;\n }\n /**\n * Gets the SUI transaction response for a given transaction digest.\n * @param digest - The digest of the transaction for which the SUI transaction response is requested.\n * @param forceRefresh - A boolean flag indicating whether to force a refresh of the response.\n * @returns A Promise that resolves with the SUI transaction block response or null if the response is not available.\n */\n async getSuiTransactionResponse(digest, forceRefresh = false) {\n const cacheKey = `${digest}_getSuiTransactionResponse`;\n const cacheData = this.getCache(cacheKey, forceRefresh);\n if (cacheData !== void 0) {\n return cacheData;\n }\n let objects;\n try {\n objects = await this._sdk.fullClient.getTransactionBlock({\n digest,\n options: {\n showEvents: true,\n showEffects: true,\n showBalanceChanges: true,\n showInput: true,\n showObjectChanges: true\n }\n });\n } catch (error) {\n objects = await this._sdk.fullClient.getTransactionBlock({\n digest,\n options: {\n showEvents: true,\n showEffects: true\n }\n });\n }\n this.updateCache(cacheKey, objects, cacheTime24h);\n return objects;\n }\n /**\n * Create pool internal.\n * @param {CreatePoolParams[]}params The parameters for the pools.\n * @returns {Promise<Transaction>} A promise that resolves to the transaction payload.\n */\n async creatPool(params) {\n const tx = new Transaction4();\n const { integrate, clmm_pool } = this.sdk.sdkOptions;\n const eventConfig = getPackagerConfigs(clmm_pool);\n const globalPauseStatusObjectId = eventConfig.global_config_id;\n const poolsId = eventConfig.pools_id;\n params.forEach((params2) => {\n const args = [\n tx.object(globalPauseStatusObjectId),\n tx.object(poolsId),\n tx.pure.u32(params2.tick_spacing),\n tx.pure.u128(params2.initialize_sqrt_price),\n tx.pure.string(params2.uri),\n tx.object(CLOCK_ADDRESS)\n ];\n tx.moveCall({\n target: `${integrate.published_at}::${ClmmIntegratePoolModule}::create_pool`,\n typeArguments: [params2.coinTypeA, params2.coinTypeB],\n arguments: args\n });\n });\n return tx;\n }\n /**\n * Create pool and add liquidity internal. It will call create_pool_with_liquidity function.\n * @param {CreatePoolAddLiquidityParams}params The parameters for the create and liquidity.\n * @returns {Promise<Transaction>} A promise that resolves to the transaction payload.\n */\n async creatPoolAndAddLiquidity(params) {\n if (!checkInvalidSuiAddress(this._sdk.senderAddress)) {\n throw new ClmmpoolsError(\"this config sdk senderAddress is not set right\", \"InvalidSendAddress\" /* InvalidSendAddress */);\n }\n const tx = new Transaction4();\n const { integrate, clmm_pool } = this.sdk.sdkOptions;\n const eventConfig = getPackagerConfigs(clmm_pool);\n const globalPauseStatusObjectId = eventConfig.global_config_id;\n const poolsId = eventConfig.pools_id;\n const allCoinAsset = await this._sdk.getOwnerCoinAssets(this._sdk.senderAddress);\n const primaryCoinAInputsR = TransactionUtil.buildAddLiquidityFixTokenCoinInput(\n tx,\n !params.fix_amount_a,\n params.amount_a,\n params.slippage,\n params.coinTypeA,\n allCoinAsset,\n false\n );\n const primaryCoinBInputsR = TransactionUtil.buildAddLiquidityFixTokenCoinInput(\n tx,\n params.fix_amount_a,\n params.amount_b,\n params.slippage,\n params.coinTypeB,\n allCoinAsset,\n false\n );\n const args = [\n tx.object(globalPauseStatusObjectId),\n tx.object(poolsId),\n tx.pure.u32(params.tick_spacing),\n tx.pure.u128(params.initialize_sqrt_price),\n tx.pure.string(params.uri),\n primaryCoinAInputsR.targetCoin,\n primaryCoinBInputsR.targetCoin,\n tx.pure.u32(Number(asUintN(BigInt(params.tick_lower)).toString())),\n tx.pure.u32(Number(asUintN(BigInt(params.tick_upper)).toString())),\n tx.pure.u64(params.amount_a),\n tx.pure.u64(params.amount_b),\n tx.pure.bool(params.fix_amount_a),\n tx.object(CLOCK_ADDRESS)\n ];\n tx.moveCall({\n target: `${integrate.published_at}::${ClmmIntegratePoolV2Module}::create_pool_with_liquidity`,\n typeArguments: [params.coinTypeA, params.coinTypeB],\n arguments: args\n });\n return tx;\n }\n /**\n * Fetches ticks from the exchange.\n * @param {FetchParams} params The parameters for the fetch.\n * @returns {Promise<TickData[]>} A promise that resolves to an array of tick data.\n */\n async fetchTicks(params) {\n let ticks = [];\n let start = [];\n const limit = 512;\n while (true) {\n const data = await this.getTicks({\n pool_id: params.pool_id,\n coinTypeA: params.coinTypeA,\n coinTypeB: params.coinTypeB,\n start,\n limit\n });\n ticks = [...ticks, ...data];\n if (data.length < limit) {\n break;\n }\n start = [data[data.length - 1].index];\n }\n return ticks;\n }\n /**\n * Fetches ticks from the exchange using the simulation exec tx.\n * @param {GetTickParams} params The parameters for the fetch.\n * @returns {Promise<TickData[]>} A promise that resolves to an array of tick data.\n */\n async getTicks(params) {\n const { integrate, simulationAccount } = this.sdk.sdkOptions;\n const ticks = [];\n const typeArguments = [params.coinTypeA, params.coinTypeB];\n const tx = new Transaction4();\n const start = tx.makeMoveVec({\n elements: params.start.map((index) => tx.pure.u32(index)),\n type: \"u32\"\n });\n const args = [tx.object(params.pool_id), start, tx.pure.u64(params.limit.toString())];\n tx.moveCall({\n target: `${integrate.published_at}::${ClmmFetcherModule}::fetch_ticks`,\n arguments: args,\n typeArguments\n });\n if (!checkInvalidSuiAddress(simulationAccount.address)) {\n throw new ClmmpoolsError(\"this config simulationAccount is not set right\", \"InvalidSimulateAccount\" /* InvalidSimulateAccount */);\n }\n const simulateRes = await this.sdk.fullClient.devInspectTransactionBlock({\n transactionBlock: tx,\n sender: simulationAccount.address\n });\n if (simulateRes.error != null) {\n throw new ClmmpoolsError(\n `getTicks error code: ${simulateRes.error ?? \"unknown error\"}, please check config and tick object ids`,\n \"InvalidTickObjectId\" /* InvalidTickObjectId */\n );\n }\n simulateRes.events?.forEach((item) => {\n if (extractStructTagFromType(item.type).name === `FetchTicksResultEvent`) {\n item.parsedJson.ticks.forEach((tick) => {\n ticks.push(buildTickDataByEvent(tick));\n });\n }\n });\n return ticks;\n }\n /**\n * Fetches a list of position rewards from the exchange.\n * @param {FetchParams} params The parameters for the fetch.\n * @returns {Promise<PositionReward[]>} A promise that resolves to an array of position rewards.\n */\n async fetchPositionRewardList(params) {\n const { integrate, simulationAccount } = this.sdk.sdkOptions;\n const allPosition = [];\n let start = [];\n const limit = 512;\n while (true) {\n const typeArguments = [params.coinTypeA, params.coinTypeB];\n const tx = new Transaction4();\n const vecStart = tx.makeMoveVec({\n elements: start.map((id) => tx.pure.address(id)),\n type: void 0\n });\n const args = [tx.object(params.pool_id), vecStart, tx.pure.u64(limit)];\n tx.moveCall({\n target: `${integrate.published_at}::${ClmmFetcherModule}::fetch_positions`,\n arguments: args,\n typeArguments\n });\n if (!checkInvalidSuiAddress(simulationAccount.address)) {\n throw new ClmmpoolsError(\"this config simulationAccount is not set right\", \"InvalidSimulateAccount\" /* InvalidSimulateAccount */);\n }\n const simulateRes = await this.sdk.fullClient.devInspectTransactionBlock({\n transactionBlock: tx,\n sender: simulationAccount.address\n });\n if (simulateRes.error != null) {\n throw new ClmmpoolsError(\n `fetch position reward error code: ${simulateRes.error ?? \"unknown error\"}, please check config and tick object ids`,\n \"InvalidPositionRewardObject\" /* InvalidPositionRewardObject */\n );\n }\n const positionRewards = [];\n simulateRes?.events?.forEach((item) => {\n if (extractStructTagFromType(item.type).name === `FetchPositionsEvent`) {\n item.parsedJson.positions.forEach((item2) => {\n const positionReward = buildPositionReward(item2);\n positionRewards.push(positionReward);\n });\n }\n });\n allPosition.push(...positionRewards);\n if (positionRewards.length < limit) {\n break;\n } else {\n start = [positionRewards[positionRewards.length - 1].pos_object_id];\n }\n }\n return allPosition;\n }\n /**\n * Fetches ticks from the fullnode using the RPC API.\n * @param {string} tickHandle The handle for the tick.\n * @returns {Promise<TickData[]>} A promise that resolves to an array of tick data.\n */\n async fetchTicksByRpc(tickHandle) {\n let allTickData = [];\n let nextCursor = null;\n const limit = 512;\n while (true) {\n const allTickId = [];\n const idRes = await this.sdk.fullClient.getDynamicFields({\n parentId: tickHandle,\n cursor: nextCursor,\n limit\n });\n nextCursor = idRes.nextCursor;\n idRes.data.forEach((item) => {\n if (extractStructTagFromType(item.objectType).module === \"skip_list\") {\n allTickId.push(item.objectId);\n }\n });\n allTickData = [...allTickData, ...await this.getTicksByRpc(allTickId)];\n if (nextCursor === null || idRes.data.length < limit) {\n break;\n }\n }\n return allTickData;\n }\n /**\n * Get ticks by tick object ids.\n * @param {string} tickObjectId The object ids of the ticks.\n * @returns {Promise<TickData[]>} A promise that resolves to an array of tick data.\n */\n async getTicksByRpc(tickObjectId) {\n const ticks = [];\n const objectDataResponses = await this.sdk.fullClient.batchGetObjects(tickObjectId, { showContent: true, showType: true });\n for (const suiObj of objectDataResponses) {\n if (suiObj.error != null || suiObj.data?.content?.dataType !== \"moveObject\") {\n throw new ClmmpoolsError(\n `getTicksByRpc error code: ${suiObj.error?.code ?? \"unknown error\"}, please check config and tick object ids`,\n \"InvalidTickObjectId\" /* InvalidTickObjectId */\n );\n }\n const tick = buildTickData(suiObj);\n if (tick != null) {\n ticks.push(tick);\n }\n }\n return ticks;\n }\n /**\n * Gets the tick data for the given tick index.\n * @param {string} tickHandle The handle for the tick.\n * @param {number} tickIndex The index of the tick.\n * @returns {Promise<TickData | null>} A promise that resolves to the tick data.\n */\n async getTickDataByIndex(tickHandle, tickIndex) {\n const name = { type: \"u64\", value: asUintN(BigInt(tickScore(tickIndex).toString())).toString() };\n const res = await this.sdk.fullClient.getDynamicFieldObject({\n parentId: tickHandle,\n name\n });\n if (res.error != null || res.data?.content?.dataType !== \"moveObject\") {\n throw new ClmmpoolsError(`get tick by index: ${tickIndex} error: ${res.error}`, \"InvalidTickIndex\" /* InvalidTickIndex */);\n }\n return buildTickData(res);\n }\n /**\n * Gets the tick data for the given object ID.\n * @param {string} tickId The object ID of the tick.\n * @returns {Promise<TickData | null>} A promise that resolves to the tick data.\n */\n async getTickDataByObjectId(tickId) {\n const res = await this.sdk.fullClient.getObject({\n id: tickId,\n options: { showContent: true }\n });\n if (res.error != null || res.data?.content?.dataType !== \"moveObject\") {\n throw new ClmmpoolsError(\n `getTicksByRpc error code: ${res.error?.code ?? \"unknown error\"}, please check config and tick object ids`,\n \"InvalidTickObjectId\" /* InvalidTickObjectId */\n );\n }\n return buildTickData(res);\n }\n /**\n * Get partner ref fee amount\n * @param {string}partner Partner object id\n * @returns {Promise<CoinAsset[]>} A promise that resolves to an array of coin asset.\n */\n async getPartnerRefFeeAmount(partner, showDisplay = true) {\n const objectDataResponses = await this._sdk.fullClient.batchGetObjects([partner], {\n showOwner: true,\n showContent: true,\n showDisplay,\n showType: true\n });\n if (objectDataResponses[0].error != null || objectDataResponses[0].data?.content?.dataType !== \"moveObject\") {\n throw new ClmmpoolsError(\n `get partner by object id: ${partner} error: ${objectDataResponses[0].error}`,\n \"NotFoundPartnerObject\" /* NotFoundPartnerObject */\n );\n }\n const balance = objectDataResponses[0].data.content.fields.balances;\n const objects = await this._sdk.fullClient.getDynamicFieldsByPage(balance.fields.id.id);\n const coins = [];\n objects.data.forEach((object2) => {\n if (object2.error != null || object2.data?.content?.dataType !== \"moveObject\") {\n throw new ClmmpoolsError(\n `when getPartnerRefFeeAmount get partner object error: ${object2.error}, please check the rpc, contracts address config and position id.`,\n \"InvalidConfig\" /* InvalidConfig */\n );\n }\n coins.push(object2.objectId);\n });\n const refFee = [];\n const object = await this._sdk.fullClient.batchGetObjects(coins, {\n showOwner: true,\n showContent: true,\n showDisplay,\n showType: true\n });\n object.forEach((info) => {\n if (info.error != null || info.data?.content?.dataType !== \"moveObject\") {\n throw new ClmmpoolsError(\n `get coin by object id: ${info.data.objectId} error: ${info.error}`,\n \"InvalidParnterRefFeeFields\" /* InvalidParnterRefFeeFields */\n );\n }\n const coinAsset = {\n coinAddress: info.data.content.fields.name,\n coinObjectId: info.data.objectId,\n balance: BigInt(info.data.content.fields.value)\n };\n refFee.push(coinAsset);\n });\n return refFee;\n }\n /**\n * Claim partner ref fee.\n * @param {string} partnerCap partner cap id.\n * @param {string} partner partner id.\n * @returns {Promise<Transaction>} A promise that resolves to the transaction payload.\n */\n async claimPartnerRefFeePayload(partnerCap, partner, coinType) {\n const tx = new Transaction4();\n const { clmm_pool } = this.sdk.sdkOptions;\n const { global_config_id } = getPackagerConfigs(clmm_pool);\n const typeArguments = [coinType];\n const args = [tx.object(global_config_id), tx.object(partnerCap), tx.object(partner)];\n tx.moveCall({\n target: `${clmm_pool.published_at}::${ClmmPartnerModule}::claim_ref_fee`,\n arguments: args,\n typeArguments\n });\n return tx;\n }\n /**\n * Updates the cache for the given key.\n * @param key The key of the cache entry to update.\n * @param data The data to store in the cache.\n * @param time The time in minutes after which the cache entry should expire.\n */\n updateCache(key, data, time = cacheTime5min) {\n let cacheData = this._cache[key];\n if (cacheData) {\n cacheData.overdueTime = getFutureTime(time);\n cacheData.value = data;\n } else {\n cacheData = new CachedContent(data, getFutureTime(time));\n }\n this._cache[key] = cacheData;\n }\n /**\n * Gets the cache entry for the given key.\n * @param key The key of the cache entry to get.\n * @param forceRefresh Whether to force a refresh of the cache entry.\n * @returns The cache entry for the given key, or undefined if the cache entry does not exist or is expired.\n */\n getCache(key, forceRefresh = false) {\n const cacheData = this._cache[key];\n const isValid = cacheData?.isValid();\n if (!forceRefresh && isValid) {\n return cacheData.value;\n }\n if (!isValid) {\n delete this._cache[key];\n }\n return void 0;\n }\n};\n\n// src/modules/positionModule.ts\nimport BN15 from \"bn.js\";\nimport { Transaction as Transaction5 } from \"@mysten/sui/transactions\";\nimport { isValidSuiObjectId } from \"@mysten/sui/utils\";\nvar PositionModule = class {\n _sdk;\n _cache = {};\n constructor(sdk) {\n this._sdk = sdk;\n }\n get sdk() {\n return this._sdk;\n }\n /**\n * Builds the full address of the Position type.\n * @returns The full address of the Position type.\n */\n buildPositionType() {\n const cetusClmm = this._sdk.sdkOptions.clmm_pool.package_id;\n return `${cetusClmm}::position::Position`;\n }\n /**\n * Gets a list of positions for the given account address.\n * @param accountAddress The account address to get positions for.\n * @param assignPoolIds An array of pool IDs to filter the positions by.\n * @returns array of Position objects.\n */\n async getPositionList(accountAddress, assignPoolIds = [], showDisplay = true) {\n const allPosition = [];\n const ownerRes = await this._sdk.fullClient.getOwnedObjectsByPage(accountAddress, {\n options: { showType: true, showContent: true, showDisplay, showOwner: true },\n filter: { Package: this._sdk.sdkOptions.clmm_pool.package_id }\n });\n const hasAssignPoolIds = assignPoolIds.length > 0;\n for (const item of ownerRes.data) {\n const type = extractStructTagFromType(item.data.type);\n if (type.full_address === this.buildPositionType()) {\n const position = buildPosition(item);\n const cacheKey = `${position.pos_object_id}_getPositionList`;\n this.updateCache(cacheKey, position, cacheTime24h);\n if (hasAssignPoolIds) {\n if (assignPoolIds.includes(position.pool)) {\n allPosition.push(position);\n }\n } else {\n allPosition.push(position);\n }\n }\n }\n return allPosition;\n }\n /**\n * Gets a position by its handle and ID. But it needs pool info, so it is not recommended to use this method.\n * if you want to get a position, you can use getPositionById method directly.\n * @param {string} positionHandle The handle of the position to get.\n * @param {string} positionID The ID of the position to get.\n * @param {boolean} calculateRewarder Whether to calculate the rewarder of the position.\n * @returns {Promise<Position>} Position object.\n */\n async getPosition(positionHandle, positionID, calculateRewarder = true, showDisplay = true) {\n let position = await this.getSimplePosition(positionID, showDisplay);\n if (calculateRewarder) {\n position = await this.updatePositionRewarders(positionHandle, position);\n }\n return position;\n }\n /**\n * Gets a position by its ID.\n * @param {string} positionID The ID of the position to get.\n * @param {boolean} calculateRewarder Whether to calculate the rewarder of the position.\n * @returns {Promise<Position>} Position object.\n */\n async getPositionById(positionID, calculateRewarder = true, showDisplay = true) {\n const position = await this.getSimplePosition(positionID, showDisplay);\n if (calculateRewarder) {\n const pool = await this._sdk.Pool.getPool(position.pool, false);\n const result = await this.updatePositionRewarders(pool.position_manager.positions_handle, position);\n return result;\n }\n return position;\n }\n /**\n * Gets a simple position for the given position ID.\n * @param {string} positionID The ID of the position to get.\n * @returns {Promise<Position>} Position object.\n */\n async getSimplePosition(positionID, showDisplay = true) {\n const cacheKey = `${positionID}_getPositionList`;\n let position = this.getSimplePositionByCache(positionID);\n if (position === void 0) {\n const objectDataResponses = await this.sdk.fullClient.getObject({\n id: positionID,\n options: { showContent: true, showType: true, showDisplay, showOwner: true }\n });\n position = buildPosition(objectDataResponses);\n this.updateCache(cacheKey, position, cacheTime24h);\n }\n return position;\n }\n /**\n * Gets a simple position for the given position ID.\n * @param {string} positionID Position object id\n * @returns {Position | undefined} Position object\n */\n getSimplePositionByCache(positionID) {\n const cacheKey = `${positionID}_getPositionList`;\n return this.getCache(cacheKey);\n }\n /**\n * Gets a list of simple positions for the given position IDs.\n * @param {SuiObjectIdType[]} positionIDs The IDs of the positions to get.\n * @returns {Promise<Position[]>} A promise that resolves to an array of Position objects.\n */\n async getSipmlePositionList(positionIDs, showDisplay = true) {\n const positionList = [];\n const notFoundIds = [];\n positionIDs.forEach((id) => {\n const position = this.getSimplePositionByCache(id);\n if (position) {\n positionList.push(position);\n } else {\n notFoundIds.push(id);\n }\n });\n if (notFoundIds.length > 0) {\n const objectDataResponses = await this._sdk.fullClient.batchGetObjects(notFoundIds, {\n showOwner: true,\n showContent: true,\n showDisplay,\n showType: true\n });\n objectDataResponses.forEach((info) => {\n if (info.error == null) {\n const position = buildPosition(info);\n positionList.push(position);\n const cacheKey = `${position.pos_object_id}_getPositionList`;\n this.updateCache(cacheKey, position, cacheTime24h);\n }\n });\n }\n return positionList;\n }\n /**\n * Updates the rewarders of position\n * @param {string} positionHandle Position handle\n * @param {Position} position Position object\n * @returns {Promise<Position>} A promise that resolves to an array of Position objects.\n */\n async updatePositionRewarders(positionHandle, position) {\n const positionReward = await this.getPositionRewarders(positionHandle, position.pos_object_id);\n return {\n ...position,\n ...positionReward\n };\n }\n /**\n * Gets the position rewarders for the given position handle and position object ID.\n * @param {string} positionHandle The handle of the position.\n * @param {string} positionID The ID of the position object.\n * @returns {Promise<PositionReward | undefined>} PositionReward object.\n */\n async getPositionRewarders(positionHandle, positionID) {\n try {\n const dynamicFieldObject = await this._sdk.fullClient.getDynamicFieldObject({\n parentId: positionHandle,\n name: {\n type: \"0x2::object::ID\",\n value: positionID\n }\n });\n const objectFields = getObjectFields(dynamicFieldObject.data);\n const fields = objectFields.value.fields.value;\n const positionReward = buildPositionReward(fields);\n return positionReward;\n } catch (error) {\n console.log(error);\n return void 0;\n }\n }\n /**\n * Fetches the Position fee amount for a given list of addresses.\n * @param {FetchPosFeeParams[]} params An array of FetchPosFeeParams objects containing the target addresses and their corresponding amounts.\n * @returns {Promise<CollectFeesQuote[]>} A Promise that resolves with the fetched position fee amount for the specified addresses.\n */\n async fetchPosFeeAmount(params) {\n const { clmm_pool, integrate, simulationAccount } = this.sdk.sdkOptions;\n const tx = new Transaction5();\n for (const paramItem of params) {\n const typeArguments = [paramItem.coinTypeA, paramItem.coinTypeB];\n const args = [\n tx.object(getPackagerConfigs(clmm_pool).global_config_id),\n tx.object(paramItem.poolAddress),\n tx.pure.address(paramItem.positionId)\n ];\n tx.moveCall({\n target: `${integrate.published_at}::${ClmmFetcherModule}::fetch_position_fees`,\n arguments: args,\n typeArguments\n });\n }\n if (!checkInvalidSuiAddress(simulationAccount.address)) {\n throw new ClmmpoolsError(\"this config simulationAccount is not set right\", \"InvalidSimulateAccount\" /* InvalidSimulateAccount */);\n }\n const simulateRes = await this.sdk.fullClient.devInspectTransactionBlock({\n transactionBlock: tx,\n sender: simulationAccount.address\n });\n if (simulateRes.error != null) {\n throw new ClmmpoolsError(\n `fetch position fee error code: ${simulateRes.error ?? \"unknown error\"}, please check config and postion and pool object ids`,\n \"InvalidPoolObject\" /* InvalidPoolObject */\n );\n }\n const valueData = simulateRes.events?.filter((item) => {\n return extractStructTagFromType(item.type).name === `FetchPositionFeesEvent`;\n });\n if (valueData.length === 0) {\n return [];\n }\n const result = [];\n for (let i = 0; i < valueData.length; i += 1) {\n const { parsedJson } = valueData[i];\n const posRrewarderResult = {\n feeOwedA: new BN15(parsedJson.fee_owned_a),\n feeOwedB: new BN15(parsedJson.fee_owned_b),\n position_id: parsedJson.position_id\n };\n result.push(posRrewarderResult);\n }\n return result;\n }\n /**\n * Fetches the Position fee amount for a given list of addresses.\n * @param positionIDs An array of position object ids.\n * @returns {Promise<Record<string, CollectFeesQuote>>} A Promise that resolves with the fetched position fee amount for the specified position object ids.\n */\n async batchFetchPositionFees(positionIDs) {\n const posFeeParamsList = [];\n for (const id of positionIDs) {\n const position = await this._sdk.Position.getPositionById(id, false);\n const pool = await this._sdk.Pool.getPool(position.pool, false);\n posFeeParamsList.push({\n poolAddress: pool.poolAddress,\n positionId: position.pos_object_id,\n coinTypeA: pool.coinTypeA,\n coinTypeB: pool.coinTypeB\n });\n }\n const positionMap = {};\n if (posFeeParamsList.length > 0) {\n const result = await this.fetchPosFeeAmount(posFeeParamsList);\n for (const posRewarderInfo of result) {\n positionMap[posRewarderInfo.position_id] = posRewarderInfo;\n }\n return positionMap;\n }\n return positionMap;\n }\n /**\n * create add liquidity transaction payload with fix token\n * @param {AddLiquidityFixTokenParams} params\n * @param gasEstimateArg : When the fix input amount is SUI, gasEstimateArg can control whether to recalculate the number of SUI to prevent insufficient gas.\n * If this parameter is not passed, gas estimation is not performed\n * @returns {Promise<TransactionBlock>}\n */\n async createAddLiquidityFixTokenPayload(params, gasEstimateArg, tx, inputCoinA, inputCoinB) {\n if (!checkInvalidSuiAddress(this._sdk.senderAddress)) {\n throw new ClmmpoolsError(\"this config sdk senderAddress is not set right\", \"InvalidSendAddress\" /* InvalidSendAddress */);\n }\n const allCoinAsset = await this._sdk.getOwnerCoinAssets(this._sdk.senderAddress);\n if (gasEstimateArg) {\n const { isAdjustCoinA, isAdjustCoinB } = findAdjustCoin(params);\n params = params;\n if (params.fix_amount_a && isAdjustCoinA || !params.fix_amount_a && isAdjustCoinB) {\n tx = await TransactionUtil.buildAddLiquidityFixTokenForGas(\n this._sdk,\n allCoinAsset,\n params,\n gasEstimateArg,\n tx,\n inputCoinA,\n inputCoinB\n );\n return tx;\n }\n }\n return TransactionUtil.buildAddLiquidityFixToken(this._sdk, allCoinAsset, params, tx, inputCoinA, inputCoinB);\n }\n /**\n * create add liquidity transaction payload\n * @param {AddLiquidityParams} params\n * @returns {Promise<TransactionBlock>}\n */\n async createAddLiquidityPayload(params, tx, inputCoinA, inputCoinB) {\n const { integrate, clmm_pool } = this._sdk.sdkOptions;\n if (!checkInvalidSuiAddress(this._sdk.senderAddress)) {\n throw new ClmmpoolsError(\"this config sdk senderAddress is not set right\", \"InvalidSendAddress\" /* InvalidSendAddress */);\n }\n const tick_lower = asUintN(BigInt(params.tick_lower)).toString();\n const tick_upper = asUintN(BigInt(params.tick_upper)).toString();\n const typeArguments = [params.coinTypeA, params.coinTypeB];\n tx = tx || new Transaction5();\n const needOpenPosition = !isValidSuiObjectId(params.pos_id);\n const max_amount_a = BigInt(params.max_amount_a);\n const max_amount_b = BigInt(params.max_amount_b);\n let primaryCoinAInputs;\n let primaryCoinBInputs;\n if (inputCoinA == null || inputCoinB == null) {\n const allCoinAsset = await this._sdk.getOwnerCoinAssets(this._sdk.senderAddress);\n primaryCoinAInputs = TransactionUtil.buildCoinForAmount(tx, allCoinAsset, max_amount_a, params.coinTypeA, false);\n primaryCoinBInputs = TransactionUtil.buildCoinForAmount(tx, allCoinAsset, max_amount_b, params.coinTypeB, false);\n } else {\n primaryCoinAInputs = {\n targetCoin: inputCoinA,\n remainCoins: [],\n isMintZeroCoin: false,\n tragetCoinAmount: \"0\"\n };\n primaryCoinBInputs = {\n targetCoin: inputCoinB,\n remainCoins: [],\n isMintZeroCoin: false,\n tragetCoinAmount: \"0\"\n };\n }\n if (needOpenPosition) {\n tx.moveCall({\n target: `${integrate.published_at}::${ClmmIntegratePoolV2Module}::open_position_with_liquidity`,\n typeArguments,\n arguments: [\n tx.object(getPackagerConfigs(clmm_pool).global_config_id),\n tx.object(params.pool_id),\n tx.pure.u32(Number(tick_lower)),\n tx.pure.u32(Number(tick_upper)),\n primaryCoinAInputs.targetCoin,\n primaryCoinBInputs.targetCoin,\n tx.pure.u64(params.max_amount_a),\n tx.pure.u64(params.max_amount_b),\n tx.pure.u128(params.delta_liquidity),\n tx.object(CLOCK_ADDRESS)\n ]\n });\n } else {\n const allCoinAsset = await this._sdk.getOwnerCoinAssets(this._sdk.senderAddress);\n tx = TransactionUtil.createCollectRewarderAndFeeParams(\n this._sdk,\n tx,\n params,\n allCoinAsset,\n primaryCoinAInputs.remainCoins,\n primaryCoinBInputs.remainCoins\n );\n tx.moveCall({\n target: `${integrate.published_at}::${ClmmIntegratePoolV2Module}::add_liquidity`,\n typeArguments,\n arguments: [\n tx.object(getPackagerConfigs(clmm_pool).global_config_id),\n tx.object(params.pool_id),\n tx.object(params.pos_id),\n primaryCoinAInputs.targetCoin,\n primaryCoinBInputs.targetCoin,\n tx.pure.u64(params.max_amount_a),\n tx.pure.u64(params.max_amount_b),\n tx.pure.u128(params.delta_liquidity),\n tx.object(CLOCK_ADDRESS)\n ]\n });\n }\n return tx;\n }\n /**\n * Remove liquidity from a position.\n * @param {RemoveLiquidityParams} params\n * @returns {TransactionBlock}\n */\n async removeLiquidityTransactionPayload(params, tx) {\n if (!checkInvalidSuiAddress(this._sdk.senderAddress)) {\n throw new ClmmpoolsError(\"this config sdk senderAddress is not set right\", \"InvalidSendAddress\" /* InvalidSendAddress */);\n }\n const { clmm_pool, integrate } = this.sdk.sdkOptions;\n const functionName = \"remove_liquidity\";\n tx = tx || new Transaction5();\n const typeArguments = [params.coinTypeA, params.coinTypeB];\n const allCoinAsset = await this._sdk.getOwnerCoinAssets(this._sdk.senderAddress);\n tx = TransactionUtil.createCollectRewarderAndFeeParams(this._sdk, tx, params, allCoinAsset);\n const args = [\n tx.object(getPackagerConfigs(clmm_pool).global_config_id),\n tx.object(params.pool_id),\n tx.object(params.pos_id),\n tx.pure.u128(params.delta_liquidity),\n tx.pure.u64(params.min_amount_a),\n tx.pure.u64(params.min_amount_b),\n tx.object(CLOCK_ADDRESS)\n ];\n tx.moveCall({\n target: `${integrate.published_at}::${ClmmIntegratePoolModule}::${functionName}`,\n typeArguments,\n arguments: args\n });\n return tx;\n }\n /**\n * Close position and remove all liquidity and collect_reward\n * @param {ClosePositionParams} params\n * @returns {TransactionBlock}\n */\n async closePositionTransactionPayload(params, tx) {\n if (!checkInvalidSuiAddress(this._sdk.senderAddress)) {\n throw new ClmmpoolsError(\"this config sdk senderAddress is not set right\", \"InvalidSendAddress\" /* InvalidSendAddress */);\n }\n const { clmm_pool, integrate } = this.sdk.sdkOptions;\n tx = tx || new Transaction5();\n const typeArguments = [params.coinTypeA, params.coinTypeB];\n const allCoinAsset = await this._sdk.getOwnerCoinAssets(this._sdk.senderAddress);\n tx = TransactionUtil.createCollectRewarderAndFeeParams(this._sdk, tx, params, allCoinAsset);\n tx.moveCall({\n target: `${integrate.published_at}::${ClmmIntegratePoolModule}::close_position`,\n typeArguments,\n arguments: [\n tx.object(getPackagerConfigs(clmm_pool).global_config_id),\n tx.object(params.pool_id),\n tx.object(params.pos_id),\n tx.pure.u64(params.min_amount_a),\n tx.pure.u64(params.min_amount_b),\n tx.object(CLOCK_ADDRESS)\n ]\n });\n return tx;\n }\n /**\n * Open position in clmmpool.\n * @param {OpenPositionParams} params\n * @returns {TransactionBlock}\n */\n openPositionTransactionPayload(params, tx) {\n const { clmm_pool, integrate } = this.sdk.sdkOptions;\n tx = tx || new Transaction5();\n const typeArguments = [params.coinTypeA, params.coinTypeB];\n const tick_lower = asUintN(BigInt(params.tick_lower)).toString();\n const tick_upper = asUintN(BigInt(params.tick_upper)).toString();\n const args = [\n tx.object(getPackagerConfigs(clmm_pool).global_config_id),\n tx.object(params.pool_id),\n tx.pure.u32(Number(tick_lower)),\n tx.pure.u32(Number(tick_upper))\n ];\n tx.moveCall({\n target: `${integrate.published_at}::${ClmmIntegratePoolModule}::open_position`,\n typeArguments,\n arguments: args\n });\n return tx;\n }\n /**\n * Collect LP fee from Position.\n * @param {CollectFeeParams} params\n * @param {TransactionBlock} tx\n * @returns {TransactionBlock}\n */\n async collectFeeTransactionPayload(params, tx, inputCoinA, inputCoinB) {\n if (!checkInvalidSuiAddress(this._sdk.senderAddress)) {\n throw new ClmmpoolsError(\"this config sdk senderAddress is not set right\", \"InvalidSendAddress\" /* InvalidSendAddress */);\n }\n const allCoinAsset = await this._sdk.getOwnerCoinAssets(this._sdk.senderAddress, null, true);\n tx = tx || new Transaction5();\n const primaryCoinAInput = TransactionUtil.buildCoinForAmount(tx, allCoinAsset, BigInt(0), params.coinTypeA, false);\n const primaryCoinBInput = TransactionUtil.buildCoinForAmount(tx, allCoinAsset, BigInt(0), params.coinTypeB, false);\n const coinA = inputCoinA ?? primaryCoinAInput.targetCoin;\n const coinB = inputCoinB ?? primaryCoinBInput.targetCoin;\n this.createCollectFeePaylod(params, tx, coinA, coinB);\n return tx;\n }\n createCollectFeePaylod(params, tx, primaryCoinAInput, primaryCoinBInput) {\n const { clmm_pool, integrate } = this.sdk.sdkOptions;\n const typeArguments = [params.coinTypeA, params.coinTypeB];\n const args = [\n tx.object(getPackagerConfigs(clmm_pool).global_config_id),\n tx.object(params.pool_id),\n tx.object(params.pos_id),\n primaryCoinAInput,\n primaryCoinBInput\n ];\n tx.moveCall({\n target: `${integrate.published_at}::${ClmmIntegratePoolV2Module}::collect_fee`,\n typeArguments,\n arguments: args\n });\n return tx;\n }\n createCollectFeeNoSendPaylod(params, tx, primaryCoinAInput, primaryCoinBInput) {\n const { clmm_pool, integrate } = this.sdk.sdkOptions;\n const typeArguments = [params.coinTypeA, params.coinTypeB];\n const args = [\n tx.object(getPackagerConfigs(clmm_pool).global_config_id),\n tx.object(params.pool_id),\n tx.object(params.pos_id),\n primaryCoinAInput,\n primaryCoinBInput\n ];\n tx.moveCall({\n target: `${integrate.published_at}::${ClmmIntegratePoolV3Module}::collect_fee`,\n typeArguments,\n arguments: args\n });\n return tx;\n }\n /**\n * calculate fee\n * @param {CollectFeeParams} params\n * @returns\n */\n async calculateFee(params) {\n const paylod = await this.collectFeeTransactionPayload(params);\n if (!checkInvalidSuiAddress(this._sdk.senderAddress)) {\n throw new ClmmpoolsError(\"this config sdk senderAddress is not set right\", \"InvalidSendAddress\" /* InvalidSendAddress */);\n }\n const res = await this._sdk.fullClient.devInspectTransactionBlock({\n transactionBlock: paylod,\n sender: this._sdk.senderAddress\n });\n for (const event of res.events) {\n if (extractStructTagFromType(event.type).name === \"CollectFeeEvent\") {\n const json = event.parsedJson;\n return {\n feeOwedA: json.amount_a,\n feeOwedB: json.amount_b\n };\n }\n }\n return {\n feeOwedA: \"0\",\n feeOwedB: \"0\"\n };\n }\n /**\n * Updates the cache for the given key.\n * @param {string} key The key of the cache entry to update.\n * @param {SuiResource} data The data to store in the cache.\n * @param {cacheTime5min} time The time in minutes after which the cache entry should expire.\n */\n updateCache(key, data, time = cacheTime5min) {\n let cacheData = this._cache[key];\n if (cacheData) {\n cacheData.overdueTime = getFutureTime(time);\n cacheData.value = data;\n } else {\n cacheData = new CachedContent(data, getFutureTime(time));\n }\n this._cache[key] = cacheData;\n }\n /**\n * Gets the cache entry for the given key.\n * @param {string} key The key of the cache entry to get.\n * @param {boolean} forceRefresh Whether to force a refresh of the cache entry.\n * @returns The cache entry for the given key, or undefined if the cache entry does not exist or is expired.\n */\n getCache(key, forceRefresh = false) {\n const cacheData = this._cache[key];\n const isValid = cacheData?.isValid();\n if (!forceRefresh && isValid) {\n return cacheData.value;\n }\n if (!isValid) {\n delete this._cache[key];\n }\n return void 0;\n }\n};\n\n// src/modules/rewarderModule.ts\nimport BN16 from \"bn.js\";\nimport { Transaction as Transaction6 } from \"@mysten/sui/transactions\";\nvar RewarderModule = class {\n _sdk;\n growthGlobal;\n constructor(sdk) {\n this._sdk = sdk;\n this.growthGlobal = [ZERO, ZERO, ZERO];\n }\n get sdk() {\n return this._sdk;\n }\n /**\n * Gets the emissions for the given pool every day.\n *\n * @param {string} poolID The object ID of the pool.\n * @returns {Promise<Array<{emissions: number, coinAddress: string}>>} A promise that resolves to an array of objects with the emissions and coin address for each rewarder.\n */\n async emissionsEveryDay(poolID) {\n const currentPool = await this.sdk.Pool.getPool(poolID);\n const rewarderInfos = currentPool.rewarder_infos;\n if (!rewarderInfos) {\n return null;\n }\n const emissionsEveryDay = [];\n for (const rewarderInfo of rewarderInfos) {\n const emissionSeconds = MathUtil.fromX64(new BN16(rewarderInfo.emissions_per_second));\n emissionsEveryDay.push({\n emissions: Math.floor(emissionSeconds.toNumber() * 60 * 60 * 24),\n coin_address: rewarderInfo.coinAddress\n });\n }\n return emissionsEveryDay;\n }\n /**\n * Updates the rewarder for the given pool.\n *\n * @param {string} poolID The object ID of the pool.\n * @param {BN} currentTime The current time in seconds since the Unix epoch.\n * @returns {Promise<Pool>} A promise that resolves to the updated pool.\n */\n async updatePoolRewarder(poolID, currentTime) {\n const currentPool = await this.sdk.Pool.getPool(poolID);\n const lastTime = currentPool.rewarder_last_updated_time;\n currentPool.rewarder_last_updated_time = currentTime.toString();\n if (Number(currentPool.liquidity) === 0 || currentTime.eq(new BN16(lastTime))) {\n return currentPool;\n }\n const timeDelta = currentTime.div(new BN16(1e3)).sub(new BN16(lastTime)).add(new BN16(15));\n const rewarderInfos = currentPool.rewarder_infos;\n for (let i = 0; i < rewarderInfos.length; i += 1) {\n const rewarderInfo = rewarderInfos[i];\n const rewarderGrowthDelta = MathUtil.checkMulDivFloor(\n timeDelta,\n new BN16(rewarderInfo.emissions_per_second),\n new BN16(currentPool.liquidity),\n 128\n );\n this.growthGlobal[i] = new BN16(rewarderInfo.growth_global).add(new BN16(rewarderGrowthDelta));\n }\n return currentPool;\n }\n /**\n * Gets the amount owed to the rewarders for the given position.\n *\n * @param {string} poolID The object ID of the pool.\n * @param {string} positionHandle The handle of the position.\n * @param {string} positionID The ID of the position.\n * @returns {Promise<Array<{amountOwed: number}>>} A promise that resolves to an array of objects with the amount owed to each rewarder.\n * @deprecated This method is deprecated and may be removed in future versions. Use `sdk.Rewarder.fetchPosRewardersAmount()` instead.\n */\n async posRewardersAmount(poolID, positionHandle, positionID) {\n const currentTime = Date.parse((/* @__PURE__ */ new Date()).toString());\n const pool = await this.updatePoolRewarder(poolID, new BN16(currentTime));\n const position = await this.sdk.Position.getPositionRewarders(positionHandle, positionID);\n if (position === void 0) {\n return [];\n }\n const ticksHandle = pool.ticks_handle;\n const tickLower = await this.sdk.Pool.getTickDataByIndex(ticksHandle, position.tick_lower_index);\n const tickUpper = await this.sdk.Pool.getTickDataByIndex(ticksHandle, position.tick_upper_index);\n const amountOwed = this.posRewardersAmountInternal(pool, position, tickLower, tickUpper);\n return amountOwed;\n }\n /**\n * Gets the amount owed to the rewarders for the given account and pool.\n *\n * @param {string} accountAddress The account address.\n * @param {string} poolID The object ID of the pool.\n * @returns {Promise<Array<{amountOwed: number}>>} A promise that resolves to an array of objects with the amount owed to each rewarder.\n * @deprecated This method is deprecated and may be removed in future versions. Use `sdk.Rewarder.fetchPosRewardersAmount()` instead.\n */\n async poolRewardersAmount(accountAddress, poolID) {\n const currentTime = Date.parse((/* @__PURE__ */ new Date()).toString());\n const pool = await this.updatePoolRewarder(poolID, new BN16(currentTime));\n const positions = await this.sdk.Position.getPositionList(accountAddress, [poolID]);\n const tickDatas = await this.getPoolLowerAndUpperTicks(pool.ticks_handle, positions);\n const rewarderAmount = [ZERO, ZERO, ZERO];\n for (let i = 0; i < positions.length; i += 1) {\n const posRewarderInfo = await this.posRewardersAmountInternal(pool, positions[i], tickDatas[0][i], tickDatas[1][i]);\n for (let j = 0; j < 3; j += 1) {\n rewarderAmount[j] = rewarderAmount[j].add(posRewarderInfo[j].amount_owed);\n }\n }\n return rewarderAmount;\n }\n /**\n * Gets the amount owed to the rewarders for the given account and pool.\n * @param {Pool} pool Pool object\n * @param {PositionReward} position Position object\n * @param {TickData} tickLower Lower tick data\n * @param {TickData} tickUpper Upper tick data\n * @returns {RewarderAmountOwed[]}\n */\n posRewardersAmountInternal(pool, position, tickLower, tickUpper) {\n const tickLowerIndex = position.tick_lower_index;\n const tickUpperIndex = position.tick_upper_index;\n const rewardersInside = getRewardInTickRange(pool, tickLower, tickUpper, tickLowerIndex, tickUpperIndex, this.growthGlobal);\n const growthInside = [];\n const AmountOwed = [];\n if (rewardersInside.length > 0) {\n let growthDelta0 = MathUtil.subUnderflowU128(rewardersInside[0], new BN16(position.reward_growth_inside_0));\n if (growthDelta0.gt(new BN16(\"3402823669209384634633745948738404\"))) {\n growthDelta0 = ONE;\n }\n const amountOwed_0 = MathUtil.checkMulShiftRight(new BN16(position.liquidity), growthDelta0, 64, 128);\n growthInside.push(rewardersInside[0]);\n AmountOwed.push({\n amount_owed: new BN16(position.reward_amount_owed_0).add(amountOwed_0),\n coin_address: pool.rewarder_infos[0].coinAddress\n });\n }\n if (rewardersInside.length > 1) {\n let growthDelta_1 = MathUtil.subUnderflowU128(rewardersInside[1], new BN16(position.reward_growth_inside_1));\n if (growthDelta_1.gt(new BN16(\"3402823669209384634633745948738404\"))) {\n growthDelta_1 = ONE;\n }\n const amountOwed_1 = MathUtil.checkMulShiftRight(new BN16(position.liquidity), growthDelta_1, 64, 128);\n growthInside.push(rewardersInside[1]);\n AmountOwed.push({\n amount_owed: new BN16(position.reward_amount_owed_1).add(amountOwed_1),\n coin_address: pool.rewarder_infos[1].coinAddress\n });\n }\n if (rewardersInside.length > 2) {\n let growthDelta_2 = MathUtil.subUnderflowU128(rewardersInside[2], new BN16(position.reward_growth_inside_2));\n if (growthDelta_2.gt(new BN16(\"3402823669209384634633745948738404\"))) {\n growthDelta_2 = ONE;\n }\n const amountOwed_2 = MathUtil.checkMulShiftRight(new BN16(position.liquidity), growthDelta_2, 64, 128);\n growthInside.push(rewardersInside[2]);\n AmountOwed.push({\n amount_owed: new BN16(position.reward_amount_owed_2).add(amountOwed_2),\n coin_address: pool.rewarder_infos[2].coinAddress\n });\n }\n return AmountOwed;\n }\n /**\n * Fetches the Position reward amount for a given list of addresses.\n * @param {string[]}positionIDs An array of position object ids.\n * @returns {Promise<Record<string, RewarderAmountOwed[]>>} A Promise that resolves with the fetched position reward amount for the specified position object ids.\n */\n async batchFetchPositionRewarders(positionIDs) {\n const posRewardParamsList = [];\n for (const id of positionIDs) {\n const position = await this._sdk.Position.getPositionById(id, false);\n const pool = await this._sdk.Pool.getPool(position.pool, false);\n posRewardParamsList.push({\n poolAddress: pool.poolAddress,\n positionId: position.pos_object_id,\n coinTypeA: pool.coinTypeA,\n coinTypeB: pool.coinTypeB,\n rewarderInfo: pool.rewarder_infos\n });\n }\n const positionMap = {};\n if (posRewardParamsList.length > 0) {\n const result = await this.fetchPosRewardersAmount(posRewardParamsList);\n for (const posRewarderInfo of result) {\n positionMap[posRewarderInfo.positionId] = posRewarderInfo.rewarderAmountOwed;\n }\n return positionMap;\n }\n return positionMap;\n }\n /**\n * Fetch the position rewards for a given pool.\n * @param {Pool}pool Pool object\n * @param {string}positionId Position object id\n * @returns {Promise<RewarderAmountOwed[]>} A Promise that resolves with the fetched position reward amount for the specified position object id.\n */\n async fetchPositionRewarders(pool, positionId) {\n const param = {\n poolAddress: pool.poolAddress,\n positionId,\n coinTypeA: pool.coinTypeA,\n coinTypeB: pool.coinTypeB,\n rewarderInfo: pool.rewarder_infos\n };\n const result = await this.fetchPosRewardersAmount([param]);\n return result[0].rewarderAmountOwed;\n }\n /**\n * Fetches the Position fee amount for a given list of addresses.\n * @param positionIDs An array of position object ids.\n * @returns {Promise<Record<string, CollectFeesQuote>>} A Promise that resolves with the fetched position fee amount for the specified position object ids.\n * @deprecated This method is deprecated and may be removed in future versions. Use alternative methods if available.\n */\n async batchFetchPositionFees(positionIDs) {\n const posFeeParamsList = [];\n for (const id of positionIDs) {\n const position = await this._sdk.Position.getPositionById(id, false);\n const pool = await this._sdk.Pool.getPool(position.pool, false);\n posFeeParamsList.push({\n poolAddress: pool.poolAddress,\n positionId: position.pos_object_id,\n coinTypeA: pool.coinTypeA,\n coinTypeB: pool.coinTypeB\n });\n }\n const positionMap = {};\n if (posFeeParamsList.length > 0) {\n const result = await this.fetchPosFeeAmount(posFeeParamsList);\n for (const posRewarderInfo of result) {\n positionMap[posRewarderInfo.position_id] = posRewarderInfo;\n }\n return positionMap;\n }\n return positionMap;\n }\n /**\n * Fetches the Position fee amount for a given list of addresses.\n * @param params An array of FetchPosFeeParams objects containing the target addresses and their corresponding amounts.\n * @returns\n */\n async fetchPosFeeAmount(params) {\n const { clmm_pool, integrate, simulationAccount } = this.sdk.sdkOptions;\n const tx = new Transaction6();\n for (const paramItem of params) {\n const typeArguments = [paramItem.coinTypeA, paramItem.coinTypeB];\n const args = [\n tx.object(getPackagerConfigs(clmm_pool).global_config_id),\n tx.object(paramItem.poolAddress),\n tx.pure.address(paramItem.positionId)\n ];\n tx.moveCall({\n target: `${integrate.published_at}::${ClmmFetcherModule}::fetch_position_fees`,\n arguments: args,\n typeArguments\n });\n }\n const simulateRes = await this.sdk.fullClient.devInspectTransactionBlock({\n transactionBlock: tx,\n sender: simulationAccount.address\n });\n const valueData = simulateRes.events?.filter((item) => {\n return extractStructTagFromType(item.type).name === `FetchPositionFeesEvent`;\n });\n if (valueData.length === 0) {\n return [];\n }\n const result = [];\n for (let i = 0; i < valueData.length; i += 1) {\n const { parsedJson } = valueData[i];\n const posRrewarderResult = {\n feeOwedA: new BN16(parsedJson.fee_owned_a),\n feeOwedB: new BN16(parsedJson.fee_owned_b),\n position_id: parsedJson.position_id\n };\n result.push(posRrewarderResult);\n }\n return result;\n }\n /**\n * Fetches the Position reward amount for a given list of addresses.\n * @param params An array of FetchPosRewardParams objects containing the target addresses and their corresponding amounts.\n * @returns\n */\n async fetchPosRewardersAmount(params) {\n const { clmm_pool, integrate, simulationAccount } = this.sdk.sdkOptions;\n const tx = new Transaction6();\n for (const paramItem of params) {\n const typeArguments = [paramItem.coinTypeA, paramItem.coinTypeB];\n const args = [\n tx.object(getPackagerConfigs(clmm_pool).global_config_id),\n tx.object(paramItem.poolAddress),\n tx.pure.address(paramItem.positionId),\n tx.object(CLOCK_ADDRESS)\n ];\n tx.moveCall({\n target: `${integrate.published_at}::${ClmmFetcherModule}::fetch_position_rewards`,\n arguments: args,\n typeArguments\n });\n }\n if (!checkInvalidSuiAddress(simulationAccount.address)) {\n throw new ClmmpoolsError(\n `this config simulationAccount: ${simulationAccount.address} is not set right`,\n \"InvalidSimulateAccount\" /* InvalidSimulateAccount */\n );\n }\n const simulateRes = await this.sdk.fullClient.devInspectTransactionBlock({\n transactionBlock: tx,\n sender: simulationAccount.address\n });\n if (simulateRes.error != null) {\n throw new ClmmpoolsError(\n `fetch position rewards error code: ${simulateRes.error ?? \"unknown error\"}, please check config and params`,\n \"InvalidConfig\" /* InvalidConfig */\n );\n }\n const valueData = simulateRes.events?.filter((item) => {\n return extractStructTagFromType(item.type).name === `FetchPositionRewardsEvent`;\n });\n if (valueData.length === 0) {\n return [];\n }\n if (valueData.length !== params.length) {\n throw new ClmmpoolsError(\"valueData.length !== params.pools.length\");\n }\n const result = [];\n for (let i = 0; i < valueData.length; i += 1) {\n const posRrewarderResult = {\n poolAddress: params[i].poolAddress,\n positionId: params[i].positionId,\n rewarderAmountOwed: []\n };\n for (let j = 0; j < params[i].rewarderInfo.length; j += 1) {\n posRrewarderResult.rewarderAmountOwed.push({\n amount_owed: new BN16(valueData[i].parsedJson.data[j]),\n coin_address: params[i].rewarderInfo[j].coinAddress\n });\n }\n result.push(posRrewarderResult);\n }\n return result;\n }\n /**\n * Fetches the pool reward amount for a given account and pool object id.\n * @param {string} account - The target account.\n * @param {string} poolObjectId - The target pool object id.\n * @returns {Promise<number|null>} - A Promise that resolves with the fetched pool reward amount for the specified account and pool, or null if the fetch is unsuccessful.\n */\n async fetchPoolRewardersAmount(account, poolObjectId) {\n const pool = await this.sdk.Pool.getPool(poolObjectId);\n const positions = await this.sdk.Position.getPositionList(account, [poolObjectId]);\n const params = [];\n for (const position of positions) {\n params.push({\n poolAddress: pool.poolAddress,\n positionId: position.pos_object_id,\n rewarderInfo: pool.rewarder_infos,\n coinTypeA: pool.coinTypeA,\n coinTypeB: pool.coinTypeB\n });\n }\n const result = await this.fetchPosRewardersAmount(params);\n const rewarderAmount = [ZERO, ZERO, ZERO];\n if (result != null) {\n for (const posRewarderInfo of result) {\n for (let j = 0; j < posRewarderInfo.rewarderAmountOwed.length; j += 1) {\n rewarderAmount[j] = rewarderAmount[j].add(posRewarderInfo.rewarderAmountOwed[j].amount_owed);\n }\n }\n }\n return rewarderAmount;\n }\n async getPoolLowerAndUpperTicks(ticksHandle, positions) {\n const lowerTicks = [];\n const upperTicks = [];\n for (const pos of positions) {\n const tickLower = await this.sdk.Pool.getTickDataByIndex(ticksHandle, pos.tick_lower_index);\n const tickUpper = await this.sdk.Pool.getTickDataByIndex(ticksHandle, pos.tick_upper_index);\n lowerTicks.push(tickLower);\n upperTicks.push(tickUpper);\n }\n return [lowerTicks, upperTicks];\n }\n /**\n * Collect rewards from Position.\n * @param params\n * @param gasBudget\n * @returns\n */\n async collectRewarderTransactionPayload(params) {\n if (!checkInvalidSuiAddress(this._sdk.senderAddress)) {\n throw new ClmmpoolsError(\"this config sdk senderAddress is not set right\", \"InvalidSendAddress\" /* InvalidSendAddress */);\n }\n const allCoinAsset = await this._sdk.getOwnerCoinAssets(this._sdk.senderAddress, null);\n let tx = new Transaction6();\n tx = TransactionUtil.createCollectRewarderAndFeeParams(this._sdk, tx, params, allCoinAsset);\n return tx;\n }\n /**\n * batech Collect rewards from Position.\n * @param params\n * @param published_at\n * @param tx\n * @returns\n */\n async batchCollectRewardePayload(params, tx, inputCoinA, inputCoinB) {\n if (!checkInvalidSuiAddress(this._sdk.senderAddress)) {\n throw new ClmmpoolsError(\"this config sdk senderAddress is not set right\", \"InvalidSendAddress\" /* InvalidSendAddress */);\n }\n const allCoinAsset = await this._sdk.getOwnerCoinAssets(this._sdk.senderAddress, null);\n tx = tx || new Transaction6();\n const coinIdMaps = {};\n params.forEach((item) => {\n const coinTypeA = normalizeCoinType(item.coinTypeA);\n const coinTypeB = normalizeCoinType(item.coinTypeB);\n if (item.collect_fee) {\n let coinAInput = coinIdMaps[coinTypeA];\n if (coinAInput == null) {\n if (inputCoinA == null) {\n coinAInput = TransactionUtil.buildCoinForAmount(tx, allCoinAsset, BigInt(0), coinTypeA, false);\n } else {\n coinAInput = {\n targetCoin: inputCoinA,\n remainCoins: [],\n isMintZeroCoin: false,\n tragetCoinAmount: \"0\"\n };\n }\n coinIdMaps[coinTypeA] = coinAInput;\n }\n let coinBInput = coinIdMaps[coinTypeB];\n if (coinBInput == null) {\n if (inputCoinB == null) {\n coinBInput = TransactionUtil.buildCoinForAmount(tx, allCoinAsset, BigInt(0), coinTypeB, false);\n } else {\n coinBInput = {\n targetCoin: inputCoinB,\n remainCoins: [],\n isMintZeroCoin: false,\n tragetCoinAmount: \"0\"\n };\n }\n coinIdMaps[coinTypeB] = coinBInput;\n }\n tx = this._sdk.Position.createCollectFeeNoSendPaylod(\n {\n pool_id: item.pool_id,\n pos_id: item.pos_id,\n coinTypeA: item.coinTypeA,\n coinTypeB: item.coinTypeB\n },\n tx,\n coinAInput.targetCoin,\n coinBInput.targetCoin\n );\n }\n const primaryCoinInputs = [];\n item.rewarder_coin_types.forEach((type) => {\n const coinType = normalizeCoinType(type);\n let coinInput = coinIdMaps[type];\n if (coinInput === void 0) {\n coinInput = TransactionUtil.buildCoinForAmount(tx, allCoinAsset, BigInt(0), coinType, false);\n coinIdMaps[coinType] = coinInput;\n }\n primaryCoinInputs.push(coinInput.targetCoin);\n });\n tx = this.createCollectRewarderNoSendPaylod(item, tx, primaryCoinInputs);\n });\n Object.keys(coinIdMaps).forEach((key) => {\n const value = coinIdMaps[key];\n if (value.isMintZeroCoin) {\n TransactionUtil.buildTransferCoin(this._sdk, tx, value.targetCoin, key, this._sdk.senderAddress);\n }\n });\n return tx;\n }\n createCollectRewarderPaylod(params, tx, primaryCoinInputs) {\n const { clmm_pool, integrate } = this.sdk.sdkOptions;\n const clmmConfigs = getPackagerConfigs(clmm_pool);\n const typeArguments = [params.coinTypeA, params.coinTypeB];\n params.rewarder_coin_types.forEach((type, index) => {\n if (tx) {\n tx.moveCall({\n target: `${integrate.published_at}::${ClmmIntegratePoolV2Module}::collect_reward`,\n typeArguments: [...typeArguments, type],\n arguments: [\n tx.object(clmmConfigs.global_config_id),\n tx.object(params.pool_id),\n tx.object(params.pos_id),\n tx.object(clmmConfigs.global_vault_id),\n primaryCoinInputs[index],\n tx.object(CLOCK_ADDRESS)\n ]\n });\n }\n });\n return tx;\n }\n createCollectRewarderNoSendPaylod(params, tx, primaryCoinInputs) {\n const { clmm_pool, integrate } = this.sdk.sdkOptions;\n const clmmConfigs = getPackagerConfigs(clmm_pool);\n const typeArguments = [params.coinTypeA, params.coinTypeB];\n params.rewarder_coin_types.forEach((type, index) => {\n if (tx) {\n tx.moveCall({\n target: `${integrate.published_at}::${ClmmIntegratePoolV3Module}::collect_reward`,\n typeArguments: [...typeArguments, type],\n arguments: [\n tx.object(clmmConfigs.global_config_id),\n tx.object(params.pool_id),\n tx.object(params.pos_id),\n tx.object(clmmConfigs.global_vault_id),\n primaryCoinInputs[index],\n tx.object(CLOCK_ADDRESS)\n ]\n });\n }\n });\n return tx;\n }\n};\n\n// src/modules/routerModule.ts\nimport BN17 from \"bn.js\";\nimport { Graph, GraphEdge, GraphVertex } from \"@syntsugar/cc-graph\";\nimport { Transaction as Transaction7 } from \"@mysten/sui/transactions\";\nfunction _pairSymbol(base, quote) {\n return {\n pair: `${base}-${quote}`,\n reversePair: `${quote}-${base}`\n };\n}\nvar RouterModule = class {\n graph;\n pathProviders;\n coinProviders;\n _coinAddressMap;\n poolAddressMap;\n _sdk;\n constructor(sdk) {\n this.pathProviders = [];\n this.coinProviders = {\n coins: []\n };\n this.graph = new Graph(false);\n this._coinAddressMap = /* @__PURE__ */ new Map();\n this.poolAddressMap = /* @__PURE__ */ new Map();\n this._sdk = sdk;\n this.getPoolAddressMapAndDirection = this.getPoolAddressMapAndDirection.bind(this);\n this.setCoinList = this.setCoinList.bind(this);\n this.loadGraph = this.loadGraph.bind(this);\n this.addCoinProvider = this.addCoinProvider.bind(this);\n this.addPathProvider = this.addPathProvider.bind(this);\n this.preRouterSwapA2B2C = this.preRouterSwapA2B2C.bind(this);\n this.price = this.price.bind(this);\n this.getPoolWithTVL = this.getPoolWithTVL.bind(this);\n }\n get sdk() {\n return this._sdk;\n }\n /**\n * Get pool address map with direction\n * @param {string} base base coin\n * @param {string} quote quote coin\n * @returns {AddressAndDirection} address with direction\n */\n getPoolAddressMapAndDirection(base, quote) {\n const { pair, reversePair } = _pairSymbol(base, quote);\n let addressMap = this.poolAddressMap.get(pair);\n if (addressMap != null) {\n return {\n addressMap,\n direction: true\n };\n }\n addressMap = this.poolAddressMap.get(reversePair);\n if (addressMap != null) {\n return {\n addressMap,\n direction: false\n };\n }\n return void 0;\n }\n /**\n * set coin list in coin address map\n */\n setCoinList() {\n this.coinProviders.coins.forEach((coin) => {\n this._coinAddressMap.set(coin.address, coin);\n });\n }\n /**\n * Find best router must load graph first\n * @param {CoinProvider} coins all coins\n * @param {PathProvider} paths all paths\n */\n loadGraph(coins, paths) {\n this.addCoinProvider(coins);\n this.addPathProvider(paths);\n this.setCoinList();\n this.pathProviders.forEach((provider) => {\n const { paths: paths2 } = provider;\n paths2.forEach((path) => {\n const vertexA = this.graph.getVertexByKey(path.base) ?? new GraphVertex(path.base);\n const vertexB = this.graph.getVertexByKey(path.quote) ?? new GraphVertex(path.quote);\n this.graph.addEdge(new GraphEdge(vertexA, vertexB));\n const coinA = this._coinAddressMap.get(path.base);\n const coinB = this._coinAddressMap.get(path.quote);\n if (coinA != null && coinB != null) {\n const poolSymbol = _pairSymbol(path.base, path.quote).pair;\n this.poolAddressMap.set(poolSymbol, path.addressMap);\n }\n });\n });\n }\n /**\n * Add path provider to router graph\n * @param {PathProvider} provider path provider\n * @returns {RouterModule} module of router\n */\n addPathProvider(provider) {\n for (let i = 0; i < provider.paths.length; i += 1) {\n const { base, quote } = provider.paths[i];\n const compareResult = base.localeCompare(quote);\n if (compareResult < 0) {\n provider.paths[i].base = quote;\n provider.paths[i].quote = base;\n }\n if (base === \"0x2::sui::SUI\") {\n provider.paths[i].base = quote;\n provider.paths[i].quote = base;\n }\n if (quote === \"0x2::sui::SUI\") {\n provider.paths[i].base = base;\n provider.paths[i].quote = quote;\n }\n }\n this.pathProviders.push(provider);\n return this;\n }\n /**\n * Add coin provider to router graph\n * @param {CoinProvider} provider coin provider\n * @returns {RouterModule} module of router\n */\n addCoinProvider(provider) {\n this.coinProviders = provider;\n return this;\n }\n /**\n * Get token info from coin address map\n * @param {string} key coin type\n * @returns {CoinNode | undefined}\n */\n tokenInfo(key) {\n return this._coinAddressMap.get(key);\n }\n /**\n * Get fee rate info from pool address map\n * @param from from coin type\n * @param to to coin type\n * @param address pool address\n * @returns fee rate of pool\n */\n getFeeRate(from, to, address) {\n const poolSymbol = _pairSymbol(from, to).pair;\n const addressMap = this.poolAddressMap.get(poolSymbol);\n if (addressMap != null) {\n for (const [key, value] of addressMap.entries()) {\n if (value === address) {\n return key * 100;\n }\n }\n }\n const poolSymbolRev = _pairSymbol(from, to).reversePair;\n const addressMapRev = this.poolAddressMap.get(poolSymbolRev);\n if (addressMapRev != null) {\n for (const [key, value] of addressMapRev.entries()) {\n if (value === address) {\n return key * 100;\n }\n }\n }\n return 0;\n }\n /**\n * Get the best price from router graph.\n *\n * @param {string} from from coin type\n * @param {string} to to coin type\n * @param {BN} amount coin amount\n * @param {boolean} byAmountIn weather fixed inoput amount\n * @param {number} priceSlippagePoint price splippage point\n * @param {string} partner partner object id\n * @param {PreSwapWithMultiPoolParams} swapWithMultiPoolParams use to downgrade\n * @returns {Promise<PriceResult | undefined>} best swap router\n */\n async price(from, to, amount, byAmountIn, priceSlippagePoint, partner, swapWithMultiPoolParams) {\n const fromCoin = this.tokenInfo(from);\n const toCoin = this.tokenInfo(to);\n if (fromCoin === void 0 || toCoin === void 0) {\n throw new ClmmpoolsError(\"From/To coin is undefined\", \"InvalidCoin\" /* InvalidCoin */);\n }\n const fromVertex = this.graph.getVertexByKey(fromCoin.address);\n const toVertex = this.graph.getVertexByKey(toCoin.address);\n const pathIters = this.graph.findAllPath(fromVertex, toVertex);\n const allPaths = Array.from(pathIters);\n if (allPaths.length === 0) {\n throw new ClmmpoolsError(\"No find valid path in coin graph\", \"NotFoundPath\" /* NotFoundPath */);\n }\n let preRouterSwapParams = [];\n for (let i = 0; i < allPaths.length; i += 1) {\n const path = allPaths[i];\n if (path.length > 3) {\n continue;\n }\n const fromAndTo = [];\n const swapDirection = [];\n const poolsAB = [];\n const poolsBC = [];\n for (let j = 0; j < path.length - 1; j += 1) {\n const subFrom = path[j].value.toString();\n const subTo = path[j + 1].value.toString();\n const addressMapAndDirection = this.getPoolAddressMapAndDirection(subFrom, subTo);\n const addressMap = addressMapAndDirection?.addressMap;\n const direction = addressMapAndDirection?.direction;\n if (addressMap != null && direction != null) {\n swapDirection.push(direction);\n fromAndTo.push(subFrom);\n fromAndTo.push(subTo);\n addressMap.forEach((address) => {\n if (j === 0) {\n poolsAB.push(address);\n } else {\n poolsBC.push(address);\n }\n });\n }\n }\n for (const poolAB of poolsAB) {\n if (poolsBC.length > 0) {\n for (const poolBC of poolsBC) {\n const param = {\n stepNums: 2,\n poolAB,\n poolBC,\n a2b: swapDirection[0],\n b2c: swapDirection[1],\n amount,\n byAmountIn,\n coinTypeA: fromAndTo[0],\n coinTypeB: fromAndTo[1],\n coinTypeC: fromAndTo[3]\n };\n preRouterSwapParams.push(param);\n }\n } else {\n const param = {\n stepNums: 1,\n poolAB,\n poolBC: void 0,\n a2b: swapDirection[0],\n b2c: void 0,\n amount,\n byAmountIn,\n coinTypeA: fromAndTo[0],\n coinTypeB: fromAndTo[1],\n coinTypeC: void 0\n };\n preRouterSwapParams.push(param);\n }\n }\n }\n const stepNumsOne = preRouterSwapParams.filter((item) => item.stepNums === 1);\n const notStepNumsOne = preRouterSwapParams.filter((item) => item.stepNums !== 1);\n let poolWithTvls = [];\n try {\n poolWithTvls = await this.getPoolWithTVL();\n } catch (err) {\n poolWithTvls = [];\n }\n if (poolWithTvls.length > 0) {\n const poolWithTvlsMap = new Map(poolWithTvls.map((item) => [item.poolAddress, item]));\n notStepNumsOne.sort((a, b) => {\n let aTvlMinimum = 0;\n let bTvlMinimum = 0;\n if (poolWithTvlsMap.has(a.poolAB) && poolWithTvlsMap.has(a.poolBC)) {\n const aPoolAB = poolWithTvlsMap.get(a.poolAB);\n const aPoolBC = poolWithTvlsMap.get(a.poolBC);\n aTvlMinimum = Math.min(aPoolAB.tvl, aPoolBC.tvl);\n }\n if (poolWithTvlsMap.has(b.poolAB) && poolWithTvlsMap.has(b.poolBC)) {\n const bPoolAB = poolWithTvlsMap.get(b.poolAB);\n const bPoolBC = poolWithTvlsMap.get(b.poolBC);\n bTvlMinimum = Math.min(bPoolAB.tvl, bPoolBC.tvl);\n }\n return bTvlMinimum - aTvlMinimum;\n });\n }\n preRouterSwapParams = [...stepNumsOne, ...notStepNumsOne];\n if (preRouterSwapParams.length === 0) {\n if (swapWithMultiPoolParams != null) {\n const preSwapResult2 = await this.sdk.Swap.preSwapWithMultiPool(swapWithMultiPoolParams);\n const onePath2 = {\n amountIn: new BN17(preSwapResult2.estimatedAmountIn),\n amountOut: new BN17(preSwapResult2.estimatedAmountOut),\n poolAddress: [preSwapResult2.poolAddress],\n a2b: [preSwapResult2.aToB],\n rawAmountLimit: byAmountIn ? [preSwapResult2.estimatedAmountOut] : [preSwapResult2.estimatedAmountIn],\n isExceed: preSwapResult2.isExceed,\n coinType: [from, to]\n };\n const swapWithRouterParams2 = {\n paths: [onePath2],\n partner,\n priceSlippagePoint\n };\n const result2 = {\n amountIn: new BN17(preSwapResult2.estimatedAmountIn),\n amountOut: new BN17(preSwapResult2.estimatedAmountOut),\n paths: [onePath2],\n a2b: preSwapResult2.aToB,\n b2c: void 0,\n byAmountIn,\n isExceed: preSwapResult2.isExceed,\n targetSqrtPrice: [preSwapResult2.estimatedEndSqrtPrice],\n currentSqrtPrice: [preSwapResult2.estimatedStartSqrtPrice],\n coinTypeA: from,\n coinTypeB: to,\n coinTypeC: void 0,\n createTxParams: swapWithRouterParams2\n };\n return result2;\n }\n throw new ClmmpoolsError(\"No parameters available for service downgrade\", \"NoDowngradeNeedParams\" /* NoDowngradeNeedParams */);\n }\n const preSwapResult = await this.preRouterSwapA2B2C(preRouterSwapParams.slice(0, 16));\n if (preSwapResult == null) {\n if (swapWithMultiPoolParams != null) {\n const preSwapResult2 = await this.sdk.Swap.preSwapWithMultiPool(swapWithMultiPoolParams);\n const onePath2 = {\n amountIn: new BN17(preSwapResult2.estimatedAmountIn),\n amountOut: new BN17(preSwapResult2.estimatedAmountOut),\n poolAddress: [preSwapResult2.poolAddress],\n a2b: [preSwapResult2.aToB],\n rawAmountLimit: byAmountIn ? [preSwapResult2.estimatedAmountOut] : [preSwapResult2.estimatedAmountIn],\n isExceed: preSwapResult2.isExceed,\n coinType: [from, to]\n };\n const swapWithRouterParams2 = {\n paths: [onePath2],\n partner,\n priceSlippagePoint\n };\n const result3 = {\n amountIn: new BN17(preSwapResult2.estimatedAmountIn),\n amountOut: new BN17(preSwapResult2.estimatedAmountOut),\n paths: [onePath2],\n a2b: preSwapResult2.aToB,\n b2c: void 0,\n byAmountIn,\n isExceed: preSwapResult2.isExceed,\n targetSqrtPrice: [preSwapResult2.estimatedEndSqrtPrice],\n currentSqrtPrice: [preSwapResult2.estimatedStartSqrtPrice],\n coinTypeA: from,\n coinTypeB: to,\n coinTypeC: void 0,\n createTxParams: swapWithRouterParams2\n };\n return result3;\n }\n const result2 = {\n amountIn: ZERO,\n amountOut: ZERO,\n paths: [],\n a2b: false,\n b2c: false,\n byAmountIn,\n isExceed: true,\n targetSqrtPrice: [],\n currentSqrtPrice: [],\n coinTypeA: \"\",\n coinTypeB: \"\",\n coinTypeC: void 0,\n createTxParams: void 0\n };\n return result2;\n }\n const bestIndex = preSwapResult.index;\n const poolAddress = preRouterSwapParams[bestIndex].poolBC != null ? [preRouterSwapParams[bestIndex].poolAB, preRouterSwapParams[bestIndex].poolBC] : [preRouterSwapParams[bestIndex].poolAB];\n const rawAmountLimit = byAmountIn ? [preSwapResult.amountMedium, preSwapResult.amountOut] : [preSwapResult.amountIn, preSwapResult.amountMedium];\n const a2bs = [];\n a2bs.push(preRouterSwapParams[bestIndex].a2b);\n if (preSwapResult.stepNum > 1) {\n a2bs.push(preRouterSwapParams[bestIndex].b2c);\n }\n const coinTypes = [];\n coinTypes.push(preRouterSwapParams[bestIndex].coinTypeA);\n coinTypes.push(preRouterSwapParams[bestIndex].coinTypeB);\n if (preSwapResult.stepNum > 1) {\n coinTypes.push(preRouterSwapParams[bestIndex].coinTypeC);\n }\n const onePath = {\n amountIn: preSwapResult.amountIn,\n amountOut: preSwapResult.amountOut,\n poolAddress,\n a2b: a2bs,\n rawAmountLimit,\n isExceed: preSwapResult.isExceed,\n coinType: coinTypes\n };\n const swapWithRouterParams = {\n paths: [onePath],\n partner,\n priceSlippagePoint\n };\n const result = {\n amountIn: preSwapResult.amountIn,\n amountOut: preSwapResult.amountOut,\n paths: [onePath],\n a2b: preRouterSwapParams[bestIndex].a2b,\n b2c: preSwapResult.stepNum > 1 ? preRouterSwapParams[bestIndex].b2c : void 0,\n byAmountIn,\n isExceed: preSwapResult.isExceed,\n targetSqrtPrice: preSwapResult.targetSqrtPrice,\n currentSqrtPrice: preSwapResult.currentSqrtPrice,\n coinTypeA: preRouterSwapParams[bestIndex].coinTypeA,\n coinTypeB: preRouterSwapParams[bestIndex].coinTypeB,\n coinTypeC: preSwapResult.stepNum > 1 ? preRouterSwapParams[bestIndex].coinTypeC : void 0,\n createTxParams: swapWithRouterParams\n };\n return result;\n }\n async priceUseV1(from, to, _amount, byAmountIn, priceSlippagePoint, partner, swapWithMultiPoolParams) {\n if (swapWithMultiPoolParams != null) {\n const preSwapResult = await this.sdk.Swap.preSwapWithMultiPool(swapWithMultiPoolParams);\n const onePath = {\n amountIn: new BN17(preSwapResult.estimatedAmountIn),\n amountOut: new BN17(preSwapResult.estimatedAmountOut),\n poolAddress: [preSwapResult.poolAddress],\n a2b: [preSwapResult.aToB],\n rawAmountLimit: byAmountIn ? [preSwapResult.estimatedAmountOut] : [preSwapResult.estimatedAmountIn],\n isExceed: preSwapResult.isExceed,\n coinType: [from, to]\n };\n const swapWithRouterParams = {\n paths: [onePath],\n partner,\n priceSlippagePoint\n };\n const result = {\n amountIn: new BN17(preSwapResult.estimatedAmountIn),\n amountOut: new BN17(preSwapResult.estimatedAmountOut),\n paths: [onePath],\n a2b: preSwapResult.aToB,\n b2c: void 0,\n byAmountIn,\n isExceed: preSwapResult.isExceed,\n targetSqrtPrice: [preSwapResult.estimatedEndSqrtPrice],\n currentSqrtPrice: [preSwapResult.estimatedStartSqrtPrice],\n coinTypeA: from,\n coinTypeB: to,\n coinTypeC: void 0,\n createTxParams: swapWithRouterParams\n };\n return result;\n }\n throw new ClmmpoolsError(\"No parameters available for service downgrade\", \"NoDowngradeNeedParams\" /* NoDowngradeNeedParams */);\n }\n async preRouterSwapA2B2C(params) {\n if (params.length === 0) {\n return null;\n }\n const { integrate, simulationAccount } = this.sdk.sdkOptions;\n const tx = new Transaction7();\n for (const param of params) {\n if (param.stepNums > 1) {\n const args = [\n tx.object(param.poolAB),\n tx.object(param.poolBC),\n tx.pure.bool(param.a2b),\n tx.pure.bool(param.b2c),\n tx.pure.bool(param.byAmountIn),\n tx.pure.u64(param.amount.toString())\n ];\n const typeArguments = [];\n if (param.a2b) {\n typeArguments.push(param.coinTypeA, param.coinTypeB);\n } else {\n typeArguments.push(param.coinTypeB, param.coinTypeA);\n }\n if (param.b2c) {\n typeArguments.push(param.coinTypeB, param.coinTypeC);\n } else {\n typeArguments.push(param.coinTypeC, param.coinTypeB);\n }\n tx.moveCall({\n target: `${integrate.published_at}::${ClmmIntegrateRouterModule}::calculate_router_swap_result`,\n typeArguments,\n arguments: args\n });\n } else {\n const args = [\n tx.object(param.poolAB),\n tx.pure.bool(param.a2b),\n tx.pure.bool(param.byAmountIn),\n tx.pure.u64(param.amount.toString())\n ];\n const typeArguments = param.a2b ? [param.coinTypeA, param.coinTypeB] : [param.coinTypeB, param.coinTypeA];\n tx.moveCall({\n target: `${integrate.published_at}::${ClmmExpectSwapModule}::get_expect_swap_result`,\n arguments: args,\n typeArguments\n });\n }\n }\n if (!checkInvalidSuiAddress(simulationAccount.address)) {\n throw new ClmmpoolsError(\"this config simulationAccount is not set right\", \"InvalidSimulateAccount\" /* InvalidSimulateAccount */);\n }\n const simulateRes = await this.sdk.fullClient.devInspectTransactionBlock({\n transactionBlock: tx,\n sender: simulationAccount.address\n });\n const valueData = simulateRes.events?.filter((item) => {\n return extractStructTagFromType(item.type).name === `CalculatedRouterSwapResultEvent` || extractStructTagFromType(item.type).name === `ExpectSwapResultEvent`;\n });\n if (valueData.length === 0) {\n return null;\n }\n let tempMaxAmount = params[0].byAmountIn ? ZERO : U64_MAX;\n let tempIndex = 0;\n for (let i = 0; i < valueData.length; i += 1) {\n if (valueData[i].parsedJson.data.is_exceed) {\n continue;\n }\n if (params[0].byAmountIn) {\n const amount = new BN17(valueData[i].parsedJson.data.amount_out);\n if (amount.gt(tempMaxAmount)) {\n tempIndex = i;\n tempMaxAmount = amount;\n }\n } else {\n const amount = params[i].stepNums > 1 ? new BN17(valueData[i].parsedJson.data.amount_in) : new BN17(valueData[i].parsedJson.data.amount_in).add(new BN17(valueData[i].parsedJson.data.fee_amount));\n if (amount.lt(tempMaxAmount)) {\n tempIndex = i;\n tempMaxAmount = amount;\n }\n }\n }\n const currentSqrtPrice = [];\n const targetSqrtPrice = [];\n if (params[tempIndex].stepNums > 1) {\n targetSqrtPrice.push(\n valueData[tempIndex].parsedJson.data.target_sqrt_price_ab,\n valueData[tempIndex].parsedJson.data.target_sqrt_price_cd\n );\n currentSqrtPrice.push(\n valueData[tempIndex].parsedJson.data.current_sqrt_price_ab,\n valueData[tempIndex].parsedJson.data.current_sqrt_price_cd\n );\n } else {\n targetSqrtPrice.push(valueData[tempIndex].parsedJson.data.after_sqrt_price);\n currentSqrtPrice.push(valueData[tempIndex].parsedJson.current_sqrt_price);\n }\n const result = {\n index: tempIndex,\n amountIn: params[0].byAmountIn ? params[tempIndex].amount : tempMaxAmount,\n amountMedium: valueData[tempIndex].parsedJson.data.amount_medium,\n amountOut: params[0].byAmountIn ? tempMaxAmount : params[tempIndex].amount,\n targetSqrtPrice,\n currentSqrtPrice,\n isExceed: valueData[tempIndex].parsedJson.data.is_exceed,\n stepNum: params[tempIndex].stepNums\n };\n return result;\n }\n async getPoolWithTVL() {\n const result = [];\n const { swapCountUrl } = this._sdk.sdkOptions;\n if (!swapCountUrl) {\n return result;\n }\n let response;\n try {\n response = await fetch(swapCountUrl);\n } catch (e) {\n throw new ClmmpoolsError(`Failed to get pool list with liquidity from ${swapCountUrl}.`, \"InvalidSwapCountUrl\" /* InvalidSwapCountUrl */);\n }\n let json;\n try {\n json = await response.json();\n } catch (e) {\n throw new ClmmpoolsError(`Failed tp [arse response from ${swapCountUrl}].`, \"InvalidSwapCountUrl\" /* InvalidSwapCountUrl */);\n }\n if (json.code !== 200) {\n throw new ClmmpoolsError(\n `Failed to get pool list from ${swapCountUrl}. Statu code is ${json.code}.`,\n \"InvalidSwapCountUrl\" /* InvalidSwapCountUrl */\n );\n }\n const { pools } = json.data;\n for (const pool of pools) {\n result.push({\n poolAddress: pool.swap_account,\n tvl: Number(pool.tvl_in_usd)\n });\n }\n return result;\n }\n};\n\n// src/modules/swapModule.ts\nimport BN18 from \"bn.js\";\nimport Decimal5 from \"decimal.js\";\nimport { Transaction as Transaction8 } from \"@mysten/sui/transactions\";\nvar AMM_SWAP_MODULE = \"amm_swap\";\nvar POOL_STRUCT = \"Pool\";\nvar SwapModule = class {\n _sdk;\n constructor(sdk) {\n this._sdk = sdk;\n }\n get sdk() {\n return this._sdk;\n }\n calculateSwapFee(paths) {\n let fee = d(0);\n paths.forEach((item) => {\n const pathCount = item.basePaths.length;\n if (pathCount > 0) {\n const path = item.basePaths[0];\n const feeRate = path.label === \"Cetus\" ? new Decimal5(path.feeRate).div(10 ** 6) : new Decimal5(path.feeRate).div(10 ** 9);\n const feeAmount = d(path.inputAmount).div(10 ** path.fromDecimal).mul(feeRate);\n fee = fee.add(feeAmount);\n if (pathCount > 1) {\n const path2 = item.basePaths[1];\n const price1 = path.direction ? path.currentPrice : new Decimal5(1).div(path.currentPrice);\n const price2 = path2.direction ? path2.currentPrice : new Decimal5(1).div(path2.currentPrice);\n const feeRate2 = path2.label === \"Cetus\" ? new Decimal5(path2.feeRate).div(10 ** 6) : new Decimal5(path2.feeRate).div(10 ** 9);\n const feeAmount2 = d(path2.outputAmount).div(10 ** path2.toDecimal).mul(feeRate2);\n const fee2 = feeAmount2.div(price1.mul(price2));\n fee = fee.add(fee2);\n }\n }\n });\n return fee.toString();\n }\n calculateSwapPriceImpact(paths) {\n let impactValue = d(0);\n paths.forEach((item) => {\n const pathCount = item.basePaths.length;\n if (pathCount === 1) {\n const path = item.basePaths[0];\n const outputAmount = d(path.outputAmount).div(10 ** path.toDecimal);\n const inputAmount = d(path.inputAmount).div(10 ** path.fromDecimal);\n const rate = outputAmount.div(inputAmount);\n const cprice = path.direction ? new Decimal5(path.currentPrice) : new Decimal5(1).div(path.currentPrice);\n impactValue = impactValue.add(this.calculateSingleImpact(rate, cprice));\n }\n if (pathCount === 2) {\n const path = item.basePaths[0];\n const path2 = item.basePaths[1];\n const cprice1 = path.direction ? new Decimal5(path.currentPrice) : new Decimal5(1).div(path.currentPrice);\n const cprice2 = path2.direction ? new Decimal5(path2.currentPrice) : new Decimal5(1).div(path2.currentPrice);\n const cprice = cprice1.mul(cprice2);\n const outputAmount = new Decimal5(path2.outputAmount).div(10 ** path2.toDecimal);\n const inputAmount = new Decimal5(path.inputAmount).div(10 ** path.fromDecimal);\n const rate = outputAmount.div(inputAmount);\n impactValue = impactValue.add(this.calculateSingleImpact(rate, cprice));\n }\n });\n return impactValue.toString();\n }\n calculateSingleImpact = (rate, cprice) => {\n return cprice.minus(rate).div(cprice).mul(100);\n };\n /**\n * Performs a pre-swap with multiple pools.\n *\n * @param {PreSwapWithMultiPoolParams} params The parameters for the pre-swap.\n * @returns {Promise<SwapWithMultiPoolData>} A promise that resolves to the swap data.\n */\n async preSwapWithMultiPool(params) {\n const { integrate, simulationAccount } = this.sdk.sdkOptions;\n const tx = new Transaction8();\n const typeArguments = [params.coinTypeA, params.coinTypeB];\n for (let i = 0; i < params.poolAddresses.length; i += 1) {\n const args = [tx.object(params.poolAddresses[i]), tx.pure.bool(params.a2b), tx.pure.bool(params.byAmountIn), tx.pure.u64(params.amount)];\n tx.moveCall({\n target: `${integrate.published_at}::${ClmmFetcherModule}::calculate_swap_result`,\n arguments: args,\n typeArguments\n });\n }\n if (!checkInvalidSuiAddress(simulationAccount.address)) {\n throw new ClmmpoolsError(\"this config simulationAccount is not set right\", \"InvalidSimulateAccount\" /* InvalidSimulateAccount */);\n }\n const simulateRes = await this.sdk.fullClient.devInspectTransactionBlock({\n transactionBlock: tx,\n sender: simulationAccount.address\n });\n if (simulateRes.error != null) {\n throw new ClmmpoolsError(\n `pre swap with multi pools error code: ${simulateRes.error ?? \"unknown error\"}, please check config and params`,\n \"InvalidConfig\" /* InvalidConfig */\n );\n }\n const valueData = simulateRes.events?.filter((item) => {\n return extractStructTagFromType(item.type).name === `CalculatedSwapResultEvent`;\n });\n if (valueData.length === 0) {\n return null;\n }\n if (valueData.length !== params.poolAddresses.length) {\n throw new ClmmpoolsError(\"valueData.length !== params.pools.length\", \"ParamsLengthNotEqual\" /* ParamsLengthNotEqual */);\n }\n let tempMaxAmount = params.byAmountIn ? ZERO : U64_MAX;\n let tempIndex = 0;\n for (let i = 0; i < valueData.length; i += 1) {\n if (valueData[i].parsedJson.data.is_exceed) {\n continue;\n }\n if (params.byAmountIn) {\n const amount = new BN18(valueData[i].parsedJson.data.amount_out);\n if (amount.gt(tempMaxAmount)) {\n tempIndex = i;\n tempMaxAmount = amount;\n }\n } else {\n const amount = new BN18(valueData[i].parsedJson.data.amount_out);\n if (amount.lt(tempMaxAmount)) {\n tempIndex = i;\n tempMaxAmount = amount;\n }\n }\n }\n return this.transformSwapWithMultiPoolData(\n {\n poolAddress: params.poolAddresses[tempIndex],\n a2b: params.a2b,\n byAmountIn: params.byAmountIn,\n amount: params.amount,\n coinTypeA: params.coinTypeA,\n coinTypeB: params.coinTypeB\n },\n valueData[tempIndex].parsedJson\n );\n }\n /**\n * Performs a pre-swap.\n *\n * @param {PreSwapParams} params The parameters for the pre-swap.\n * @returns {Promise<PreSwapParams>} A promise that resolves to the swap data.\n */\n async preswap(params) {\n const { integrate, simulationAccount } = this.sdk.sdkOptions;\n const tx = new Transaction8();\n const typeArguments = [params.coinTypeA, params.coinTypeB];\n const args = [tx.object(params.pool.poolAddress), tx.pure.bool(params.a2b), tx.pure.bool(params.byAmountIn), tx.pure.u64(params.amount)];\n tx.moveCall({\n target: `${integrate.published_at}::${ClmmFetcherModule}::calculate_swap_result`,\n arguments: args,\n typeArguments\n });\n if (!checkInvalidSuiAddress(simulationAccount.address)) {\n throw new ClmmpoolsError(\"this config simulationAccount is not set right\", \"InvalidSimulateAccount\" /* InvalidSimulateAccount */);\n }\n const simulateRes = await this.sdk.fullClient.devInspectTransactionBlock({\n transactionBlock: tx,\n sender: simulationAccount.address\n });\n if (simulateRes.error != null) {\n throw new ClmmpoolsError(\n `preswap error code: ${simulateRes.error ?? \"unknown error\"}, please check config and params`,\n \"InvalidConfig\" /* InvalidConfig */\n );\n }\n const valueData = simulateRes.events?.filter((item) => {\n return extractStructTagFromType(item.type).name === `CalculatedSwapResultEvent`;\n });\n if (valueData.length === 0) {\n return null;\n }\n return this.transformSwapData(params, valueData[0].parsedJson.data);\n }\n transformSwapData(params, data) {\n const estimatedAmountIn = data.amount_in && data.fee_amount ? new BN18(data.amount_in).add(new BN18(data.fee_amount)).toString() : \"\";\n return {\n poolAddress: params.pool.poolAddress,\n currentSqrtPrice: params.currentSqrtPrice,\n estimatedAmountIn,\n estimatedAmountOut: data.amount_out,\n estimatedEndSqrtPrice: data.after_sqrt_price,\n estimatedFeeAmount: data.fee_amount,\n isExceed: data.is_exceed,\n amount: params.amount,\n aToB: params.a2b,\n byAmountIn: params.byAmountIn\n };\n }\n transformSwapWithMultiPoolData(params, jsonData) {\n const { data } = jsonData;\n console.log(\"json data. \", data);\n const estimatedAmountIn = data.amount_in && data.fee_amount ? new BN18(data.amount_in).add(new BN18(data.fee_amount)).toString() : \"\";\n return {\n poolAddress: params.poolAddress,\n estimatedAmountIn,\n estimatedAmountOut: data.amount_out,\n estimatedEndSqrtPrice: data.after_sqrt_price,\n estimatedStartSqrtPrice: data.step_results[0].current_sqrt_price,\n estimatedFeeAmount: data.fee_amount,\n isExceed: data.is_exceed,\n amount: params.amount,\n aToB: params.a2b,\n byAmountIn: params.byAmountIn\n };\n }\n /**\n * Calculates the rates for a swap.\n * @param {CalculateRatesParams} params The parameters for the calculation.\n * @returns {CalculateRatesResult} The results of the calculation.\n */\n calculateRates(params) {\n const { currentPool } = params;\n const poolData = transClmmpoolDataWithoutTicks(currentPool);\n let ticks;\n if (params.a2b) {\n ticks = params.swapTicks.sort((a, b) => {\n return b.index - a.index;\n });\n } else {\n ticks = params.swapTicks.sort((a, b) => {\n return a.index - b.index;\n });\n }\n const swapResult = computeSwap(params.a2b, params.byAmountIn, params.amount, poolData, ticks);\n let isExceed = false;\n if (params.byAmountIn) {\n isExceed = swapResult.amountIn.lt(params.amount);\n } else {\n isExceed = swapResult.amountOut.lt(params.amount);\n }\n const sqrtPriceLimit = SwapUtils.getDefaultSqrtPriceLimit(params.a2b);\n if (params.a2b && swapResult.nextSqrtPrice.lt(sqrtPriceLimit)) {\n isExceed = true;\n }\n if (!params.a2b && swapResult.nextSqrtPrice.gt(sqrtPriceLimit)) {\n isExceed = true;\n }\n let extraComputeLimit = 0;\n if (swapResult.crossTickNum > 6 && swapResult.crossTickNum < 40) {\n extraComputeLimit = 22e3 * (swapResult.crossTickNum - 6);\n }\n if (swapResult.crossTickNum > 40) {\n isExceed = true;\n }\n const prePrice = TickMath.sqrtPriceX64ToPrice(poolData.currentSqrtPrice, params.decimalsA, params.decimalsB).toNumber();\n const afterPrice = TickMath.sqrtPriceX64ToPrice(swapResult.nextSqrtPrice, params.decimalsA, params.decimalsB).toNumber();\n const priceImpactPct = Math.abs(prePrice - afterPrice) / prePrice * 100;\n return {\n estimatedAmountIn: swapResult.amountIn,\n estimatedAmountOut: swapResult.amountOut,\n estimatedEndSqrtPrice: swapResult.nextSqrtPrice,\n estimatedFeeAmount: swapResult.feeAmount,\n isExceed,\n extraComputeLimit,\n amount: params.amount,\n aToB: params.a2b,\n byAmountIn: params.byAmountIn,\n priceImpactPct\n };\n }\n /**\n * create swap transaction payload\n * @param params\n * @param gasEstimateArg When the fix input amount is SUI, gasEstimateArg can control whether to recalculate the number of SUI to prevent insufficient gas.\n * If this parameter is not passed, gas estimation is not performed\n * @returns\n */\n async createSwapTransactionPayload(params, gasEstimateArg) {\n if (this._sdk.senderAddress.length === 0) {\n throw Error(\"this config sdk senderAddress is empty\");\n }\n const allCoinAsset = await this._sdk.getOwnerCoinAssets(this._sdk.senderAddress);\n if (gasEstimateArg) {\n const { isAdjustCoinA, isAdjustCoinB } = findAdjustCoin(params);\n if (params.a2b && isAdjustCoinA || !params.a2b && isAdjustCoinB) {\n const tx = await TransactionUtil.buildSwapTransactionForGas(this._sdk, params, allCoinAsset, gasEstimateArg);\n return tx;\n }\n }\n return TransactionUtil.buildSwapTransaction(this.sdk, params, allCoinAsset);\n }\n /**\n * create swap transaction without transfer coins payload\n * @param params\n * @param gasEstimateArg When the fix input amount is SUI, gasEstimateArg can control whether to recalculate the number of SUI to prevent insufficient gas.\n * If this parameter is not passed, gas estimation is not performed\n * @returns tx and coin ABs\n */\n async createSwapTransactionWithoutTransferCoinsPayload(params, gasEstimateArg) {\n if (this._sdk.senderAddress.length === 0) {\n throw Error(\"this config sdk senderAddress is empty\");\n }\n const allCoinAsset = await this._sdk.getOwnerCoinAssets(this._sdk.senderAddress);\n if (gasEstimateArg) {\n const { isAdjustCoinA, isAdjustCoinB } = findAdjustCoin(params);\n if (params.a2b && isAdjustCoinA || !params.a2b && isAdjustCoinB) {\n const res = await TransactionUtil.buildSwapTransactionWithoutTransferCoinsForGas(this._sdk, params, allCoinAsset, gasEstimateArg);\n return res;\n }\n }\n return TransactionUtil.buildSwapTransactionWithoutTransferCoins(this.sdk, params, allCoinAsset);\n }\n};\n\n// src/modules/tokenModule.ts\nimport { Base64 } from \"js-base64\";\nimport { Transaction as Transaction9 } from \"@mysten/sui/transactions\";\nimport { normalizeSuiObjectId as normalizeSuiObjectId2 } from \"@mysten/sui/utils\";\nvar TokenModule = class {\n _sdk;\n _cache = {};\n constructor(sdk) {\n this._sdk = sdk;\n }\n get sdk() {\n return this._sdk;\n }\n /**\n * Get all registered token list.\n * @param forceRefresh\n * @returns\n */\n async getAllRegisteredTokenList(forceRefresh = false) {\n const list = await this.factchTokenList(\"\", forceRefresh);\n return list;\n }\n /**\n * Get token list by owner address.\n * @param listOwnerAddr\n * @param forceRefresh\n * @returns\n */\n async getOwnerTokenList(listOwnerAddr = \"\", forceRefresh = false) {\n const list = await this.factchTokenList(listOwnerAddr, forceRefresh);\n return list;\n }\n /**\n * Get all registered pool list\n * @param forceRefresh\n * @returns\n */\n async getAllRegisteredPoolList(forceRefresh = false) {\n const list = await this.factchPoolList(\"\", forceRefresh);\n return list;\n }\n /**\n * Get pool list by owner address.\n * @param listOwnerAddr\n * @param forceRefresh\n * @returns\n */\n async getOwnerPoolList(listOwnerAddr = \"\", forceRefresh = false) {\n const list = await this.factchPoolList(listOwnerAddr, forceRefresh);\n return list;\n }\n /**\n * Get warp pool list.\n * @param forceRefresh\n * @returns\n */\n async getWarpPoolList(forceRefresh = false) {\n const list = await this.factchWarpPoolList(\"\", \"\", forceRefresh);\n return list;\n }\n /**\n * Get warp pool list by pool owner address and coin owner address.\n * @param poolOwnerAddr\n * @param coinOwnerAddr\n * @param forceRefresh\n * @returns\n */\n async getOwnerWarpPoolList(poolOwnerAddr = \"\", coinOwnerAddr = \"\", forceRefresh = false) {\n const list = await this.factchWarpPoolList(poolOwnerAddr, coinOwnerAddr, forceRefresh);\n return list;\n }\n /**\n * Get token list by coin types.\n * @param coinTypes\n * @returns\n */\n async getTokenListByCoinTypes(coinTypes) {\n const tokenMap = {};\n const cacheKey = `getAllRegisteredTokenList`;\n const cacheData = this.getCache(cacheKey);\n if (cacheData !== void 0) {\n const tokenList = cacheData;\n for (const coinType of coinTypes) {\n for (const token of tokenList) {\n if (normalizeCoinType(coinType) === normalizeCoinType(token.address)) {\n tokenMap[coinType] = token;\n continue;\n }\n }\n }\n }\n const unFindArray = coinTypes.filter((coinType) => {\n return tokenMap[coinType] === void 0;\n });\n for (const coinType of unFindArray) {\n const metadataKey = `${coinType}_metadata`;\n const metadata = this.getCache(metadataKey);\n if (metadata !== void 0) {\n tokenMap[coinType] = metadata;\n } else {\n const data = await this._sdk.fullClient.getCoinMetadata({\n coinType\n });\n if (data) {\n const token = {\n id: data.id,\n name: data.name,\n symbol: data.symbol,\n official_symbol: data.symbol,\n coingecko_id: \"\",\n decimals: data.decimals,\n project_url: \"\",\n logo_url: data.iconUrl,\n address: coinType\n };\n tokenMap[coinType] = token;\n this.updateCache(metadataKey, token, cacheTime24h);\n }\n }\n }\n return tokenMap;\n }\n async factchTokenList(listOwnerAddr = \"\", forceRefresh = false) {\n const { simulationAccount, token } = this.sdk.sdkOptions;\n const cacheKey = `getAllRegisteredTokenList`;\n const cacheData = this.getCache(cacheKey, forceRefresh);\n if (cacheData !== void 0) {\n return cacheData;\n }\n const isOwnerRequest = listOwnerAddr.length > 0;\n const limit = 512;\n let index = 0;\n let allTokenList = [];\n if (token === void 0) {\n throw Error(\"please config token ofsdkOptions\");\n }\n const tokenConfig = getPackagerConfigs(token);\n while (true) {\n const tx = new Transaction9();\n tx.moveCall({\n target: `${token.published_at}::coin_list::${isOwnerRequest ? \"fetch_full_list_with_limit\" : \"fetch_all_registered_coin_info_with_limit\"}`,\n arguments: isOwnerRequest ? [tx.pure.address(tokenConfig.coin_registry_id), tx.pure.address(listOwnerAddr), tx.pure.u64(index), tx.pure.u64(limit)] : [tx.pure.address(tokenConfig.coin_registry_id), tx.pure.u64(index), tx.pure.u64(limit)]\n });\n const simulateRes = await this.sdk.fullClient.devInspectTransactionBlock({\n transactionBlock: tx,\n sender: simulationAccount.address\n });\n const tokenList = [];\n simulateRes.events?.forEach((item) => {\n const formatType = extractStructTagFromType(item.type);\n if (formatType.full_address === `${token.published_at}::coin_list::FetchCoinListEvent`) {\n item.parsedJson.full_list.value_list.forEach((item2) => {\n tokenList.push(this.transformData(item2, false));\n });\n }\n });\n allTokenList = [...allTokenList, ...tokenList];\n if (tokenList.length < limit) {\n break;\n } else {\n index = allTokenList.length;\n }\n }\n return allTokenList;\n }\n async factchPoolList(listOwnerAddr = \"\", forceRefresh = false) {\n const { simulationAccount, token } = this.sdk.sdkOptions;\n const cacheKey = `getAllRegisteredPoolList`;\n const cacheData = this.getCache(cacheKey, forceRefresh);\n if (cacheData !== void 0) {\n return cacheData;\n }\n let allPoolList = [];\n const limit = 512;\n let index = 0;\n const isOwnerRequest = listOwnerAddr.length > 0;\n if (token === void 0) {\n throw Error(\"please config token ofsdkOptions\");\n }\n const tokenConfig = getPackagerConfigs(token);\n while (true) {\n const tx = new Transaction9();\n tx.moveCall({\n target: `${token.published_at}::lp_list::${isOwnerRequest ? \"fetch_full_list_with_limit\" : \"fetch_all_registered_coin_info_with_limit\"}`,\n arguments: isOwnerRequest ? [tx.pure.address(tokenConfig.pool_registry_id), tx.pure.address(listOwnerAddr), tx.pure.u64(index), tx.pure.u64(limit)] : [tx.pure.address(tokenConfig.pool_registry_id), tx.pure.u64(index), tx.pure.u64(limit)]\n });\n if (!checkInvalidSuiAddress(simulationAccount.address)) {\n throw new ClmmpoolsError(\"this config simulationAccount is not set right\", \"InvalidSimulateAccount\" /* InvalidSimulateAccount */);\n }\n const simulateRes = await this.sdk.fullClient.devInspectTransactionBlock({\n transactionBlock: tx,\n sender: simulationAccount.address\n });\n const poolList = [];\n simulateRes.events?.forEach((item) => {\n const formatType = extractStructTagFromType(item.type);\n if (formatType.full_address === `${token.published_at}::lp_list::FetchPoolListEvent`) {\n item.parsedJson.full_list.value_list.forEach((item2) => {\n poolList.push(this.transformData(item2, true));\n });\n }\n });\n allPoolList = [...allPoolList, ...poolList];\n if (poolList.length < limit) {\n break;\n } else {\n index = allPoolList.length;\n }\n }\n return allPoolList;\n }\n async factchWarpPoolList(poolOwnerAddr = \"\", coinOwnerAddr = \"\", forceRefresh = false) {\n const poolList = await this.factchPoolList(poolOwnerAddr, forceRefresh);\n if (poolList.length === 0) {\n return [];\n }\n const tokenList = await this.factchTokenList(coinOwnerAddr, forceRefresh);\n const lpPoolArray = [];\n for (const pool of poolList) {\n for (const token of tokenList) {\n if (token.address === pool.coin_a_address) {\n pool.coinA = token;\n }\n if (token.address === pool.coin_b_address) {\n pool.coinB = token;\n }\n continue;\n }\n lpPoolArray.push(pool);\n }\n return lpPoolArray;\n }\n /**\n * Get the token config event.\n *\n * @param forceRefresh Whether to force a refresh of the event.\n * @returns The token config event.\n */\n async getTokenConfigEvent(forceRefresh = false) {\n const packageObjectId = this._sdk.sdkOptions.token.package_id;\n const cacheKey = `${packageObjectId}_getTokenConfigEvent`;\n const cacheData = this.getCache(cacheKey, forceRefresh);\n if (cacheData !== void 0) {\n return cacheData;\n }\n const packageObject = await this._sdk.fullClient.getObject({\n id: packageObjectId,\n options: {\n showPreviousTransaction: true\n }\n });\n const previousTx = getObjectPreviousTransactionDigest(packageObject);\n const objects = await this._sdk.fullClient.queryEventsByPage({ Transaction: previousTx });\n const tokenConfigEvent = {\n coin_registry_id: \"\",\n pool_registry_id: \"\",\n coin_list_owner: \"\",\n pool_list_owner: \"\"\n };\n if (objects.data.length > 0) {\n objects.data.forEach((item) => {\n const formatType = extractStructTagFromType(item.type);\n if (item.transactionModule === \"coin_list\") {\n switch (formatType.name) {\n case `InitListEvent`:\n tokenConfigEvent.coin_list_owner = item.parsedJson.list_id;\n break;\n case `InitRegistryEvent`:\n tokenConfigEvent.coin_registry_id = item.parsedJson.registry_id;\n break;\n default:\n break;\n }\n } else if (item.transactionModule === \"lp_list\") {\n switch (formatType.name) {\n case `InitListEvent<address>`:\n tokenConfigEvent.pool_list_owner = item.parsedJson.list_id;\n break;\n case `InitRegistryEvent<address>`:\n tokenConfigEvent.pool_registry_id = item.parsedJson.registry_id;\n break;\n default:\n break;\n }\n }\n });\n }\n if (tokenConfigEvent.coin_registry_id.length > 0) {\n this.updateCache(cacheKey, tokenConfigEvent, cacheTime24h);\n }\n return tokenConfigEvent;\n }\n transformData(item, isPoolData) {\n const token = { ...item };\n if (isPoolData) {\n try {\n token.coin_a_address = extractStructTagFromType(token.coin_a_address).full_address;\n token.coin_b_address = extractStructTagFromType(token.coin_b_address).full_address;\n } catch (error) {\n }\n } else {\n token.address = extractStructTagFromType(token.address).full_address;\n }\n if (item.extensions) {\n const extensionsDataArray = item.extensions.contents;\n for (const item2 of extensionsDataArray) {\n const { key } = item2;\n let { value } = item2;\n if (key === \"labels\") {\n try {\n value = JSON.parse(decodeURIComponent(Base64.decode(value)));\n } catch (error) {\n }\n }\n if (key === \"pyth_id\") {\n value = normalizeSuiObjectId2(value);\n }\n token[key] = value;\n }\n delete token.extensions;\n }\n return token;\n }\n /**\n * Updates the cache for the given key.\n *\n * @param key The key of the cache entry to update.\n * @param data The data to store in the cache.\n * @param time The time in minutes after which the cache entry should expire.\n */\n updateCache(key, data, time = cacheTime5min) {\n let cacheData = this._cache[key];\n if (cacheData) {\n cacheData.overdueTime = getFutureTime(time);\n cacheData.value = data;\n } else {\n cacheData = new CachedContent(data, getFutureTime(time));\n }\n this._cache[key] = cacheData;\n }\n /**\n * Gets the cache entry for the given key.\n *\n * @param key The key of the cache entry to get.\n * @param forceRefresh Whether to force a refresh of the cache entry.\n * @returns The cache entry for the given key, or undefined if the cache entry does not exist or is expired.\n */\n getCache(key, forceRefresh = false) {\n const cacheData = this._cache[key];\n const isValid = cacheData?.isValid();\n if (!forceRefresh && isValid) {\n return cacheData.value;\n }\n if (!isValid) {\n delete this._cache[key];\n }\n return void 0;\n }\n};\n\n// src/modules/routerModuleV2.ts\nimport BN19 from \"bn.js\";\nimport Decimal6 from \"decimal.js\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport axios from \"axios\";\nvar RouterModuleV2 = class {\n _sdk;\n constructor(sdk) {\n this._sdk = sdk;\n }\n get sdk() {\n return this._sdk;\n }\n calculatePrice(currentSqrtPrice, fromDecimals, toDecimals, a2b, label) {\n const decimalA = a2b ? fromDecimals : toDecimals;\n const decimalB = a2b ? toDecimals : fromDecimals;\n if (label === \"Cetus\") {\n return TickMath.sqrtPriceX64ToPrice(currentSqrtPrice, decimalA, decimalB);\n }\n return new Decimal6(currentSqrtPrice.toString()).div(new Decimal6(10).pow(new Decimal6(decimalB + 9 - decimalA)));\n }\n parseJsonResult(data) {\n const result = {\n isExceed: data.is_exceed,\n isTimeout: data.is_timeout,\n inputAmount: data.input_amount,\n outputAmount: data.output_amount,\n fromCoin: data.from_coin,\n toCoin: data.to_coin,\n byAmountIn: data.by_amount_in,\n splitPaths: data.split_paths.map((path) => {\n const splitPath = {\n pathIndex: path.path_index,\n lastQuoteOutput: path.last_quote_output,\n percent: path.percent,\n basePaths: path.best_path.map((basePath) => {\n return {\n direction: basePath.direction,\n label: basePath.label,\n poolAddress: basePath.provider,\n fromCoin: basePath.from_coin,\n toCoin: basePath.to_coin,\n outputAmount: basePath.output_amount,\n inputAmount: basePath.input_amount,\n feeRate: basePath.fee_rate,\n currentSqrtPrice: new BN19(basePath.current_sqrt_price.toString()),\n afterSqrtPrice: basePath.label === \"Cetus\" ? new BN19(basePath.after_sqrt_price.toString()) : ZERO,\n fromDecimal: basePath.from_decimal,\n toDecimal: basePath.to_decimal,\n currentPrice: this.calculatePrice(\n new BN19(basePath.current_sqrt_price.toString()),\n basePath.from_decimal,\n basePath.to_decimal,\n basePath.direction,\n basePath.label\n )\n };\n }),\n inputAmount: path.input_amount,\n outputAmount: path.output_amount\n };\n return splitPath;\n })\n };\n return result;\n }\n async fetchDataWithAxios(apiUrl, _options, timeoutDuration) {\n try {\n const config = {\n ..._options,\n timeout: timeoutDuration\n };\n const response = await axios(apiUrl, config);\n if (response.status === 200) {\n return this.parseJsonResult(response.data);\n }\n return null;\n } catch (error) {\n console.error(error);\n return null;\n }\n }\n /**\n * Optimal routing method with fallback functionality.\n * This method first attempts to find the optimal route using the routing backend. If the optimal route is available, it will return this route.\n * If the optimal route is not available (for example, due to network issues or API errors), this method will activate a fallback mechanism,\n * and try to find a suboptimal route using the routing algorithm built into the SDK, which only includes clmm pool. This way, even if the optimal route is not available, this method can still provide a usable route.\n * This method uses a fallback strategy to ensure that it can provide the best available route when facing problems, rather than failing completely.\n *\n * @param {string} from Sold `from` coin\n * @param {string} from: get `to` coin\n * @param {number} from: the amount of sold coin\n * @param {boolena} byAmountIn:\n */\n async getBestRouter(from, to, amount, byAmountIn, priceSplitPoint, partner, _senderAddress, swapWithMultiPoolParams, orderSplit = false, externalRouter = false, lpChanges = []) {\n let result = null;\n let version = \"v2\";\n let options = {};\n let apiUrl = this.sdk.sdkOptions.aggregatorUrl;\n if (lpChanges.length > 0) {\n const url = new URL(apiUrl);\n apiUrl = `${url.protocol}//${url.hostname}/router_with_lp_changes`;\n options = {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n data: JSON.stringify({\n from,\n to,\n amount,\n by_amount_in: byAmountIn,\n order_split: orderSplit,\n external_router: externalRouter,\n sender_address: \"None\",\n request_id: encodeURIComponent(uuidv4()),\n lp_changes: lpChanges\n })\n };\n } else {\n apiUrl = `\n ${apiUrl}?from=${encodeURIComponent(from)}&to=${encodeURIComponent(to)}&amount=${encodeURIComponent(\n amount\n )}&by_amount_in=${encodeURIComponent(byAmountIn)}&order_split=${encodeURIComponent(orderSplit)}&external_router=${encodeURIComponent(\n externalRouter\n )}&sender_address=''&request_id=${encodeURIComponent(uuidv4())}\n `;\n }\n result = await this.fetchDataWithAxios(apiUrl, options, 6e3);\n if (result == null) {\n const priceResult = await this.sdk.Router.priceUseV1(\n from,\n to,\n new BN19(amount),\n byAmountIn,\n priceSplitPoint,\n partner,\n swapWithMultiPoolParams\n );\n const splitPaths = [];\n for (const path of priceResult.paths) {\n const basePaths = [];\n if (path.poolAddress.length > 1) {\n const fromDecimal0 = this.sdk.Router.tokenInfo(path.coinType[0]).decimals;\n const toDecimal0 = this.sdk.Router.tokenInfo(path.coinType[1]).decimals;\n const currentPrice = path.a2b[0] ? TickMath.sqrtPriceX64ToPrice(new BN19(priceResult.currentSqrtPrice[0]), fromDecimal0, toDecimal0) : TickMath.sqrtPriceX64ToPrice(new BN19(priceResult.currentSqrtPrice[0]), toDecimal0, fromDecimal0);\n const path0 = {\n direction: path.a2b[0],\n label: \"Cetus\",\n poolAddress: path.poolAddress[0],\n fromCoin: path.coinType[0],\n toCoin: path.coinType[1],\n feeRate: this.sdk.Router.getFeeRate(path.coinType[0], path.coinType[1], path.poolAddress[0]),\n outputAmount: priceResult.byAmountIn ? path.rawAmountLimit[0].toString() : path.rawAmountLimit[1].toString(),\n inputAmount: path.amountIn.toString(),\n currentSqrtPrice: priceResult.currentSqrtPrice[0],\n currentPrice,\n fromDecimal: fromDecimal0,\n toDecimal: toDecimal0\n };\n const fromDecimal1 = this.sdk.Router.tokenInfo(path.coinType[1]).decimals;\n const toDecimal1 = this.sdk.Router.tokenInfo(path.coinType[2]).decimals;\n const currentPrice1 = path.a2b[1] ? TickMath.sqrtPriceX64ToPrice(new BN19(priceResult.currentSqrtPrice[1]), fromDecimal1, toDecimal1) : TickMath.sqrtPriceX64ToPrice(new BN19(priceResult.currentSqrtPrice[1]), toDecimal1, fromDecimal1);\n const path1 = {\n direction: path.a2b[1],\n label: \"Cetus\",\n poolAddress: path.poolAddress[1],\n fromCoin: path.coinType[1],\n toCoin: path.coinType[2],\n feeRate: this.sdk.Router.getFeeRate(path.coinType[1], path.coinType[2], path.poolAddress[1]),\n outputAmount: path.amountOut.toString(),\n inputAmount: priceResult.byAmountIn ? path.rawAmountLimit[0].toString() : path.rawAmountLimit[1].toString(),\n currentSqrtPrice: priceResult.currentSqrtPrice[1],\n currentPrice: currentPrice1,\n fromDecimal: fromDecimal1,\n toDecimal: toDecimal1\n };\n basePaths.push(path0, path1);\n } else {\n const fromDecimal = this.sdk.Router.tokenInfo(path.coinType[0]).decimals;\n const toDecimal = this.sdk.Router.tokenInfo(path.coinType[1]).decimals;\n const currentPrice = path.a2b[0] ? TickMath.sqrtPriceX64ToPrice(new BN19(priceResult.currentSqrtPrice[0]), fromDecimal, toDecimal) : TickMath.sqrtPriceX64ToPrice(new BN19(priceResult.currentSqrtPrice[0]), toDecimal, fromDecimal);\n const path0 = {\n direction: path.a2b[0],\n label: \"Cetus\",\n poolAddress: path.poolAddress[0],\n fromCoin: path.coinType[0],\n toCoin: path.coinType[1],\n feeRate: this.sdk.Router.getFeeRate(path.coinType[0], path.coinType[1], path.poolAddress[0]),\n outputAmount: path.amountOut.toString(),\n inputAmount: path.amountIn.toString(),\n currentSqrtPrice: priceResult.currentSqrtPrice[0],\n currentPrice,\n fromDecimal,\n toDecimal\n };\n basePaths.push(path0);\n }\n const splitPath = {\n percent: Number(path.amountIn) / Number(priceResult.amountIn) * 100,\n inputAmount: Number(path.amountIn.toString()),\n outputAmount: Number(path.amountOut.toString()),\n pathIndex: 0,\n lastQuoteOutput: 0,\n basePaths\n };\n splitPaths.push(splitPath);\n }\n const aggregatorResult = {\n isExceed: priceResult.isExceed,\n isTimeout: true,\n inputAmount: Number(priceResult.amountIn.toString()),\n outputAmount: Number(priceResult.amountOut.toString()),\n fromCoin: priceResult.coinTypeA,\n toCoin: priceResult.coinTypeC != null ? priceResult.coinTypeC : priceResult.coinTypeB,\n byAmountIn: priceResult.byAmountIn,\n splitPaths\n };\n version = \"v1\";\n result = aggregatorResult;\n }\n return { result, version };\n }\n async getBestRouterByServer(from, to, amount, byAmountIn, _senderAddress, orderSplit = false, externalRouter = false, lpChanges = []) {\n let result = null;\n let options = {};\n let apiUrl = this.sdk.sdkOptions.aggregatorUrl;\n if (lpChanges.length > 0) {\n const url = new URL(apiUrl);\n apiUrl = `${url.protocol}//${url.hostname}/router_with_lp_changes`;\n options = {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n data: JSON.stringify({\n from,\n to,\n amount,\n by_amount_in: byAmountIn,\n order_split: orderSplit,\n external_router: externalRouter,\n sender_address: \"None\",\n request_id: encodeURIComponent(uuidv4()),\n lp_changes: lpChanges\n })\n };\n } else {\n apiUrl = `\n ${apiUrl}?from=${encodeURIComponent(from)}&to=${encodeURIComponent(to)}&amount=${encodeURIComponent(\n amount\n )}&by_amount_in=${encodeURIComponent(byAmountIn)}&order_split=${encodeURIComponent(orderSplit)}&external_router=${encodeURIComponent(\n externalRouter\n )}&sender_address=''&request_id=${encodeURIComponent(uuidv4())}\n `;\n }\n result = await this.fetchDataWithAxios(apiUrl, options, 6e3);\n if (result == null) {\n throw new ClmmpoolsError(\"Invalid server response\", \"InvalidServerResponse\" /* InvalidServerResponse */);\n }\n return result;\n }\n async getBestRouterByRpc(from, to, amount, byAmountIn, priceSplitPoint, partner, swapWithMultiPoolParams) {\n const priceResult = await this.sdk.Router.priceUseV1(\n from,\n to,\n new BN19(amount),\n byAmountIn,\n priceSplitPoint,\n partner,\n swapWithMultiPoolParams\n );\n const splitPaths = [];\n for (const path of priceResult.paths) {\n const basePaths = [];\n if (path.poolAddress.length > 1) {\n const fromDecimal0 = this.sdk.Router.tokenInfo(path.coinType[0]).decimals;\n const toDecimal0 = this.sdk.Router.tokenInfo(path.coinType[1]).decimals;\n const currentPrice = path.a2b[0] ? TickMath.sqrtPriceX64ToPrice(new BN19(priceResult.currentSqrtPrice[0]), fromDecimal0, toDecimal0) : TickMath.sqrtPriceX64ToPrice(new BN19(priceResult.currentSqrtPrice[0]), toDecimal0, fromDecimal0);\n const path0 = {\n direction: path.a2b[0],\n label: \"Cetus\",\n poolAddress: path.poolAddress[0],\n fromCoin: path.coinType[0],\n toCoin: path.coinType[1],\n feeRate: this.sdk.Router.getFeeRate(path.coinType[0], path.coinType[1], path.poolAddress[0]),\n outputAmount: priceResult.byAmountIn ? path.rawAmountLimit[0].toString() : path.rawAmountLimit[1].toString(),\n inputAmount: path.amountIn.toString(),\n currentSqrtPrice: priceResult.currentSqrtPrice[0],\n currentPrice,\n fromDecimal: fromDecimal0,\n toDecimal: toDecimal0\n };\n const fromDecimal1 = this.sdk.Router.tokenInfo(path.coinType[1]).decimals;\n const toDecimal1 = this.sdk.Router.tokenInfo(path.coinType[2]).decimals;\n const currentPrice1 = path.a2b[1] ? TickMath.sqrtPriceX64ToPrice(new BN19(priceResult.currentSqrtPrice[1]), fromDecimal1, toDecimal1) : TickMath.sqrtPriceX64ToPrice(new BN19(priceResult.currentSqrtPrice[1]), toDecimal1, fromDecimal1);\n const path1 = {\n direction: path.a2b[1],\n label: \"Cetus\",\n poolAddress: path.poolAddress[1],\n fromCoin: path.coinType[1],\n toCoin: path.coinType[2],\n feeRate: this.sdk.Router.getFeeRate(path.coinType[1], path.coinType[2], path.poolAddress[1]),\n outputAmount: path.amountOut.toString(),\n inputAmount: priceResult.byAmountIn ? path.rawAmountLimit[0].toString() : path.rawAmountLimit[1].toString(),\n currentSqrtPrice: priceResult.currentSqrtPrice[1],\n currentPrice: currentPrice1,\n fromDecimal: fromDecimal1,\n toDecimal: toDecimal1\n };\n basePaths.push(path0, path1);\n } else {\n const fromDecimal = this.sdk.Router.tokenInfo(path.coinType[0]).decimals;\n const toDecimal = this.sdk.Router.tokenInfo(path.coinType[1]).decimals;\n const currentPrice = path.a2b[0] ? TickMath.sqrtPriceX64ToPrice(new BN19(priceResult.currentSqrtPrice[0]), fromDecimal, toDecimal) : TickMath.sqrtPriceX64ToPrice(new BN19(priceResult.currentSqrtPrice[0]), toDecimal, fromDecimal);\n const path0 = {\n direction: path.a2b[0],\n label: \"Cetus\",\n poolAddress: path.poolAddress[0],\n fromCoin: path.coinType[0],\n toCoin: path.coinType[1],\n feeRate: this.sdk.Router.getFeeRate(path.coinType[0], path.coinType[1], path.poolAddress[0]),\n outputAmount: path.amountOut.toString(),\n inputAmount: path.amountIn.toString(),\n currentSqrtPrice: priceResult.currentSqrtPrice[0],\n currentPrice,\n fromDecimal,\n toDecimal\n };\n basePaths.push(path0);\n }\n const splitPath = {\n percent: Number(path.amountIn) / Number(priceResult.amountIn) * 100,\n inputAmount: Number(path.amountIn.toString()),\n outputAmount: Number(path.amountOut.toString()),\n pathIndex: 0,\n lastQuoteOutput: 0,\n basePaths\n };\n splitPaths.push(splitPath);\n }\n const aggregatorResult = {\n isExceed: priceResult.isExceed,\n isTimeout: true,\n inputAmount: Number(priceResult.amountIn.toString()),\n outputAmount: Number(priceResult.amountOut.toString()),\n fromCoin: priceResult.coinTypeA,\n toCoin: priceResult.coinTypeC != null ? priceResult.coinTypeC : priceResult.coinTypeB,\n byAmountIn: priceResult.byAmountIn,\n splitPaths\n };\n return aggregatorResult;\n }\n};\n\n// src/modules/configModule.ts\nimport { Base64 as Base642 } from \"js-base64\";\nimport { normalizeSuiObjectId as normalizeSuiObjectId3 } from \"@mysten/sui/utils\";\nvar ConfigModule = class {\n _sdk;\n _cache = {};\n constructor(sdk) {\n this._sdk = sdk;\n }\n get sdk() {\n return this._sdk;\n }\n /**\n * Set default token list cache.\n * @param {CoinConfig[]}coinList\n */\n setTokenListCache(coinList) {\n const { coin_list_handle } = getPackagerConfigs(this.sdk.sdkOptions.cetus_config);\n const cacheKey = `${coin_list_handle}_getCoinConfigs`;\n const cacheData = this.getCache(cacheKey);\n const updatedCacheData = cacheData ? [...cacheData, ...coinList] : coinList;\n this.updateCache(cacheKey, updatedCacheData, cacheTime24h);\n }\n /**\n * Get token config list by coin type list.\n * @param {SuiAddressType[]} coinTypes Coin type list.\n * @returns {Promise<Record<string, CoinConfig>>} Token config map.\n */\n async getTokenListByCoinTypes(coinTypes) {\n const tokenMap = {};\n const { coin_list_handle } = getPackagerConfigs(this.sdk.sdkOptions.cetus_config);\n const cacheKey = `${coin_list_handle}_getCoinConfigs`;\n const cacheData = this.getCache(cacheKey);\n if (cacheData !== void 0) {\n const tokenList = cacheData;\n for (const coinType of coinTypes) {\n for (const token of tokenList) {\n if (normalizeCoinType(coinType) === normalizeCoinType(token.address)) {\n tokenMap[coinType] = token;\n continue;\n }\n }\n }\n }\n const unFoundArray = coinTypes.filter((coinType) => {\n return tokenMap[coinType] === void 0;\n });\n for (const coinType of unFoundArray) {\n const metadataKey = `${coinType}_metadata`;\n const metadata = this.getCache(metadataKey);\n if (metadata !== void 0) {\n tokenMap[coinType] = metadata;\n } else {\n const data = await this._sdk.fullClient.getCoinMetadata({\n coinType\n });\n if (data) {\n const token = {\n id: data.id,\n pyth_id: \"\",\n name: data.name,\n symbol: data.symbol,\n official_symbol: data.symbol,\n coingecko_id: \"\",\n decimals: data.decimals,\n project_url: \"\",\n logo_url: data.iconUrl,\n address: coinType\n };\n tokenMap[coinType] = token;\n this.updateCache(metadataKey, token, cacheTime24h);\n } else {\n console.log(`not found ${coinType}`);\n }\n }\n }\n return tokenMap;\n }\n /**\n * Get coin config list.\n * @param {boolean} forceRefresh Whether to force a refresh of the cache entry.\n * @param {boolean} transformExtensions Whether to transform extensions.\n * @returns {Promise<CoinConfig[]>} Coin config list.\n */\n async getCoinConfigs(forceRefresh = false, transformExtensions = true) {\n const { coin_list_handle } = getPackagerConfigs(this.sdk.sdkOptions.cetus_config);\n const cacheKey = `${coin_list_handle}_getCoinConfigs`;\n const cacheData = this.getCache(cacheKey, forceRefresh);\n if (cacheData) {\n return cacheData;\n }\n const res = await this._sdk.fullClient.getDynamicFieldsByPage(coin_list_handle);\n const warpIds = res.data.map((item) => {\n return item.objectId;\n });\n const objects = await this._sdk.fullClient.batchGetObjects(warpIds, { showContent: true });\n const coinList = [];\n objects.forEach((object) => {\n if (object.error != null || object.data?.content?.dataType !== \"moveObject\") {\n throw new ClmmpoolsError(\n `when getCoinConfigs get objects error: ${object.error}, please check the rpc and contracts address config.`,\n \"InvalidConfig\" /* InvalidConfig */\n );\n }\n const coin = this.buildCoinConfig(object, transformExtensions);\n this.updateCache(`${coin_list_handle}_${coin.address}_getCoinConfig`, coin, cacheTime24h);\n coinList.push({ ...coin });\n });\n this.updateCache(cacheKey, coinList, cacheTime24h);\n return coinList;\n }\n /**\n * Get coin config by coin type.\n * @param {string} coinType Coin type.\n * @param {boolean} forceRefresh Whether to force a refresh of the cache entry.\n * @param {boolean} transformExtensions Whether to transform extensions.\n * @returns {Promise<CoinConfig>} Coin config.\n */\n async getCoinConfig(coinType, forceRefresh = false, transformExtensions = true) {\n const { coin_list_handle } = getPackagerConfigs(this.sdk.sdkOptions.cetus_config);\n const cacheKey = `${coin_list_handle}_${coinType}_getCoinConfig`;\n const cacheData = this.getCache(cacheKey, forceRefresh);\n if (cacheData) {\n return cacheData;\n }\n const object = await this._sdk.fullClient.getDynamicFieldObject({\n parentId: coin_list_handle,\n name: {\n type: \"0x1::type_name::TypeName\",\n value: {\n name: fixCoinType(coinType)\n }\n }\n });\n if (object.error != null || object.data?.content?.dataType !== \"moveObject\") {\n throw new ClmmpoolsError(\n `when getCoinConfig get object error: ${object.error}, please check the rpc and contracts address config.`,\n \"InvalidConfig\" /* InvalidConfig */\n );\n }\n const coin = this.buildCoinConfig(object, transformExtensions);\n this.updateCache(cacheKey, coin, cacheTime24h);\n return coin;\n }\n /**\n * Build coin config.\n * @param {SuiObjectResponse} object Coin object.\n * @param {boolean} transformExtensions Whether to transform extensions.\n * @returns {CoinConfig} Coin config.\n */\n buildCoinConfig(object, transformExtensions = true) {\n let fields = getObjectFields(object);\n fields = fields.value.fields;\n const coin = { ...fields };\n coin.id = getObjectId(object);\n coin.address = extractStructTagFromType(fields.coin_type.fields.name).full_address;\n if (fields.pyth_id) {\n coin.pyth_id = normalizeSuiObjectId3(fields.pyth_id);\n }\n this.transformExtensions(coin, fields.extension_fields.fields.contents, transformExtensions);\n delete coin.coin_type;\n return coin;\n }\n /**\n * Get clmm pool config list.\n * @param forceRefresh\n * @returns\n */\n async getClmmPoolConfigs(forceRefresh = false, transformExtensions = true) {\n const { clmm_pools_handle } = getPackagerConfigs(this.sdk.sdkOptions.cetus_config);\n const cacheKey = `${clmm_pools_handle}_getClmmPoolConfigs`;\n const cacheData = this.getCache(cacheKey, forceRefresh);\n if (cacheData) {\n return cacheData;\n }\n const res = await this._sdk.fullClient.getDynamicFieldsByPage(clmm_pools_handle);\n const warpIds = res.data.map((item) => {\n return item.objectId;\n });\n const objects = await this._sdk.fullClient.batchGetObjects(warpIds, { showContent: true });\n const poolList = [];\n objects.forEach((object) => {\n if (object.error != null || object.data?.content?.dataType !== \"moveObject\") {\n throw new ClmmpoolsError(\n `when getClmmPoolsConfigs get objects error: ${object.error}, please check the rpc and contracts address config.`,\n \"InvalidConfig\" /* InvalidConfig */\n );\n }\n const pool = this.buildClmmPoolConfig(object, transformExtensions);\n this.updateCache(`${pool.pool_address}_getClmmPoolConfig`, pool, cacheTime24h);\n poolList.push({ ...pool });\n });\n this.updateCache(cacheKey, poolList, cacheTime24h);\n return poolList;\n }\n async getClmmPoolConfig(poolAddress, forceRefresh = false, transformExtensions = true) {\n const { clmm_pools_handle } = getPackagerConfigs(this.sdk.sdkOptions.cetus_config);\n const cacheKey = `${poolAddress}_getClmmPoolConfig`;\n const cacheData = this.getCache(cacheKey, forceRefresh);\n if (cacheData) {\n return cacheData;\n }\n const object = await this._sdk.fullClient.getDynamicFieldObject({\n parentId: clmm_pools_handle,\n name: {\n type: \"address\",\n value: poolAddress\n }\n });\n const pool = this.buildClmmPoolConfig(object, transformExtensions);\n this.updateCache(cacheKey, pool, cacheTime24h);\n return pool;\n }\n buildClmmPoolConfig(object, transformExtensions = true) {\n let fields = getObjectFields(object);\n fields = fields.value.fields;\n const pool = { ...fields };\n pool.id = getObjectId(object);\n pool.pool_address = normalizeSuiObjectId3(fields.pool_address);\n this.transformExtensions(pool, fields.extension_fields.fields.contents, transformExtensions);\n return pool;\n }\n /**\n * Get launchpad pool config list.\n * @param forceRefresh\n * @returns\n */\n async getLaunchpadPoolConfigs(forceRefresh = false, transformExtensions = true) {\n const { launchpad_pools_handle } = getPackagerConfigs(this.sdk.sdkOptions.cetus_config);\n const cacheKey = `${launchpad_pools_handle}_getLaunchpadPoolConfigs`;\n const cacheData = this.getCache(cacheKey, forceRefresh);\n if (cacheData) {\n return cacheData;\n }\n const res = await this._sdk.fullClient.getDynamicFieldsByPage(launchpad_pools_handle);\n const warpIds = res.data.map((item) => {\n return item.objectId;\n });\n const objects = await this._sdk.fullClient.batchGetObjects(warpIds, { showContent: true });\n const poolList = [];\n objects.forEach((object) => {\n if (object.error != null || object.data?.content?.dataType !== \"moveObject\") {\n throw new ClmmpoolsError(\n `when getCoinConfigs get objects error: ${object.error}, please check the rpc and contracts address config.`,\n \"InvalidConfig\" /* InvalidConfig */\n );\n }\n const pool = this.buildLaunchpadPoolConfig(object, transformExtensions);\n this.updateCache(`${pool.pool_address}_getLaunchpadPoolConfig`, pool, cacheTime24h);\n poolList.push({ ...pool });\n });\n this.updateCache(cacheKey, poolList, cacheTime24h);\n return poolList;\n }\n async getLaunchpadPoolConfig(poolAddress, forceRefresh = false, transformExtensions = true) {\n const { launchpad_pools_handle } = getPackagerConfigs(this.sdk.sdkOptions.cetus_config);\n const cacheKey = `${poolAddress}_getLaunchpadPoolConfig`;\n const cacheData = this.getCache(cacheKey, forceRefresh);\n if (cacheData) {\n return cacheData;\n }\n const object = await this._sdk.fullClient.getDynamicFieldObject({\n parentId: launchpad_pools_handle,\n name: {\n type: \"address\",\n value: poolAddress\n }\n });\n const pool = this.buildLaunchpadPoolConfig(object, transformExtensions);\n this.updateCache(cacheKey, pool, cacheTime24h);\n return pool;\n }\n buildLaunchpadPoolConfig(object, transformExtensions = true) {\n let fields = getObjectFields(object);\n fields = fields.value.fields;\n const pool = { ...fields };\n pool.id = getObjectId(object);\n pool.pool_address = normalizeSuiObjectId3(fields.pool_address);\n this.transformExtensions(pool, fields.extension_fields.fields.contents, transformExtensions);\n const social_medias = [];\n fields.social_media.fields.contents.forEach((item) => {\n social_medias.push({\n name: item.fields.value.fields.name,\n link: item.fields.value.fields.link\n });\n });\n pool.social_media = social_medias;\n try {\n pool.regulation = decodeURIComponent(Base642.decode(pool.regulation).replace(/%/g, \"%25\"));\n } catch (error) {\n pool.regulation = Base642.decode(pool.regulation);\n }\n return pool;\n }\n transformExtensions(coin, dataArray, transformExtensions = true) {\n const extensions = [];\n for (const item of dataArray) {\n const { key } = item.fields;\n let { value } = item.fields;\n if (key === \"labels\") {\n try {\n value = JSON.parse(decodeURIComponent(Base642.decode(value)));\n } catch (error) {\n }\n }\n if (transformExtensions) {\n coin[key] = value;\n }\n extensions.push({\n key,\n value\n });\n }\n delete coin.extension_fields;\n if (!transformExtensions) {\n coin.extensions = extensions;\n }\n }\n /**\n * Get the token config event.\n *\n * @param forceRefresh Whether to force a refresh of the event.\n * @returns The token config event.\n */\n async getCetusConfig(forceRefresh = false) {\n const packageObjectId = this._sdk.sdkOptions.cetus_config.package_id;\n const cacheKey = `${packageObjectId}_getCetusConfig`;\n const cacheData = this.getCache(cacheKey, forceRefresh);\n if (cacheData !== void 0) {\n return cacheData;\n }\n const packageObject = await this._sdk.fullClient.getObject({\n id: packageObjectId,\n options: {\n showPreviousTransaction: true\n }\n });\n const previousTx = getObjectPreviousTransactionDigest(packageObject);\n const objects = await this._sdk.fullClient.queryEventsByPage({ Transaction: previousTx });\n let tokenConfig = {\n coin_list_id: \"\",\n launchpad_pools_id: \"\",\n clmm_pools_id: \"\",\n admin_cap_id: \"\",\n global_config_id: \"\",\n coin_list_handle: \"\",\n launchpad_pools_handle: \"\",\n clmm_pools_handle: \"\"\n };\n if (objects.data.length > 0) {\n for (const item of objects.data) {\n const formatType = extractStructTagFromType(item.type);\n switch (formatType.name) {\n case `InitCoinListEvent`:\n tokenConfig.coin_list_id = item.parsedJson.coin_list_id;\n break;\n case `InitLaunchpadPoolsEvent`:\n tokenConfig.launchpad_pools_id = item.parsedJson.launchpad_pools_id;\n break;\n case `InitClmmPoolsEvent`:\n tokenConfig.clmm_pools_id = item.parsedJson.pools_id;\n break;\n case `InitConfigEvent`:\n tokenConfig.global_config_id = item.parsedJson.global_config_id;\n tokenConfig.admin_cap_id = item.parsedJson.admin_cap_id;\n break;\n default:\n break;\n }\n }\n }\n tokenConfig = await this.getCetusConfigHandle(tokenConfig);\n if (tokenConfig.clmm_pools_id.length > 0) {\n this.updateCache(cacheKey, tokenConfig, cacheTime24h);\n }\n return tokenConfig;\n }\n async getCetusConfigHandle(tokenConfig) {\n const warpIds = [tokenConfig.clmm_pools_id, tokenConfig.coin_list_id, tokenConfig.launchpad_pools_id];\n const res = await this._sdk.fullClient.multiGetObjects({ ids: warpIds, options: { showContent: true } });\n res.forEach((item) => {\n if (item.error != null || item.data?.content?.dataType !== \"moveObject\") {\n throw new ClmmpoolsError(\n `when getCetusConfigHandle get objects error: ${item.error}, please check the rpc and contracts address config.`,\n \"InvalidConfigHandle\" /* InvalidConfigHandle */\n );\n }\n const fields = getObjectFields(item);\n const type = getObjectType(item);\n switch (extractStructTagFromType(type).name) {\n case \"ClmmPools\":\n tokenConfig.clmm_pools_handle = fields.pools.fields.id.id;\n break;\n case \"CoinList\":\n tokenConfig.coin_list_handle = fields.coins.fields.id.id;\n break;\n case \"LaunchpadPools\":\n tokenConfig.launchpad_pools_handle = fields.pools.fields.id.id;\n break;\n default:\n break;\n }\n });\n return tokenConfig;\n }\n /**\n * Updates the cache for the given key.\n * @param key The key of the cache entry to update.\n * @param data The data to store in the cache.\n * @param time The time in minutes after which the cache entry should expire.\n */\n updateCache(key, data, time = cacheTime5min) {\n let cacheData = this._cache[key];\n if (cacheData) {\n cacheData.overdueTime = getFutureTime(time);\n cacheData.value = data;\n } else {\n cacheData = new CachedContent(data, getFutureTime(time));\n }\n this._cache[key] = cacheData;\n }\n /**\n * Gets the cache entry for the given key.\n * @param key The key of the cache entry to get.\n * @param forceRefresh Whether to force a refresh of the cache entry.\n * @returns The cache entry for the given key, or undefined if the cache entry does not exist or is expired.\n */\n getCache(key, forceRefresh = false) {\n try {\n const cacheData = this._cache[key];\n if (!cacheData) {\n return void 0;\n }\n if (forceRefresh || !cacheData.isValid()) {\n delete this._cache[key];\n return void 0;\n }\n return cacheData.value;\n } catch (error) {\n console.error(`Error accessing cache for key ${key}:`, error);\n return void 0;\n }\n }\n};\n\n// src/modules/rpcModule.ts\nimport {\n SuiClient\n} from \"@mysten/sui/client\";\nvar RpcModule = class extends SuiClient {\n /**\n * Get events for a given query criteria\n * @param query\n * @param paginationArgs\n * @returns\n */\n async queryEventsByPage(query, paginationArgs = \"all\") {\n let result = [];\n let hasNextPage = true;\n const queryAll = paginationArgs === \"all\";\n let nextCursor = queryAll ? null : paginationArgs.cursor;\n do {\n const res = await this.queryEvents({\n query,\n cursor: nextCursor,\n limit: queryAll ? null : paginationArgs.limit\n });\n if (res.data) {\n result = [...result, ...res.data];\n hasNextPage = res.hasNextPage;\n nextCursor = res.nextCursor;\n } else {\n hasNextPage = false;\n }\n } while (queryAll && hasNextPage);\n return { data: result, nextCursor, hasNextPage };\n }\n /**\n * Get all objects owned by an address\n * @param owner\n * @param query\n * @param paginationArgs\n * @returns\n */\n async getOwnedObjectsByPage(owner, query, paginationArgs = \"all\") {\n let result = [];\n let hasNextPage = true;\n const queryAll = paginationArgs === \"all\";\n let nextCursor = queryAll ? null : paginationArgs.cursor;\n do {\n const res = await this.getOwnedObjects({\n owner,\n ...query,\n cursor: nextCursor,\n limit: queryAll ? null : paginationArgs.limit\n });\n if (res.data) {\n result = [...result, ...res.data];\n hasNextPage = res.hasNextPage;\n nextCursor = res.nextCursor;\n } else {\n hasNextPage = false;\n }\n } while (queryAll && hasNextPage);\n return { data: result, nextCursor, hasNextPage };\n }\n /**\n * Return the list of dynamic field objects owned by an object\n * @param parentId\n * @param paginationArgs\n * @returns\n */\n async getDynamicFieldsByPage(parentId, paginationArgs = \"all\") {\n let result = [];\n let hasNextPage = true;\n const queryAll = paginationArgs === \"all\";\n let nextCursor = queryAll ? null : paginationArgs.cursor;\n do {\n const res = await this.getDynamicFields({\n parentId,\n cursor: nextCursor,\n limit: queryAll ? null : paginationArgs.limit\n });\n if (res.data) {\n result = [...result, ...res.data];\n hasNextPage = res.hasNextPage;\n nextCursor = res.nextCursor;\n } else {\n hasNextPage = false;\n }\n } while (queryAll && hasNextPage);\n return { data: result, nextCursor, hasNextPage };\n }\n /**\n * Batch get details about a list of objects. If any of the object ids are duplicates the call will fail\n * @param ids\n * @param options\n * @param limit\n * @returns\n */\n async batchGetObjects(ids, options, limit = 50) {\n let objectDataResponses = [];\n try {\n for (let i = 0; i < Math.ceil(ids.length / limit); i++) {\n const res = await this.multiGetObjects({\n ids: ids.slice(i * limit, limit * (i + 1)),\n options\n });\n objectDataResponses = [...objectDataResponses, ...res];\n }\n } catch (error) {\n console.log(error);\n }\n return objectDataResponses;\n }\n /**\n * Calculates the gas cost of a transaction block.\n * @param {Transaction} tx - The transaction block to calculate gas for.\n * @returns {Promise<number>} - The estimated gas cost of the transaction block.\n * @throws {Error} - Throws an error if the sender is empty.\n */\n async calculationTxGas(tx) {\n const { sender } = tx.blockData;\n if (sender === void 0) {\n throw Error(\"sdk sender is empty\");\n }\n const devResult = await this.devInspectTransactionBlock({\n transactionBlock: tx,\n sender\n });\n const { gasUsed } = devResult.effects;\n const estimateGas = Number(gasUsed.computationCost) + Number(gasUsed.storageCost) - Number(gasUsed.storageRebate);\n return estimateGas;\n }\n /**\n * Sends a transaction block after signing it with the provided keypair.\n *\n * @param {Ed25519Keypair | Secp256k1Keypair} keypair - The keypair used for signing the transaction.\n * @param {Transaction} tx - The transaction block to send.\n * @returns {Promise<SuiTransactionBlockResponse | undefined>} - The response of the sent transaction block.\n */\n async sendTransaction(keypair, tx) {\n try {\n const resultTxn = await this.signAndExecuteTransaction({\n transaction: tx,\n signer: keypair,\n options: {\n showEffects: true,\n showEvents: true\n }\n });\n return resultTxn;\n } catch (error) {\n console.log(\"error: \", error);\n }\n return void 0;\n }\n /**\n * Send a simulation transaction.\n * @param tx - The transaction block.\n * @param simulationAccount - The simulation account.\n * @param useDevInspect - A flag indicating whether to use DevInspect. Defaults to true.\n * @returns A promise that resolves to DevInspectResults or undefined.\n */\n async sendSimulationTransaction(tx, simulationAccount, useDevInspect = true) {\n try {\n if (useDevInspect) {\n const simulateRes = await this.devInspectTransactionBlock({\n transactionBlock: tx,\n sender: simulationAccount\n });\n return simulateRes;\n }\n } catch (error) {\n console.log(\"devInspectTransactionBlock error\", error);\n }\n return void 0;\n }\n};\n\n// src/sdk.ts\nvar CetusClmmSDK = class {\n _cache = {};\n /**\n * RPC provider on the SUI chain\n */\n _rpcModule;\n /**\n * Provide interact with clmm pools with a pool router interface.\n */\n _pool;\n /**\n * Provide interact with clmm position with a position router interface.\n */\n _position;\n /**\n * Provide interact with a pool swap router interface.\n */\n _swap;\n /**\n * Provide interact with a position rewarder interface.\n */\n _rewarder;\n /**\n * Provide interact with a pool router interface.\n */\n _router;\n /**\n * Provide interact with a pool routerV2 interface.\n */\n _router_v2;\n /**\n * Provide interact with pool and token config (contain token base info for metadat).\n * @deprecated Please use CetusConfig instead\n */\n _token;\n /**\n * Provide interact with clmm pool and coin and launchpad pool config\n */\n _config;\n /**\n * Provide sdk options\n */\n _sdkOptions;\n /**\n * After connecting the wallet, set the current wallet address to senderAddress.\n */\n _senderAddress = \"\";\n constructor(options) {\n this._sdkOptions = options;\n this._rpcModule = new RpcModule({\n url: options.fullRpcUrl\n });\n this._swap = new SwapModule(this);\n this._pool = new PoolModule(this);\n this._position = new PositionModule(this);\n this._rewarder = new RewarderModule(this);\n this._router = new RouterModule(this);\n this._router_v2 = new RouterModuleV2(this);\n this._token = new TokenModule(this);\n this._config = new ConfigModule(this);\n patchFixSuiObjectId(this._sdkOptions);\n }\n /**\n * Getter for the sender address property.\n * @returns {SuiAddressType} The sender address.\n */\n get senderAddress() {\n return this._senderAddress;\n }\n /**\n * Setter for the sender address property.\n * @param {string} value - The new sender address value.\n */\n set senderAddress(value) {\n this._senderAddress = value;\n }\n /**\n * Getter for the Swap property.\n * @returns {SwapModule} The Swap property value.\n */\n get Swap() {\n return this._swap;\n }\n /**\n * Getter for the fullClient property.\n * @returns {RpcModule} The fullClient property value.\n */\n get fullClient() {\n return this._rpcModule;\n }\n /**\n * Getter for the sdkOptions property.\n * @returns {SdkOptions} The sdkOptions property value.\n */\n get sdkOptions() {\n return this._sdkOptions;\n }\n /**\n * Getter for the Pool property.\n * @returns {PoolModule} The Pool property value.\n */\n get Pool() {\n return this._pool;\n }\n /**\n * Getter for the Position property.\n * @returns {PositionModule} The Position property value.\n */\n get Position() {\n return this._position;\n }\n /**\n * Getter for the Rewarder property.\n * @returns {RewarderModule} The Rewarder property value.\n */\n get Rewarder() {\n return this._rewarder;\n }\n /**\n * Getter for the Router property.\n * @returns {RouterModule} The Router property value.\n */\n get Router() {\n return this._router;\n }\n /**\n * Getter for the RouterV2 property.\n * @returns {RouterModuleV2} The RouterV2 property value.\n */\n get RouterV2() {\n return this._router_v2;\n }\n /**\n * Getter for the CetusConfig property.\n * @returns {ConfigModule} The CetusConfig property value.\n */\n get CetusConfig() {\n return this._config;\n }\n /**\n * @deprecated Token is no longer maintained. Please use CetusConfig instead\n */\n get Token() {\n return this._token;\n }\n /**\n * Gets all coin assets for the given owner and coin type.\n *\n * @param suiAddress The address of the owner.\n * @param coinType The type of the coin.\n * @returns an array of coin assets.\n */\n async getOwnerCoinAssets(suiAddress, coinType, forceRefresh = true) {\n const allCoinAsset = [];\n let nextCursor = null;\n const cacheKey = `${this.sdkOptions.fullRpcUrl}_${suiAddress}_${coinType}_getOwnerCoinAssets`;\n const cacheData = this.getCache(cacheKey, forceRefresh);\n if (cacheData) {\n return cacheData;\n }\n while (true) {\n const allCoinObject = await (coinType ? this.fullClient.getCoins({\n owner: suiAddress,\n coinType,\n cursor: nextCursor\n }) : this.fullClient.getAllCoins({\n owner: suiAddress,\n cursor: nextCursor\n }));\n allCoinObject.data.forEach((coin) => {\n if (BigInt(coin.balance) > 0) {\n allCoinAsset.push({\n coinAddress: extractStructTagFromType(coin.coinType).source_address,\n coinObjectId: coin.coinObjectId,\n balance: BigInt(coin.balance)\n });\n }\n });\n nextCursor = allCoinObject.nextCursor;\n if (!allCoinObject.hasNextPage) {\n break;\n }\n }\n this.updateCache(cacheKey, allCoinAsset, 30 * 1e3);\n return allCoinAsset;\n }\n /**\n * Gets all coin balances for the given owner and coin type.\n *\n * @param suiAddress The address of the owner.\n * @param coinType The type of the coin.\n * @returns an array of coin balances.\n */\n async getOwnerCoinBalances(suiAddress, coinType) {\n let allCoinBalance = [];\n if (coinType) {\n const res = await this.fullClient.getBalance({\n owner: suiAddress,\n coinType\n });\n allCoinBalance = [res];\n } else {\n const res = await this.fullClient.getAllBalances({\n owner: suiAddress\n });\n allCoinBalance = [...res];\n }\n return allCoinBalance;\n }\n /**\n * Updates the cache for the given key.\n *\n * @param key The key of the cache entry to update.\n * @param data The data to store in the cache.\n * @param time The time in minutes after which the cache entry should expire.\n */\n updateCache(key, data, time = cacheTime24h) {\n let cacheData = this._cache[key];\n if (cacheData) {\n cacheData.overdueTime = getFutureTime(time);\n cacheData.value = data;\n } else {\n cacheData = new CachedContent(data, getFutureTime(time));\n }\n this._cache[key] = cacheData;\n }\n /**\n * Gets the cache entry for the given key.\n *\n * @param key The key of the cache entry to get.\n * @param forceRefresh Whether to force a refresh of the cache entry.\n * @returns The cache entry for the given key, or undefined if the cache entry does not exist or is expired.\n */\n getCache(key, forceRefresh = false) {\n const cacheData = this._cache[key];\n const isValid = cacheData?.isValid();\n if (!forceRefresh && isValid) {\n return cacheData.value;\n }\n if (!isValid) {\n delete this._cache[key];\n }\n return void 0;\n }\n};\n\n// src/index.ts\nvar src_default = CetusClmmSDK;\nexport {\n AMM_SWAP_MODULE,\n AmountSpecified,\n CLOCK_ADDRESS,\n CachedContent,\n CetusClmmSDK,\n ClmmExpectSwapModule,\n ClmmFetcherModule,\n ClmmIntegratePoolModule,\n ClmmIntegratePoolV2Module,\n ClmmIntegratePoolV3Module,\n ClmmIntegrateRouterModule,\n ClmmIntegrateRouterWithPartnerModule,\n ClmmIntegrateUtilsModule,\n ClmmPartnerModule,\n ClmmPoolUtil,\n ClmmPositionStatus,\n CoinAssist,\n CoinInfoAddress,\n CoinStoreAddress,\n ConfigModule,\n DEFAULT_GAS_BUDGET_FOR_MERGE,\n DEFAULT_GAS_BUDGET_FOR_SPLIT,\n DEFAULT_GAS_BUDGET_FOR_STAKE,\n DEFAULT_GAS_BUDGET_FOR_TRANSFER,\n DEFAULT_GAS_BUDGET_FOR_TRANSFER_SUI,\n DEFAULT_NFT_TRANSFER_GAS_FEE,\n DeepbookClobV2Moudle,\n DeepbookCustodianV2Moudle,\n DeepbookEndpointsV2Moudle,\n DeepbookUtils,\n FEE_RATE_DENOMINATOR,\n GAS_SYMBOL,\n GAS_TYPE_ARG,\n GAS_TYPE_ARG_LONG,\n MAX_SQRT_PRICE,\n MAX_TICK_INDEX,\n MIN_SQRT_PRICE,\n MIN_TICK_INDEX,\n MathUtil,\n ONE,\n POOL_STRUCT,\n Percentage,\n PoolModule,\n PositionModule,\n PositionStatus,\n PositionUtil,\n RouterModule,\n RouterModuleV2,\n RpcModule,\n SUI_SYSTEM_STATE_OBJECT_ID,\n SplitSwap,\n SplitUnit,\n SwapDirection,\n SwapModule,\n SwapUtils,\n TICK_ARRAY_SIZE,\n TWO,\n TickMath,\n TickUtil,\n TokenModule,\n TransactionUtil,\n TxBlock,\n U128,\n U128_MAX,\n U64_MAX,\n ZERO,\n addHexPrefix,\n adjustForCoinSlippage,\n adjustForSlippage,\n asIntN,\n asUintN,\n bufferToHex,\n buildClmmPositionName,\n buildNFT,\n buildPool,\n buildPosition,\n buildPositionReward,\n buildTickData,\n buildTickDataByEvent,\n cacheTime24h,\n cacheTime5min,\n checkAddress,\n checkInvalidSuiAddress,\n collectFeesQuote,\n composeType,\n computeSwap,\n computeSwapStep,\n createSplitAmountArray,\n createSplitArray,\n d,\n decimalsMultiplier,\n src_default as default,\n estPoolAPR,\n estPositionAPRWithDeltaMethod,\n estPositionAPRWithMultiMethod,\n estimateLiquidityForCoinA,\n estimateLiquidityForCoinB,\n extractAddressFromType,\n extractStructTagFromType,\n findAdjustCoin,\n fixCoinType,\n fixSuiObjectId,\n fromDecimalsAmount,\n getAmountFixedDelta,\n getAmountUnfixedDelta,\n getCoinAFromLiquidity,\n getCoinBFromLiquidity,\n getDefaultSuiInputType,\n getDeltaA,\n getDeltaB,\n getDeltaDownFromOutput,\n getDeltaUpFromInput,\n getFutureTime,\n getLiquidityFromCoinA,\n getLiquidityFromCoinB,\n getLowerSqrtPriceFromCoinA,\n getLowerSqrtPriceFromCoinB,\n getMoveObject,\n getMoveObjectType,\n getMovePackageContent,\n getNearestTickByTick,\n getNextSqrtPriceAUp,\n getNextSqrtPriceBDown,\n getNextSqrtPriceFromInput,\n getNextSqrtPriceFromOutput,\n getObjectDeletedResponse,\n getObjectDisplay,\n getObjectFields,\n getObjectId,\n getObjectNotExistsResponse,\n getObjectOwner,\n getObjectPreviousTransactionDigest,\n getObjectReference,\n getObjectType,\n getObjectVersion,\n getPackagerConfigs,\n getRewardInTickRange,\n getSuiObjectData,\n getTickDataFromUrlData,\n getUpperSqrtPriceFromCoinA,\n getUpperSqrtPriceFromCoinB,\n hasPublicTransfer,\n hexToNumber,\n hexToString,\n isSortedSymbols,\n isSuiObjectResponse,\n newBits,\n normalizeCoinType,\n patchFixSuiObjectId,\n printTransaction,\n removeHexPrefix,\n secretKeyToEd25519Keypair,\n secretKeyToSecp256k1Keypair,\n shortAddress,\n shortString,\n tickScore,\n toBuffer,\n toCoinAmount,\n toDecimalsAmount,\n transClmmpoolDataWithoutTicks,\n utf8to16\n};\n//# sourceMappingURL=index.mjs.map","import BN from \"bn.js\";\nimport { conf, CONF_ENV } from \"./constants\";\n\nexport type PoolName =\n | \"ALPHA\"\n | \"HASUI-SUI\"\n | \"USDY-USDC\"\n | \"ALPHA-SUI\"\n | \"USDT-USDC\"\n | \"USDC-SUI\"\n | \"USDC-WBTC\"\n | \"WETH-USDC\"\n | \"NAVI-SUI\"\n | \"NAVI-VSUI\"\n | \"NAVX-SUI\"\n | \"NAVI-WETH\"\n | \"NAVI-USDT\"\n | \"NAVI-USDC\";\n\nexport type CoinName =\n | \"ALPHA\"\n | \"SUI\"\n | \"USDC\"\n | \"USDT\"\n | \"VSUI\"\n | \"NAVX\"\n | \"SCA\"\n | \"CETUS\"\n | \"AFSUI\"\n | \"WETH\"\n | \"APT\"\n | \"SOL\"\n | \"SLP\"\n | \"WBTC\"\n | \"CELO\"\n | \"TURBOS\"\n | \"HASUI\"\n | \"USDY\";\n\nexport interface Coin {\n name: CoinName;\n type: CoinType;\n icon: Icon;\n expo: number;\n}\n\nexport type Icon =\n | \"https://coinmeta.polymedia.app/img/coins/0x0000000000000000000000000000000000000000000000000000000000000002-sui-SUI.svg\"\n | \"https://coinmeta.polymedia.app/img/coins/0x0000000000000000000000000000000000000000000000000000000000000002-sui-SUI.svg\"\n | \"https://coinmeta.polymedia.app/img/coins/0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf-coin-COIN.webp\"\n | \"https://coinmeta.polymedia.app/img/coins/0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c-coin-COIN.webp\"\n | \"https://coinmeta.polymedia.app/img/coins/0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55-cert-CERT.webp\"\n | \"https://coinmeta.polymedia.app/img/coins/0xa99b8952d4f7d947ea77fe0ecdcc9e5fc0bcab2841d6e2a5aa00c3044e5544b5-navx-NAVX.webp\"\n | \"https://suivision.xyz/images/coin-default.png\"\n | \"https://coinmeta.polymedia.app/img/coins/0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6-sca-SCA.webp\"\n | \"https://coinmeta.polymedia.app/img/coins/0xf325ce1300e8dac124071d3152c5c5ee6174914f8bc2161e88329cf579246efc-afsui-AFSUI.webp\"\n | \"https://coinmeta.polymedia.app/img/coins/0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5-coin-COIN.webp\"\n | \"https://coinmeta.polymedia.app/img/coins/0x3a5143bb1196e3bcdfab6203d1683ae29edd26294fc8bfeafe4aaa9d2704df37-coin-COIN.webp\"\n | \"https://coinmeta.polymedia.app/img/coins/0xb7844e289a8410e50fb3ca48d69eb9cf29e27d223ef90353fe1bd8e27ff8f3f8-coin-COIN.webp\"\n | \"https://coinmeta.polymedia.app/img/coins/0xc44d97a4bc4e5a33ca847b72b123172c88a6328196b71414f32c3070233604b2-slp-SLP.webp\"\n | \"https://coinmeta.polymedia.app/img/coins/0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881-coin-COIN.webp\"\n | \"https://coinmeta.polymedia.app/img/coins/0xa198f3be41cda8c07b3bf3fee02263526e535d682499806979a111e88a5a8d0f-coin-COIN.webp\"\n | \"https://coinmeta.polymedia.app/img/coins/0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b-cetus-CETUS.webp\"\n | \"https://coinmeta.polymedia.app/img/coins/0x5d1f47ea69bb0de31c313d7acf89b890dbb8991ea8e03c6c355171f84bb1ba4a-turbos-TURBOS.svg\"\n | \"https://7taj6jfau6n3dri7agspzfnva7qbj5sizz5xc3lb56nmxpsyoiba.arweave.net/_MCfJKCnm7HFHwGk_JW1B-AU9kjOe3FtYe-ay75YcgI\"\n | \"https://coinmeta.polymedia.app/img/coins/0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d-hasui-HASUI.svg\"\n | \"https://coinmeta.polymedia.app/img/coins/0x960b531667636f39e85867775f52f6b1f220a058c4de786905bdf761e06a56bb-usdy-USDY.svg\";\n\nexport type CoinType =\n | \"0xfe3afec26c59e874f3c1d60b8203cb3852d2bb2aa415df9548b8d688e6683f93::alpha::ALPHA\"\n | \"0x2::sui::SUI\"\n | \"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55::cert::CERT\"\n | \"0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf::coin::COIN\"\n | \"0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c::coin::COIN\"\n | \"0xa99b8952d4f7d947ea77fe0ecdcc9e5fc0bcab2841d6e2a5aa00c3044e5544b5::navx::NAVX\"\n | \"0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6::sca::SCA\"\n | \"0xf325ce1300e8dac124071d3152c5c5ee6174914f8bc2161e88329cf579246efc::afsui::AFSUI\"\n | \"0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5::coin::COIN\"\n | \"0x3a5143bb1196e3bcdfab6203d1683ae29edd26294fc8bfeafe4aaa9d2704df37::coin::COIN\"\n | \"0xb7844e289a8410e50fb3ca48d69eb9cf29e27d223ef90353fe1bd8e27ff8f3f8::coin::COIN\"\n | \"0xc44d97a4bc4e5a33ca847b72b123172c88a6328196b71414f32c3070233604b2::slp::SLP\"\n | \"0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881::coin::COIN\"\n | \"0xa198f3be41cda8c07b3bf3fee02263526e535d682499806979a111e88a5a8d0f::coin::COIN\"\n | \"0x6864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b::cetus::CETUS\"\n | \"0x5d1f47ea69bb0de31c313d7acf89b890dbb8991ea8e03c6c355171f84bb1ba4a::turbos::TURBOS\"\n | \"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d::hasui::HASUI\"\n | \"0x960b531667636f39e85867775f52f6b1f220a058c4de786905bdf761e06a56bb::usdy::USDY\";\n\nconst ALPHA_SUI_POOL_RECEIPT = conf[CONF_ENV].ALPHA_SUI_POOL_RECEIPT;\nconst USDY_USDC_POOL_RECEIPT = conf[CONF_ENV].USDY_USDC_POOL_RECEIPT;\nconst USDT_USDC_POOL_RECEIPT = conf[CONF_ENV].USDT_USDC_POOL_RECEIPT;\nconst ALPHA_POOL_RECEIPT = conf[CONF_ENV].ALPHA_POOL_RECEIPT;\nconst HASUI_SUI_POOL_RECEIPT = conf[CONF_ENV].HASUI_SUI_POOL_RECEIPT;\nconst USDC_SUI_POOL_RECEIPT = conf[CONF_ENV].USDC_SUI_POOL_RECEIPT;\nconst USDC_WBTC_POOL_RECEIPT = conf[CONF_ENV].USDC_WBTC_POOL_RECEIPT;\nconst WETH_USDC_POOL_RECEIPT = conf[CONF_ENV].WETH_USDC_POOL_RECEIPT;\nconst NAVI_SUI_POOL_RECEIPT = conf[CONF_ENV].NAVI_SUI_POOL_RECEIPT;\nconst NAVI_VSUI_POOL_RECEIPT = conf[CONF_ENV].NAVI_VSUI_POOL_RECEIPT;\nconst NAVX_SUI_POOL_RECEIPT = conf[CONF_ENV].NAVX_SUI_POOL_RECEIPT;\nconst NAVI_WETH_POOL_RECEIPT = conf[CONF_ENV].NAVI_WETH_POOL_RECEIPT;\nconst NAVI_USDT_POOL_RECEIPT = conf[CONF_ENV].NAVI_USDT_POOL_RECEIPT;\nconst NAVI_USDC_POOL_RECEIPT = conf[CONF_ENV].NAVI_USDC_POOL_RECEIPT;\nexport type PoolReceipt =\n | typeof ALPHA_SUI_POOL_RECEIPT\n | typeof USDY_USDC_POOL_RECEIPT\n | typeof USDT_USDC_POOL_RECEIPT\n | typeof ALPHA_POOL_RECEIPT\n | typeof HASUI_SUI_POOL_RECEIPT\n | typeof USDC_SUI_POOL_RECEIPT\n | typeof USDC_WBTC_POOL_RECEIPT\n | typeof WETH_USDC_POOL_RECEIPT\n | typeof NAVI_SUI_POOL_RECEIPT\n | typeof NAVI_VSUI_POOL_RECEIPT\n | typeof NAVX_SUI_POOL_RECEIPT\n | typeof NAVI_WETH_POOL_RECEIPT\n | typeof NAVI_USDT_POOL_RECEIPT\n | typeof NAVI_USDC_POOL_RECEIPT;\n\nexport type CoinAmounts = {\n coinA: BN;\n coinB: BN;\n};\n\nexport type CetusInvestor = {\n objectId: string;\n version: string;\n digest: string;\n type: string;\n content: {\n dataType: string;\n type: string;\n hasPublicTransfer: boolean;\n fields: {\n free_balance_a: string;\n free_balance_b: string;\n id: {\n id: string;\n };\n lower_tick: string;\n performance_fee: string;\n performance_fee_max_cap: string;\n upper_tick: string;\n };\n };\n};\n\nexport type CetusPoolType = {\n objectId: string;\n version: string;\n digest: string;\n content: {\n dataType: string;\n type: string;\n hasPublicTransfer: boolean;\n fields: {\n xTokenSupply: string;\n tokensInvested: string;\n coin_a: string;\n coin_b: string;\n current_sqrt_price: string;\n current_tick_index: {\n fields: { bits: number };\n type: string;\n };\n fee_growth_global_a: string;\n fee_growth_global_b: string;\n fee_protocol_coin_a: string;\n fee_protocol_coin_b: string;\n fee_rate: string;\n id: { id: string };\n index: string;\n is_pause: boolean;\n liquidity: string;\n position_manager: {\n fields: {\n position_index: string;\n positions: {\n fields: {\n head: string;\n id: { id: string };\n size: string;\n tail: string;\n };\n type: string;\n };\n tick_spacing: number;\n };\n type: string;\n };\n // reward_manager: {};\n // tick_manager: {};\n tick_spacing: number;\n url: string;\n };\n };\n};\n\nexport type Receipt = {\n objectId: string;\n version: string;\n digest: string;\n type: string;\n content: {\n dataType: string;\n type: string;\n hasPublicTransfer: boolean;\n fields: {\n creator: string;\n id: { id: string };\n image_url: string;\n last_acc_reward_per_xtoken: {\n type: string;\n fields: {\n contents: [\n {\n type: string;\n fields: {\n value: string;\n key: {\n type: string;\n fields: {\n name: string;\n };\n };\n };\n },\n ];\n };\n };\n locked_balance: {\n type: string;\n fields: {\n head: string;\n id: { id: string };\n size: string;\n tail: string;\n };\n };\n name: string;\n owner: string;\n pending_rewards: {\n type: string;\n fields: {\n contents: [\n {\n fields: {\n key: {\n type: string;\n fields: {\n name: string;\n };\n };\n value: string;\n };\n type: string;\n },\n ];\n };\n };\n pool_id: string;\n xTokenBalance: string;\n unlocked_xtokens: string;\n };\n };\n};\nexport type PoolType = {\n objectId: string;\n version: string;\n digest: string;\n content: {\n dataType: string;\n type: string;\n hasPublicTransfer: boolean;\n fields: {\n id: { id: string };\n xTokenSupply: string;\n tokensInvested: string;\n // rewards: Bag,\n acc_rewards_per_xtoken: {\n type: string;\n fields: {\n contents: [\n {\n type: string;\n fields: {\n value: string;\n key: {\n type: string;\n fields: {\n name: string;\n };\n };\n };\n },\n ];\n };\n };\n locked_period_in_days: string;\n locking_start_day: string;\n alpha_bal: string;\n locked_balance_withdrawal_fee: string;\n deposit_fee: string;\n deposit_fee_max_cap: string;\n withdrawal_fee: string;\n withdraw_fee_max_cap: string;\n weight: string;\n alphaUnlockedPerSecond: string;\n };\n };\n};\n\nexport type AlphaPoolType = {\n objectId: string;\n version: string;\n digest: string;\n content: {\n dataType: string;\n type: string;\n hasPublicTransfer: boolean;\n fields: {\n // acc_rewards_per_xtoken: VecMap<TypeName,u256>,\n alpha_bal: string;\n deposit_fee: string;\n deposit_fee_max_cap: string;\n id: { id: string };\n // image_url: string;\n instant_withdraw_fee: string;\n instant_withdraw_fee_max_cap: string;\n locked_period_in_days: string;\n locking_start_day: string;\n acc_rewards_per_xtoken: {\n type: string;\n fields: {\n contents: [\n {\n type: string;\n fields: {\n value: string;\n key: {\n type: string;\n fields: {\n name: string;\n };\n };\n };\n },\n ];\n };\n };\n // name: string;\n // rewards: Bag,\n tokensInvested: string;\n withdraw_fee_max_cap: string;\n withdrawal_fee: string;\n xTokenSupply: string;\n };\n };\n};\n\nexport class SimpleCache<T> {\n private cache: { [key: string]: { value: T; expiry: number } } = {};\n private defaultTTL: number;\n\n constructor(defaultTTL: number = 60000) {\n // Default TTL is 60 seconds\n this.defaultTTL = defaultTTL;\n }\n\n get(key: string): T | null {\n const cacheEntry = this.cache[key];\n if (cacheEntry && cacheEntry.expiry > Date.now()) {\n return cacheEntry.value;\n } else {\n // If the entry has expired, delete it\n this.delete(key);\n return null;\n }\n }\n\n set(key: string, value: T, ttl?: number): void {\n const expiry = Date.now() + (ttl || this.defaultTTL);\n this.cache[key] = { value, expiry };\n }\n\n delete(key: string): void {\n delete this.cache[key];\n }\n\n clear(): void {\n this.cache = {};\n }\n}\n\nexport interface CoinPair {\n coinA: Coin;\n coinB: Coin;\n}\n\nexport type SwapOptions = {\n pair: CoinPair;\n senderAddress: string;\n slippage: number;\n} & ({ inAmount: BN; outAmount?: never } | { outAmount: BN; inAmount?: never });\n\nexport type CetusSwapOptions = SwapOptions;\n\nexport type TickSpacing = 2 | 10 | 60 | 200;\n\nexport type CreatePoolOptions = {\n tickSpacing: TickSpacing;\n initializePrice: number;\n imageUrl: string;\n coinNameA: CoinName;\n coinNameB: CoinName;\n amount: number;\n isAmountA: boolean;\n};\n\nexport type AlphaFiVault = {\n poolId: string | null;\n poolName: string | null;\n receiptName: string | null;\n receiptType: string | null;\n coinTypeA: string | null;\n coinTypeB: string | null;\n};\n\nexport type AlphaVaultBalance = {\n lockedAlphaCoins: string | null;\n lockedAlphaCoinsInUSD: string | null;\n unlockedAlphaCoins: string | null;\n unlockedAlphaCoinsInUSD: string | null;\n totalAlphaCoins: string | null;\n totalAlphaCoinsInUSD: string | null;\n};\n\nexport type DoubleAssetVaultBalance = {\n coinA: string | null;\n coinB: string | null;\n valueInUSD: string | null;\n};\n\nexport type SingleAssetVaultBalance = {\n coin: string | null;\n valueInUSD: string | null;\n};\n","// import { CONF_ENV, conf } from \"../constants\";\n// import { Coin, CoinName, CoinType } from \"./types\";\n\nimport { conf, CONF_ENV } from \"./constants\";\nimport { Coin, CoinName, CoinType } from \"./types\";\n\nexport const coins: { [key in CoinName]: Coin } = {\n ALPHA: {\n name: \"ALPHA\",\n type: conf[CONF_ENV].ALPHA_COIN_TYPE as CoinType,\n icon: \"https://7taj6jfau6n3dri7agspzfnva7qbj5sizz5xc3lb56nmxpsyoiba.arweave.net/_MCfJKCnm7HFHwGk_JW1B-AU9kjOe3FtYe-ay75YcgI\",\n expo: 9,\n },\n SUI: {\n name: \"SUI\",\n type: \"0x2::sui::SUI\",\n icon: \"https://coinmeta.polymedia.app/img/coins/0x0000000000000000000000000000000000000000000000000000000000000002-sui-SUI.svg\",\n expo: 9,\n },\n USDC: {\n name: \"USDC\",\n type: \"0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf::coin::COIN\",\n icon: \"https://coinmeta.polymedia.app/img/coins/0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf-coin-COIN.webp\",\n expo: 6,\n },\n USDT: {\n name: \"USDT\",\n type: \"0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c::coin::COIN\",\n icon: \"https://coinmeta.polymedia.app/img/coins/0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c-coin-COIN.webp\",\n expo: 6,\n },\n VSUI: {\n name: \"VSUI\",\n type: \"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55::cert::CERT\",\n icon: \"https://coinmeta.polymedia.app/img/coins/0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55-cert-CERT.webp\",\n expo: 9,\n },\n NAVX: {\n name: \"NAVX\",\n type: \"0xa99b8952d4f7d947ea77fe0ecdcc9e5fc0bcab2841d6e2a5aa00c3044e5544b5::navx::NAVX\",\n icon: \"https://coinmeta.polymedia.app/img/coins/0xa99b8952d4f7d947ea77fe0ecdcc9e5fc0bcab2841d6e2a5aa00c3044e5544b5-navx-NAVX.webp\",\n expo: 9,\n },\n SCA: {\n name: \"SCA\",\n type: \"0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6::sca::SCA\",\n icon: \"https://coinmeta.polymedia.app/img/coins/0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6-sca-SCA.webp\",\n expo: 9,\n },\n CETUS: {\n name: \"CETUS\",\n type: \"0x6864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b::cetus::CETUS\",\n icon: \"https://coinmeta.polymedia.app/img/coins/0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b-cetus-CETUS.webp\",\n expo: 9,\n },\n TURBOS: {\n name: \"TURBOS\",\n type: \"0x5d1f47ea69bb0de31c313d7acf89b890dbb8991ea8e03c6c355171f84bb1ba4a::turbos::TURBOS\",\n icon: \"https://coinmeta.polymedia.app/img/coins/0x5d1f47ea69bb0de31c313d7acf89b890dbb8991ea8e03c6c355171f84bb1ba4a-turbos-TURBOS.svg\",\n expo: 9,\n },\n AFSUI: {\n name: \"AFSUI\",\n type: \"0xf325ce1300e8dac124071d3152c5c5ee6174914f8bc2161e88329cf579246efc::afsui::AFSUI\",\n icon: \"https://coinmeta.polymedia.app/img/coins/0xf325ce1300e8dac124071d3152c5c5ee6174914f8bc2161e88329cf579246efc-afsui-AFSUI.webp\",\n expo: 9,\n },\n WETH: {\n name: \"WETH\",\n type: \"0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5::coin::COIN\",\n icon: \"https://coinmeta.polymedia.app/img/coins/0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5-coin-COIN.webp\",\n expo: 8,\n },\n APT: {\n name: \"APT\",\n type: \"0x3a5143bb1196e3bcdfab6203d1683ae29edd26294fc8bfeafe4aaa9d2704df37::coin::COIN\",\n icon: \"https://coinmeta.polymedia.app/img/coins/0x3a5143bb1196e3bcdfab6203d1683ae29edd26294fc8bfeafe4aaa9d2704df37-coin-COIN.webp\",\n expo: 8,\n },\n SOL: {\n name: \"SOL\",\n type: \"0xb7844e289a8410e50fb3ca48d69eb9cf29e27d223ef90353fe1bd8e27ff8f3f8::coin::COIN\",\n icon: \"https://coinmeta.polymedia.app/img/coins/0xb7844e289a8410e50fb3ca48d69eb9cf29e27d223ef90353fe1bd8e27ff8f3f8-coin-COIN.webp\",\n expo: 8,\n },\n SLP: {\n name: \"SLP\",\n type: \"0xc44d97a4bc4e5a33ca847b72b123172c88a6328196b71414f32c3070233604b2::slp::SLP\",\n icon: \"https://coinmeta.polymedia.app/img/coins/0xc44d97a4bc4e5a33ca847b72b123172c88a6328196b71414f32c3070233604b2-slp-SLP.webp\",\n expo: 6,\n },\n WBTC: {\n name: \"WBTC\",\n type: \"0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881::coin::COIN\",\n icon: \"https://coinmeta.polymedia.app/img/coins/0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881-coin-COIN.webp\",\n expo: 8,\n },\n CELO: {\n name: \"CELO\",\n type: \"0xa198f3be41cda8c07b3bf3fee02263526e535d682499806979a111e88a5a8d0f::coin::COIN\",\n icon: \"https://coinmeta.polymedia.app/img/coins/0xa198f3be41cda8c07b3bf3fee02263526e535d682499806979a111e88a5a8d0f-coin-COIN.webp\",\n expo: 8,\n },\n HASUI: {\n name: \"HASUI\",\n type: \"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d::hasui::HASUI\",\n icon: \"https://coinmeta.polymedia.app/img/coins/0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d-hasui-HASUI.svg\",\n expo: 9,\n },\n USDY: {\n name: \"USDY\",\n type: \"0x960b531667636f39e85867775f52f6b1f220a058c4de786905bdf761e06a56bb::usdy::USDY\",\n icon: \"https://coinmeta.polymedia.app/img/coins/0x960b531667636f39e85867775f52f6b1f220a058c4de786905bdf761e06a56bb-usdy-USDY.svg\",\n expo: 6,\n },\n};\n\nexport const poolTokenMap: {\n [key in string]: { coinName: CoinName; coinType: CoinType };\n} = {\n \"NAVI-SUI\": { coinName: \"SUI\", coinType: coins[\"SUI\"].type },\n \"NAVI-VSUI\": { coinName: \"VSUI\", coinType: coins[\"VSUI\"].type },\n \"NAVI-WETH\": { coinName: \"WETH\", coinType: coins[\"WETH\"].type },\n \"NAVI-USDT\": { coinName: \"USDT\", coinType: coins[\"USDT\"].type },\n \"NAVI-USDC\": { coinName: \"USDC\", coinType: coins[\"USDC\"].type },\n};\n","import { SdkOptions } from \"@cetusprotocol/cetus-sui-clmm-sdk\";\nimport { getFullnodeUrl } from \"@mysten/sui/client\";\n\nexport const cetusMainnetSDKOptions: SdkOptions = {\n fullRpcUrl: getFullnodeUrl(\"mainnet\"),\n swapCountUrl: \"https://api-sui.cetus.zone/v2/sui/swap/count\",\n simulationAccount: {\n address:\n \"0x4260738f0f7341adc79a8edaa62f8a4681ebd27c595aecab1f322f47bfc52c5e\",\n },\n cetus_config: {\n package_id:\n \"0x95b8d278b876cae22206131fb9724f701c9444515813042f54f0a426c9a3bc2f\",\n published_at:\n \"0x95b8d278b876cae22206131fb9724f701c9444515813042f54f0a426c9a3bc2f\",\n config: {\n coin_list_id:\n \"0x8cbc11d9e10140db3d230f50b4d30e9b721201c0083615441707ffec1ef77b23\",\n launchpad_pools_id:\n \"0x1098fac992eab3a0ab7acf15bb654fc1cf29b5a6142c4ef1058e6c408dd15115\",\n clmm_pools_id:\n \"0x15b6a27dd9ae03eb455aba03b39e29aad74abd3757b8e18c0755651b2ae5b71e\",\n admin_cap_id:\n \"0x39d78781750e193ce35c45ff32c6c0c3f2941fa3ddaf8595c90c555589ddb113\",\n global_config_id:\n \"0x0408fa4e4a4c03cc0de8f23d0c2bbfe8913d178713c9a271ed4080973fe42d8f\",\n coin_list_handle:\n \"0x49136005e90e28c4695419ed4194cc240603f1ea8eb84e62275eaff088a71063\",\n launchpad_pools_handle:\n \"0x5e194a8efcf653830daf85a85b52e3ae8f65dc39481d54b2382acda25068375c\",\n clmm_pools_handle:\n \"0x37f60eb2d9d227949b95da8fea810db3c32d1e1fa8ed87434fc51664f87d83cb\",\n },\n },\n clmm_pool: {\n package_id:\n \"0x1eabed72c53feb3805120a081dc15963c204dc8d091542592abaf7a35689b2fb\",\n published_at:\n \"0x70968826ad1b4ba895753f634b0aea68d0672908ca1075a2abdf0fc9e0b2fc6a\",\n config: {\n pools_id:\n \"0xf699e7f2276f5c9a75944b37a0c5b5d9ddfd2471bf6242483b03ab2887d198d0\",\n global_config_id:\n \"0xdaa46292632c3c4d8f31f23ea0f9b36a28ff3677e9684980e4438403a67a3d8f\",\n global_vault_id:\n \"0xce7bceef26d3ad1f6d9b6f13a953f053e6ed3ca77907516481ce99ae8e588f2b\",\n admin_cap_id:\n \"0x89c1a321291d15ddae5a086c9abc533dff697fde3d89e0ca836c41af73e36a75\",\n partners_id:\n \"0xac30897fa61ab442f6bff518c5923faa1123c94b36bd4558910e9c783adfa204\",\n },\n },\n integrate: {\n package_id:\n \"0x996c4d9480708fb8b92aa7acf819fb0497b5ec8e65ba06601cae2fb6db3312c3\",\n published_at:\n \"0x6f5e582ede61fe5395b50c4a449ec11479a54d7ff8e0158247adfda60d98970b\",\n },\n deepbook: {\n package_id:\n \"0x000000000000000000000000000000000000000000000000000000000000dee9\",\n published_at:\n \"0x000000000000000000000000000000000000000000000000000000000000dee9\",\n },\n deepbook_endpoint_v2: {\n package_id:\n \"0x0dd416959739e1db3a4c6f9cac7f9e7202678f3b067d6d419e569a124fc35e0e\",\n published_at:\n \"0x0dd416959739e1db3a4c6f9cac7f9e7202678f3b067d6d419e569a124fc35e0e\",\n },\n aggregatorUrl: \"https://api-sui.cetus.zone/router\",\n};\n","import BN from \"bn.js\";\nimport { coins } from \"./common/coins\";\nimport CetusClmmSDK, {\n SdkOptions,\n Pool,\n Percentage,\n adjustForSlippage,\n CalculateRatesResult,\n ClmmPoolUtil,\n TickMath,\n d,\n} from \"@cetusprotocol/cetus-sui-clmm-sdk\";\nimport {\n CetusSwapOptions,\n Coin,\n CreatePoolOptions,\n SimpleCache,\n} from \"./common/types\";\nimport { Transaction } from \"@mysten/sui/transactions\";\nimport { cetusMainnetSDKOptions } from \"./common/cetus_mainnet_config\";\nimport axios from \"axios\";\nimport { PythPriceIdPair } from \"./common/pyth\";\n\nexport async function getLatestPrice(\n pair: PythPriceIdPair,\n): Promise<string | undefined> {\n let price: string | undefined = undefined;\n\n if (pair === (\"ALPHA/USD\" as PythPriceIdPair)) {\n const alphaPrice = await getAlphaPrice();\n if (alphaPrice) {\n price = `${alphaPrice}`;\n }\n } else if (pair === (\"USDY/USD\" as PythPriceIdPair)) {\n const usdyPrice = await getUSDYPrice();\n if (usdyPrice) {\n price = `${usdyPrice}`;\n }\n } else {\n try {\n price = await fetchPriceFromAlphaAPI(pair);\n if (!price) {\n console.error(`Failed to get price for pair ${pair}`);\n }\n } catch (error) {\n console.error(`Error in getPrice for pair ${pair}:`, error);\n }\n }\n return price;\n}\n\ninterface PythPricePair {\n pair: PythPriceIdPair;\n price: string;\n}\n\nasync function fetchPriceFromAlphaAPI(\n pair: string,\n): Promise<string | undefined> {\n let pythPricePair: PythPricePair | undefined = undefined;\n const cachedPromise = axios\n .get<PythPricePair>(`https://api.alphafi.xyz/alpha/fetchPrice?pair=${pair}`)\n .then((response) => {\n const data = response.data;\n return data;\n })\n .catch((error) => {\n throw error;\n });\n pythPricePair = await cachedPromise;\n\n if (pythPricePair) {\n return pythPricePair.price;\n } else {\n throw new Error(`Price not found for pair: ${pair}`);\n }\n}\n\nconst alphaPricePromiseCache = new SimpleCache<Promise<number>>(60000);\nconst alphaPriceCache = new SimpleCache<number>(60000);\n\nexport async function getAlphaPrice(\n ignoreCache: boolean = false,\n): Promise<number | undefined> {\n const cacheKey = `getAlphaPrice`;\n if (ignoreCache) {\n alphaPriceCache.delete(cacheKey);\n alphaPricePromiseCache.delete(cacheKey);\n }\n const cachedResponse = alphaPriceCache.get(cacheKey);\n\n if (cachedResponse) {\n return cachedResponse;\n }\n let alphaPrice = 0;\n let cachedPromise = alphaPricePromiseCache.get(cacheKey);\n if (!cachedPromise) {\n cachedPromise = (async (): Promise<number> => {\n const cetusGateway = new CetusGateway(cetusMainnetSDKOptions);\n const swapOption: CetusSwapOptions = {\n pair: { coinA: coins.ALPHA, coinB: coins.SUI },\n senderAddress:\n \"0x4260738f0f7341adc79a8edaa62f8a4681ebd27c595aecab1f322f47bfc52c5e\",\n slippage: 1,\n inAmount: new BN(1_000_000_000),\n };\n const res = await cetusGateway.getPrice(swapOption);\n const latestSuiPrice = await getLatestPrice(\"SUI/USD\");\n if (latestSuiPrice) {\n alphaPrice =\n res.estimatedAmountOut.toNumber() * Number(latestSuiPrice) * 1e-9;\n alphaPriceCache.set(cacheKey, alphaPrice);\n alphaPricePromiseCache.delete(cacheKey); // Remove the promise from cache\n }\n return alphaPrice;\n })().catch((error) => {\n alphaPricePromiseCache.delete(cacheKey); // Remove the promise from cache\n throw error;\n });\n\n alphaPricePromiseCache.set(cacheKey, cachedPromise);\n }\n\n return cachedPromise;\n}\n\nexport async function getUSDYPrice(): Promise<number | undefined> {\n const cetusGateway = new CetusGateway(cetusMainnetSDKOptions);\n const swapOption: CetusSwapOptions = {\n pair: { coinA: coins.USDY, coinB: coins.USDC },\n senderAddress:\n \"0x4260738f0f7341adc79a8edaa62f8a4681ebd27c595aecab1f322f47bfc52c5e\",\n slippage: 1,\n inAmount: new BN(1_000_000),\n };\n const res = await cetusGateway.getPrice(swapOption);\n const latestSuiPrice = await getLatestPrice(\"USDC/USD\");\n if (latestSuiPrice) {\n return res.estimatedAmountOut.toNumber() * Number(latestSuiPrice) * 1e-6;\n }\n}\n\ninterface PoolData {\n pair: string;\n id: string;\n a2b: boolean;\n}\n\nconst poolData: { [key: string]: PoolData } = {\n \"SUI/USDC\": {\n pair: \"SUI/USDC\",\n id: \"0xcf994611fd4c48e277ce3ffd4d4364c914af2c3cbb05f7bf6facd371de688630\",\n a2b: false,\n },\n \"USDC/SUI\": {\n pair: \"USDC/SUI\",\n id: \"0xcf994611fd4c48e277ce3ffd4d4364c914af2c3cbb05f7bf6facd371de688630\",\n a2b: true,\n },\n \"SUI/USDT\": {\n pair: \"SUI/USDT\",\n id: \"0x06d8af9e6afd27262db436f0d37b304a041f710c3ea1fa4c3a9bab36b3569ad3\",\n a2b: false,\n },\n \"USDT/SUI\": {\n pair: \"USDT/SUI\",\n id: \"0x06d8af9e6afd27262db436f0d37b304a041f710c3ea1fa4c3a9bab36b3569ad3\",\n a2b: true,\n },\n \"USDC/USDT\": {\n pair: \"USDC/USDT\",\n id: \"0xc8d7a1503dc2f9f5b05449a87d8733593e2f0f3e7bffd90541252782e4d2ca20\",\n a2b: false,\n },\n \"USDT/USDC\": {\n pair: \"USDT/USDC\",\n id: \"0xc8d7a1503dc2f9f5b05449a87d8733593e2f0f3e7bffd90541252782e4d2ca20\",\n a2b: true,\n },\n \"SUI/VSUI\": {\n pair: \"SUI/VSUI\",\n id: \"0x6c545e78638c8c1db7a48b282bb8ca79da107993fcb185f75cedc1f5adb2f535\",\n a2b: false,\n },\n \"VSUI/SUI\": {\n pair: \"VSUI/SUI\",\n id: \"0x6c545e78638c8c1db7a48b282bb8ca79da107993fcb185f75cedc1f5adb2f535\",\n a2b: true,\n },\n \"SUI/NAVX\": {\n pair: \"SUI/NAVX\",\n id: \"0x0254747f5ca059a1972cd7f6016485d51392a3fde608107b93bbaebea550f703\",\n a2b: false,\n },\n \"NAVX/SUI\": {\n pair: \"NAVX/SUI\",\n id: \"0x0254747f5ca059a1972cd7f6016485d51392a3fde608107b93bbaebea550f703\",\n a2b: true,\n },\n \"ALPHA/SUI\": {\n pair: \"ALPHA/SUI\",\n id: \"0xda7347c3192a27ddac32e659c9d9cbed6f8c9d1344e605c71c8886d7b787d720\",\n a2b: true,\n },\n \"SUI/ALPHA\": {\n pair: \"ALPHA/SUI\",\n id: \"0xda7347c3192a27ddac32e659c9d9cbed6f8c9d1344e605c71c8886d7b787d720\",\n a2b: false,\n },\n \"USDY/USDC\": {\n pair: \"USDY/USDC\",\n id: \"0x0e809689d04d87f4bd4e660cd1b84bf5448c5a7997e3d22fc480e7e5e0b3f58d\",\n a2b: true,\n },\n \"USDC/USDY\": {\n pair: \"USDY/USDC\",\n id: \"0x0e809689d04d87f4bd4e660cd1b84bf5448c5a7997e3d22fc480e7e5e0b3f58d\",\n a2b: false,\n },\n};\n\nexport class CetusGateway {\n private cetusSDK: CetusClmmSDK;\n\n constructor(sdkOptions: SdkOptions) {\n this.cetusSDK = new CetusClmmSDK(sdkOptions);\n this.cetusSDK.senderAddress = sdkOptions.simulationAccount.address;\n }\n\n async getPools(pairs: { coinA?: Coin; coinB?: Coin }[]) {\n const allPools = await this.cetusSDK.Pool.getPoolsWithPage([]);\n const matchedPools: Pool[] = [];\n\n pairs.forEach((pair) => {\n const filteredPools: Pool[] = allPools.filter((pool) => {\n if (pair.coinA && pair.coinB) {\n return (\n (pool.coinTypeA === pair.coinA.type &&\n pool.coinTypeB === pair.coinB.type) ||\n (pool.coinTypeA === pair.coinB.type &&\n pool.coinTypeB === pair.coinA.type)\n );\n } else if (pair.coinA && !pair.coinB) {\n return (\n pool.coinTypeA === pair.coinA.type ||\n pool.coinTypeB === pair.coinA.type\n );\n } else if (!pair.coinA && pair.coinB) {\n return (\n pool.coinTypeB === pair.coinB.type ||\n pool.coinTypeB === pair.coinB.type\n );\n }\n });\n matchedPools.push(...filteredPools);\n });\n\n return matchedPools;\n }\n\n async getPrice(options: CetusSwapOptions): Promise<CalculateRatesResult> {\n const { pair, inAmount, outAmount } = options;\n const poolDatum = poolData[pair.coinA.name + \"/\" + pair.coinB.name];\n let amount: BN = new BN(0);\n let byAmountIn: boolean = true;\n if (inAmount) {\n byAmountIn = true;\n amount = inAmount;\n } else if (outAmount) {\n byAmountIn = false;\n amount = outAmount;\n }\n\n const pool = await this.cetusSDK.Pool.getPool(poolDatum.id);\n\n const swapTicks = await this.cetusSDK.Pool.fetchTicks({\n pool_id: pool.poolAddress,\n coinTypeA: pool.coinTypeA,\n coinTypeB: pool.coinTypeB,\n });\n\n const res = this.cetusSDK.Swap.calculateRates({\n decimalsA: pair.coinA.expo,\n decimalsB: pair.coinB.expo,\n a2b: poolDatum.a2b,\n byAmountIn,\n amount,\n swapTicks,\n currentPool: pool,\n });\n\n return res;\n }\n\n async getTransaction(options: CetusSwapOptions): Promise<Transaction> {\n const res = await this.getPrice(options);\n\n const { pair, senderAddress, slippage, inAmount, outAmount } = options;\n const poolDatum = poolData[pair.coinA.name + \"/\" + pair.coinB.name];\n const poolID = poolDatum.id;\n const pool = await this.cetusSDK.Pool.getPool(poolID);\n\n let byAmountIn: boolean = true;\n if (inAmount) {\n byAmountIn = true;\n } else if (outAmount) {\n byAmountIn = false;\n }\n\n const slippagePercentage = new Percentage(\n new BN(Math.floor(slippage * 100).toString()),\n new BN(100),\n );\n const toAmount = byAmountIn\n ? res.estimatedAmountOut\n : res.estimatedAmountIn;\n const amountLimit = adjustForSlippage(\n toAmount,\n slippagePercentage,\n !byAmountIn,\n );\n // TransactionBlock\n this.cetusSDK.senderAddress = senderAddress;\n const txb = this.cetusSDK.Swap.createSwapTransactionPayload({\n pool_id: pool.poolAddress,\n coinTypeA: pool.coinTypeA,\n coinTypeB: pool.coinTypeB,\n a2b: poolDatum.a2b,\n by_amount_in: byAmountIn,\n amount: res.amount.toString(),\n amount_limit: amountLimit.toString(),\n });\n\n return txb;\n }\n\n async createPoolTransactionBlock(\n options: CreatePoolOptions,\n ): Promise<Transaction> {\n const initializeSqrtPrice = TickMath.priceToSqrtPriceX64(\n d(options.initializePrice),\n coins[options.coinNameA].expo,\n coins[options.coinNameB].expo,\n ).toString();\n\n const current_tick_index = TickMath.sqrtPriceX64ToTickIndex(\n new BN(Math.floor(parseFloat(initializeSqrtPrice)).toString()),\n );\n\n // build tick range\n const lowerTick = TickMath.getPrevInitializableTickIndex(\n new BN(Math.floor(current_tick_index).toString()).toNumber(),\n new BN(options.tickSpacing.toString()).toNumber(),\n );\n const upperTick = TickMath.getNextInitializableTickIndex(\n new BN(Math.floor(current_tick_index).toString()).toNumber(),\n new BN(options.tickSpacing.toString()).toNumber(),\n );\n\n // slippage value 0.05 means 5%\n const slippage = 0.01;\n // Estimate liquidity and token amount from one amounts\n const liquidityInput = ClmmPoolUtil.estLiquidityAndcoinAmountFromOneAmounts(\n lowerTick,\n upperTick,\n new BN(options.amount.toString()),\n options.isAmountA,\n true,\n slippage,\n new BN(initializeSqrtPrice.toString()),\n );\n\n // Estimate token a and token b amount\n const amount_a = options.isAmountA\n ? options.amount\n : liquidityInput.tokenMaxA.toNumber();\n const amount_b = options.isAmountA\n ? liquidityInput.tokenMaxB.toNumber()\n : options.amount;\n\n // build creatPoolPayload Payload\n const txb = this.cetusSDK.Pool.creatPoolTransactionPayload({\n coinTypeA: coins[options.coinNameA].type,\n coinTypeB: coins[options.coinNameB].type,\n tick_spacing: options.tickSpacing,\n initialize_sqrt_price: `${initializeSqrtPrice}`,\n uri: options.imageUrl,\n amount_a: amount_a,\n amount_b: amount_b,\n fix_amount_a: options.isAmountA,\n tick_lower: lowerTick,\n tick_upper: upperTick,\n });\n\n return txb;\n }\n}\n","import { SuiClient } from \"@mysten/sui/client\";\nimport Decimal from \"decimal.js\";\nimport { coins, poolTokenMap } from \"./common/coins\";\nimport { poolInfo, poolPairMap } from \"./common/maps\";\nimport { PythPriceIdPair } from \"./common/pyth\";\nimport {\n AlphaPoolType,\n CoinName,\n PoolName,\n PoolType,\n SimpleCache,\n} from \"./common/types\";\nimport {\n getCoinAmountsFromLiquidity,\n getPoolExchangeRate,\n getReceipts,\n} from \"./functions\";\nimport { getAlphaPrice, getLatestPrice } from \"./price\";\n\nexport async function getAlphaPortfolioAmount(\n poolName: PoolName,\n options: { suiClient: SuiClient; address: string; isLocked?: boolean },\n) {\n const receipts = await getReceipts(poolName, options);\n const pool = await getPool(poolName, { suiClient: options.suiClient });\n if (!pool) {\n throw new Error(\"Pool not found\");\n }\n\n const exchangeRate = await getPoolExchangeRate(poolName, {\n suiClient: options.suiClient,\n });\n let totalXTokens = new Decimal(0);\n if (!exchangeRate) {\n return \"0\"; // if pool has 0 xtokens\n }\n if (options.isLocked === true) {\n receipts.forEach(async (receipt) => {\n const xTokens = new Decimal(receipt.content.fields.xTokenBalance);\n const bal = new Decimal(\n Number(receipt.content.fields.unlocked_xtokens) *\n exchangeRate.toNumber(),\n );\n totalXTokens = totalXTokens.add(xTokens.sub(bal));\n });\n } else if (options.isLocked === false) {\n receipts.forEach((receipt) => {\n const bal = new Decimal(\n Number(receipt.content.fields.unlocked_xtokens) *\n exchangeRate.toNumber(),\n );\n totalXTokens = totalXTokens.add(bal);\n });\n } else {\n receipts.forEach((receipt) => {\n const xTokens = receipt.content.fields.xTokenBalance;\n totalXTokens = totalXTokens.add(xTokens);\n });\n }\n if (totalXTokens.gt(0)) {\n const poolExchangeRate = await getPoolExchangeRate(poolName, options);\n if (poolExchangeRate) {\n const tokens = totalXTokens.div(1e9).mul(poolExchangeRate);\n return `${tokens}`;\n } else {\n console.error(`Could not get poolExchangeRate for poolName: ${poolName}`);\n }\n } else {\n return \"0\";\n }\n}\n\nexport async function getAlphaPortfolioAmountInUSD(\n poolName: PoolName,\n options: { suiClient: SuiClient; address: string; isLocked?: boolean },\n) {\n const tokens = await getAlphaPortfolioAmount(poolName, options);\n const priceOfAlpha = await getAlphaPrice();\n if (priceOfAlpha && tokens) {\n let amount = new Decimal(tokens);\n amount = amount.mul(priceOfAlpha);\n return amount.toString();\n }\n}\n\nconst portfolioAmountCache = new SimpleCache<[number, number]>();\nconst portfolioAmountPromiseCache = new SimpleCache<\n Promise<[number, number]>\n>();\nexport async function getPortfolioAmount(\n poolName: PoolName,\n options: { suiClient: SuiClient; address: string; isLocked?: boolean },\n ignoreCache: boolean = false,\n): Promise<[number, number] | undefined> {\n let portfolioAmount: [number, number] = [0, 0];\n const portfolioAmountCacheKey = `getPortfolioAmount:${poolName}-${options.address}}`;\n if (ignoreCache) {\n portfolioAmountCache.delete(portfolioAmountCacheKey);\n portfolioAmountPromiseCache.delete(portfolioAmountCacheKey);\n }\n const cachedResponse = portfolioAmountCache.get(portfolioAmountCacheKey);\n\n if (cachedResponse) {\n return cachedResponse;\n }\n\n let cachedPromise = portfolioAmountPromiseCache.get(portfolioAmountCacheKey);\n\n if (!cachedPromise) {\n cachedPromise = (async () => {\n const receipts = await getReceipts(poolName, options);\n let totalXTokens = new Decimal(0);\n if (receipts) {\n receipts.forEach((receipt) => {\n const xTokens = receipt.content.fields.xTokenBalance;\n totalXTokens = totalXTokens.add(xTokens);\n });\n }\n\n if (totalXTokens.gt(0)) {\n const poolExchangeRate = await getPoolExchangeRate(poolName, options);\n if (poolExchangeRate) {\n const tokens = totalXTokens.mul(poolExchangeRate);\n const poolTokenAmounts = await getCoinAmountsFromLiquidity(\n poolName,\n tokens.toNumber(),\n { suiClient: options.suiClient },\n );\n portfolioAmount = poolTokenAmounts;\n } else {\n console.error(\n `Could not get poolExchangeRate for poolName: ${poolName}`,\n );\n }\n } else {\n portfolioAmount = [0, 0];\n }\n\n portfolioAmountCache.set(portfolioAmountCacheKey, portfolioAmount);\n portfolioAmountPromiseCache.delete(portfolioAmountCacheKey); // Remove the promise from cache\n return portfolioAmount;\n })().catch((error) => {\n portfolioAmountPromiseCache.delete(portfolioAmountCacheKey); // Remove the promise from cache\n throw error;\n });\n\n portfolioAmountPromiseCache.set(portfolioAmountCacheKey, cachedPromise);\n }\n\n return cachedPromise;\n}\n\nexport async function getPortfolioAmountInUSD(\n poolName: PoolName,\n options: { suiClient: SuiClient; address: string; isLocked?: boolean },\n ignoreCache: boolean = false,\n): Promise<string | undefined> {\n if (\n poolName === \"ALPHA-SUI\" ||\n poolName === \"USDT-USDC\" ||\n poolName === \"HASUI-SUI\" ||\n poolName === \"USDY-USDC\" ||\n poolName === \"USDC-SUI\" ||\n poolName === \"WETH-USDC\" ||\n poolName === \"USDC-WBTC\" ||\n poolName === \"NAVX-SUI\"\n ) {\n const amounts = await getPortfolioAmount(poolName, options, ignoreCache);\n if (amounts !== undefined) {\n const ten = new Decimal(10);\n const pool1 = poolPairMap[poolName].pool1 as CoinName;\n const pool2 = poolPairMap[poolName].pool2 as CoinName;\n const amount0 = new Decimal(amounts[0]).div(\n ten.pow(coins[pool1 as CoinName].expo),\n );\n const amount1 = new Decimal(amounts[1]).div(\n ten.pow(coins[pool2 as CoinName].expo),\n );\n const tokens = poolName.split(\"-\");\n const priceOfCoin0 = await getLatestPrice(\n `${tokens[0]}/USD` as PythPriceIdPair,\n );\n const priceOfCoin1 = await getLatestPrice(\n `${tokens[1]}/USD` as PythPriceIdPair,\n );\n if (priceOfCoin0 && priceOfCoin1) {\n const amount = amount0.mul(priceOfCoin0).add(amount1.mul(priceOfCoin1));\n return amount.toString();\n }\n } else {\n console.error(\n `getPortfolioAmountInUSD is not implemented for poolName: ${poolName}`,\n );\n }\n return \"0\";\n }\n}\n\nconst singleAssetPortfolioAmountCache = new SimpleCache<number>();\nconst singleAssetPortfolioAmountPromiseCache = new SimpleCache<\n Promise<number>\n>();\nexport async function getSingleAssetPortfolioAmount(\n poolName: PoolName,\n options: { suiClient: SuiClient; address: string; isLocked?: boolean },\n ignoreCache: boolean = false,\n) {\n let portfolioAmount: number = 0;\n const portfolioAmountCacheKey = `getPortfolioAmount:${poolName}-${options.address}}`;\n if (ignoreCache) {\n singleAssetPortfolioAmountCache.delete(portfolioAmountCacheKey);\n singleAssetPortfolioAmountPromiseCache.delete(portfolioAmountCacheKey);\n }\n const cachedResponse = singleAssetPortfolioAmountCache.get(\n portfolioAmountCacheKey,\n );\n\n if (cachedResponse) {\n return cachedResponse;\n }\n\n let cachedPromise = singleAssetPortfolioAmountPromiseCache.get(\n portfolioAmountCacheKey,\n );\n\n if (!cachedPromise) {\n cachedPromise = (async () => {\n const receipts = await getReceipts(poolName, options, ignoreCache);\n let totalXTokens = new Decimal(0);\n if (receipts) {\n receipts.forEach((receipt) => {\n const xTokens = receipt.content.fields.xTokenBalance;\n totalXTokens = totalXTokens.add(xTokens);\n });\n }\n if (totalXTokens.gt(0)) {\n const poolExchangeRate = await getPoolExchangeRate(\n poolName,\n options,\n ignoreCache,\n );\n if (poolExchangeRate) {\n let tokens = totalXTokens.mul(poolExchangeRate);\n tokens = tokens.div(\n Math.pow(10, 9 - coins[poolTokenMap[poolName].coinName].expo),\n );\n portfolioAmount = tokens.toNumber();\n } else {\n console.error(\n `Could not get poolExchangeRate for poolName: ${poolName}`,\n );\n }\n } else {\n portfolioAmount = 0;\n }\n\n singleAssetPortfolioAmountCache.set(\n portfolioAmountCacheKey,\n portfolioAmount,\n );\n singleAssetPortfolioAmountPromiseCache.delete(portfolioAmountCacheKey); // Remove the promise from cache\n return portfolioAmount;\n })().catch((error) => {\n singleAssetPortfolioAmountPromiseCache.delete(portfolioAmountCacheKey); // Remove the promise from cache\n throw error;\n });\n\n singleAssetPortfolioAmountPromiseCache.set(\n portfolioAmountCacheKey,\n cachedPromise,\n );\n }\n\n return cachedPromise;\n}\n\nexport async function getSingleAssetPortfolioAmountInUSD(\n poolName: PoolName,\n options: { suiClient: SuiClient; address: string; isLocked?: boolean },\n ignoreCache: boolean = false,\n): Promise<string | undefined> {\n const amounts = await getSingleAssetPortfolioAmount(\n poolName,\n options,\n ignoreCache,\n );\n if (amounts !== undefined) {\n const amount = new Decimal(amounts).div(\n new Decimal(Math.pow(10, coins[poolTokenMap[poolName].coinName].expo)),\n );\n const priceOfCoin = await getLatestPrice(\n `${poolTokenMap[poolName].coinName}/USD` as PythPriceIdPair,\n );\n if (priceOfCoin) {\n const amountInUSD = amount.mul(priceOfCoin);\n return amountInUSD.toString();\n }\n } else {\n console.error(\n `getPortfolioAmountInUSD is not implemented for poolName: ${poolName}`,\n );\n }\n return \"0\";\n}\n\nconst poolCache = new SimpleCache<PoolType | AlphaPoolType>();\nconst poolPromiseCache = new SimpleCache<\n Promise<PoolType | AlphaPoolType | undefined>\n>();\n\nexport async function getPool(\n poolName: string,\n options: {\n suiClient: SuiClient;\n },\n ignoreCache: boolean = false,\n): Promise<PoolType | AlphaPoolType | undefined> {\n const cacheKey = `pool_${poolInfo[poolName.toUpperCase()].poolId}`;\n\n if (ignoreCache) {\n poolCache.delete(cacheKey);\n poolPromiseCache.delete(cacheKey);\n }\n\n // Check if the pool is already in the cache\n const cachedPool = poolCache.get(cacheKey);\n if (cachedPool) {\n return cachedPool;\n }\n\n // Check if there is already a promise in the cache\n let poolPromise = poolPromiseCache.get(cacheKey);\n if (poolPromise) {\n return poolPromise;\n }\n\n // If not, create a new promise and cache it\n poolPromise = (async () => {\n try {\n const o = await options.suiClient.getObject({\n id: poolInfo[poolName].poolId,\n options: {\n showContent: true,\n },\n });\n\n const poolData =\n poolName === \"ALPHA\" ? (o.data as AlphaPoolType) : (o.data as PoolType);\n\n // Cache the pool object\n poolCache.set(cacheKey, poolData);\n return poolData;\n } catch (e) {\n console.error(`Error in getPool; poolName => ${poolName}`);\n return undefined;\n } finally {\n // Remove the promise from the cache after it resolves\n poolPromiseCache.delete(cacheKey);\n }\n })();\n\n // Cache the promise\n poolPromiseCache.set(cacheKey, poolPromise);\n return poolPromise;\n}\n","import BN from \"bn.js\";\nimport { ClmmPoolUtil, TickMath } from \"@cetusprotocol/cetus-sui-clmm-sdk\";\nimport { PaginatedObjectsResponse, SuiClient } from \"@mysten/sui/client\";\nimport Decimal from \"decimal.js\";\nimport { cetusPoolMap, poolInfo } from \"./common/maps\";\nimport {\n CetusInvestor,\n CetusPoolType,\n CoinAmounts,\n PoolName,\n Receipt,\n SimpleCache,\n} from \"./common/types\";\nimport { getPool } from \"./portfolioAmount\";\n\nconst receiptsCache = new SimpleCache<Receipt[]>();\nconst receiptsPromiseCache = new SimpleCache<Promise<Receipt[]>>();\nexport async function getReceipts(\n poolName: string,\n options: {\n address: string;\n suiClient: SuiClient;\n },\n ignoreCache: boolean = false,\n): Promise<Receipt[]> {\n const receiptsCacheKey = `getReceipts-${poolName}-${options.address}`;\n if (ignoreCache) {\n receiptsCache.delete(receiptsCacheKey);\n receiptsPromiseCache.delete(receiptsCacheKey);\n }\n const cachedResponse = receiptsCache.get(receiptsCacheKey);\n if (cachedResponse) {\n return cachedResponse;\n }\n\n const nfts: Receipt[] = [];\n\n let cachedPromise = receiptsPromiseCache.get(receiptsCacheKey);\n if (!cachedPromise) {\n cachedPromise = (async (): Promise<Receipt[]> => {\n // const first_package = conf[CONF_ENV].ALPHA_FIRST_PACKAGE_ID;\n let currentCursor: string | null | undefined = null;\n /* eslint-disable-next-line no-constant-condition */\n while (true) {\n const paginatedObjects: PaginatedObjectsResponse =\n await options.suiClient.getOwnedObjects({\n owner: options.address,\n cursor: currentCursor,\n filter: {\n // StructType: `${first_package}::${module}::Receipt`,\n StructType: poolInfo[poolName].receiptType,\n },\n options: {\n showType: true,\n showContent: true,\n },\n });\n // Traverse the current page data and push to coins array\n\n paginatedObjects.data.forEach((obj) => {\n const o = obj.data as Receipt;\n if (o) {\n if (poolInfo[poolName].receiptName === o.content.fields.name) {\n nfts.push(o);\n }\n }\n });\n\n // Check if there's a next page\n if (paginatedObjects.hasNextPage && paginatedObjects.nextCursor) {\n currentCursor = paginatedObjects.nextCursor;\n } else {\n // No more pages available\n break;\n }\n }\n receiptsCache.set(receiptsCacheKey, nfts);\n receiptsPromiseCache.delete(receiptsCacheKey);\n return nfts;\n })().catch((error) => {\n // TODO: Jugaad\n if (poolInfo[poolName].parentProtocolName === \"NAVI\") {\n return nfts;\n } else {\n receiptsPromiseCache.delete(receiptsCacheKey); // Remove the promise from cache\n throw error;\n }\n });\n receiptsPromiseCache.set(receiptsCacheKey, cachedPromise);\n }\n return cachedPromise;\n}\n\nconst poolExchangeRateCache = new SimpleCache<Decimal>();\n\nexport async function getPoolExchangeRate(\n poolName: PoolName,\n options: { suiClient: SuiClient },\n ignoreCache: boolean = false,\n): Promise<Decimal | undefined> {\n const poolExchangeRateCacheKey = `getPoolExchangeRate-${poolName}`;\n if (ignoreCache) {\n poolExchangeRateCache.delete(poolExchangeRateCacheKey);\n }\n const cachedResponse = poolExchangeRateCache.get(poolExchangeRateCacheKey);\n if (cachedResponse) {\n return cachedResponse;\n }\n\n let pool = undefined;\n try {\n if (poolName === \"ALPHA\") {\n pool = await getPool(\"ALPHA\", options);\n } else if (\n poolName === \"ALPHA-SUI\" ||\n poolName === \"USDT-USDC\" ||\n poolName === \"USDY-USDC\" ||\n poolName === \"HASUI-SUI\" ||\n poolName === \"USDC-SUI\" ||\n poolName === \"WETH-USDC\"\n ) {\n pool = await getPool(poolName, options);\n } else {\n pool = await getPool(poolName, options);\n }\n if (pool) {\n const xTokenSupply = new Decimal(pool.content.fields.xTokenSupply);\n let tokensInvested = new Decimal(pool.content.fields.tokensInvested);\n if (poolName == \"ALPHA\") {\n tokensInvested = new Decimal(pool.content.fields.alpha_bal);\n }\n\n // Check for division by zero\n if (xTokenSupply.eq(0)) {\n console.error(\"Division by zero error: tokensInvested is zero.\");\n return undefined;\n }\n const poolExchangeRate = tokensInvested.div(xTokenSupply);\n\n poolExchangeRateCache.set(poolExchangeRateCacheKey, poolExchangeRate);\n\n return poolExchangeRate;\n }\n } catch (e) {\n console.error(`getPoolExchangeRate failed for poolName: ${poolName}`);\n }\n\n return undefined;\n}\n\nexport async function getCoinAmountsFromLiquidity(\n poolName: PoolName,\n liquidity: number,\n options: { suiClient: SuiClient },\n): Promise<[number, number]> {\n const cetus_pool = await getCetusPool(poolName, options);\n const cetusInvestor = await getCetusInvestor(poolName, options);\n\n const upper_bound = 443636;\n let lower_tick = Number(cetusInvestor!.content.fields.lower_tick);\n let upper_tick = Number(cetusInvestor!.content.fields.upper_tick);\n\n if (lower_tick > upper_bound) {\n lower_tick = -~(lower_tick - 1);\n }\n if (upper_tick > upper_bound) {\n upper_tick = -~(upper_tick - 1);\n }\n\n if (cetus_pool) {\n const liquidityInt = Math.floor(liquidity);\n const coin_amounts: CoinAmounts = ClmmPoolUtil.getCoinAmountFromLiquidity(\n new BN(`${liquidityInt}`),\n new BN(cetus_pool.content.fields.current_sqrt_price),\n TickMath.tickIndexToSqrtPriceX64(lower_tick),\n TickMath.tickIndexToSqrtPriceX64(upper_tick),\n true,\n );\n\n return [coin_amounts.coinA.toNumber(), coin_amounts.coinB.toNumber()];\n } else {\n return [0, 0];\n }\n}\n\nconst cetusPoolCache = new SimpleCache<CetusPoolType>();\nconst cetusPoolPromiseCache = new SimpleCache<\n Promise<CetusPoolType | undefined>\n>();\n\nexport async function getCetusPool(\n poolName: string,\n options: {\n suiClient: SuiClient;\n },\n ignoreCache: boolean = false,\n): Promise<CetusPoolType | undefined> {\n const cacheKey = `pool_${cetusPoolMap[poolName.toUpperCase()]}`;\n if (ignoreCache) {\n cetusPoolCache.delete(cacheKey);\n cetusPoolPromiseCache.delete(cacheKey);\n }\n\n // Check if the pool is already in the cache\n const cachedPool = cetusPoolCache.get(cacheKey);\n if (cachedPool) {\n return cachedPool;\n }\n\n // Check if there is already a promise in the cache\n let cetusPoolPromise = cetusPoolPromiseCache.get(cacheKey);\n if (cetusPoolPromise) {\n return cetusPoolPromise;\n }\n\n // If not, create a new promise and cache it\n cetusPoolPromise = (async () => {\n try {\n const o = await options.suiClient.getObject({\n id: cetusPoolMap[poolName.toUpperCase()],\n options: {\n showContent: true,\n },\n });\n const cetusPool = o.data as CetusPoolType;\n\n // Cache the pool object\n cetusPoolCache.set(cacheKey, cetusPool);\n return cetusPool;\n } catch (e) {\n console.error(`getCetusPool failed for poolName: ${poolName}`);\n return undefined;\n } finally {\n // Remove the promise from the cache after it resolves\n cetusPoolPromiseCache.delete(cacheKey);\n }\n })();\n\n // Cache the promise\n cetusPoolPromiseCache.set(cacheKey, cetusPoolPromise);\n return cetusPoolPromise;\n}\n\nconst cetusInvestorCache = new SimpleCache<CetusInvestor>();\nconst cetusInvestorPromiseCache = new SimpleCache<\n Promise<CetusInvestor | undefined>\n>();\n\nexport async function getCetusInvestor(\n poolName: PoolName,\n options: {\n suiClient: SuiClient;\n },\n ignoreCache: boolean = false,\n): Promise<CetusInvestor | undefined> {\n const cacheKey = `investor_${poolInfo[poolName.toUpperCase()].investorId}`;\n if (ignoreCache) {\n cetusInvestorCache.delete(cacheKey);\n cetusInvestorPromiseCache.delete(cacheKey);\n }\n // Check if the investor is already in the cache\n const cachedInvestor = cetusInvestorCache.get(cacheKey);\n if (cachedInvestor) {\n return cachedInvestor;\n }\n\n // Check if there is already a promise in the cache\n let cetusInvestorPromise = cetusInvestorPromiseCache.get(cacheKey);\n if (cetusInvestorPromise) {\n return cetusInvestorPromise;\n }\n\n // If not, create a new promise and cache it\n cetusInvestorPromise = (async () => {\n try {\n const o = await options.suiClient.getObject({\n id: poolInfo[poolName.toUpperCase()].investorId,\n options: {\n showContent: true,\n },\n });\n const cetus_investor = o.data as CetusInvestor;\n\n // Cache the investor object\n cetusInvestorCache.set(cacheKey, cetus_investor);\n return cetus_investor;\n } catch (e) {\n console.error(`getCetusInvestor failed for pool: ${poolName}`);\n return undefined;\n } finally {\n // Remove the promise from the cache after it resolves\n cetusInvestorPromiseCache.delete(cacheKey);\n }\n })();\n\n // Cache the promise\n cetusInvestorPromiseCache.set(cacheKey, cetusInvestorPromise);\n return cetusInvestorPromise;\n}\n","import { poolInfo } from \"./common/maps\";\nimport { getFullnodeUrl, SuiClient } from \"@mysten/sui/client\";\nimport { getReceipts } from \"./functions\";\nimport { AlphaFiVault } from \"./common/types\";\nimport { getPool } from \"./portfolioAmount\";\n\nfunction extractCoinTypes(input: string): {\n coinTypeA: string | null;\n coinTypeB: string | null;\n} {\n let regex = /Pool<([^,>]+),\\s*([^>]+)>/;\n let match = input.match(regex);\n if (!match) {\n regex = /Pool<([^,>]+)>/;\n match = input.match(regex);\n if (!match) {\n return { coinTypeA: null, coinTypeB: null };\n }\n }\n const coinTypeA = match[1] || null;\n const coinTypeB = match[2] || null;\n return { coinTypeA, coinTypeB };\n}\n\nexport async function getVaults(\n address: string,\n): Promise<AlphaFiVault[] | undefined> {\n const vaultsArr = [];\n const suiClient = new SuiClient({\n url: getFullnodeUrl(\"mainnet\"),\n });\n if (address) {\n for (const pool of Object.keys(poolInfo)) {\n const receipt = await getReceipts(pool, { address, suiClient });\n const poolObject = await getPool(pool, { suiClient });\n if (receipt.length > 0 && poolObject) {\n const name = receipt[0].content.fields.name;\n const res: AlphaFiVault = {\n poolId: poolInfo[pool].poolId,\n poolName: null,\n receiptName: name,\n receiptType: receipt[0].content.type,\n coinTypeA: extractCoinTypes(poolObject.content.type).coinTypeA,\n coinTypeB: extractCoinTypes(poolObject.content.type).coinTypeB,\n };\n if (poolInfo[pool].parentProtocolName === \"NAVI\") {\n res.poolName = name\n .replace(/^AlphaFi-NAVI /, \"\")\n .replace(/ Receipt$/, \"\");\n\n res.poolName = \"NAVI-\" + res.poolName;\n } else if (poolInfo[pool].parentProtocolName === \"ALPHAFI\") {\n res.poolName = name.replace(/^AlphaFi /, \"\").replace(/ Receipt$/, \"\");\n } else {\n res.poolName = name.replace(/^AlphaFi /, \"\").replace(/ Receipt$/, \"\");\n }\n vaultsArr.push(res);\n }\n }\n return vaultsArr;\n }\n return undefined;\n}\n","import { getFullnodeUrl, SuiClient } from \"@mysten/sui/client\";\nimport {\n AlphaVaultBalance,\n DoubleAssetVaultBalance,\n PoolName,\n SingleAssetVaultBalance,\n} from \"./common/types\";\nimport {\n getAlphaPortfolioAmount,\n getAlphaPortfolioAmountInUSD,\n getPortfolioAmount,\n getPortfolioAmountInUSD,\n getSingleAssetPortfolioAmount,\n getSingleAssetPortfolioAmountInUSD,\n} from \"./portfolioAmount\";\n\nexport async function getAlphaVaultBalance(\n address: string,\n): Promise<AlphaVaultBalance | undefined> {\n const suiClient = new SuiClient({\n url: getFullnodeUrl(\"mainnet\"),\n });\n if (address) {\n const lockedPortfolioAmount = await getAlphaPortfolioAmount(\"ALPHA\", {\n suiClient,\n address,\n isLocked: true,\n });\n const lockedPortfolioAmountInUSD = await getAlphaPortfolioAmountInUSD(\n \"ALPHA\",\n { suiClient, address, isLocked: true },\n );\n const unlockedPortfolioAmount = await getAlphaPortfolioAmount(\"ALPHA\", {\n suiClient,\n address,\n isLocked: false,\n });\n const unlockedPortfolioAmountInUSD = await getAlphaPortfolioAmountInUSD(\n \"ALPHA\",\n { suiClient, address, isLocked: false },\n );\n const portfolioAmount = await getAlphaPortfolioAmount(\"ALPHA\", {\n suiClient,\n address,\n });\n const portfolioAmountInUSD = await getAlphaPortfolioAmountInUSD(\"ALPHA\", {\n suiClient,\n address,\n });\n if (\n lockedPortfolioAmount !== undefined &&\n lockedPortfolioAmountInUSD !== undefined &&\n unlockedPortfolioAmount !== undefined &&\n unlockedPortfolioAmountInUSD !== undefined &&\n portfolioAmount !== undefined &&\n portfolioAmountInUSD !== undefined\n ) {\n const res: AlphaVaultBalance = {\n lockedAlphaCoins: lockedPortfolioAmount,\n lockedAlphaCoinsInUSD: lockedPortfolioAmountInUSD,\n unlockedAlphaCoins: unlockedPortfolioAmount,\n unlockedAlphaCoinsInUSD: unlockedPortfolioAmountInUSD,\n totalAlphaCoins: portfolioAmount,\n totalAlphaCoinsInUSD: portfolioAmountInUSD,\n };\n return res;\n }\n }\n return undefined;\n}\n\nexport async function getDoubleAssetVaultBalance(\n address: string,\n poolName: PoolName,\n): Promise<DoubleAssetVaultBalance | undefined> {\n const suiClient = new SuiClient({\n url: getFullnodeUrl(\"mainnet\"),\n });\n if (address && poolName) {\n const portfolioAmount = await getPortfolioAmount(poolName as PoolName, {\n suiClient,\n address,\n });\n const portfolioAmountInUSD = await getPortfolioAmountInUSD(\n poolName as PoolName,\n { suiClient, address },\n );\n if (portfolioAmount !== undefined && portfolioAmountInUSD !== undefined) {\n const res: DoubleAssetVaultBalance = {\n coinA: portfolioAmount[0].toString(),\n coinB: portfolioAmount[1].toString(),\n valueInUSD: portfolioAmountInUSD,\n };\n return res;\n }\n }\n}\n\nexport async function getSingleAssetVaultBalance(\n address: string,\n poolName: PoolName,\n): Promise<SingleAssetVaultBalance | undefined> {\n const suiClient = new SuiClient({\n url: getFullnodeUrl(\"mainnet\"),\n });\n const portfolioAmount = await getSingleAssetPortfolioAmount(\n poolName as PoolName,\n {\n suiClient,\n address,\n },\n );\n const portfolioAmountInUSD = await getSingleAssetPortfolioAmountInUSD(\n poolName as PoolName,\n {\n suiClient,\n address,\n },\n );\n if (portfolioAmount !== undefined && portfolioAmountInUSD !== undefined) {\n const res: SingleAssetVaultBalance = {\n coin: portfolioAmount.toString(),\n valueInUSD: portfolioAmountInUSD,\n };\n return res;\n }\n return undefined;\n}\n"],"names":["root","factory","exports","module","define","amd","this","parallel","serial","serialOrdered","clean","key","jobs","state","Object","keys","forEach","bind","defer","callback","isAsync","err","result","fn","nextTick","setImmediate","process","setTimeout","async","abort","list","iterator","index","item","length","runJob","error","output","results","sortMethod","isNamedList","Array","isArray","initState","keyedList","size","sort","a","b","iterate","terminator","ascending","iteratorHandler","descending","assert","val","msg","Error","inherits","ctor","superCtor","super_","TempCtor","prototype","constructor","BN","number","base","endian","isBN","negative","words","red","_init","Buffer","wordSize","window","e","parseHex4Bits","string","c","charCodeAt","parseHexByte","lowerBound","r","parseBase","str","start","end","mul","len","Math","min","i","move","dest","src","num","max","left","right","cmp","_initNumber","_initArray","toString","replace","_parseHex","_parseBase","toArray","ceil","j","w","off","_strip","limbLen","limbPow","total","mod","word","imuln","_iaddn","pow","copy","_move","clone","_expand","_normSign","Symbol","for","inspect","zeros","groupSizes","groupBases","smallMulTo","self","out","lo","carry","k","ncarry","rword","maxJ","padding","groupSize","groupBase","isZero","modrn","idivn","toNumber","ret","toJSON","toBuffer","toArrayLike","ArrayType","byteLength","reqLength","res","allocUnsafe","allocate","_toArrayLikeLE","position","shift","_toArrayLikeBE","clz32","_countBits","t","_zeroBits","bitLength","hi","zeroBits","toTwos","width","abs","inotn","iaddn","fromTwos","testn","notn","ineg","isNeg","neg","iuor","ior","or","uor","iuand","iand","and","uand","iuxor","ixor","xor","uxor","bytesNeeded","bitsLeft","setn","bit","wbit","iadd","isub","add","sub","comb10MulTo","mid","o","a0","al0","ah0","a1","al1","ah1","a2","al2","ah2","a3","al3","ah3","a4","al4","ah4","a5","al5","ah5","a6","al6","ah6","a7","al7","ah7","a8","al8","ah8","a9","al9","ah9","b0","bl0","bh0","b1","bl1","bh1","b2","bl2","bh2","b3","bl3","bh3","b4","bl4","bh4","b5","bl5","bh5","b6","bl6","bh6","b7","bl7","bh7","b8","bl8","bh8","b9","bl9","bh9","w0","imul","w1","w2","w3","w4","w5","w6","w7","w8","w9","w10","w11","w12","w13","w14","w15","w16","w17","w18","bigMulTo","hncarry","jumboMulTo","FFTM","x","y","mulTo","makeRBT","N","l","revBin","rb","permute","rbt","rws","iws","rtws","itws","transform","s","rtwdf","cos","PI","itwdf","sin","p","rtwdf_","itwdf_","re","ie","ro","io","rx","guessLen13b","n","m","odd","conjugate","normalize13b","ws","round","convert13b","stub","ph","mulp","_","rwst","iwst","nrws","nrwst","niwst","rmws","mulf","isNegNum","muln","sqr","isqr","toBitArray","q","iushln","bits","carryMask","newCarry","ishln","iushrn","hint","extended","h","mask","maskedWords","ishrn","shln","ushln","shrn","ushrn","imaskn","maskn","isubn","addn","subn","iabs","_ishlnsubmul","_wordDiv","mode","bhi","diff","qj","div","divmod","positive","divn","umod","divRound","dm","half","r2","andln","acc","modn","egcd","A","B","C","D","g","isEven","yp","xp","im","isOdd","jm","gcd","_invmp","x1","x2","delta","cmpn","invm","bincn","ucmp","gtn","gt","gten","gte","ltn","lt","lten","lte","eqn","eq","Red","toRed","ctx","convertTo","_forceRed","fromRed","convertFrom","forceRed","redAdd","redIAdd","redSub","redISub","redShl","shl","redMul","_verify2","redIMul","redSqr","_verify1","redISqr","redSqrt","sqrt","redInvm","redNeg","redPow","primes","k256","p224","p192","p25519","MPrime","name","tmp","_tmp","K256","call","P224","P192","P25519","prime","_prime","Mont","imod","rinv","minv","ireduce","rlen","split","imulK","undefined","strip","input","outLen","prev","next","mod3","one","nOne","lpow","z","inv","wnd","current","currentLen","mont","u","util","Stream","DelayedStream","CombinedStream","writable","readable","dataSize","maxDataSize","pauseStreams","_released","_streams","_currentStream","_insideLoop","_pendingNext","create","options","combinedStream","option","isStreamLike","stream","isBuffer","append","newStream","Infinity","pauseStream","on","_checkDataSize","_handleErrors","pause","push","pipe","resume","_getNext","_realGetNext","_pipeNext","value","write","_emitError","data","emit","_reset","destroy","_updateDataSize","message","formatArgs","args","useColors","namespace","humanize","color","splice","lastC","match","save","namespaces","storage","setItem","removeItem","load","getItem","env","DEBUG","type","__nwjs","navigator","userAgent","toLowerCase","document","documentElement","style","WebkitAppearance","console","firebug","exception","table","parseInt","localStorage","localstorage","warned","warn","colors","log","debug","formatters","v","JSON","stringify","createDebug","prevTime","namespacesCache","enabledCache","enableOverride","enabled","curr","Number","Date","ms","coerce","unshift","format","formatter","apply","selectColor","extend","defineProperty","enumerable","configurable","get","set","init","delimiter","newDebug","toNamespace","regexp","substring","default","stack","disable","names","map","skips","join","enable","RegExp","slice","test","hash","browser","tty","inspectOpts","stderr","formatWithOptions","colorCode","prefix","hideDate","toISOString","Boolean","isatty","fd","deprecate","supportsColor","level","filter","reduce","obj","prop","toUpperCase","trim","O","source","_maxDataSizeExceeded","_bufferedEvents","delayedStream","realEmit","_handleEmit","arguments","setEncoding","release","_checkIfMaxDataSizeExceeded","url","URL","http","https","Writable","useNativeURL","code","preservedUrlFields","events","eventHandlers","event","arg1","arg2","arg3","_redirectable","InvalidUrlError","createErrorType","TypeError","RedirectionError","TooManyRedirectsError","MaxBodyLengthExceededError","WriteAfterEndError","noop","RedirectableRequest","responseCallback","_sanitizeOptions","_options","_ended","_ending","_redirectCount","_redirects","_requestBodyLength","_requestBodyBuffers","_onNativeResponse","response","_processResponse","cause","_performRequest","wrap","protocols","maxRedirects","maxBodyLength","nativeProtocols","scheme","protocol","nativeProtocol","wrappedProtocol","defineProperties","request","spreadUrlObject","isString","parseUrl","validateUrl","isFunction","assign","host","hostname","equal","wrappedRequest","parsed","parse","href","urlObject","target","spread","startsWith","port","path","search","pathname","removeMatchingHeaders","regex","headers","lastValue","header","String","baseClass","CustomError","properties","captureStackTrace","destroyRequest","removeListener","_currentRequest","encoding","currentRequest","setHeader","removeHeader","msecs","destroyOnTimeout","socket","addListener","startTimer","_timeout","clearTimeout","clearTimer","once","method","property","searchPos","indexOf","agents","agent","_currentUrl","_isRedirect","buffers","writeNext","buffer","finished","statusCode","trackRedirects","requestHeaders","location","followRedirects","responseUrl","redirects","beforeRedirect","Host","req","getHeader","relative","currentHostHeader","currentUrlParts","currentHost","currentUrl","redirectUrl","resolve","subdomain","domain","dot","endsWith","isSubdomain","responseDetails","requestDetails","fs","mime","asynckit","populate","FormData","_overheadLength","_valueLength","_valuesToMeasure","LINE_BREAK","DEFAULT_CONTENT_TYPE","field","filename","_error","_multiPartHeader","footer","_multiPartFooter","_trackLength","valueLength","knownLength","hasOwnProperty","_lengthRetriever","stat","fileSize","contentDisposition","_getContentDisposition","contentType","_getContentType","contents","concat","getBoundary","filepath","normalize","basename","client","_httpMessage","lookup","_lastBoundary","getHeaders","userHeaders","formHeaders","setBoundary","boundary","_boundary","_generateBoundary","getBuffer","dataBuffer","alloc","from","floor","random","getLengthSync","hasKnownLength","getLength","cb","values","submit","params","defaults","onResponse","responce","dst","flag","argv","pos","terminatorPos","extensions","types","preference","db","extname","EXTRACT_TYPE_REGEXP","TEXT_TYPE_REGEXP","charset","exec","charsets","extension","exts","substr","to","d","plural","msAbs","isPlural","parseFloat","isFinite","long","fmtShort","DEFAULT_PORTS","ftp","gopher","wss","stringEndsWith","getEnv","parsedUrl","proto","NO_PROXY","every","proxy","parsedProxy","parsedProxyHostname","parsedProxyPort","charAt","shouldProxy","os","hasFlag","forceColor","getSupportLevel","isTTY","platform","osRelease","versions","node","some","sign","CI_NAME","TEAMCITY_VERSION","COLORTERM","version","TERM_PROGRAM_VERSION","TERM_PROGRAM","TERM","hasBasic","has256","has16m","translateLevel","FORCE_COLOR","stdout","require","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","id","loaded","__webpack_modules__","getter","__esModule","definition","toStringTag","nmd","paths","children","CONF_ENV","conf","testing","MS_IN_A_DAY","HALF_MUL","HOP_API_KEY","HOP_MAX_SLIPPAGE_BPS","DEFAULT_HOP_SLIPPAGE","DEFAULT_CETUS_SLIPPAGE","DEFAULT_SWAP_SLIPPAGE","SUI_NETWORK","CLOCK_PACKAGE_ID","PRICE_ORACLE","ALPHA_XUSDC_COIN_TYPE","ALPHA_XUSDT_COIN_TYPE","ALPHA_FIRST_PACKAGE_ID","ALPHA_LATEST_PACKAGE_ID","ALPHA_MODULE_PACKAGE_IDS","ALPHA_DISTRIBUTOR","VERSION","ALPHA_NAVI_BORROW_FACTOR","ALPHA_TOKEN_REWARD_SHARE","ALPHA_PROTOCOL_INFO_OBJECT_ID","ALPHA_COIN_TYPE","SUI_COIN_TYPE","USDT_COIN_TYPE","USDC_COIN_TYPE","VSUI_COIN_TYPE","CETUS_COIN_TYPE","SCALLOP_COIN_TYPE","NAVX_COIN_TYPE","USDY_COIN_TYPE","HASUI_COIN_TYPE","ALPHA_XSUI_COIN_TYPE","WBTC_COIN_TYPE","WETH_COIN_TYPE","BUCK_COIN_TYPE","ALPHA_POOL","USDC_USDT_POOL","ALPHA_SUI_POOL","HASUI_SUI_POOL","USDY_USDC_POOL","USDC_WBTC_POOL","ALPHA_USDC_POOL","ALPHA_USDT_POOL","USDC_SUI_POOL","WETH_USDC_POOL","NAVX_SUI_POOL","ALPHAFI_NAVI_SUI_POOL","ALPHAFI_NAVI_VSUI_POOL","ALPHAFI_NAVI_WETH_POOL","ALPHAFI_NAVI_USDT_POOL","ALPHAFI_NAVI_USDC_POOL","ALPHAFI_NAVI_HASUI_POOL","USDC_SUI_CETUS_POOL_ID","CETUS_SUI_CETUS_POOL_ID","USDT_USDC_CETUS_POOL_ID","ALPHA_SUI_CETUS_POOL_ID","USDY_USDC_CETUS_POOL_ID","HASUI_SUI_CETUS_POOL_ID","USDC_WBTC_CETUS_POOL_ID","WETH_USDC_CETUS_POOL_ID","VSUI_SUI_CETUS_POOL_ID","NAVX_SUI_CETUS_POOL_ID","USDC_CETUS_CETUS_POOL_ID","CETUS_REWARDER_GLOBAL_VAULT_ID","CETUS_GLOBAL_CONFIG_ID","ALPHA_CETUS_INVESTOR","USDT_USDC_CETUS_INVESTOR","ALPHA_SUI_CETUS_INVESTOR","HASUI_SUI_CETUS_INVESTOR","USDY_USDC_CETUS_INVESTOR","USDC_WBTC_CETUS_INVESTOR","ALPHA_USDT_CETUS_INVESTOR","USDC_SUI_CETUS_INVESTOR","ALPHA_USDC_CETUS_INVESTOR","WETH_USDC_CETUS_INVESTOR","NAVX_SUI_CETUS_INVESTOR","NAVI_SUI_INVESTOR","NAVI_VSUI_INVESTOR","NAVI_WETH_INVESTOR","NAVI_USDT_INVESTOR","NAVI_USDC_INVESTOR","NAVI_HASUI_INVESTOR","ALPHA_POOL_RECEIPT","ALPHA_SUI_POOL_RECEIPT","USDT_USDC_POOL_RECEIPT","USDY_USDC_POOL_RECEIPT","HASUI_SUI_POOL_RECEIPT","USDC_WBTC_POOL_RECEIPT","USDC_SUI_POOL_RECEIPT","WETH_USDC_POOL_RECEIPT","NAVI_SUI_POOL_RECEIPT","NAVI_VSUI_POOL_RECEIPT","NAVI_WETH_POOL_RECEIPT","NAVI_USDT_POOL_RECEIPT","NAVI_USDC_POOL_RECEIPT","NAVI_HASUI_POOL_RECEIPT","NAVX_SUI_POOL_RECEIPT","ALPHA_POOL_RECEIPT_NAME","ALPHA_SUI_POOL_RECEIPT_NAME","USDT_USDC_POOL_RECEIPT_NAME","USDY_USDC_POOL_RECEIPT_NAME","HASUI_SUI_POOL_RECEIPT_NAME","USDC_SUI_POOL_RECEIPT_NAME","USDC_WBTC_POOL_RECEIPT_NAME","WETH_USDC_POOL_RECEIPT_NAME","NAVI_SUI_POOL_RECEIPT_NAME","NAVI_VSUI_POOL_RECEIPT_NAME","NAVI_WETH_POOL_RECEIPT_NAME","NAVI_USDT_POOL_RECEIPT_NAME","NAVI_USDC_POOL_RECEIPT_NAME","NAVI_HASUI_POOL_RECEIPT_NAME","NAVX_SUI_POOL_RECEIPT_NAME","AIRDROP_WALLET_ADDRESS","NAVI_STORAGE","NAVI_SUI_POOL","NAVI_VSUI_BORROW_POOL","NAVI_VSUI_POOL","NAVI_WETH_POOL","NAVI_USDC_POOL","NAVI_HASUI_POOL","NAVI_USDC_BORROW_POOL","NAVI_USDT_POOL","NAVI_USDT_BORROW_POOL","NAVI_INCENTIVE_V1","NAVI_INCENTIVE_V2","NAVI_VSUI_FUNDS_POOL","NAVI_NAVX_FUNDS_POOL","SCALLOP_VERSION","SCALLOP_MARKET","SCALLOP_SUI_SPOOL","SCALLOP_SUI_REWARDS_POOL","SCALLOP_USDC_SPOOL","SCALLOP_USDC_REWARDS_POOL","SCALLOP_USDT_SPOOL","SCALLOP_USDT_REWARDS_POOL","HOP_QUERY_WALLET","HOP_FEE_BPS","HOP_NETWORK","production","ALPHA_PACKAGE_IDS","BUCK_USDC_POOL","CETUS_SUI_POOL","WETH_SUI_CETUS_POOL_ID","WBTC_SUI_CETUS_POOL_ID","BUCK_USDC_CETUS_POOL_ID","BUCK_USDC_CETUS_INVESTOR","CETUS_SUI_CETUS_INVESTOR","BUCK_USDC_POOL_RECEIPT","CETUS_SUI_POOL_RECEIPT","BUCK_USDC_POOL_RECEIPT_NAME","CETUS_SUI_POOL_RECEIPT_NAME","cetusPoolMap","poolPairMap","pool1","pool2","poolInfo","parentProtocolName","parentPoolId","poolId","investorId","receiptName","receiptType","ALPHA","base64String","Uint8Array","atob","char","CHUNK_SIZE","toB64","bytes","btoa","fromCharCode","chunk","ALPHABET","BASE_MAP","xc","BASE","LEADER","FACTOR","iFACTOR","decodeUnsafe","psz","zeroes","b256","it3","it4","vch","encode","ArrayBuffer","isView","byteOffset","pbegin","pend","b58","it1","it2","repeat","decode","toB58","hexStr","normalized","padded","intArr","byte","toHEX","padStart","ulebEncode","arr","BcsReader","bytePosition","dataView","DataView","read8","getUint8","read16","getUint16","read32","getUint32","read64","value1","BigInt","read128","read256","readBytes","readULEB","ulebDecode","readVec","BcsWriter","initialSize","maxSize","allocateSize","ensureSizeOrGrow","requiredSize","nextSize","nextBuffer","write8","setUint8","write16","setUint16","write32","setUint32","write64","toLittleEndian","el","write128","write256","writeULEB","writeVec","vector","toBytes","encodeStr","bigint","_write","_serialize","_schema","_bytes","__typeError","__accessCheck","member","has","__privateGet","__privateAdd","WeakSet","__privateSet","setter","WeakMap","BcsType","_BcsType","read","serializedSize","serialize","options2","writer","validate","SerializedBcs","reader","fromHex","hex","fromBase58","b64","fromBase64","SERIALIZED_BCS_BRAND","isSerializedBcs","schema","toHex","toBase64","toBase58","fixedSizeBcsType","uIntBcsType","readMethod","writeMethod","maxValue","bigUIntBcsType","store","store2","store3","store4","_stringify","getPrototypeOf","_addIssue","context","label","dataset","config2","other","expected","expects","received","issue","kind","requirement","issues","lang","abortEarly","abortPipeEarly","isSchema","reference","getSchemaMessage","getGlobalMessage","typed","_isValidObjectKey","object2","hasOwn","ValiError","super","check","_run","integer","isInteger","operation","getDefault","is","array","value2","itemDataset","pathItem","origin","lazy","literal","literal_","nullable","wrapped","nullish","isNaN","object","entries","valueDataset","optional","record","entryKey","entryValue","keyDataset","tuple","items","_subIssues","datasets","union","Set","validDataset","typedDatasets","untypedDatasets","optionDataset","unknown","getGlobalConfig","pipe2","isValidTransactionDigest","SUI_ADDRESS_LENGTH","isValidSuiAddress","isHex","getHexByteLength","isValidSuiObjectId","normalizeSuiAddress","forceAdd0x","address","normalizeSuiObjectId","safeEnum","$kind","SuiAddress","ObjectID","BCSBytes","JsonU64","ObjectRef","objectId","digest","Argument","GasCoin","Input","Result","NestedResult","GasData","budget","price","owner","payment","OpenMoveTypeSignatureBody","typeParams","datatype","package","typeParameters","typeParameter","OpenMoveTypeSignature","ref","body","ProgrammableMoveCall","function","typeArguments","_argumentTypes","$Intent","inputs","Command","MoveCall","TransferObjects","objects","SplitCoins","coin","amounts","MergeCoins","destination","sources","Publish","modules","dependencies","MakeMoveVec","elements","Upgrade","ticket","ObjectArg","ImmOrOwnedObject","SharedObject","initialSharedVersion","mutable","Receiving","CallArg","Pure","UnresolvedPure","UnresolvedObject","NormalizedCallArg","TransactionExpiration","None","Epoch","TransactionData","sender","expiration","gasData","commands","Commands","pkg","dep","packageId","Intent","fromEntries","VECTOR_REGEX","STRUCT_REGEX","TypeTagSerializer","parseFromStr","normalizeAddress","bool","u8","u16","u32","u64","u128","u256","signer","vectorMatch","structMatch","struct","parseStructTypeArgs","genericSeparators","tok","nestedAngleBrackets","tagToString","tag","ImmOrOwned","Shared","TransactionInput","StringEncodedBigint","includes","TypeTag","GasConfig","TransactionArgument","resultIndex","MoveCallTransaction","TransferObjectsTransaction","SplitCoinsTransaction","MergeCoinsTransaction","MakeMoveVecTransaction","Some","TransactionType","serializeV1TransactionData","transactionData","gasConfig","transactions","command","arg","convertTransactionArgument","parseV1TransactionArgument","enumUnion","SerializedTransactionDataV2","Inputs","SharedObjectRef","ReceivingRef","uleb128","dynamicSizeBcsType","fromBytes","stringLikeBcsType","TextEncoder","TextDecoder","fixedArray","enum","fields","canonicalOrder","name2","name3","optionName","optionType","variant","keyType","valueType","Map","lazyType","getType","lazyBcsType","Address","ObjectDigest","SuiObjectRef","InnerTypeTag","typeTag","ProgrammableTransaction","TransactionKind","ChangeEpoch","Genesis","ConsensusCommitPrologue","TransactionDataV1","V1","IntentScope","TransactionEffects","CheckpointSummary","PersonalMessage","IntentVersion","V0","AppId","Sui","scope","appId","IntentMessage","T","intent","CompressedSignature","ED25519","Secp256k1","Secp256r1","ZkLogin","PublicKey","MultiSigPkMap","pubKey","weight","MultiSigPublicKey","pk_map","threshold","MultiSig","sigs","bitmap","multisig_pk","SenderSignedTransaction","intentMessage","txSignatures","SenderSignedData","PackageUpgradeError","UnableToFetchPackage","NotAPackage","IncompatibleUpgrade","DigestDoesNotMatch","UnknownUpgradePolicy","policy","PackageIDDoesNotMatch","ticketId","ModuleId","MoveLocation","instruction","functionName","CommandArgumentError","TypeMismatch","InvalidBCSBytes","InvalidUsageOfPureArg","InvalidArgumentToPrivateEntryFunction","IndexOutOfBounds","idx","SecondaryIndexOutOfBounds","resultIdx","secondaryIdx","InvalidResultArity","InvalidGasCoinUsage","InvalidValueUsage","InvalidObjectByValue","InvalidObjectByMutRef","SharedObjectOperationNotAllowed","TypeArgumentError","TypeNotFound","ConstraintNotSatisfied","ExecutionFailureStatus","InsufficientGas","InvalidGasObject","InvariantViolation","FeatureNotYetSupported","MoveObjectTooBig","objectSize","maxObjectSize","MovePackageTooBig","CircularObjectOwnership","InsufficientCoinBalance","CoinBalanceOverflow","PublishErrorNonZeroAddress","SuiMoveVerificationError","MovePrimitiveRuntimeError","MoveAbort","VMVerificationOrDeserializationError","VMInvariantViolation","FunctionNotFound","ArityMismatch","TypeArityMismatch","NonEntryFunctionInvoked","argIdx","argumentIdx","UnusedValueWithoutDrop","InvalidPublicFunctionReturnType","InvalidTransferObject","EffectsTooLarge","currentSize","PublishUpgradeMissingDependency","PublishUpgradeDependencyDowngrade","upgradeError","WrittenObjectsTooLarge","CertificateDenied","SuiMoveVerificationTimedout","InputObjectDeleted","ExecutionStatus","Success","Failed","GasCostSummary","computationCost","storageCost","storageRebate","nonRefundableStorageFee","Owner","AddressOwner","ObjectOwner","Immutable","TransactionEffectsV1","status","executedEpoch","gasUsed","modifiedAtVersions","sharedObjects","transactionDigest","created","mutated","unwrapped","deleted","unwrappedThenDeleted","gasObject","eventsDigest","VersionDigest","ObjectIn","NotExist","Exist","ObjectOut","ObjectWrite","PackageWrite","IDOperation","Created","Deleted","EffectsObjectChange","inputState","outputState","idOperation","UnchangedSharedKind","ReadOnlyRoot","MutateDeleted","ReadDeleted","TransactionEffectsV2","gasObjectIndex","lamportVersion","changedObjects","unchangedSharedObjects","auxDataDigest","V2","suiBcs","U8","U16","U32","U64","U128","U256","ULEB128","Bool","StructTag","MOVE_STDLIB_ADDRESS","SUI_FRAMEWORK_ADDRESS","SUI_TYPE_ARG","OBJECT_MODULE_NAME","ID_STRUCT_NAME","STD_ASCII_MODULE_NAME","STD_ASCII_STRUCT_NAME","STD_UTF8_MODULE_NAME","STD_UTF8_STRUCT_NAME","STD_OPTION_MODULE_NAME","STD_OPTION_STRUCT_NAME","getPureBcsSchema","typeSignature","normalizedTypeToMoveTypeSignatureBody","Vector","Struct","TypeParameter","resolveTransactionData","moveCallsToResolve","moveFunctionsToResolve","amount","normalizeRawArgument","moveFunctionParameters","getClient","Promise","all","functionId","def","getNormalizedMoveFunction","parameters","param","Reference","MutableReference","normalizedTypeToMoveTypeSignature","moveCall","isTxContext","at","fnName","inputValue","unresolvedObject","normalizeInputs","objectsToResolve","dedupedIds","objectChunks","MAX_OBJECTS_PER_FETCH","resolved","chunk2","multiGetObjects","ids","showOwner","flat","responsesById","invalidObjects","initial_shared_version","objectsById","updated","isUsedAsMutable","isUsedAsReceiving","resolveObjectReferences","onlyTransactionKind","getReferenceGasPrice","setGasPrice","dryRunResult","dryRunTransactionBlock","transactionBlock","build","overrides","effects","safeOverhead","baseComputationCostWithOverhead","gasBudget","setGasBudget","paymentCoins","getCoins","coinType","find","coinObjectId","setGasPayment","usedAsMutable","getInputUses","tx","argIndex","usedAsReceiving","isReceivingType","createPure","makePure","pure","typeOrSerializedValue","schemaFromName","generic","inner","isSafeInteger","lengths","exists","instance","checkFinished","destroyed","Uint32Array","isLE","byteSwap","byteSwapIfBE","byteSwap32","utf8ToBytes","Hash","_cloneInto","wrapConstructorWithOpts","hashCons","hashC","opts","update","outputLen","blockLen","SIGMA","BLAKE","keyLen","saltLen","persLen","salt","personalization","buffer32","offset","buf","compress","take","dataOffset","subarray","data32","pos32","digestInto","fill","out32","dkLen","U32_MASK64","_32n","fromBig","le","lst","Ah","Al","toBig","shrSH","_l","shrSL","rotrSH","rotrSL","rotrBH","rotrBL","rotr32H","_h","rotr32L","rotlSH","rotlSL","rotlBH","rotlBL","Bh","Bl","add3L","Cl","add3H","low","Ch","add4L","Dl","add4H","Dh","add5H","Eh","add5L","El","B2B_IV","BBUF","G1b","Xl","Xh","ll","G2b","BLAKE2b","v0l","v0h","v1l","v1h","v2l","v2h","v3l","v3h","v4l","v4h","v5l","v5h","v6l","v6h","v7l","v7h","keyLength","pers","isLast","blake2b","prepareSuiAddress","TransactionDataBuilder","fromKindBytes","programmableTx","restore","rawData","transaction","transactionDataFromV1","getDigestFromBytes","typeTagBytes","dataWithTag","hashTypedData","maxSizeBytes","addInput","mapArguments","replaceCommand","replacement","sizeDiff","getDigest","snapshot","getIdFromCallArg","_serializationPlugins","_buildPlugins","_intentResolvers","_data","_Transaction_instances","normalizeTransactionArgument_fn","resolveArgument_fn","prepareBuild_fn","runPlugins_fn","__privateMethod","TRANSACTION_BRAND","isTransaction","plugins","createNext","plugin","calledNext","nextResolved","Transaction","_Transaction","fromKind","serialized","newTransaction","getData","addSerializationPlugin","step","addBuildPlugin","addIntentResolver","resolver","setSender","setSenderIfNotSet","setExpiration","setGasBudgetIfNotSet","setGasOwner","payments","blockData","gas","inserted","objectRef","receivingRef","sharedObjectRef","nestedResults","nestedResultFor","Proxy","Reflect","createTransactionResult","splitCoins","mergeCoins","publish","upgrade","transferObjects","makeMoveVec","prepareForSerialization","_key","buildOptions","signTransaction","intents","steps","supportedIntents","SUI_NS_NAME_REGEX","SUI_NS_DOMAIN_REGEX","CODE_TO_ERROR_TYPE","SuiHTTPTransportError","JsonRpcError","SuiHTTPStatusError","statusText","_requestId","_disconnects","_webSocket","_connectionPromise","_subscriptions","_pendingRequests","_WebsocketClient_instances","setupWebSocket_fn","reconnect_fn","DEFAULT_CLIENT_OPTIONS","WebSocketConstructor","WebSocket","callTimeout","reconnectTimeout","maxReconnects","WebsocketClient","endpoint","httpUrl","getWebsocketUrl","makeRequest","webSocket","reject","timeout","delete","send","jsonrpc","then","subscribe","subscription","RpcSubscription","unsubscribe","close","addEventListener","json","resolve2","subscriptionId","onMessage","allSettled","subscribed","newSubscriptionId","_websocketClient","_SuiHTTPTransport_instances","getWebsocketClient_fn","SuiHTTPTransport","fetch","fetchFn","rpc","ok","websocket","SUI_CLIENT_BRAND","SuiClient","transport","getRpcApiVersion","info","cursor","limit","getAllCoins","getBalance","getAllBalances","getCoinMetadata","getTotalSupply","getMoveFunctionArgTypes","getNormalizedMoveModulesByPackage","getNormalizedMoveModule","getNormalizedMoveStruct","getOwnedObjects","getObject","tryGetPastObject","queryTransactionBlocks","order","getTransactionBlock","multiGetTransactionBlocks","digests","executeTransactionBlock","signature","requestType","signAndExecuteTransaction","transactionBytes","toSuiAddress","getTotalTransactionBlocks","resp","getStakes","getStakesByIds","stakedSuiIds","getLatestSuiSystemState","queryEvents","query","subscribeEvent","subscribeTransaction","devInspectTransactionBlock","devInspectTxBytes","gasPrice","epoch","getDynamicFields","parentId","getDynamicFieldObject","getLatestCheckpointSequenceNumber","getCheckpoint","getCheckpoints","descendingOrder","getCommitteeInfo","getNetworkMetrics","getAddressMetrics","getEpochMetrics","getAllEpochAddressMetrics","getEpochs","getMoveCallMetrics","getCurrentEpoch","getValidatorsApy","getChainIdentifier","checkpoint","resolveNameServiceAddress","resolveNameServiceNames","nextCursor","hasNextPage","lowerCase","parts","labels","normalizeSuiNSName","getProtocolConfig","waitForTransaction","signal","pollInterval","timeoutSignal","AbortSignal","timeoutPromise","reason","catch","aborted","throwIfAborted","race","getFullnodeUrl","network","inexact","quadrant","EXP_LIMIT","MAX_DIGITS","NUMERALS","LN10","DEFAULTS","precision","rounding","modulo","toExpNeg","toExpPos","minE","maxE","crypto","external","decimalError","invalidArgument","precisionLimitExceeded","cryptoUnavailable","mathfloor","mathpow","isBinary","isOctal","isDecimal","LOG_BASE","LN10_PRECISION","PI_PRECISION","P","digitsToString","indexOfLastWord","getZeroString","checkInt32","checkRoundingDigits","rm","repeating","di","rd","convertBase","baseIn","baseOut","arrL","strL","reverse","absoluteValue","finalise","clampedTo","clamp","Ctor","NaN","comparedTo","xdL","ydL","xd","yd","xs","ys","cosine","pr","sd","tinyPow","taylorSeries","times","cos2x","minus","plus","toLessThanHalfPi","cubeRoot","cbrt","rep","t3","t3plusx","toExponential","divide","decimalPlaces","dp","dividedBy","dividedToIntegerBy","divToInt","equals","greaterThan","greaterThanOrEqualTo","hyperbolicCosine","cosh","cosh2_x","d8","hyperbolicSine","sinh","sinh2_x","d5","d16","d20","hyperbolicTangent","tanh","inverseCosine","acos","halfPi","getPi","asin","inverseHyperbolicCosine","acosh","ln","inverseHyperbolicSine","asinh","inverseHyperbolicTangent","atanh","wpr","xsd","inverseSine","atan","inverseTangent","px","isInt","isNegative","isPositive","isPos","lessThan","lessThanOrEqualTo","logarithm","isBase10","denominator","inf","naturalLogarithm","getLn10","xe","xLTy","pop","getBase10Exponent","naturalExponential","exp","negated","getPrecision","sine","sin2_x","squareRoot","tangent","tan","rL","toBinary","toStringBinary","toDecimalPlaces","toDP","finiteToString","toFixed","toFraction","maxD","d0","d1","d2","n0","n1","toHexadecimal","toNearest","toOctal","toPower","yn","intPow","toPrecision","toSignificantDigits","toSD","truncated","trunc","valueOf","multiplyInteger","temp","compare","aL","bL","subtract","logBase","more","prod","prodL","qd","rem","remL","rem0","xi","xL","yd0","yL","yz","isTruncated","digits","roundUp","xdi","isExp","nonFiniteToString","zs","truncate","maxOrMin","ltgt","guard","sum","c0","numerator","parseDecimal","parseOther","divisor","isFloat","Decimal","isHyperbolic","pi","atan2","useDefaults","ps","getRandomValues","randomBytes","hypot","isDecimalInstance","log2","log10","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","__generator","thisArg","f","sent","trys","ops","verb","op","done","CompareResult","SuppressedError","Comparator","compareFunction","defaultCompareFunction","EQUAL","LESS","GREATER","lessThanOrEqual","greaterThanOrEqual","compareOriginal","SinglyNode","DoublyNode","setPrototypeOf","__proto__","__","ar","invariant","List","_this","_i","_head","_tail","_length","isLoop","loopLength","p1","p2","getNode","currentNode","count","_a","first","iter","isEmpty","SinglyList","_super","prepend","remove","prevNode","removeHead","removeTail","tailNode","nextNode","arrValue","DoublyList","CircleSinglyList","cyclization","breakCircle","AbstractCircleSinglyList","circleIterator","mapToNormalListFn","condition","CircleDoublyList","AbstractCircleDoublyList","Queue","queue","head","enqueue","dequeue","removedHead","tail","removedTail","popBottom","GraphEdge","startVertex","endVertex","getKey","GraphVertex","andString","isExist","edges","addEdge","edge","deleteEdge","getNeighbors","getEdges","getDegree","hasEdge","requiredEdge","hasNeighbor","vertex","findEdge","deleteAllEdges","buildDualStack","mainStack","neighborStack","visited","neighbors","cutdownDualStack","droppedMain","Graph","isDirected","vertices","addVertex","newVertex","getVertexByKey","vertexKey","getAllVertices","getAllEdges","disableErrorWhenExist","clonedEdge","getWeight","graphEdge","getVerticesIndices","verticesIndices","getAdjacencyMatrix","adjacencyMatrix","vertexIndex","neighbor","neighborIndex","bfs","nodeQueue","dfs","nodeStack","findAllPath","curNeighbors","nextVertex","peek","_hasBuffer","_TD","b64chs","b64tab","tab","b64re","_fromCC","_U8Afrom","it","_tidyB64","re_btou","cb_btou","cccc","_atob","asc","u24","r1","bin","_toUint8Array","_decode","gBase64","m0","randomUUID","rnds8Pool","poolPtr","rng","byteToHex","rnds","unsafeStringify","kindOf","cache","thing","kindOfTest","typeOfTest","isUndefined","isArrayBuffer","isNumber","isObject","isPlainObject","isDate","isFile","isBlob","isFileList","isURLSearchParams","isReadableStream","isRequest","isResponse","isHeaders","allOwnKeys","getOwnPropertyNames","findKey","_global","globalThis","global","isContextDefined","isTypedArray","TypedArray","isHTMLForm","isRegExp","reduceDescriptors","reducer","descriptors","getOwnPropertyDescriptors","reducedDescriptors","descriptor","DIGIT","ALPHA_DIGIT","isAsyncFn","isFormData","isArrayBufferView","isBoolean","isStream","merge","caseless","assignValue","targetKey","stripBOM","content","superConstructor","props","toFlatObject","sourceObj","destObj","propFilter","merged","searchString","lastIndex","forEachEntry","pair","matchAll","regExp","matches","hasOwnProp","freezeMethods","toObjectSet","arrayOrString","toCamelCase","toFiniteNumber","defaultValue","generateString","alphabet","isSpecCompliantForm","toJSONObject","visit","reducedValue","isThenable","AxiosError","utils","description","fileName","lineNumber","columnNumber","customProps","axiosError","isVisitable","removeBrackets","renderKey","dots","token","predicates","formData","metaTokens","indexes","visitor","defaultVisitor","useBlob","Blob","convertValue","isFlatArray","exposedHelpers","charMap","encodeURIComponent","AxiosURLSearchParams","_pairs","encoder","_encode","buildURL","serializeFn","serializedParams","hashmarkIndex","handlers","use","fulfilled","rejected","synchronous","runWhen","eject","clear","silentJSONParsing","forcedJSONParsing","clarifyTimeoutError","isNode","classes","URLSearchParams","hasBrowserEnv","hasStandardBrowserEnv","product","hasStandardBrowserWebWorkerEnv","WorkerGlobalScope","importScripts","buildPath","isNumericKey","arrayToObject","parsePropPath","transitional","adapter","transformRequest","getContentType","hasJSONContentType","isObjectPayload","setContentType","helpers","toURLEncodedForm","formSerializer","_FormData","rawValue","stringifySafely","transformResponse","JSONRequested","responseType","strictJSONParsing","ERR_BAD_RESPONSE","xsrfCookieName","xsrfHeaderName","maxContentLength","validateStatus","common","ignoreDuplicateOf","$internals","normalizeHeader","normalizeValue","matchHeaderValue","isHeaderNameFilter","AxiosHeaders","valueOrRewrite","rewrite","_value","_header","_rewrite","lHeader","setHeaders","rawHeaders","line","parseHeaders","parser","tokens","tokensRE","parseTokens","matcher","deleteHeader","formatHeader","targets","asStrings","computed","accessor","accessors","defineAccessor","accessorName","methodName","buildAccessors","mapped","headerValue","transformData","fns","isCancel","__CANCEL__","CanceledError","ERR_CANCELED","settle","ERR_BAD_REQUEST","buildFullPath","baseURL","requestedURL","relativeURL","combineURLs","parseProtocol","DATA_URL_PATTERN","freq","timestamp","timer","force","now","samplesCount","timestamps","firstSampleTS","chunkLength","startedAt","bytesCount","passed","kInternals","AxiosTransformStream","readableHighWaterMark","maxRate","chunkSize","minChunkSize","timeWindow","ticksRate","internals","bytesSeen","isCaptured","notifiedBytesLoaded","ts","onReadCallback","_speedometer","bytesNotified","updateProgress","totalBytes","bytesTransferred","progressBytes","rate","progress","estimated","lengthComputable","onFinish","_read","_transform","bytesThreshold","transformChunk","_chunk","_callback","bytesLeft","chunkRemainder","maxChunkSize","pushChunk","transformNextChunk","setLength","asyncIterator","blob","arrayBuffer","BOUNDARY_ALPHABET","textEncoder","CRLF","CRLF_BYTES","FormDataPart","escapeName","isStringValue","contentLength","ZlibHeaderTransformStream","__transform","zlibOptions","flush","Z_SYNC_FLUSH","finishFlush","brotliOptions","BROTLI_OPERATION_FLUSH","isBrotliSupported","httpFollow","httpsFollow","isHttps","supportedProtocols","dispatchBeforeRedirect","beforeRedirects","setProxy","configProxy","proxyUrl","username","auth","password","base64","proxyHost","redirectOptions","isHttpAdapterSupported","buildAddressEntry","family","resolveFamily","asyncExecutor","onDone","responseEncoding","isDone","_lookup","opt","arg0","addresses","addr","emitter","EventEmitter","onFinished","cancelToken","removeEventListener","removeAllListeners","isRejected","fullPath","convertedData","uri","asBlob","_Blob","ERR_INVALID_URL","isBase64","decodeURIComponent","ERR_NOT_SUPPORT","fromDataURI","onDownloadProgress","onUploadProgress","maxUploadRate","maxDownloadRate","userBoundary","form","headersHandler","boundaryBytes","footerBytes","part","computedHeaders","Readable","hasContentLength","setContentLength","getContentLength","objectMode","upload","paramsSerializer","customErr","httpAgent","httpsAgent","socketPath","isHttpsRequest","insecureHTTPParser","streams","responseLength","transformStream","download","responseStream","lastRequest","decompress","offListeners","statusMessage","responseBuffer","totalResponseBytes","responseData","setKeepAlive","ERR_BAD_OPTION_VALUE","timeoutErrorMessage","ETIMEDOUT","ECONNABORTED","ended","errored","_reject","onDoneHandler","listener","isDownloadStream","msie","urlParsingNode","createElement","originURL","resolveURL","setAttribute","requestURL","expires","secure","cookie","toGMTString","headersToObject","mergeConfig","config1","getMergedValue","mergeDeepProperties","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","timeoutMessage","withCredentials","withXSRFToken","configValue","newConfig","unescape","isURLSameOrigin","xsrfValue","cookies","XMLHttpRequest","_config","resolveConfig","requestData","onCanceled","onloadend","responseHeaders","getAllResponseHeaders","responseText","open","onreadystatechange","readyState","responseURL","onabort","onerror","ERR_NETWORK","ontimeout","setRequestHeader","progressEventReducer","cancel","signals","controller","AbortController","streamChunk","trackStream","onProgress","iterable","ReadableStream","pull","return","highWaterMark","fetchProgressDecorator","isFetchSupported","Request","Response","isReadableStreamSupported","encodeText","supportsRequestStream","duplexAccessed","hasContentType","duplex","supportsResponseStream","resolvers","fetchOptions","composedSignal","stopTimeout","requestContentLength","getBodyLength","resolveBodyLength","contentTypeHeader","_request","isStreamResponse","responseContentLength","knownAdapters","xhr","renderReason","isResolvedHandle","adapters","nameOrAdapter","rejectedReasons","reasons","throwIfCancellationRequested","throwIfRequested","dispatchRequest","validators","deprecatedWarnings","validator","formatMessage","desc","ERR_DEPRECATED","assertOptions","allowUnknown","ERR_BAD_OPTION","Axios","instanceConfig","interceptors","configOrUrl","dummy","boolean","contextHeaders","requestInterceptorChain","synchronousRequestInterceptors","interceptor","responseInterceptorChain","promise","chain","onFulfilled","onRejected","getUri","generateHTTPMethod","isForm","CancelToken","executor","resolvePromise","_listeners","onfulfilled","_resolve","HttpStatusCode","Continue","SwitchingProtocols","Processing","EarlyHints","Ok","Accepted","NonAuthoritativeInformation","NoContent","ResetContent","PartialContent","MultiStatus","AlreadyReported","ImUsed","MultipleChoices","MovedPermanently","Found","SeeOther","NotModified","UseProxy","Unused","TemporaryRedirect","PermanentRedirect","BadRequest","Unauthorized","PaymentRequired","Forbidden","NotFound","MethodNotAllowed","NotAcceptable","ProxyAuthenticationRequired","RequestTimeout","Conflict","Gone","LengthRequired","PreconditionFailed","PayloadTooLarge","UriTooLong","UnsupportedMediaType","RangeNotSatisfiable","ExpectationFailed","ImATeapot","MisdirectedRequest","UnprocessableEntity","Locked","FailedDependency","TooEarly","UpgradeRequired","PreconditionRequired","TooManyRequests","RequestHeaderFieldsTooLarge","UnavailableForLegalReasons","InternalServerError","NotImplemented","BadGateway","ServiceUnavailable","GatewayTimeout","HttpVersionNotSupported","VariantAlsoNegotiates","InsufficientStorage","LoopDetected","NotExtended","NetworkAuthenticationRequired","axios","createInstance","defaultConfig","toFormData","Cancel","promises","isAxiosError","payload","formToJSON","getAdapter","__defProp","cacheTime24h","getFutureTime","interval","CachedContent","overdueTime","isValid","decimal_default","ClmmpoolsError","errorCode","isClmmpoolsErrorCode","ZERO","ONE","TWO","U64_MAX","U128_MAX","MathUtil","toX64_BN","toX64_Decimal","toX64","fromX64","fromX64_Decimal","fromX64_BN","shiftRightRoundUp","divRoundUp","subUnderflowU128","checkUnsignedSub","checkMul","isOverflow","checkMulDivFloor","denom","checkMulDivCeil","checkMulDivRound","checkMulShiftRight","checkMulShiftRight64RoundUpIf","checkMulShiftLeft","checkDivRoundUpIf","is_neg","abs_u128","u128_neg","neg_from","MAX_SQRT_PRICE","MIN_SQRT_PRICE","FEE_RATE_DENOMINATOR","CLOCK_ADDRESS","ClmmIntegratePoolModule","ClmmIntegratePoolV2Module","ClmmIntegratePoolV3Module","ClmmIntegrateRouterModule","ClmmIntegrateRouterWithPartnerModule","ClmmFetcherModule","ClmmIntegrateUtilsModule","DeepbookCustodianV2Moudle","getPackagerConfigs","packageObj","package_id","signedShiftRight","shiftBy","bitWidth","twoN0","TickMath","priceToSqrtPriceX64","decimalsA","decimalsB","sqrtPriceX64ToPrice","sqrtPriceX64","tickIndexToSqrtPriceX64","tickIndex","tick","ratio","tickIndexToSqrtPricePositive","tickIndexToSqrtPriceNegative","sqrtPriceX64ToTickIndex","msb","log2pIntegerX32","twosN0","signedShiftLeft","log2pFractionX64","rMoreThanTwo","log2pFractionX32","logbpX64","tickLow","tickHigh","tickIndexToPrice","priceToTickIndex","priceToInitializableTickIndex","tickSpacing","getInitializableTickIndex","getNextInitializableTickIndex","getPrevInitializableTickIndex","tickScore","SwapUtils","getDefaultSqrtPriceLimit","a2b","getDefaultOtherAmountThreshold","amountSpecifiedIsInput","getNextSqrtPriceAUp","sqrtPrice","liquidity","byAmountIn","numberator","liquidityShl64","nextSqrtPrice","getNextSqrtPriceBDown","deltaSqrtPrice","getDeltaUpFromInput","currentSqrtPrice","targetSqrtPrice","sqrtPriceDiff","denomminator","quotient","getDeltaDownFromOutput","computeSwapStep","feeRate","amountIn","amountOut","feeAmount","amountRemain","maxAmountIn","aToB","getNextSqrtPriceFromInput","maxAmountOut","getNextSqrtPriceFromOutput","estimateLiquidityForCoinA","sqrtPriceX","sqrtPriceY","coinAmount","lowerSqrtPriceX64","upperSqrtPriceX64","dem","estimateLiquidityForCoinB","ClmmPoolUtil","updateFeeRate","clmm","refRate","protocolFeeRate","iscoinA","protocolFee","refFee","poolFee","feeProtocolCoinA","feeProtocolCoinB","growthFee","feeGrowthGlobalA","feeGrowthGlobalB","getCoinAmountFromLiquidity","curSqrtPrice","lowerSqrtPrice","upperSqrtPrice","liq","curSqrtPriceStr","lowerPriceStr","upperPriceStr","coinA","coinB","estLiquidityAndcoinAmountFromOneAmounts","lowerTick","upperTick","slippage","currentTick","coinAmounts","tokenLimitA","tokenLimitB","coinAmountA","coinAmountB","tokenMaxA","tokenMaxB","liquidityAmount","fix_amount_a","estimateLiquidityFromcoinAmounts","tokenAmount","currTick","estimateLiquidityAmountA","estimateLiquidityAmountB","estCoinAmountsFromTotalAmount","totalAmount","tokenPriceA","tokenPriceB","ratioA","ratioB","calculateDepositRatioFixTokenA","amountA","amountB","currPrice","transformAmountB","LESS_THAN","GREATER_THAN","isSortedSymbols","symbolX","symbolY","lenCmp","elemCmp","composeType","generics","extractStructTagFromType","_type","genericsString","structTag2","type_arguments","source_address","CoinAssist","isSuiCoin","full_address","structTag","GAS_TYPE_ARG","GAS_TYPE_ARG_LONG","normalizeCoinType","fixSuiObjectId","fixCoinType","removePrefix","patchFixSuiObjectId","COIN_TYPE_ARG_REGEX","getCoinTypeArg","isSUI","getCoinSymbol","coinTypeArg","lastIndexOf","balance","totalBalance","objs","coinAddress","balanceTotal","getID","getCoinTypeFromArg","getFaucetCoins","suiTransactionResponse","faucetCoin","parsedJson","transactionModule","suplyID","decimals","getCoinAssets","allSuiObjects","coins","anObj","selectCoinObjectIdGreaterThanOrEqual","exclude","selectedResult","selectCoinAssetGreaterThanOrEqual","objectArray","selectedCoins","remainCoins","remainingCoins","amountArray","sortedCoins","sortByBalance","calculateTotalBalance","coinWithSmallestSufficientBalanceIndex","findIndex","coinWithLargestBalance","sortByBalanceDes","partialSum","Percentage","fromDecimal","fromFraction","adjustForSlippage","adjustUp","getSuiObjectData","getObjectDeletedResponse","object_id","getObjectNotExistsResponse","getObjectId","getObjectReference","getMoveObject","suiObject","isSuiObjectDataWithContent","dataType","getMoveObjectType","getObjectPreviousTransactionDigest","previousTransaction","getObjectFields","asUintN","int","asIntN","buildPool","formatType","rewarders","rewarder_manager","emissions_per_second","emissionSeconds","emissionsEveryDay","reward_coin","growth_global","pool","poolAddress","poolType","coinTypeA","coinTypeB","coin_a","coin_b","current_sqrt_price","current_tick_index","fee_growth_global_a","fee_growth_global_b","fee_protocol_coin_a","fee_protocol_coin_b","fee_rate","is_pause","position_manager","positions_handle","positions","rewarder_infos","rewarder_last_updated_time","last_updated_time","tick_spacing","ticks_handle","tick_manager","ticks","coin_type_a","coin_type_b","buildPosition","nft","creator","image_url","link","project_url","pos_object_id","tick_lower_index","tick_upper_index","reward_amount_owed_0","reward_amount_owed_1","reward_amount_owed_2","reward_growth_inside_0","reward_growth_inside_1","reward_growth_inside_2","fee_growth_inside_a","fee_owed_a","fee_growth_inside_b","fee_owed_b","position_status","ownerWarp","display","getObjectDisplay","buildNFT","deletedResponse","objectNotExistsResponse","buildPositionReward","rewards","amount_owned","growth_inside","fee_owned_a","fee_owned_b","position_id","buildTickData","valueItem","sqrt_price","liquidityNet","liquidity_net","liquidityGross","liquidity_gross","feeGrowthOutsideA","fee_growth_outside_a","feeGrowthOutsideB","fee_growth_outside_b","rewardersGrowthOutside","rewards_growth_outside","findAdjustCoin","coinPair","isAdjustCoinA","isAdjustCoinB","reverSlippageAmount","slippageAmount","_TransactionUtil","createCollectRewarderAndFeeParams","sdk","allCoinAsset","allCoinAssetA","allCoinAssetB","collect_fee","primaryCoinAInput","buildCoinForAmount","primaryCoinBInput","Position","createCollectFeePaylod","pool_id","pos_id","targetCoin","primaryCoinInputs","rewarder_coin_types","Rewarder","createCollectRewarderPaylod","adjustTransactionForGas","allCoins","senderAddress","amountCoins","fixAmount","estimateGas","fullClient","calculationTxGas","newGas","newTx","buildAddLiquidityFixTokenForGas","gasEstimateArg","inputCoinA","inputCoinB","buildAddLiquidityFixToken","suiAmount","amount_a","amount_b","newResult","primaryCoinAInputs","primaryCoinBInputs","buildAddLiquidityFixTokenCoinInput","fixAddLiquidityFixTokenParams","buildAddLiquidityFixTokenArgs","isMintZeroCoin","tragetCoinAmount","need_interval_amount","buildVector","buildCoinForAmountInterval","amountSecond","amountFirst","liquidityInput","tick_lower","tick_upper","is_open","clmm_pool","integrate","sdkOptions","clmmConfig","global_config_id","published_at","buildSwapTransactionForGas","buildSwapTransaction","by_amount_in","amount_limit","fixSwapParams","primaryCoinInputA","primaryCoinInputB","buildSwapTransactionArgs","sqrtPriceLimit","hasSwapPartner","swap_partner","buildSwapTransactionWithoutTransferCoinsForGas","coinABs","buildSwapTransactionWithoutTransferCoins","buildSwapTransactionWithoutTransferCoinArgs","txRes","moduleName","toCoinType","toCoin","checkCoinThreshold","currentPool","Swap","preswap","amountLimit","estimatedAmountOut","estimatedAmountIn","syncBuildCoinInputForAmount","getOwnerCoinAssets","coinAssets","buildZeroValueCoin","amountTotal","buildCoin","amountCoin2","originalSplitedCoin","selectedCoinsResult3","selectedCoinsResult2","selectedCoinsResult","totalSelectedCoinAmount","coinObjectIds","primaryCoinA","mergeCoinAs","primaryCoinAObject","zeroCoin","callMintZeroValueCoin","buildRouterSwapTransaction","recipient","partner","buildRouterBasePathTx","validPaths","inputAmount","outputAmount","totalAmountLimit","priceSlippagePoint","fromCoinType","fromCoinBuildResult","isSplited","toCoinBuildResult","buildRouterBasePathReturnCoin","buildRouterBasePathReturnCoins","transferedCoins","fromCoin","originalSplitedFromCoin","buildTransferCoin","fromCoinBuildRes","toCoinBuildRes","globalConfigID","noPartner","swapParams","poolCoinA","poolCoinB","amount0","rawAmountLimit","amount1","sqrtPriceLimit0","sqrtPriceLimit1","fromToCoins","buildAggregatorSwapReturnCoins","priceSplitPoint","splitPaths","hasExternalPool","splitPath","basePaths","basePath","accountCap","isCreateAccountCap","cap","createAccountCapTX","DeepbookUtils","createAccountCap","middleCoin","i2","deepbookTxBuild","buildDeepbookBasePathTx","clmmTxBuild","buildClmmBasePathTx","deleteAccountCapByObject","onePaths","direction","onePath","isExceed","buildRouterBasePathReturnCoinRes","buildAggregatorSwapTransaction","buildAggregatorSwapReturnCoinsRes","middleStep","quote","coinAB","deepbook_endpoint_v2","buildCoinTypePair","coinTypes","partitionQuantities","coinTypePair","directPair","buildTransferCoinToSender","TransactionUtil","checkInvalidSuiAddress","__defNormalProp","txb","FLOAT_SCALING","isTransfer","deepbook","deleteAccountCap","getAccountCap","showDisplay","ownerRes","getOwnedObjectsByPage","showType","showContent","MoveModule","getPools","allPools","queryEventsByPage","MoveEventType","poolID","tickSize","tick_size","lotSize","lot_size","takerFeeRate","taker_fee_rate","makerRebateRate","maker_rebate_rate","baseAsset","base_asset","quoteAsset","quote_asset","getPoolAsks","baseCoin","quoteCoin","simulationAccount","asks","simulateRes","valueData","depths","depth","ask","quantity","getPoolBids","bids","bid","preSwap","remainAmount","initAmountIn","curBidAmount","curBidPrice","fee","curOut","curFee","curAskAmount","curAskAmountWithFee","splitNums","splitAmount","swapSplitNum","estimatedFeeAmount","simulateSwap","accountCapStr","getAccoutCapResult","primaryBaseInput","primaryQuoteInput","amount_in","amount_out","PoolModule","_sdk","_cache","getPositionList","positionHandle","paginationArgs","dataPage","getDynamicFieldsByPage","positionObjectIDs","allPosition","getSipmlePositionList","getPoolImmutables","assignPoolIDs","forceRefresh","cacheKey","cacheData","getCache","filterPools","updateCache","hasAssignPools","assignPools","allPool","poolObjectIds","objectDataResponses","batchGetObjects","suiObj","getPoolImmutablesWithPage","queryAll","cacheAllKey","cacheDate","moveEventType","poolImmutables","getPoolsWithPage","getPool","creatPoolsTransactionPayload","paramss","swpaCoinTypeB","creatPool","creatPoolTransactionPayload","creatPoolAndAddLiquidity","getClmmConfigs","previousTx","showPreviousTransaction","pools_id","global_vault_id","admin_cap_id","partners_id","getSuiTransactionResponse","showEvents","showEffects","showBalanceChanges","showInput","showObjectChanges","eventConfig","globalPauseStatusObjectId","poolsId","params2","initialize_sqrt_price","primaryCoinAInputsR","primaryCoinBInputsR","fetchTicks","getTicks","buildTickDataByEvent","fetchPositionRewardList","vecStart","positionRewards","item2","positionReward","fetchTicksByRpc","tickHandle","allTickData","allTickId","idRes","objectType","getTicksByRpc","tickObjectId","getTickDataByIndex","getTickDataByObjectId","tickId","getPartnerRefFeeAmount","balances","coinAsset","claimPartnerRefFeePayload","partnerCap","time","cacheTime5min","PositionModule","buildPositionType","accountAddress","assignPoolIds","Package","hasAssignPoolIds","getPosition","positionID","calculateRewarder","getSimplePosition","updatePositionRewarders","getPositionById","Pool","getSimplePositionByCache","positionIDs","positionList","notFoundIds","getPositionRewarders","dynamicFieldObject","fetchPosFeeAmount","paramItem","positionId","posRrewarderResult","feeOwedA","feeOwedB","batchFetchPositionFees","posFeeParamsList","positionMap","posRewarderInfo","createAddLiquidityFixTokenPayload","createAddLiquidityPayload","needOpenPosition","max_amount_a","max_amount_b","delta_liquidity","removeLiquidityTransactionPayload","min_amount_a","min_amount_b","closePositionTransactionPayload","openPositionTransactionPayload","collectFeeTransactionPayload","createCollectFeeNoSendPaylod","calculateFee","paylod","RewarderModule","growthGlobal","rewarderInfos","rewarderInfo","emissions","coin_address","updatePoolRewarder","currentTime","lastTime","timeDelta","rewarderGrowthDelta","posRewardersAmount","ticksHandle","tickLower","tickUpper","posRewardersAmountInternal","poolRewardersAmount","tickDatas","getPoolLowerAndUpperTicks","rewarderAmount","amount_owed","rewardersInside","tickLowerIndex","tickUpperIndex","rewarderGrowthInside","rewarder_growth_below","rewarder_growth_above","rewGrowthInside","getRewardInTickRange","growthInside","AmountOwed","growthDelta0","amountOwed_0","growthDelta_1","amountOwed_1","growthDelta_2","amountOwed_2","batchFetchPositionRewarders","posRewardParamsList","fetchPosRewardersAmount","rewarderAmountOwed","fetchPositionRewarders","fetchPoolRewardersAmount","account","poolObjectId","lowerTicks","upperTicks","collectRewarderTransactionPayload","batchCollectRewardePayload","coinIdMaps","coinAInput","coinBInput","coinInput","createCollectRewarderNoSendPaylod","clmmConfigs","_pairSymbol","reversePair","RouterModule","graph","pathProviders","coinProviders","_coinAddressMap","poolAddressMap","getPoolAddressMapAndDirection","setCoinList","loadGraph","addCoinProvider","addPathProvider","preRouterSwapA2B2C","getPoolWithTVL","addressMap","provider","paths2","vertexA","vertexB","poolSymbol","localeCompare","tokenInfo","getFeeRate","poolSymbolRev","addressMapRev","swapWithMultiPoolParams","fromVertex","toVertex","pathIters","allPaths","preRouterSwapParams","fromAndTo","swapDirection","poolsAB","poolsBC","subFrom","subTo","addressMapAndDirection","poolAB","poolBC","stepNums","b2c","coinTypeC","stepNumsOne","notStepNumsOne","poolWithTvls","poolWithTvlsMap","aTvlMinimum","bTvlMinimum","aPoolAB","aPoolBC","tvl","bPoolAB","bPoolBC","preSwapResult2","preSwapWithMultiPool","onePath2","swapWithRouterParams2","estimatedEndSqrtPrice","estimatedStartSqrtPrice","createTxParams","preSwapResult","bestIndex","amountMedium","a2bs","stepNum","swapWithRouterParams","priceUseV1","_amount","tempMaxAmount","tempIndex","is_exceed","fee_amount","target_sqrt_price_ab","target_sqrt_price_cd","current_sqrt_price_ab","current_sqrt_price_cd","after_sqrt_price","amount_medium","swapCountUrl","pools","swap_account","tvl_in_usd","SwapModule","calculateSwapFee","pathCount","path2","price1","currentPrice","price2","feeRate2","fee2","toDecimal","calculateSwapPriceImpact","impactValue","cprice","calculateSingleImpact","cprice1","cprice2","poolAddresses","transformSwapWithMultiPoolData","transformSwapData","jsonData","step_results","calculateRates","poolData","currentTickIndex","tickIndexes","collection_name","swapTicks","swapResult","remainerAmount","currentLiquidity","refAmount","crossTickNum","signedLiquidityChange","stepResult","computeSwap","extraComputeLimit","prePrice","afterPrice","priceImpactPct","createSwapTransactionPayload","createSwapTransactionWithoutTransferCoinsPayload","TokenModule","getAllRegisteredTokenList","factchTokenList","getOwnerTokenList","listOwnerAddr","getAllRegisteredPoolList","factchPoolList","getOwnerPoolList","getWarpPoolList","factchWarpPoolList","getOwnerWarpPoolList","poolOwnerAddr","coinOwnerAddr","getTokenListByCoinTypes","tokenMap","tokenList","unFindArray","metadataKey","metadata","symbol","official_symbol","coingecko_id","logo_url","iconUrl","isOwnerRequest","allTokenList","tokenConfig","coin_registry_id","full_list","value_list","allPoolList","pool_registry_id","poolList","lpPoolArray","coin_a_address","coin_b_address","getTokenConfigEvent","packageObjectId","tokenConfigEvent","coin_list_owner","pool_list_owner","list_id","registry_id","isPoolData","extensionsDataArray","RouterModuleV2","calculatePrice","fromDecimals","toDecimals","decimalA","decimalB","parseJsonResult","isTimeout","is_timeout","input_amount","output_amount","from_coin","to_coin","split_paths","pathIndex","path_index","lastQuoteOutput","last_quote_output","percent","best_path","afterSqrtPrice","from_decimal","to_decimal","fetchDataWithAxios","apiUrl","timeoutDuration","getBestRouter","_senderAddress","orderSplit","externalRouter","lpChanges","aggregatorUrl","order_split","external_router","sender_address","request_id","lp_changes","priceResult","Router","fromDecimal0","toDecimal0","path0","fromDecimal1","toDecimal1","currentPrice1","path1","getBestRouterByServer","getBestRouterByRpc","ConfigModule","setTokenListCache","coinList","coin_list_handle","cetus_config","updatedCacheData","unFoundArray","pyth_id","getCoinConfigs","transformExtensions","warpIds","buildCoinConfig","getCoinConfig","coin_type","extension_fields","getClmmPoolConfigs","clmm_pools_handle","buildClmmPoolConfig","pool_address","getClmmPoolConfig","getLaunchpadPoolConfigs","launchpad_pools_handle","buildLaunchpadPoolConfig","getLaunchpadPoolConfig","social_medias","social_media","regulation","dataArray","getCetusConfig","coin_list_id","launchpad_pools_id","clmm_pools_id","getCetusConfigHandle","isSuiObjectResponse","getObjectType","RpcModule","devResult","sendTransaction","keypair","sendSimulationTransaction","useDevInspect","src_default","_rpcModule","_pool","_position","_swap","_rewarder","_router","_router_v2","_token","_sdkOptions","fullRpcUrl","RouterV2","CetusConfig","Token","suiAddress","allCoinObject","getOwnerCoinBalances","allCoinBalance","SimpleCache","defaultTTL","cacheEntry","expiry","ttl","icon","expo","SUI","USDC","USDT","VSUI","NAVX","SCA","CETUS","TURBOS","AFSUI","WETH","APT","SOL","SLP","WBTC","CELO","HASUI","USDY","poolTokenMap","coinName","cetusMainnetSDKOptions","getLatestPrice","alphaPrice","getAlphaPrice","usdyPrice","cetusGateway","CetusGateway","swapOption","inAmount","getPrice","latestSuiPrice","getUSDYPrice","pythPricePair","cachedPromise","fetchPriceFromAlphaAPI","alphaPricePromiseCache","alphaPriceCache","ignoreCache","cachedResponse","cetusSDK","pairs","matchedPools","filteredPools","outAmount","poolDatum","getTransaction","slippagePercentage","createPoolTransactionBlock","initializeSqrtPrice","initializePrice","coinNameA","coinNameB","isAmountA","imageUrl","getAlphaPortfolioAmount","poolName","receipts","getReceipts","suiClient","exchangeRate","getPoolExchangeRate","totalXTokens","isLocked","receipt","xTokens","xTokenBalance","bal","unlocked_xtokens","poolExchangeRate","getAlphaPortfolioAmountInUSD","priceOfAlpha","portfolioAmountCache","portfolioAmountPromiseCache","getPortfolioAmount","portfolioAmount","portfolioAmountCacheKey","poolTokenAmounts","cetus_pool","cetusPoolCache","cetusPoolPromiseCache","cachedPool","cetusPoolPromise","cetusPool","getCetusPool","cetusInvestor","cetusInvestorCache","cetusInvestorPromiseCache","cachedInvestor","cetusInvestorPromise","cetus_investor","getCetusInvestor","upper_bound","lower_tick","upper_tick","liquidityInt","coin_amounts","getCoinAmountsFromLiquidity","singleAssetPortfolioAmountCache","singleAssetPortfolioAmountPromiseCache","getSingleAssetPortfolioAmount","poolCache","poolPromiseCache","poolPromise","receiptsCache","receiptsPromiseCache","receiptsCacheKey","nfts","currentCursor","paginatedObjects","StructType","poolExchangeRateCache","poolExchangeRateCacheKey","xTokenSupply","tokensInvested","alpha_bal","extractCoinTypes","getVaults","vaultsArr","poolObject","getAlphaVaultBalance","lockedPortfolioAmount","lockedPortfolioAmountInUSD","unlockedPortfolioAmount","unlockedPortfolioAmountInUSD","portfolioAmountInUSD","lockedAlphaCoins","lockedAlphaCoinsInUSD","unlockedAlphaCoins","unlockedAlphaCoinsInUSD","totalAlphaCoins","totalAlphaCoinsInUSD","getDoubleAssetVaultBalance","ten","priceOfCoin0","priceOfCoin1","getPortfolioAmountInUSD","valueInUSD","getSingleAssetVaultBalance","priceOfCoin","getSingleAssetPortfolioAmountInUSD"],"sourceRoot":""}