@allbridge/bridge-core-sdk 3.18.0 → 3.19.1-alpha.1
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.
- package/dist/browser/index.js +3 -3
- package/dist/browser/index.js.map +2 -2
- package/dist/cjs/index.js +2 -2
- package/dist/cjs/index.js.map +2 -2
- package/dist/esm/index.js +3 -3
- package/dist/esm/index.js.map +2 -2
- package/dist/src/client/core-api/core-api.model.d.ts +1 -0
- package/dist/src/services/bridge/sol/index.js +1 -1
- package/dist/src/services/bridge/sol/index.js.map +1 -1
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/dist/src/version.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../node_modules/.pnpm/@jspm+core@2.0.1/node_modules/@jspm/core/nodelibs/browser/buffer.js", "../../src/configs/mainnet.ts", "../../src/services/index.ts", "../../src/exceptions/exceptions.ts", "../../src/chains/chain.enums.ts", "../../src/chains/index.ts", "../../src/client/core-api/api-client.ts", "../../src/version.ts", "../../src/utils/calculation/index.ts", "../../src/client/core-api/core-api.model.ts", "../../src/client/core-api/core-api-mapper.ts", "../../src/client/core-api/api-client-caching.ts", "../../src/client/core-api/core-client-base.ts", "../../src/client/core-api/core-client-filtered.ts", "../../src/client/core-api/core-client-pool-info-caching.ts", "../../src/services/bridge/index.ts", "../../src/utils/utils.ts", "../../src/services/bridge/evm/index.ts", "../../src/services/models/abi/Bridge.json", "../../src/services/models/abi/CctpBridge.json", "../../src/services/utils/sol/accounts.ts", "../../src/services/utils/sol/anchor-provider.ts", "../../src/services/bridge/models/bridge.ts", "../../src/services/bridge/utils.ts", "../../src/services/bridge/raw-bridge-transaction-builder.ts", "../../src/services/bridge/sol/index.ts", "../../src/services/models/sol/types/bridge.ts", "../../src/services/models/sol/types/cctp_bridge.ts", "../../src/services/utils/sol/index.ts", "../../src/services/utils/sol/compute-budget.ts", "../../src/utils/sol/utils.ts", "../../src/services/models/sol/index.ts", "../../src/services/bridge/sol/jupiter.ts", "../../src/services/bridge/srb/index.ts", "../../src/services/models/srb/bridge-contract.ts", "../../src/services/bridge/trx/index.ts", "../../src/services/utils/index.ts", "../../src/services/utils/trx/index.ts", "../../src/services/liquidity-pool/index.ts", "../../src/services/utils/calculation/index.ts", "../../src/services/models/abi/Pool.json", "../../src/services/liquidity-pool/models/pool.model.ts", "../../src/services/liquidity-pool/models/pool.ts", "../../src/services/liquidity-pool/evm/index.ts", "../../src/services/liquidity-pool/raw-pool-transaction-builder.ts", "../../src/services/liquidity-pool/sol/index.ts", "../../src/services/liquidity-pool/srb/index.ts", "../../src/services/models/srb/pool-contract.ts", "../../src/services/liquidity-pool/trx/index.ts", "../../src/utils/calculation/swap-and-bridge-fee-calc.ts", "../../src/utils/calculation/swap-and-bridge-details.ts", "../../src/utils/sol/index.ts", "../../src/utils/srb/index.ts", "../../src/services/models/srb/token-contract.ts", "../../src/utils/index.ts", "../../src/models/index.ts", "../../src/services/token/index.ts", "../../src/services/token/evm/index.ts", "../../src/services/token/models/token.ts", "../../src/services/token/sol/index.ts", "../../src/services/token/srb/index.ts", "../../src/services/models/abi/ERC20.json", "../../src/services/token/trx/index.ts", "../../src/index.ts"],
|
|
4
|
-
"sourcesContent": ["var exports$3 = {},\n _dewExec$2 = false;\nfunction dew$2() {\n if (_dewExec$2) return exports$3;\n _dewExec$2 = true;\n exports$3.byteLength = byteLength;\n exports$3.toByteArray = toByteArray;\n exports$3.fromByteArray = fromByteArray;\n var lookup = [];\n var revLookup = [];\n var Arr = typeof Uint8Array !== \"undefined\" ? Uint8Array : Array;\n var code = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n\n for (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i];\n revLookup[code.charCodeAt(i)] = i;\n } // Support decoding URL-safe base64 strings, as Node.js does.\n // See: https://en.wikipedia.org/wiki/Base64#URL_applications\n\n\n revLookup[\"-\".charCodeAt(0)] = 62;\n revLookup[\"_\".charCodeAt(0)] = 63;\n\n function getLens(b64) {\n var len = b64.length;\n\n if (len % 4 > 0) {\n throw new Error(\"Invalid string. Length must be a multiple of 4\");\n } // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n\n\n var validLen = b64.indexOf(\"=\");\n if (validLen === -1) validLen = len;\n var placeHoldersLen = validLen === len ? 0 : 4 - validLen % 4;\n return [validLen, placeHoldersLen];\n } // base64 is 4/3 + up to two characters of the original data\n\n\n function byteLength(b64) {\n var lens = getLens(b64);\n var validLen = lens[0];\n var placeHoldersLen = lens[1];\n return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen;\n }\n\n function _byteLength(b64, validLen, placeHoldersLen) {\n return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen;\n }\n\n function toByteArray(b64) {\n var tmp;\n var lens = getLens(b64);\n var validLen = lens[0];\n var placeHoldersLen = lens[1];\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen));\n var curByte = 0; // if there are placeholders, only get up to the last complete 4 chars\n\n var len = placeHoldersLen > 0 ? validLen - 4 : validLen;\n var i;\n\n for (i = 0; i < len; i += 4) {\n tmp = revLookup[b64.charCodeAt(i)] << 18 | revLookup[b64.charCodeAt(i + 1)] << 12 | revLookup[b64.charCodeAt(i + 2)] << 6 | revLookup[b64.charCodeAt(i + 3)];\n arr[curByte++] = tmp >> 16 & 255;\n arr[curByte++] = tmp >> 8 & 255;\n arr[curByte++] = tmp & 255;\n }\n\n if (placeHoldersLen === 2) {\n tmp = revLookup[b64.charCodeAt(i)] << 2 | revLookup[b64.charCodeAt(i + 1)] >> 4;\n arr[curByte++] = tmp & 255;\n }\n\n if (placeHoldersLen === 1) {\n tmp = revLookup[b64.charCodeAt(i)] << 10 | revLookup[b64.charCodeAt(i + 1)] << 4 | revLookup[b64.charCodeAt(i + 2)] >> 2;\n arr[curByte++] = tmp >> 8 & 255;\n arr[curByte++] = tmp & 255;\n }\n\n return arr;\n }\n\n function tripletToBase64(num) {\n return lookup[num >> 18 & 63] + lookup[num >> 12 & 63] + lookup[num >> 6 & 63] + lookup[num & 63];\n }\n\n function encodeChunk(uint8, start, end) {\n var tmp;\n var output = [];\n\n for (var i = start; i < end; i += 3) {\n tmp = (uint8[i] << 16 & 16711680) + (uint8[i + 1] << 8 & 65280) + (uint8[i + 2] & 255);\n output.push(tripletToBase64(tmp));\n }\n\n return output.join(\"\");\n }\n\n function fromByteArray(uint8) {\n var tmp;\n var len = uint8.length;\n var extraBytes = len % 3; // if we have 1 byte left, pad 2 bytes\n\n var parts = [];\n var maxChunkLength = 16383; // must be multiple of 3\n // go through the array every three bytes, we'll deal with trailing stuff later\n\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, i + maxChunkLength > len2 ? len2 : i + maxChunkLength));\n } // pad the end with zeros, but make sure to not forget the extra bytes\n\n\n if (extraBytes === 1) {\n tmp = uint8[len - 1];\n parts.push(lookup[tmp >> 2] + lookup[tmp << 4 & 63] + \"==\");\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1];\n parts.push(lookup[tmp >> 10] + lookup[tmp >> 4 & 63] + lookup[tmp << 2 & 63] + \"=\");\n }\n\n return parts.join(\"\");\n }\n\n return exports$3;\n}\n\nvar exports$2 = {},\n _dewExec$1 = false;\nfunction dew$1() {\n if (_dewExec$1) return exports$2;\n _dewExec$1 = true;\n\n /*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\n exports$2.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m;\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = -7;\n var i = isLE ? nBytes - 1 : 0;\n var d = isLE ? -1 : 1;\n var s = buffer[offset + i];\n i += d;\n e = s & (1 << -nBits) - 1;\n s >>= -nBits;\n nBits += eLen;\n\n for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n\n for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : (s ? -1 : 1) * Infinity;\n } else {\n m = m + Math.pow(2, mLen);\n e = e - eBias;\n }\n\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen);\n };\n\n exports$2.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c;\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0;\n var i = isLE ? 0 : nBytes - 1;\n var d = isLE ? 1 : -1;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n value = Math.abs(value);\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0;\n e = eMax;\n } else {\n e = Math.floor(Math.log(value) / Math.LN2);\n\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * Math.pow(2, 1 - eBias);\n }\n\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * Math.pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);\n e = 0;\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 255, i += d, m /= 256, mLen -= 8) {}\n\n e = e << mLen | m;\n eLen += mLen;\n\n for (; eLen > 0; buffer[offset + i] = e & 255, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128;\n };\n\n return exports$2;\n}\n\nvar exports$1 = {},\n _dewExec = false;\nfunction dew() {\n if (_dewExec) return exports$1;\n _dewExec = true;\n\n const base64 = dew$2();\n\n const ieee754 = dew$1();\n\n const customInspectSymbol = typeof Symbol === \"function\" && typeof Symbol[\"for\"] === \"function\" ? Symbol[\"for\"](\"nodejs.util.inspect.custom\") // eslint-disable-line dot-notation\n : null;\n exports$1.Buffer = Buffer;\n exports$1.SlowBuffer = SlowBuffer;\n exports$1.INSPECT_MAX_BYTES = 50;\n const K_MAX_LENGTH = 2147483647;\n exports$1.kMaxLength = K_MAX_LENGTH;\n /**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\n\n Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport();\n\n if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== \"undefined\" && typeof console.error === \"function\") {\n console.error(\"This browser lacks typed array (Uint8Array) support which is required by \" + \"`buffer` v5.x. Use `buffer` v4.x if you require old browser support.\");\n }\n\n function typedArraySupport() {\n // Can typed array instances can be augmented?\n try {\n const arr = new Uint8Array(1);\n const proto = {\n foo: function () {\n return 42;\n }\n };\n Object.setPrototypeOf(proto, Uint8Array.prototype);\n Object.setPrototypeOf(arr, proto);\n return arr.foo() === 42;\n } catch (e) {\n return false;\n }\n }\n\n Object.defineProperty(Buffer.prototype, \"parent\", {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined;\n return this.buffer;\n }\n });\n Object.defineProperty(Buffer.prototype, \"offset\", {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined;\n return this.byteOffset;\n }\n });\n\n function createBuffer(length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError(\"The value \\\"\" + length + \"\\\" is invalid for option \\\"size\\\"\");\n } // Return an augmented `Uint8Array` instance\n\n\n const buf = new Uint8Array(length);\n Object.setPrototypeOf(buf, Buffer.prototype);\n return buf;\n }\n /**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\n\n function Buffer(arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === \"number\") {\n if (typeof encodingOrOffset === \"string\") {\n throw new TypeError(\"The \\\"string\\\" argument must be of type string. Received type number\");\n }\n\n return allocUnsafe(arg);\n }\n\n return from(arg, encodingOrOffset, length);\n }\n\n Buffer.poolSize = 8192; // not used by this implementation\n\n function from(value, encodingOrOffset, length) {\n if (typeof value === \"string\") {\n return fromString(value, encodingOrOffset);\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value);\n }\n\n if (value == null) {\n throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, \" + \"or Array-like Object. Received type \" + typeof value);\n }\n\n if (isInstance(value, ArrayBuffer) || value && isInstance(value.buffer, ArrayBuffer)) {\n return fromArrayBuffer(value, encodingOrOffset, length);\n }\n\n if (typeof SharedArrayBuffer !== \"undefined\" && (isInstance(value, SharedArrayBuffer) || value && isInstance(value.buffer, SharedArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length);\n }\n\n if (typeof value === \"number\") {\n throw new TypeError(\"The \\\"value\\\" argument must not be of type number. Received type number\");\n }\n\n const valueOf = value.valueOf && value.valueOf();\n\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length);\n }\n\n const b = fromObject(value);\n if (b) return b;\n\n if (typeof Symbol !== \"undefined\" && Symbol.toPrimitive != null && typeof value[Symbol.toPrimitive] === \"function\") {\n return Buffer.from(value[Symbol.toPrimitive](\"string\"), encodingOrOffset, length);\n }\n\n throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, \" + \"or Array-like Object. Received type \" + typeof value);\n }\n /**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\n\n\n Buffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length);\n }; // Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n // https://github.com/feross/buffer/pull/148\n\n\n Object.setPrototypeOf(Buffer.prototype, Uint8Array.prototype);\n Object.setPrototypeOf(Buffer, Uint8Array);\n\n function assertSize(size) {\n if (typeof size !== \"number\") {\n throw new TypeError(\"\\\"size\\\" argument must be of type number\");\n } else if (size < 0) {\n throw new RangeError(\"The value \\\"\" + size + \"\\\" is invalid for option \\\"size\\\"\");\n }\n }\n\n function alloc(size, fill, encoding) {\n assertSize(size);\n\n if (size <= 0) {\n return createBuffer(size);\n }\n\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === \"string\" ? createBuffer(size).fill(fill, encoding) : createBuffer(size).fill(fill);\n }\n\n return createBuffer(size);\n }\n /**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\n\n\n Buffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding);\n };\n\n function allocUnsafe(size) {\n assertSize(size);\n return createBuffer(size < 0 ? 0 : checked(size) | 0);\n }\n /**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\n\n\n Buffer.allocUnsafe = function (size) {\n return allocUnsafe(size);\n };\n /**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\n\n\n Buffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size);\n };\n\n function fromString(string, encoding) {\n if (typeof encoding !== \"string\" || encoding === \"\") {\n encoding = \"utf8\";\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError(\"Unknown encoding: \" + encoding);\n }\n\n const length = byteLength(string, encoding) | 0;\n let buf = createBuffer(length);\n const actual = buf.write(string, encoding);\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual);\n }\n\n return buf;\n }\n\n function fromArrayLike(array) {\n const length = array.length < 0 ? 0 : checked(array.length) | 0;\n const buf = createBuffer(length);\n\n for (let i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255;\n }\n\n return buf;\n }\n\n function fromArrayView(arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n const copy = new Uint8Array(arrayView);\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength);\n }\n\n return fromArrayLike(arrayView);\n }\n\n function fromArrayBuffer(array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError(\"\\\"offset\\\" is outside of buffer bounds\");\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError(\"\\\"length\\\" is outside of buffer bounds\");\n }\n\n let buf;\n\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array);\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset);\n } else {\n buf = new Uint8Array(array, byteOffset, length);\n } // Return an augmented `Uint8Array` instance\n\n\n Object.setPrototypeOf(buf, Buffer.prototype);\n return buf;\n }\n\n function fromObject(obj) {\n if (Buffer.isBuffer(obj)) {\n const len = checked(obj.length) | 0;\n const buf = createBuffer(len);\n\n if (buf.length === 0) {\n return buf;\n }\n\n obj.copy(buf, 0, 0, len);\n return buf;\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== \"number\" || numberIsNaN(obj.length)) {\n return createBuffer(0);\n }\n\n return fromArrayLike(obj);\n }\n\n if (obj.type === \"Buffer\" && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data);\n }\n }\n\n function checked(length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError(\"Attempt to allocate Buffer larger than maximum \" + \"size: 0x\" + K_MAX_LENGTH.toString(16) + \" bytes\");\n }\n\n return length | 0;\n }\n\n function SlowBuffer(length) {\n if (+length != length) {\n // eslint-disable-line eqeqeq\n length = 0;\n }\n\n return Buffer.alloc(+length);\n }\n\n Buffer.isBuffer = function isBuffer(b) {\n return b != null && b._isBuffer === true && b !== Buffer.prototype; // so Buffer.isBuffer(Buffer.prototype) will be false\n };\n\n Buffer.compare = function compare(a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength);\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength);\n\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\"The \\\"buf1\\\", \\\"buf2\\\" arguments must be one of type Buffer or Uint8Array\");\n }\n\n if (a === b) return 0;\n let x = a.length;\n let y = b.length;\n\n for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i];\n y = b[i];\n break;\n }\n }\n\n if (x < y) return -1;\n if (y < x) return 1;\n return 0;\n };\n\n Buffer.isEncoding = function isEncoding(encoding) {\n switch (String(encoding).toLowerCase()) {\n case \"hex\":\n case \"utf8\":\n case \"utf-8\":\n case \"ascii\":\n case \"latin1\":\n case \"binary\":\n case \"base64\":\n case \"ucs2\":\n case \"ucs-2\":\n case \"utf16le\":\n case \"utf-16le\":\n return true;\n\n default:\n return false;\n }\n };\n\n Buffer.concat = function concat(list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError(\"\\\"list\\\" argument must be an Array of Buffers\");\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0);\n }\n\n let i;\n\n if (length === undefined) {\n length = 0;\n\n for (i = 0; i < list.length; ++i) {\n length += list[i].length;\n }\n }\n\n const buffer = Buffer.allocUnsafe(length);\n let pos = 0;\n\n for (i = 0; i < list.length; ++i) {\n let buf = list[i];\n\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf);\n buf.copy(buffer, pos);\n } else {\n Uint8Array.prototype.set.call(buffer, buf, pos);\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError(\"\\\"list\\\" argument must be an Array of Buffers\");\n } else {\n buf.copy(buffer, pos);\n }\n\n pos += buf.length;\n }\n\n return buffer;\n };\n\n function byteLength(string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length;\n }\n\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength;\n }\n\n if (typeof string !== \"string\") {\n throw new TypeError(\"The \\\"string\\\" argument must be one of type string, Buffer, or ArrayBuffer. \" + \"Received type \" + typeof string);\n }\n\n const len = string.length;\n const mustMatch = arguments.length > 2 && arguments[2] === true;\n if (!mustMatch && len === 0) return 0; // Use a for loop to avoid recursion\n\n let loweredCase = false;\n\n for (;;) {\n switch (encoding) {\n case \"ascii\":\n case \"latin1\":\n case \"binary\":\n return len;\n\n case \"utf8\":\n case \"utf-8\":\n return utf8ToBytes(string).length;\n\n case \"ucs2\":\n case \"ucs-2\":\n case \"utf16le\":\n case \"utf-16le\":\n return len * 2;\n\n case \"hex\":\n return len >>> 1;\n\n case \"base64\":\n return base64ToBytes(string).length;\n\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length; // assume utf8\n }\n\n encoding = (\"\" + encoding).toLowerCase();\n loweredCase = true;\n }\n }\n }\n\n Buffer.byteLength = byteLength;\n\n function slowToString(encoding, start, end) {\n let loweredCase = false; // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n\n if (start === undefined || start < 0) {\n start = 0;\n } // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n\n\n if (start > this.length) {\n return \"\";\n }\n\n if (end === undefined || end > this.length) {\n end = this.length;\n }\n\n if (end <= 0) {\n return \"\";\n } // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n\n\n end >>>= 0;\n start >>>= 0;\n\n if (end <= start) {\n return \"\";\n }\n\n if (!encoding) encoding = \"utf8\";\n\n while (true) {\n switch (encoding) {\n case \"hex\":\n return hexSlice(this, start, end);\n\n case \"utf8\":\n case \"utf-8\":\n return utf8Slice(this, start, end);\n\n case \"ascii\":\n return asciiSlice(this, start, end);\n\n case \"latin1\":\n case \"binary\":\n return latin1Slice(this, start, end);\n\n case \"base64\":\n return base64Slice(this, start, end);\n\n case \"ucs2\":\n case \"ucs-2\":\n case \"utf16le\":\n case \"utf-16le\":\n return utf16leSlice(this, start, end);\n\n default:\n if (loweredCase) throw new TypeError(\"Unknown encoding: \" + encoding);\n encoding = (encoding + \"\").toLowerCase();\n loweredCase = true;\n }\n }\n } // This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n // to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n // reliably in a browserify context because there could be multiple different\n // copies of the 'buffer' package in use. This method works even for Buffer\n // instances that were created from another copy of the `buffer` package.\n // See: https://github.com/feross/buffer/issues/154\n\n\n Buffer.prototype._isBuffer = true;\n\n function swap(b, n, m) {\n const i = b[n];\n b[n] = b[m];\n b[m] = i;\n }\n\n Buffer.prototype.swap16 = function swap16() {\n const len = this.length;\n\n if (len % 2 !== 0) {\n throw new RangeError(\"Buffer size must be a multiple of 16-bits\");\n }\n\n for (let i = 0; i < len; i += 2) {\n swap(this, i, i + 1);\n }\n\n return this;\n };\n\n Buffer.prototype.swap32 = function swap32() {\n const len = this.length;\n\n if (len % 4 !== 0) {\n throw new RangeError(\"Buffer size must be a multiple of 32-bits\");\n }\n\n for (let i = 0; i < len; i += 4) {\n swap(this, i, i + 3);\n swap(this, i + 1, i + 2);\n }\n\n return this;\n };\n\n Buffer.prototype.swap64 = function swap64() {\n const len = this.length;\n\n if (len % 8 !== 0) {\n throw new RangeError(\"Buffer size must be a multiple of 64-bits\");\n }\n\n for (let i = 0; i < len; i += 8) {\n swap(this, i, i + 7);\n swap(this, i + 1, i + 6);\n swap(this, i + 2, i + 5);\n swap(this, i + 3, i + 4);\n }\n\n return this;\n };\n\n Buffer.prototype.toString = function toString() {\n const length = this.length;\n if (length === 0) return \"\";\n if (arguments.length === 0) return utf8Slice(this, 0, length);\n return slowToString.apply(this, arguments);\n };\n\n Buffer.prototype.toLocaleString = Buffer.prototype.toString;\n\n Buffer.prototype.equals = function equals(b) {\n if (!Buffer.isBuffer(b)) throw new TypeError(\"Argument must be a Buffer\");\n if (this === b) return true;\n return Buffer.compare(this, b) === 0;\n };\n\n Buffer.prototype.inspect = function inspect() {\n let str = \"\";\n const max = exports$1.INSPECT_MAX_BYTES;\n str = this.toString(\"hex\", 0, max).replace(/(.{2})/g, \"$1 \").trim();\n if (this.length > max) str += \" ... \";\n return \"<Buffer \" + str + \">\";\n };\n\n if (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect;\n }\n\n Buffer.prototype.compare = function compare(target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength);\n }\n\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\"The \\\"target\\\" argument must be one of type Buffer or Uint8Array. \" + \"Received type \" + typeof target);\n }\n\n if (start === undefined) {\n start = 0;\n }\n\n if (end === undefined) {\n end = target ? target.length : 0;\n }\n\n if (thisStart === undefined) {\n thisStart = 0;\n }\n\n if (thisEnd === undefined) {\n thisEnd = this.length;\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError(\"out of range index\");\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0;\n }\n\n if (thisStart >= thisEnd) {\n return -1;\n }\n\n if (start >= end) {\n return 1;\n }\n\n start >>>= 0;\n end >>>= 0;\n thisStart >>>= 0;\n thisEnd >>>= 0;\n if (this === target) return 0;\n let x = thisEnd - thisStart;\n let y = end - start;\n const len = Math.min(x, y);\n const thisCopy = this.slice(thisStart, thisEnd);\n const targetCopy = target.slice(start, end);\n\n for (let i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i];\n y = targetCopy[i];\n break;\n }\n }\n\n if (x < y) return -1;\n if (y < x) return 1;\n return 0;\n }; // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n // OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n //\n // Arguments:\n // - buffer - a Buffer to search\n // - val - a string, Buffer, or number\n // - byteOffset - an index into `buffer`; will be clamped to an int32\n // - encoding - an optional encoding, relevant is val is a string\n // - dir - true for indexOf, false for lastIndexOf\n\n\n function bidirectionalIndexOf(buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1; // Normalize byteOffset\n\n if (typeof byteOffset === \"string\") {\n encoding = byteOffset;\n byteOffset = 0;\n } else if (byteOffset > 2147483647) {\n byteOffset = 2147483647;\n } else if (byteOffset < -2147483648) {\n byteOffset = -2147483648;\n }\n\n byteOffset = +byteOffset; // Coerce to Number.\n\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : buffer.length - 1;\n } // Normalize byteOffset: negative offsets start from the end of the buffer\n\n\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset;\n\n if (byteOffset >= buffer.length) {\n if (dir) return -1;else byteOffset = buffer.length - 1;\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0;else return -1;\n } // Normalize val\n\n\n if (typeof val === \"string\") {\n val = Buffer.from(val, encoding);\n } // Finally, search either indexOf (if dir is true) or lastIndexOf\n\n\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1;\n }\n\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir);\n } else if (typeof val === \"number\") {\n val = val & 255; // Search for a byte value [0-255]\n\n if (typeof Uint8Array.prototype.indexOf === \"function\") {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset);\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset);\n }\n }\n\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir);\n }\n\n throw new TypeError(\"val must be string, number or Buffer\");\n }\n\n function arrayIndexOf(arr, val, byteOffset, encoding, dir) {\n let indexSize = 1;\n let arrLength = arr.length;\n let valLength = val.length;\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase();\n\n if (encoding === \"ucs2\" || encoding === \"ucs-2\" || encoding === \"utf16le\" || encoding === \"utf-16le\") {\n if (arr.length < 2 || val.length < 2) {\n return -1;\n }\n\n indexSize = 2;\n arrLength /= 2;\n valLength /= 2;\n byteOffset /= 2;\n }\n }\n\n function read(buf, i) {\n if (indexSize === 1) {\n return buf[i];\n } else {\n return buf.readUInt16BE(i * indexSize);\n }\n }\n\n let i;\n\n if (dir) {\n let foundIndex = -1;\n\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i;\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize;\n } else {\n if (foundIndex !== -1) i -= i - foundIndex;\n foundIndex = -1;\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength;\n\n for (i = byteOffset; i >= 0; i--) {\n let found = true;\n\n for (let j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false;\n break;\n }\n }\n\n if (found) return i;\n }\n }\n\n return -1;\n }\n\n Buffer.prototype.includes = function includes(val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1;\n };\n\n Buffer.prototype.indexOf = function indexOf(val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true);\n };\n\n Buffer.prototype.lastIndexOf = function lastIndexOf(val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false);\n };\n\n function hexWrite(buf, string, offset, length) {\n offset = Number(offset) || 0;\n const remaining = buf.length - offset;\n\n if (!length) {\n length = remaining;\n } else {\n length = Number(length);\n\n if (length > remaining) {\n length = remaining;\n }\n }\n\n const strLen = string.length;\n\n if (length > strLen / 2) {\n length = strLen / 2;\n }\n\n let i;\n\n for (i = 0; i < length; ++i) {\n const parsed = parseInt(string.substr(i * 2, 2), 16);\n if (numberIsNaN(parsed)) return i;\n buf[offset + i] = parsed;\n }\n\n return i;\n }\n\n function utf8Write(buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length);\n }\n\n function asciiWrite(buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length);\n }\n\n function base64Write(buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length);\n }\n\n function ucs2Write(buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length);\n }\n\n Buffer.prototype.write = function write(string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = \"utf8\";\n length = this.length;\n offset = 0; // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === \"string\") {\n encoding = offset;\n length = this.length;\n offset = 0; // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0;\n\n if (isFinite(length)) {\n length = length >>> 0;\n if (encoding === undefined) encoding = \"utf8\";\n } else {\n encoding = length;\n length = undefined;\n }\n } else {\n throw new Error(\"Buffer.write(string, encoding, offset[, length]) is no longer supported\");\n }\n\n const remaining = this.length - offset;\n if (length === undefined || length > remaining) length = remaining;\n\n if (string.length > 0 && (length < 0 || offset < 0) || offset > this.length) {\n throw new RangeError(\"Attempt to write outside buffer bounds\");\n }\n\n if (!encoding) encoding = \"utf8\";\n let loweredCase = false;\n\n for (;;) {\n switch (encoding) {\n case \"hex\":\n return hexWrite(this, string, offset, length);\n\n case \"utf8\":\n case \"utf-8\":\n return utf8Write(this, string, offset, length);\n\n case \"ascii\":\n case \"latin1\":\n case \"binary\":\n return asciiWrite(this, string, offset, length);\n\n case \"base64\":\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length);\n\n case \"ucs2\":\n case \"ucs-2\":\n case \"utf16le\":\n case \"utf-16le\":\n return ucs2Write(this, string, offset, length);\n\n default:\n if (loweredCase) throw new TypeError(\"Unknown encoding: \" + encoding);\n encoding = (\"\" + encoding).toLowerCase();\n loweredCase = true;\n }\n }\n };\n\n Buffer.prototype.toJSON = function toJSON() {\n return {\n type: \"Buffer\",\n data: Array.prototype.slice.call(this._arr || this, 0)\n };\n };\n\n function base64Slice(buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf);\n } else {\n return base64.fromByteArray(buf.slice(start, end));\n }\n }\n\n function utf8Slice(buf, start, end) {\n end = Math.min(buf.length, end);\n const res = [];\n let i = start;\n\n while (i < end) {\n const firstByte = buf[i];\n let codePoint = null;\n let bytesPerSequence = firstByte > 239 ? 4 : firstByte > 223 ? 3 : firstByte > 191 ? 2 : 1;\n\n if (i + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint;\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 128) {\n codePoint = firstByte;\n }\n\n break;\n\n case 2:\n secondByte = buf[i + 1];\n\n if ((secondByte & 192) === 128) {\n tempCodePoint = (firstByte & 31) << 6 | secondByte & 63;\n\n if (tempCodePoint > 127) {\n codePoint = tempCodePoint;\n }\n }\n\n break;\n\n case 3:\n secondByte = buf[i + 1];\n thirdByte = buf[i + 2];\n\n if ((secondByte & 192) === 128 && (thirdByte & 192) === 128) {\n tempCodePoint = (firstByte & 15) << 12 | (secondByte & 63) << 6 | thirdByte & 63;\n\n if (tempCodePoint > 2047 && (tempCodePoint < 55296 || tempCodePoint > 57343)) {\n codePoint = tempCodePoint;\n }\n }\n\n break;\n\n case 4:\n secondByte = buf[i + 1];\n thirdByte = buf[i + 2];\n fourthByte = buf[i + 3];\n\n if ((secondByte & 192) === 128 && (thirdByte & 192) === 128 && (fourthByte & 192) === 128) {\n tempCodePoint = (firstByte & 15) << 18 | (secondByte & 63) << 12 | (thirdByte & 63) << 6 | fourthByte & 63;\n\n if (tempCodePoint > 65535 && tempCodePoint < 1114112) {\n codePoint = tempCodePoint;\n }\n }\n\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 65533;\n bytesPerSequence = 1;\n } else if (codePoint > 65535) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 65536;\n res.push(codePoint >>> 10 & 1023 | 55296);\n codePoint = 56320 | codePoint & 1023;\n }\n\n res.push(codePoint);\n i += bytesPerSequence;\n }\n\n return decodeCodePointsArray(res);\n } // Based on http://stackoverflow.com/a/22747272/680742, the browser with\n // the lowest limit is Chrome, with 0x10000 args.\n // We go 1 magnitude less, for safety\n\n\n const MAX_ARGUMENTS_LENGTH = 4096;\n\n function decodeCodePointsArray(codePoints) {\n const len = codePoints.length;\n\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints); // avoid extra slice()\n } // Decode in chunks to avoid \"call stack size exceeded\".\n\n\n let res = \"\";\n let i = 0;\n\n while (i < len) {\n res += String.fromCharCode.apply(String, codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH));\n }\n\n return res;\n }\n\n function asciiSlice(buf, start, end) {\n let ret = \"\";\n end = Math.min(buf.length, end);\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 127);\n }\n\n return ret;\n }\n\n function latin1Slice(buf, start, end) {\n let ret = \"\";\n end = Math.min(buf.length, end);\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i]);\n }\n\n return ret;\n }\n\n function hexSlice(buf, start, end) {\n const len = buf.length;\n if (!start || start < 0) start = 0;\n if (!end || end < 0 || end > len) end = len;\n let out = \"\";\n\n for (let i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]];\n }\n\n return out;\n }\n\n function utf16leSlice(buf, start, end) {\n const bytes = buf.slice(start, end);\n let res = \"\"; // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n\n for (let i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256);\n }\n\n return res;\n }\n\n Buffer.prototype.slice = function slice(start, end) {\n const len = this.length;\n start = ~~start;\n end = end === undefined ? len : ~~end;\n\n if (start < 0) {\n start += len;\n if (start < 0) start = 0;\n } else if (start > len) {\n start = len;\n }\n\n if (end < 0) {\n end += len;\n if (end < 0) end = 0;\n } else if (end > len) {\n end = len;\n }\n\n if (end < start) end = start;\n const newBuf = this.subarray(start, end); // Return an augmented `Uint8Array` instance\n\n Object.setPrototypeOf(newBuf, Buffer.prototype);\n return newBuf;\n };\n /*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\n\n\n function checkOffset(offset, ext, length) {\n if (offset % 1 !== 0 || offset < 0) throw new RangeError(\"offset is not uint\");\n if (offset + ext > length) throw new RangeError(\"Trying to access beyond buffer length\");\n }\n\n Buffer.prototype.readUintLE = Buffer.prototype.readUIntLE = function readUIntLE(offset, byteLength, noAssert) {\n offset = offset >>> 0;\n byteLength = byteLength >>> 0;\n if (!noAssert) checkOffset(offset, byteLength, this.length);\n let val = this[offset];\n let mul = 1;\n let i = 0;\n\n while (++i < byteLength && (mul *= 256)) {\n val += this[offset + i] * mul;\n }\n\n return val;\n };\n\n Buffer.prototype.readUintBE = Buffer.prototype.readUIntBE = function readUIntBE(offset, byteLength, noAssert) {\n offset = offset >>> 0;\n byteLength = byteLength >>> 0;\n\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length);\n }\n\n let val = this[offset + --byteLength];\n let mul = 1;\n\n while (byteLength > 0 && (mul *= 256)) {\n val += this[offset + --byteLength] * mul;\n }\n\n return val;\n };\n\n Buffer.prototype.readUint8 = Buffer.prototype.readUInt8 = function readUInt8(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 1, this.length);\n return this[offset];\n };\n\n Buffer.prototype.readUint16LE = Buffer.prototype.readUInt16LE = function readUInt16LE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 2, this.length);\n return this[offset] | this[offset + 1] << 8;\n };\n\n Buffer.prototype.readUint16BE = Buffer.prototype.readUInt16BE = function readUInt16BE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 2, this.length);\n return this[offset] << 8 | this[offset + 1];\n };\n\n Buffer.prototype.readUint32LE = Buffer.prototype.readUInt32LE = function readUInt32LE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 4, this.length);\n return (this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16) + this[offset + 3] * 16777216;\n };\n\n Buffer.prototype.readUint32BE = Buffer.prototype.readUInt32BE = function readUInt32BE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 4, this.length);\n return this[offset] * 16777216 + (this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3]);\n };\n\n Buffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE(offset) {\n offset = offset >>> 0;\n validateNumber(offset, \"offset\");\n const first = this[offset];\n const last = this[offset + 7];\n\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8);\n }\n\n const lo = first + this[++offset] * 2 ** 8 + this[++offset] * 2 ** 16 + this[++offset] * 2 ** 24;\n const hi = this[++offset] + this[++offset] * 2 ** 8 + this[++offset] * 2 ** 16 + last * 2 ** 24;\n return BigInt(lo) + (BigInt(hi) << BigInt(32));\n });\n Buffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE(offset) {\n offset = offset >>> 0;\n validateNumber(offset, \"offset\");\n const first = this[offset];\n const last = this[offset + 7];\n\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8);\n }\n\n const hi = first * 2 ** 24 + this[++offset] * 2 ** 16 + this[++offset] * 2 ** 8 + this[++offset];\n const lo = this[++offset] * 2 ** 24 + this[++offset] * 2 ** 16 + this[++offset] * 2 ** 8 + last;\n return (BigInt(hi) << BigInt(32)) + BigInt(lo);\n });\n\n Buffer.prototype.readIntLE = function readIntLE(offset, byteLength, noAssert) {\n offset = offset >>> 0;\n byteLength = byteLength >>> 0;\n if (!noAssert) checkOffset(offset, byteLength, this.length);\n let val = this[offset];\n let mul = 1;\n let i = 0;\n\n while (++i < byteLength && (mul *= 256)) {\n val += this[offset + i] * mul;\n }\n\n mul *= 128;\n if (val >= mul) val -= Math.pow(2, 8 * byteLength);\n return val;\n };\n\n Buffer.prototype.readIntBE = function readIntBE(offset, byteLength, noAssert) {\n offset = offset >>> 0;\n byteLength = byteLength >>> 0;\n if (!noAssert) checkOffset(offset, byteLength, this.length);\n let i = byteLength;\n let mul = 1;\n let val = this[offset + --i];\n\n while (i > 0 && (mul *= 256)) {\n val += this[offset + --i] * mul;\n }\n\n mul *= 128;\n if (val >= mul) val -= Math.pow(2, 8 * byteLength);\n return val;\n };\n\n Buffer.prototype.readInt8 = function readInt8(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 1, this.length);\n if (!(this[offset] & 128)) return this[offset];\n return (255 - this[offset] + 1) * -1;\n };\n\n Buffer.prototype.readInt16LE = function readInt16LE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 2, this.length);\n const val = this[offset] | this[offset + 1] << 8;\n return val & 32768 ? val | 4294901760 : val;\n };\n\n Buffer.prototype.readInt16BE = function readInt16BE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 2, this.length);\n const val = this[offset + 1] | this[offset] << 8;\n return val & 32768 ? val | 4294901760 : val;\n };\n\n Buffer.prototype.readInt32LE = function readInt32LE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 4, this.length);\n return this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16 | this[offset + 3] << 24;\n };\n\n Buffer.prototype.readInt32BE = function readInt32BE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 4, this.length);\n return this[offset] << 24 | this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3];\n };\n\n Buffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE(offset) {\n offset = offset >>> 0;\n validateNumber(offset, \"offset\");\n const first = this[offset];\n const last = this[offset + 7];\n\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8);\n }\n\n const val = this[offset + 4] + this[offset + 5] * 2 ** 8 + this[offset + 6] * 2 ** 16 + (last << 24); // Overflow\n\n return (BigInt(val) << BigInt(32)) + BigInt(first + this[++offset] * 2 ** 8 + this[++offset] * 2 ** 16 + this[++offset] * 2 ** 24);\n });\n Buffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE(offset) {\n offset = offset >>> 0;\n validateNumber(offset, \"offset\");\n const first = this[offset];\n const last = this[offset + 7];\n\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8);\n }\n\n const val = (first << 24) + // Overflow\n this[++offset] * 2 ** 16 + this[++offset] * 2 ** 8 + this[++offset];\n return (BigInt(val) << BigInt(32)) + BigInt(this[++offset] * 2 ** 24 + this[++offset] * 2 ** 16 + this[++offset] * 2 ** 8 + last);\n });\n\n Buffer.prototype.readFloatLE = function readFloatLE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 4, this.length);\n return ieee754.read(this, offset, true, 23, 4);\n };\n\n Buffer.prototype.readFloatBE = function readFloatBE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 4, this.length);\n return ieee754.read(this, offset, false, 23, 4);\n };\n\n Buffer.prototype.readDoubleLE = function readDoubleLE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 8, this.length);\n return ieee754.read(this, offset, true, 52, 8);\n };\n\n Buffer.prototype.readDoubleBE = function readDoubleBE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 8, this.length);\n return ieee754.read(this, offset, false, 52, 8);\n };\n\n function checkInt(buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError(\"\\\"buffer\\\" argument must be a Buffer instance\");\n if (value > max || value < min) throw new RangeError(\"\\\"value\\\" argument is out of bounds\");\n if (offset + ext > buf.length) throw new RangeError(\"Index out of range\");\n }\n\n Buffer.prototype.writeUintLE = Buffer.prototype.writeUIntLE = function writeUIntLE(value, offset, byteLength, noAssert) {\n value = +value;\n offset = offset >>> 0;\n byteLength = byteLength >>> 0;\n\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1;\n checkInt(this, value, offset, byteLength, maxBytes, 0);\n }\n\n let mul = 1;\n let i = 0;\n this[offset] = value & 255;\n\n while (++i < byteLength && (mul *= 256)) {\n this[offset + i] = value / mul & 255;\n }\n\n return offset + byteLength;\n };\n\n Buffer.prototype.writeUintBE = Buffer.prototype.writeUIntBE = function writeUIntBE(value, offset, byteLength, noAssert) {\n value = +value;\n offset = offset >>> 0;\n byteLength = byteLength >>> 0;\n\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1;\n checkInt(this, value, offset, byteLength, maxBytes, 0);\n }\n\n let i = byteLength - 1;\n let mul = 1;\n this[offset + i] = value & 255;\n\n while (--i >= 0 && (mul *= 256)) {\n this[offset + i] = value / mul & 255;\n }\n\n return offset + byteLength;\n };\n\n Buffer.prototype.writeUint8 = Buffer.prototype.writeUInt8 = function writeUInt8(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 1, 255, 0);\n this[offset] = value & 255;\n return offset + 1;\n };\n\n Buffer.prototype.writeUint16LE = Buffer.prototype.writeUInt16LE = function writeUInt16LE(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 2, 65535, 0);\n this[offset] = value & 255;\n this[offset + 1] = value >>> 8;\n return offset + 2;\n };\n\n Buffer.prototype.writeUint16BE = Buffer.prototype.writeUInt16BE = function writeUInt16BE(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 2, 65535, 0);\n this[offset] = value >>> 8;\n this[offset + 1] = value & 255;\n return offset + 2;\n };\n\n Buffer.prototype.writeUint32LE = Buffer.prototype.writeUInt32LE = function writeUInt32LE(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 4, 4294967295, 0);\n this[offset + 3] = value >>> 24;\n this[offset + 2] = value >>> 16;\n this[offset + 1] = value >>> 8;\n this[offset] = value & 255;\n return offset + 4;\n };\n\n Buffer.prototype.writeUint32BE = Buffer.prototype.writeUInt32BE = function writeUInt32BE(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 4, 4294967295, 0);\n this[offset] = value >>> 24;\n this[offset + 1] = value >>> 16;\n this[offset + 2] = value >>> 8;\n this[offset + 3] = value & 255;\n return offset + 4;\n };\n\n function wrtBigUInt64LE(buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7);\n let lo = Number(value & BigInt(4294967295));\n buf[offset++] = lo;\n lo = lo >> 8;\n buf[offset++] = lo;\n lo = lo >> 8;\n buf[offset++] = lo;\n lo = lo >> 8;\n buf[offset++] = lo;\n let hi = Number(value >> BigInt(32) & BigInt(4294967295));\n buf[offset++] = hi;\n hi = hi >> 8;\n buf[offset++] = hi;\n hi = hi >> 8;\n buf[offset++] = hi;\n hi = hi >> 8;\n buf[offset++] = hi;\n return offset;\n }\n\n function wrtBigUInt64BE(buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7);\n let lo = Number(value & BigInt(4294967295));\n buf[offset + 7] = lo;\n lo = lo >> 8;\n buf[offset + 6] = lo;\n lo = lo >> 8;\n buf[offset + 5] = lo;\n lo = lo >> 8;\n buf[offset + 4] = lo;\n let hi = Number(value >> BigInt(32) & BigInt(4294967295));\n buf[offset + 3] = hi;\n hi = hi >> 8;\n buf[offset + 2] = hi;\n hi = hi >> 8;\n buf[offset + 1] = hi;\n hi = hi >> 8;\n buf[offset] = hi;\n return offset + 8;\n }\n\n Buffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE(value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt(\"0xffffffffffffffff\"));\n });\n Buffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE(value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt(\"0xffffffffffffffff\"));\n });\n\n Buffer.prototype.writeIntLE = function writeIntLE(value, offset, byteLength, noAssert) {\n value = +value;\n offset = offset >>> 0;\n\n if (!noAssert) {\n const limit = Math.pow(2, 8 * byteLength - 1);\n checkInt(this, value, offset, byteLength, limit - 1, -limit);\n }\n\n let i = 0;\n let mul = 1;\n let sub = 0;\n this[offset] = value & 255;\n\n while (++i < byteLength && (mul *= 256)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1;\n }\n\n this[offset + i] = (value / mul >> 0) - sub & 255;\n }\n\n return offset + byteLength;\n };\n\n Buffer.prototype.writeIntBE = function writeIntBE(value, offset, byteLength, noAssert) {\n value = +value;\n offset = offset >>> 0;\n\n if (!noAssert) {\n const limit = Math.pow(2, 8 * byteLength - 1);\n checkInt(this, value, offset, byteLength, limit - 1, -limit);\n }\n\n let i = byteLength - 1;\n let mul = 1;\n let sub = 0;\n this[offset + i] = value & 255;\n\n while (--i >= 0 && (mul *= 256)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1;\n }\n\n this[offset + i] = (value / mul >> 0) - sub & 255;\n }\n\n return offset + byteLength;\n };\n\n Buffer.prototype.writeInt8 = function writeInt8(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 1, 127, -128);\n if (value < 0) value = 255 + value + 1;\n this[offset] = value & 255;\n return offset + 1;\n };\n\n Buffer.prototype.writeInt16LE = function writeInt16LE(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 2, 32767, -32768);\n this[offset] = value & 255;\n this[offset + 1] = value >>> 8;\n return offset + 2;\n };\n\n Buffer.prototype.writeInt16BE = function writeInt16BE(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 2, 32767, -32768);\n this[offset] = value >>> 8;\n this[offset + 1] = value & 255;\n return offset + 2;\n };\n\n Buffer.prototype.writeInt32LE = function writeInt32LE(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 4, 2147483647, -2147483648);\n this[offset] = value & 255;\n this[offset + 1] = value >>> 8;\n this[offset + 2] = value >>> 16;\n this[offset + 3] = value >>> 24;\n return offset + 4;\n };\n\n Buffer.prototype.writeInt32BE = function writeInt32BE(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 4, 2147483647, -2147483648);\n if (value < 0) value = 4294967295 + value + 1;\n this[offset] = value >>> 24;\n this[offset + 1] = value >>> 16;\n this[offset + 2] = value >>> 8;\n this[offset + 3] = value & 255;\n return offset + 4;\n };\n\n Buffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE(value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, -BigInt(\"0x8000000000000000\"), BigInt(\"0x7fffffffffffffff\"));\n });\n Buffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE(value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, -BigInt(\"0x8000000000000000\"), BigInt(\"0x7fffffffffffffff\"));\n });\n\n function checkIEEE754(buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError(\"Index out of range\");\n if (offset < 0) throw new RangeError(\"Index out of range\");\n }\n\n function writeFloat(buf, value, offset, littleEndian, noAssert) {\n value = +value;\n offset = offset >>> 0;\n\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4);\n }\n\n ieee754.write(buf, value, offset, littleEndian, 23, 4);\n return offset + 4;\n }\n\n Buffer.prototype.writeFloatLE = function writeFloatLE(value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert);\n };\n\n Buffer.prototype.writeFloatBE = function writeFloatBE(value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert);\n };\n\n function writeDouble(buf, value, offset, littleEndian, noAssert) {\n value = +value;\n offset = offset >>> 0;\n\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8);\n }\n\n ieee754.write(buf, value, offset, littleEndian, 52, 8);\n return offset + 8;\n }\n\n Buffer.prototype.writeDoubleLE = function writeDoubleLE(value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert);\n };\n\n Buffer.prototype.writeDoubleBE = function writeDoubleBE(value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert);\n }; // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\n\n\n Buffer.prototype.copy = function copy(target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError(\"argument should be a Buffer\");\n if (!start) start = 0;\n if (!end && end !== 0) end = this.length;\n if (targetStart >= target.length) targetStart = target.length;\n if (!targetStart) targetStart = 0;\n if (end > 0 && end < start) end = start; // Copy 0 bytes; we're done\n\n if (end === start) return 0;\n if (target.length === 0 || this.length === 0) return 0; // Fatal error conditions\n\n if (targetStart < 0) {\n throw new RangeError(\"targetStart out of bounds\");\n }\n\n if (start < 0 || start >= this.length) throw new RangeError(\"Index out of range\");\n if (end < 0) throw new RangeError(\"sourceEnd out of bounds\"); // Are we oob?\n\n if (end > this.length) end = this.length;\n\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start;\n }\n\n const len = end - start;\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === \"function\") {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end);\n } else {\n Uint8Array.prototype.set.call(target, this.subarray(start, end), targetStart);\n }\n\n return len;\n }; // Usage:\n // buffer.fill(number[, offset[, end]])\n // buffer.fill(buffer[, offset[, end]])\n // buffer.fill(string[, offset[, end]][, encoding])\n\n\n Buffer.prototype.fill = function fill(val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === \"string\") {\n if (typeof start === \"string\") {\n encoding = start;\n start = 0;\n end = this.length;\n } else if (typeof end === \"string\") {\n encoding = end;\n end = this.length;\n }\n\n if (encoding !== undefined && typeof encoding !== \"string\") {\n throw new TypeError(\"encoding must be a string\");\n }\n\n if (typeof encoding === \"string\" && !Buffer.isEncoding(encoding)) {\n throw new TypeError(\"Unknown encoding: \" + encoding);\n }\n\n if (val.length === 1) {\n const code = val.charCodeAt(0);\n\n if (encoding === \"utf8\" && code < 128 || encoding === \"latin1\") {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code;\n }\n }\n } else if (typeof val === \"number\") {\n val = val & 255;\n } else if (typeof val === \"boolean\") {\n val = Number(val);\n } // Invalid ranges are not set to a default, so can range check early.\n\n\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError(\"Out of range index\");\n }\n\n if (end <= start) {\n return this;\n }\n\n start = start >>> 0;\n end = end === undefined ? this.length : end >>> 0;\n if (!val) val = 0;\n let i;\n\n if (typeof val === \"number\") {\n for (i = start; i < end; ++i) {\n this[i] = val;\n }\n } else {\n const bytes = Buffer.isBuffer(val) ? val : Buffer.from(val, encoding);\n const len = bytes.length;\n\n if (len === 0) {\n throw new TypeError(\"The value \\\"\" + val + \"\\\" is invalid for argument \\\"value\\\"\");\n }\n\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len];\n }\n }\n\n return this;\n }; // CUSTOM ERRORS\n // =============\n // Simplified versions from Node, changed for Buffer-only usage\n\n\n const errors = {};\n\n function E(sym, getMessage, Base) {\n errors[sym] = class NodeError extends Base {\n constructor() {\n super();\n Object.defineProperty(this, \"message\", {\n value: getMessage.apply(this, arguments),\n writable: true,\n configurable: true\n }); // Add the error code to the name to include it in the stack trace.\n\n this.name = `${this.name} [${sym}]`; // Access the stack to generate the error message including the error code\n // from the name.\n\n this.stack; // eslint-disable-line no-unused-expressions\n // Reset the name to the actual name.\n\n delete this.name;\n }\n\n get code() {\n return sym;\n }\n\n set code(value) {\n Object.defineProperty(this, \"code\", {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n });\n }\n\n toString() {\n return `${this.name} [${sym}]: ${this.message}`;\n }\n\n };\n }\n\n E(\"ERR_BUFFER_OUT_OF_BOUNDS\", function (name) {\n if (name) {\n return `${name} is outside of buffer bounds`;\n }\n\n return \"Attempt to access memory outside buffer bounds\";\n }, RangeError);\n E(\"ERR_INVALID_ARG_TYPE\", function (name, actual) {\n return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`;\n }, TypeError);\n E(\"ERR_OUT_OF_RANGE\", function (str, range, input) {\n let msg = `The value of \"${str}\" is out of range.`;\n let received = input;\n\n if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n received = addNumericalSeparator(String(input));\n } else if (typeof input === \"bigint\") {\n received = String(input);\n\n if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n received = addNumericalSeparator(received);\n }\n\n received += \"n\";\n }\n\n msg += ` It must be ${range}. Received ${received}`;\n return msg;\n }, RangeError);\n\n function addNumericalSeparator(val) {\n let res = \"\";\n let i = val.length;\n const start = val[0] === \"-\" ? 1 : 0;\n\n for (; i >= start + 4; i -= 3) {\n res = `_${val.slice(i - 3, i)}${res}`;\n }\n\n return `${val.slice(0, i)}${res}`;\n } // CHECK FUNCTIONS\n // ===============\n\n\n function checkBounds(buf, offset, byteLength) {\n validateNumber(offset, \"offset\");\n\n if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n boundsError(offset, buf.length - (byteLength + 1));\n }\n }\n\n function checkIntBI(value, min, max, buf, offset, byteLength) {\n if (value > max || value < min) {\n const n = typeof min === \"bigint\" ? \"n\" : \"\";\n let range;\n\n if (byteLength > 3) {\n if (min === 0 || min === BigInt(0)) {\n range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`;\n } else {\n range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` + `${(byteLength + 1) * 8 - 1}${n}`;\n }\n } else {\n range = `>= ${min}${n} and <= ${max}${n}`;\n }\n\n throw new errors.ERR_OUT_OF_RANGE(\"value\", range, value);\n }\n\n checkBounds(buf, offset, byteLength);\n }\n\n function validateNumber(value, name) {\n if (typeof value !== \"number\") {\n throw new errors.ERR_INVALID_ARG_TYPE(name, \"number\", value);\n }\n }\n\n function boundsError(value, length, type) {\n if (Math.floor(value) !== value) {\n validateNumber(value, type);\n throw new errors.ERR_OUT_OF_RANGE(type || \"offset\", \"an integer\", value);\n }\n\n if (length < 0) {\n throw new errors.ERR_BUFFER_OUT_OF_BOUNDS();\n }\n\n throw new errors.ERR_OUT_OF_RANGE(type || \"offset\", `>= ${type ? 1 : 0} and <= ${length}`, value);\n } // HELPER FUNCTIONS\n // ================\n\n\n const INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g;\n\n function base64clean(str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split(\"=\")[0]; // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n\n str = str.trim().replace(INVALID_BASE64_RE, \"\"); // Node converts strings with length < 2 to ''\n\n if (str.length < 2) return \"\"; // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n\n while (str.length % 4 !== 0) {\n str = str + \"=\";\n }\n\n return str;\n }\n\n function utf8ToBytes(string, units) {\n units = units || Infinity;\n let codePoint;\n const length = string.length;\n let leadSurrogate = null;\n const bytes = [];\n\n for (let i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i); // is surrogate component\n\n if (codePoint > 55295 && codePoint < 57344) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 56319) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(239, 191, 189);\n continue;\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(239, 191, 189);\n continue;\n } // valid lead\n\n\n leadSurrogate = codePoint;\n continue;\n } // 2 leads in a row\n\n\n if (codePoint < 56320) {\n if ((units -= 3) > -1) bytes.push(239, 191, 189);\n leadSurrogate = codePoint;\n continue;\n } // valid surrogate pair\n\n\n codePoint = (leadSurrogate - 55296 << 10 | codePoint - 56320) + 65536;\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(239, 191, 189);\n }\n\n leadSurrogate = null; // encode utf8\n\n if (codePoint < 128) {\n if ((units -= 1) < 0) break;\n bytes.push(codePoint);\n } else if (codePoint < 2048) {\n if ((units -= 2) < 0) break;\n bytes.push(codePoint >> 6 | 192, codePoint & 63 | 128);\n } else if (codePoint < 65536) {\n if ((units -= 3) < 0) break;\n bytes.push(codePoint >> 12 | 224, codePoint >> 6 & 63 | 128, codePoint & 63 | 128);\n } else if (codePoint < 1114112) {\n if ((units -= 4) < 0) break;\n bytes.push(codePoint >> 18 | 240, codePoint >> 12 & 63 | 128, codePoint >> 6 & 63 | 128, codePoint & 63 | 128);\n } else {\n throw new Error(\"Invalid code point\");\n }\n }\n\n return bytes;\n }\n\n function asciiToBytes(str) {\n const byteArray = [];\n\n for (let i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 255);\n }\n\n return byteArray;\n }\n\n function utf16leToBytes(str, units) {\n let c, hi, lo;\n const byteArray = [];\n\n for (let i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break;\n c = str.charCodeAt(i);\n hi = c >> 8;\n lo = c % 256;\n byteArray.push(lo);\n byteArray.push(hi);\n }\n\n return byteArray;\n }\n\n function base64ToBytes(str) {\n return base64.toByteArray(base64clean(str));\n }\n\n function blitBuffer(src, dst, offset, length) {\n let i;\n\n for (i = 0; i < length; ++i) {\n if (i + offset >= dst.length || i >= src.length) break;\n dst[i + offset] = src[i];\n }\n\n return i;\n } // ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n // the `instanceof` check but they should be treated as of that type.\n // See: https://github.com/feross/buffer/issues/166\n\n\n function isInstance(obj, type) {\n return obj instanceof type || obj != null && obj.constructor != null && obj.constructor.name != null && obj.constructor.name === type.name;\n }\n\n function numberIsNaN(obj) {\n // For IE11 support\n return obj !== obj; // eslint-disable-line no-self-compare\n } // Create lookup table for `toString('hex')`\n // See: https://github.com/feross/buffer/issues/219\n\n\n const hexSliceLookupTable = function () {\n const alphabet = \"0123456789abcdef\";\n const table = new Array(256);\n\n for (let i = 0; i < 16; ++i) {\n const i16 = i * 16;\n\n for (let j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j];\n }\n }\n\n return table;\n }(); // Return not function with Error if BigInt not supported\n\n\n function defineBigIntMethod(fn) {\n return typeof BigInt === \"undefined\" ? BufferBigIntNotDefined : fn;\n }\n\n function BufferBigIntNotDefined() {\n throw new Error(\"BigInt not supported\");\n }\n\n return exports$1;\n}\n\nconst exports = dew();\nexports['Buffer']; exports['SlowBuffer']; exports['INSPECT_MAX_BYTES']; exports['kMaxLength'];\n\nvar Buffer = exports.Buffer;\r\nvar INSPECT_MAX_BYTES = exports.INSPECT_MAX_BYTES;\r\nvar kMaxLength = exports.kMaxLength;\n\nexport { Buffer, INSPECT_MAX_BYTES, exports as default, kMaxLength };\n", "import { AllbridgeCoreSdkOptions, NodeRpcUrls, NodeUrlsConfig } from \"../index\";\n\nexport const mainnet: AllbridgeCoreSdkOptions = {\n coreApiUrl: \"https://core.api.allbridgecoreapi.net\",\n coreApiQueryParams: {},\n coreApiHeaders: {},\n jupiterUrl: \"https://quote-api.jup.ag/v6\",\n wormholeMessengerProgramId: \"worm2ZoG2kUd4vFXhvjh93UUH596ayRfgQ2MgjNMTth\",\n solanaLookUpTable: \"2JcBAEVnAwVo4u8d61iqgHPrzZuugur7cVTjWubsVLHj\",\n sorobanNetworkPassphrase: \"Public Global Stellar Network ; September 2015\",\n tronJsonRpc: \"https://api.trongrid.io/jsonrpc\",\n cctpParams: {\n cctpTransmitterProgramId: \"CCTPmbSD7gX1bxKPAmg77w8oFzNFpaQiQUWD43TKaecd\",\n cctpTokenMessengerMinter: \"CCTPiPYPc6AsJuwueEnWgSgucamXDZwBd53dQ11YiKX3\",\n cctpDomains: { ETH: 0, AVA: 1, OPT: 2, ARB: 3, SOL: 5, BAS: 6, POL: 7 },\n },\n cachePoolInfoChainSec: 20,\n};\n\n/**\n * This is default rpc urls for Solana and Tron,<p/> Override and use your own for proper and stable work\n * @Deprecated use {@link nodeRpcUrlsDefault}\n */\nexport const nodeUrlsDefault: NodeUrlsConfig = {\n solanaRpcUrl: \"https://api.mainnet-beta.solana.com\",\n tronRpcUrl: \"https://api.trongrid.io\",\n};\n\n/**\n * This is default rpc urls for Solana and Tron,<p/> Override and use your own for proper and stable work\n */\nexport const nodeRpcUrlsDefault: NodeRpcUrls = {\n SOL: \"https://api.mainnet-beta.solana.com\",\n TRX: \"https://api.trongrid.io\",\n SRB: \"https://rpc.stellar.org:443\",\n STLR: \"https://horizon.stellar.org\",\n};\n", "import { Big } from \"big.js\";\nimport { Chains } from \"../chains\";\nimport { ApiClientImpl } from \"../client/core-api/api-client\";\nimport { ApiClientCaching } from \"../client/core-api/api-client-caching\";\nimport {\n AddressStatus,\n CheckAddressResponse,\n GasBalanceResponse,\n Messenger,\n PendingInfoDTO,\n TransferStatusResponse,\n} from \"../client/core-api/core-api.model\";\nimport { AllbridgeCoreClientImpl } from \"../client/core-api/core-client-base\";\nimport { AllbridgeCoreClientFiltered, AllbridgeCoreClientFilteredImpl } from \"../client/core-api/core-client-filtered\";\nimport { AllbridgeCoreClientPoolInfoCaching } from \"../client/core-api/core-client-pool-info-caching\";\nimport { mainnet } from \"../configs\";\nimport { AllbridgeCoreSdkOptions, BasicChainProperties, NodeRpcUrls, SdkError } from \"../index\";\nimport {\n AmountFormat,\n AmountFormatted,\n AmountsAndGasFeeOptions,\n CCTPDoesNotSupportedError,\n ExtraGasMaxLimitResponse,\n GasFeeOptions,\n GetTokenBalanceParams,\n InsufficientPoolLiquidityError,\n NodeRpcUrlNotInitializedError,\n PendingStatusInfoResponse,\n Provider,\n SendAmountDetails,\n SwapAndBridgeCalculationData,\n} from \"../models\";\nimport { ChainDetailsMap, PoolInfo, PoolKeyObject, TokenWithChainDetails } from \"../tokens-info\";\nimport {\n aprInPercents,\n convertAmountPrecision,\n convertFloatAmountToInt,\n convertIntAmountToFloat,\n fromSystemPrecision,\n getFeePercent,\n getSwapFromVUsdPoolInfo,\n swapFromVUsd,\n swapFromVUsdReverse,\n swapToVUsd,\n swapToVUsdReverse,\n} from \"../utils/calculation\";\nimport { SYSTEM_PRECISION } from \"../utils/calculation/constants\";\nimport { getSendAmountDetails } from \"../utils/calculation/swap-and-bridge-details\";\nimport {\n swapAndBridgeFeeCalculation,\n swapAndBridgeFeeCalculationReverse,\n} from \"../utils/calculation/swap-and-bridge-fee-calc\";\nimport { getPoolInfoByToken, validateAmountDecimals, validateAmountGtZero } from \"../utils/utils\";\nimport { BridgeService, DefaultBridgeService } from \"./bridge\";\nimport { GetNativeTokenBalanceParams } from \"./bridge/models\";\nimport { getExtraGasMaxLimits, getGasFeeOptions } from \"./bridge/utils\";\nimport { DefaultLiquidityPoolService, LiquidityPoolService } from \"./liquidity-pool\";\nimport { DefaultTokenService, TokenService } from \"./token\";\n\nexport class NodeRpcUrlsConfig {\n constructor(private nodeRpcUrls: NodeRpcUrls) {}\n\n getNodeRpcUrl(chainSymbol: string): string {\n const nodeRpcUrl = this.nodeRpcUrls[chainSymbol];\n if (nodeRpcUrl !== undefined) {\n return nodeRpcUrl;\n } else {\n throw new NodeRpcUrlNotInitializedError(chainSymbol);\n }\n }\n}\n\nexport class AllbridgeCoreSdkService {\n private readonly api: AllbridgeCoreClientFiltered;\n\n private readonly tokenService: TokenService;\n\n readonly params: AllbridgeCoreSdkOptions;\n\n bridge: BridgeService;\n pool: LiquidityPoolService;\n\n constructor(nodeRpcUrlsConfig: NodeRpcUrlsConfig, params: AllbridgeCoreSdkOptions = mainnet) {\n Chains.addChainsProperties(params.additionalChainsProperties as Record<string, BasicChainProperties>);\n const apiClient = new ApiClientImpl(params);\n const apiClientCaching = new ApiClientCaching(apiClient);\n const coreClient = new AllbridgeCoreClientImpl(apiClientCaching);\n const coreClientPoolInfoCaching = new AllbridgeCoreClientPoolInfoCaching(coreClient);\n this.api = new AllbridgeCoreClientFilteredImpl(coreClientPoolInfoCaching, params);\n this.tokenService = new DefaultTokenService(this.api, nodeRpcUrlsConfig, params);\n this.bridge = new DefaultBridgeService(this.api, nodeRpcUrlsConfig, params, this.tokenService);\n this.pool = new DefaultLiquidityPoolService(this.api, nodeRpcUrlsConfig, params, this.tokenService);\n this.params = params;\n }\n\n async chainDetailsMap(type: \"swap\" | \"pool\"): Promise<ChainDetailsMap> {\n return this.api.getChainDetailsMap(type);\n }\n\n async tokens(type: \"swap\" | \"pool\"): Promise<TokenWithChainDetails[]> {\n return this.api.tokens(type);\n }\n\n async tokensByChain(chainSymbol: string, type: \"swap\" | \"pool\"): Promise<TokenWithChainDetails[]> {\n const map = await this.api.getChainDetailsMap(type);\n const chainDetails = map[chainSymbol];\n if (!chainDetails) {\n return [];\n }\n return chainDetails.tokens;\n }\n\n async getTransferStatus(chainSymbol: string, txId: string): Promise<TransferStatusResponse> {\n return this.api.getTransferStatus(chainSymbol, txId);\n }\n\n async getGasBalance(chainSymbol: string, address: string): Promise<GasBalanceResponse> {\n return this.api.getGasBalance(chainSymbol, address);\n }\n\n async checkAddress(): Promise<CheckAddressResponse> {\n return new Promise((resolve) => {\n resolve({\n status: AddressStatus.OK,\n gasBalance: null,\n });\n });\n }\n\n async getPendingStatusInfo(\n amount: string,\n amountFormat: AmountFormat,\n sourceToken: TokenWithChainDetails,\n destToken: TokenWithChainDetails\n ): Promise<PendingStatusInfoResponse> {\n validateAmountGtZero(amount);\n let amountInTokenPrecision;\n if (amountFormat == AmountFormat.FLOAT) {\n validateAmountDecimals(\"amount\", amount, sourceToken.decimals);\n amountInTokenPrecision = convertFloatAmountToInt(amount, sourceToken.decimals).toFixed();\n } else {\n amountInTokenPrecision = amount;\n }\n\n const vUsdAmountInt = swapToVUsd(\n amountInTokenPrecision,\n sourceToken,\n await getPoolInfoByToken(this.api, sourceToken)\n );\n const destPoolInfo = await getPoolInfoByToken(this.api, destToken);\n const amountResultIntFormatted: AmountFormatted = this.getAmountFromVUsdFormatted(\n vUsdAmountInt,\n destToken,\n destPoolInfo\n );\n\n let pendingInfoDTO: PendingInfoDTO | undefined;\n const pendingInfo = await this.api.getPendingInfo();\n for (const tokenAddress in pendingInfo[destToken.chainSymbol]) {\n const info = pendingInfo[destToken.chainSymbol];\n if (!info) {\n throw new SdkError(\"Cannot find pending info for \" + destToken.chainSymbol);\n }\n pendingInfoDTO = info[tokenAddress];\n }\n if (pendingInfoDTO) {\n const destPoolAfterPending = getSwapFromVUsdPoolInfo(pendingInfoDTO.totalSentAmount, destPoolInfo);\n const amountResultIntAfterPendingFormatted: AmountFormatted = this.getAmountFromVUsdFormatted(\n vUsdAmountInt,\n destToken,\n destPoolAfterPending\n );\n\n let estimatedAmount: { min: AmountFormatted; max: AmountFormatted };\n if (Big(amountResultIntAfterPendingFormatted.int).gt(amountResultIntFormatted.int)) {\n estimatedAmount = { min: amountResultIntFormatted, max: amountResultIntAfterPendingFormatted };\n } else {\n estimatedAmount = { min: amountResultIntAfterPendingFormatted, max: amountResultIntFormatted };\n }\n\n return {\n pendingTxs: pendingInfoDTO.pendingTxs,\n pendingAmount: {\n [AmountFormat.INT]: convertAmountPrecision(\n pendingInfoDTO.totalSentAmount,\n SYSTEM_PRECISION,\n destToken.decimals\n ).toFixed(0),\n [AmountFormat.FLOAT]: convertIntAmountToFloat(pendingInfoDTO.totalSentAmount, SYSTEM_PRECISION).toFixed(),\n },\n estimatedAmount,\n };\n }\n return {\n pendingTxs: 0,\n pendingAmount: {\n [AmountFormat.INT]: \"0\",\n [AmountFormat.FLOAT]: \"0\",\n },\n estimatedAmount: {\n min: amountResultIntFormatted,\n max: amountResultIntFormatted,\n },\n };\n }\n\n async getTokenBalance(params: GetTokenBalanceParams, provider?: Provider): Promise<string> {\n return this.tokenService.getTokenBalance(params, provider);\n }\n\n async getNativeTokenBalance(params: GetNativeTokenBalanceParams, provider?: Provider): Promise<AmountFormatted> {\n return this.tokenService.getNativeTokenBalance(params, provider);\n }\n\n async calculateFeePercentOnSourceChain(\n amountFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails\n ): Promise<number> {\n validateAmountGtZero(amountFloat);\n validateAmountDecimals(\"amountFloat\", amountFloat, sourceChainToken.decimals);\n const amountInt = convertFloatAmountToInt(amountFloat, sourceChainToken.decimals);\n if (amountInt.eq(0)) {\n return 0;\n }\n const vUsdInSystemPrecision = swapToVUsd(\n amountInt,\n sourceChainToken,\n await getPoolInfoByToken(this.api, sourceChainToken)\n );\n const vUsdInSourcePrecision = fromSystemPrecision(vUsdInSystemPrecision, sourceChainToken.decimals);\n return getFeePercent(amountInt, vUsdInSourcePrecision);\n }\n\n async calculateFeePercentOnDestinationChain(\n amountFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails\n ): Promise<number> {\n validateAmountGtZero(amountFloat);\n validateAmountDecimals(\"amountFloat\", amountFloat, sourceChainToken.decimals);\n const amountInt = convertFloatAmountToInt(amountFloat, sourceChainToken.decimals);\n if (amountInt.eq(0)) {\n return 0;\n }\n const vUsdInSystemPrecision = swapToVUsd(\n amountInt,\n sourceChainToken,\n await getPoolInfoByToken(this.api, sourceChainToken)\n );\n const usd = swapFromVUsd(\n vUsdInSystemPrecision,\n destinationChainToken,\n await getPoolInfoByToken(this.api, destinationChainToken)\n );\n const vUsdInDestinationPrecision = fromSystemPrecision(vUsdInSystemPrecision, destinationChainToken.decimals);\n return getFeePercent(vUsdInDestinationPrecision, usd);\n }\n\n async getAmountToBeReceivedAndGasFeeOptions(\n amountToSendFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger: Messenger\n ): Promise<AmountsAndGasFeeOptions> {\n validateAmountGtZero(amountToSendFloat);\n validateAmountDecimals(\"amountToSendFloat\", amountToSendFloat, sourceChainToken.decimals);\n return {\n amountToSendFloat: Big(amountToSendFloat).toFixed(),\n amountToBeReceivedFloat: await this.getAmountToBeReceived(\n amountToSendFloat,\n sourceChainToken,\n destinationChainToken,\n messenger\n ),\n gasFeeOptions: await this.getGasFeeOptions(sourceChainToken, destinationChainToken, messenger),\n };\n }\n\n async getAmountToSendAndGasFeeOptions(\n amountToBeReceivedFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger: Messenger\n ): Promise<AmountsAndGasFeeOptions> {\n validateAmountGtZero(amountToBeReceivedFloat);\n validateAmountDecimals(\"amountToBeReceivedFloat\", amountToBeReceivedFloat, destinationChainToken.decimals);\n return {\n amountToSendFloat: await this.getAmountToSend(\n amountToBeReceivedFloat,\n sourceChainToken,\n destinationChainToken,\n messenger\n ),\n amountToBeReceivedFloat: Big(amountToBeReceivedFloat).toFixed(),\n gasFeeOptions: await this.getGasFeeOptions(sourceChainToken, destinationChainToken, messenger),\n };\n }\n\n async getAmountToBeReceived(\n amountToSendFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger?: Messenger\n ): Promise<string> {\n const sourcePool: PoolInfo = await getPoolInfoByToken(this.api, sourceChainToken);\n const destPool: PoolInfo = await getPoolInfoByToken(this.api, destinationChainToken);\n return this.getAmountToBeReceivedFromPools(\n amountToSendFloat,\n sourceChainToken,\n destinationChainToken,\n sourcePool,\n destPool,\n messenger\n );\n }\n\n async getAmountToBeReceivedFromChain(\n amountToSendFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger?: Messenger,\n sourceProvider?: Provider,\n destinationProvider?: Provider\n ): Promise<string> {\n const sourcePool: PoolInfo = await this.pool.getPoolInfoFromChain(sourceChainToken, sourceProvider);\n const destPool: PoolInfo = await this.pool.getPoolInfoFromChain(destinationChainToken, destinationProvider);\n return this.getAmountToBeReceivedFromPools(\n amountToSendFloat,\n sourceChainToken,\n destinationChainToken,\n sourcePool,\n destPool,\n messenger\n );\n }\n\n getAmountToBeReceivedFromPools(\n amountToSendFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n sourcePool: PoolInfo,\n destinationPool: PoolInfo,\n messenger?: Messenger\n ): string {\n validateAmountGtZero(amountToSendFloat);\n validateAmountDecimals(\"amountToSendFloat\", amountToSendFloat, sourceChainToken.decimals);\n const amountToSend = convertFloatAmountToInt(amountToSendFloat, sourceChainToken.decimals);\n\n if (messenger && messenger == Messenger.CCTP) {\n if (!sourceChainToken.cctpAddress || !destinationChainToken.cctpAddress || !sourceChainToken.cctpFeeShare) {\n throw new CCTPDoesNotSupportedError(\"Such route does not support CCTP protocol\");\n }\n const result = amountToSend.mul(Big(1).minus(sourceChainToken.cctpFeeShare)).round(0, Big.roundUp);\n const resultInDestPrecision = convertAmountPrecision(\n result,\n sourceChainToken.decimals,\n destinationChainToken.decimals\n ).round(0);\n return convertIntAmountToFloat(resultInDestPrecision, destinationChainToken.decimals).toFixed();\n }\n\n const vUsd = swapToVUsd(amountToSend, sourceChainToken, sourcePool);\n return this.getAmountFromVUsdFormatted(vUsd, destinationChainToken, destinationPool).float;\n }\n\n async getAmountToSend(\n amountToBeReceivedFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger?: Messenger\n ): Promise<string> {\n const sourcePool: PoolInfo = await getPoolInfoByToken(this.api, sourceChainToken);\n const destPool: PoolInfo = await getPoolInfoByToken(this.api, destinationChainToken);\n return this.getAmountToSendFromPools(\n amountToBeReceivedFloat,\n sourceChainToken,\n destinationChainToken,\n sourcePool,\n destPool,\n messenger\n );\n }\n\n async getAmountToSendFromChain(\n amountToBeReceivedFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger?: Messenger,\n sourceProvider?: Provider,\n destinationProvider?: Provider\n ): Promise<string> {\n const sourcePool: PoolInfo = await this.pool.getPoolInfoFromChain(sourceChainToken, sourceProvider);\n const destPool: PoolInfo = await this.pool.getPoolInfoFromChain(destinationChainToken, destinationProvider);\n return this.getAmountToSendFromPools(\n amountToBeReceivedFloat,\n sourceChainToken,\n destinationChainToken,\n sourcePool,\n destPool,\n messenger\n );\n }\n\n getAmountToSendFromPools(\n amountToBeReceivedFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n sourcePool: PoolInfo,\n destinationPool: PoolInfo,\n messenger?: Messenger\n ): string {\n validateAmountGtZero(amountToBeReceivedFloat);\n validateAmountDecimals(\"amountToBeReceivedFloat\", amountToBeReceivedFloat, destinationChainToken.decimals);\n const amountToBeReceived = convertFloatAmountToInt(amountToBeReceivedFloat, destinationChainToken.decimals);\n\n if (messenger && messenger == Messenger.CCTP) {\n if (!sourceChainToken.cctpAddress || !destinationChainToken.cctpAddress || !sourceChainToken.cctpFeeShare) {\n throw new CCTPDoesNotSupportedError(\"Such route does not support CCTP protocol\");\n }\n const result = amountToBeReceived.div(Big(1).minus(sourceChainToken.cctpFeeShare)).round(0, Big.roundDown);\n const resultInSourcePrecision = convertAmountPrecision(\n result,\n destinationChainToken.decimals,\n sourceChainToken.decimals\n ).round(0);\n return convertIntAmountToFloat(resultInSourcePrecision, sourceChainToken.decimals).toFixed();\n }\n\n const vUsd = swapFromVUsdReverse(amountToBeReceived, destinationChainToken, destinationPool);\n const resultInt = swapToVUsdReverse(vUsd, sourceChainToken, sourcePool);\n if (Big(resultInt).lte(0)) {\n throw new InsufficientPoolLiquidityError();\n }\n return convertIntAmountToFloat(resultInt, sourceChainToken.decimals).toFixed();\n }\n\n async getGasFeeOptions(\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger: Messenger\n ): Promise<GasFeeOptions> {\n return getGasFeeOptions(\n sourceChainToken.allbridgeChainId,\n sourceChainToken.chainType,\n destinationChainToken.allbridgeChainId,\n sourceChainToken.decimals,\n messenger,\n this.api\n );\n }\n\n getAverageTransferTime(\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger: Messenger\n ): number | null {\n return (\n /* eslint-disable-next-line @typescript-eslint/no-unnecessary-condition */\n sourceChainToken.transferTime?.[destinationChainToken.chainSymbol]?.[messenger] ?? null\n );\n }\n\n async getPoolInfoByToken(token: TokenWithChainDetails): Promise<PoolInfo> {\n return await this.api.getPoolInfoByKey({ chainSymbol: token.chainSymbol, poolAddress: token.poolAddress });\n }\n\n async refreshPoolInfo(tokens?: TokenWithChainDetails | TokenWithChainDetails[]): Promise<void> {\n if (tokens) {\n const tokensArray = tokens instanceof Array ? tokens : [tokens];\n const poolKeys: PoolKeyObject[] = tokensArray.map((t) => {\n return { chainSymbol: t.chainSymbol, poolAddress: t.poolAddress };\n });\n return this.api.refreshPoolInfo(poolKeys);\n }\n return this.api.refreshPoolInfo();\n }\n\n aprInPercents(apr: string): string {\n return aprInPercents(apr);\n }\n\n async getExtraGasMaxLimits(\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails\n ): Promise<ExtraGasMaxLimitResponse> {\n return await getExtraGasMaxLimits(sourceChainToken, destinationChainToken, this.api);\n }\n\n async getVUsdFromAmount(\n amount: string,\n amountFormat: AmountFormat,\n sourceToken: TokenWithChainDetails\n ): Promise<AmountFormatted> {\n validateAmountGtZero(amount);\n let amountInTokenPrecision;\n if (amountFormat == AmountFormat.FLOAT) {\n validateAmountDecimals(\"amount\", amount, sourceToken.decimals);\n amountInTokenPrecision = convertFloatAmountToInt(amount, sourceToken.decimals).toFixed();\n } else {\n amountInTokenPrecision = amount;\n }\n\n const vUsdAmount = swapToVUsd(amountInTokenPrecision, sourceToken, await getPoolInfoByToken(this.api, sourceToken));\n return {\n [AmountFormat.INT]: vUsdAmount,\n [AmountFormat.FLOAT]: convertIntAmountToFloat(vUsdAmount, SYSTEM_PRECISION).toFixed(),\n };\n }\n\n async getAmountFromVUsd(vUsdAmount: string, destToken: TokenWithChainDetails): Promise<AmountFormatted> {\n return this.getAmountFromVUsdFormatted(vUsdAmount, destToken, await getPoolInfoByToken(this.api, destToken));\n }\n\n private getAmountFromVUsdFormatted(\n vUsdAmountInt: string,\n destToken: TokenWithChainDetails,\n destPoolInfo: Pick<PoolInfo, \"vUsdBalance\" | \"aValue\" | \"dValue\" | \"tokenBalance\">\n ): AmountFormatted {\n validateAmountGtZero(vUsdAmountInt);\n const amountResultInt = swapFromVUsd(vUsdAmountInt, destToken, destPoolInfo);\n if (Big(amountResultInt).lt(0)) {\n throw new InsufficientPoolLiquidityError();\n }\n return {\n [AmountFormat.INT]: amountResultInt,\n [AmountFormat.FLOAT]: convertIntAmountToFloat(amountResultInt, destToken.decimals).toFixed(),\n };\n }\n\n async swapAndBridgeFeeCalculation(\n amountInTokenPrecision: string,\n sourceToken: TokenWithChainDetails,\n destToken: TokenWithChainDetails\n ): Promise<SwapAndBridgeCalculationData> {\n return swapAndBridgeFeeCalculation(\n amountInTokenPrecision,\n {\n decimals: sourceToken.decimals,\n feeShare: sourceToken.feeShare,\n poolInfo: await getPoolInfoByToken(this.api, sourceToken),\n },\n {\n decimals: destToken.decimals,\n feeShare: destToken.feeShare,\n poolInfo: await getPoolInfoByToken(this.api, destToken),\n }\n );\n }\n\n async swapAndBridgeFeeCalculationReverse(\n amountInTokenPrecision: string,\n sourceToken: TokenWithChainDetails,\n destToken: TokenWithChainDetails\n ): Promise<SwapAndBridgeCalculationData> {\n const result = swapAndBridgeFeeCalculationReverse(\n amountInTokenPrecision,\n {\n decimals: sourceToken.decimals,\n feeShare: sourceToken.feeShare,\n poolInfo: await getPoolInfoByToken(this.api, sourceToken),\n },\n {\n decimals: destToken.decimals,\n feeShare: destToken.feeShare,\n poolInfo: await getPoolInfoByToken(this.api, destToken),\n }\n );\n const newAmount = result.swapFromVUsdCalcResult.amountIncludingCommissionInTokenPrecision;\n if (Big(newAmount).lt(0)) {\n throw new InsufficientPoolLiquidityError();\n }\n return result;\n }\n\n async getSendAmountDetails(\n amount: string,\n amountFormat: AmountFormat,\n sourceToken: TokenWithChainDetails,\n destToken: TokenWithChainDetails\n ): Promise<SendAmountDetails> {\n validateAmountGtZero(amount);\n let amountInTokenPrecision;\n if (amountFormat == AmountFormat.FLOAT) {\n validateAmountDecimals(\"amount\", amount, sourceToken.decimals);\n amountInTokenPrecision = convertFloatAmountToInt(amount, sourceToken.decimals).toFixed();\n } else {\n amountInTokenPrecision = amount;\n }\n\n return getSendAmountDetails(\n amountInTokenPrecision,\n sourceToken,\n await getPoolInfoByToken(this.api, sourceToken),\n destToken,\n await getPoolInfoByToken(this.api, destToken)\n );\n }\n}\n", "export abstract class SdkRootError extends Error {\n public errorCode: ErrorCode;\n\n protected constructor(code: ErrorCode, message?: string) {\n super(message);\n this.errorCode = code;\n }\n}\n\nexport class SdkError extends SdkRootError {\n constructor(message?: string) {\n super(ErrorCode.SDK_ERROR, message);\n }\n}\n\nexport class InvalidAmountError extends SdkRootError {\n constructor(message?: string) {\n super(ErrorCode.INVALID_AMOUNT_ERROR, message);\n }\n}\n\nexport class AmountNotEnoughError extends SdkRootError {\n constructor(message?: string) {\n super(ErrorCode.AMOUNT_NOT_ENOUGH_ERROR, message);\n }\n}\n\nexport class InsufficientPoolLiquidityError extends SdkRootError {\n constructor(message?: string) {\n super(ErrorCode.INSUFFICIENT_POOL_LIQUIDITY_ERROR, message);\n }\n}\n\nexport class JupiterError extends SdkRootError {\n constructor(message?: string) {\n super(ErrorCode.JUPITER_ERROR, message);\n }\n}\n\nexport class InvalidGasFeePaymentOptionError extends SdkRootError {\n constructor(message?: string) {\n super(ErrorCode.INVALID_GAS_FEE_PAYMENT_OPTION_ERROR, message);\n }\n}\n\nexport class InvalidMessengerOptionError extends SdkRootError {\n constructor(message?: string) {\n super(ErrorCode.INVALID_MESSENGER_OPTION_ERROR, message);\n }\n}\n\nexport class MethodNotSupportedError extends SdkRootError {\n constructor(message?: string) {\n super(ErrorCode.METHOD_NOT_SUPPORTED_ERROR, message);\n }\n}\n\nexport class VerifyTxError extends SdkRootError {\n constructor(message?: string) {\n super(ErrorCode.VERIFY_TX_ERROR, message);\n }\n}\n\nexport class InvalidTxError extends SdkRootError {\n constructor(message?: string) {\n super(ErrorCode.INVALID_TX_ERROR, message);\n }\n}\n\nexport class ExtraGasMaxLimitExceededError extends SdkRootError {\n constructor(message?: string) {\n super(ErrorCode.EXTRA_GAS_MAX_LIMIT_EXCEEDED_ERROR, message);\n }\n}\n\nexport class ArgumentInvalidDecimalsError extends SdkRootError {\n constructor(argName: string, decimalsIs: number, decimalsRequired: number) {\n super(\n ErrorCode.ARGUMENT_INVALID_DECIMALS_ERROR,\n `Argument '${argName}' decimals '${decimalsIs}' cannot be greater than '${decimalsRequired}'`\n );\n }\n}\n\nexport class TimeoutError extends SdkRootError {\n constructor(message?: string) {\n super(ErrorCode.TIMEOUT_ERROR, message);\n }\n}\n\nexport class NodeRpcUrlNotInitializedError extends SdkRootError {\n constructor(chainSymbol: string) {\n super(ErrorCode.NODE_RPC_URL_NOT_INITIALIZED_ERROR, `For chain '${chainSymbol}' Node RPC URL not initialized`);\n }\n}\n\nexport class CCTPDoesNotSupportedError extends SdkRootError {\n constructor(message?: string) {\n super(ErrorCode.CCTP_DOES_NOT_SUPPORTED_ERROR, message);\n }\n}\n\nexport class TxTooLargeError extends SdkRootError {\n constructor() {\n super(\n ErrorCode.TX_TOO_LARGE,\n \"Transaction too large: try again later or switch to another messenger or pay relayer fee in native gas currency\"\n );\n }\n}\n\nexport enum ErrorCode {\n SDK_ERROR = \"SdkError\",\n INVALID_AMOUNT_ERROR = \"InvalidAmountError\",\n AMOUNT_NOT_ENOUGH_ERROR = \"AmountNotEnoughError\",\n INSUFFICIENT_POOL_LIQUIDITY_ERROR = \"InsufficientPoolLiquidityError\",\n JUPITER_ERROR = \"JupiterError\",\n INVALID_GAS_FEE_PAYMENT_OPTION_ERROR = \"InvalidGasFeePaymentOptionError\",\n INVALID_MESSENGER_OPTION_ERROR = \"InvalidMessengerOptionError\",\n METHOD_NOT_SUPPORTED_ERROR = \"MethodNotSupportedError\",\n VERIFY_TX_ERROR = \"VerifyTxError\",\n INVALID_TX_ERROR = \"InvalidTxError\",\n EXTRA_GAS_MAX_LIMIT_EXCEEDED_ERROR = \"ExtraGasMaxLimitExceededError\",\n ARGUMENT_INVALID_DECIMALS_ERROR = \"ArgumentInvalidDecimalsError\",\n TIMEOUT_ERROR = \"TimeoutError\",\n NODE_RPC_URL_NOT_INITIALIZED_ERROR = \"NodeRpcUrlNotInitializedError\",\n CCTP_DOES_NOT_SUPPORTED_ERROR = \"CCTPDoesNotSupportedError\",\n TX_TOO_LARGE = \"TxTooLargeError\",\n}\n", "export enum ChainSymbol {\n /**\n * The BNB Smart Chain main network.\n */\n BSC = \"BSC\",\n\n /**\n * The Ethereum main network.\n */\n ETH = \"ETH\",\n\n /**\n * The Base main network.\n */\n BAS = \"BAS\",\n\n /**\n * The Solana network.\n */\n SOL = \"SOL\",\n\n /**\n * The TRON network.\n */\n TRX = \"TRX\",\n\n /**\n * The Polygon network.\n */\n POL = \"POL\",\n\n /**\n * The Arbitrum network.\n */\n ARB = \"ARB\",\n\n /**\n * The Celo network.\n */\n CEL = \"CEL\",\n\n /**\n * The Avalanche main network.\n */\n AVA = \"AVA\",\n\n /**\n * The Soroban network.\n */\n SRB = \"SRB\",\n\n /**\n * The Stellar network.\n */\n STLR = \"STLR\",\n\n /**\n * The OP Mainnet network.\n */\n OPT = \"OPT\",\n}\n\nexport enum ChainType {\n EVM = \"EVM\",\n SOLANA = \"SOLANA\",\n TRX = \"TRX\",\n SRB = \"SRB\",\n}\n", "import { SdkError } from \"../exceptions\";\nimport { ChainSymbol, ChainType } from \"./chain.enums\";\nimport { BasicChainProperties } from \"./models\";\n\n/**\n * Native gas tokens decimals by ChainType\n */\nconst chainDecimalsByType: Record<ChainType, number> = {\n EVM: 18,\n SOLANA: 9,\n TRX: 6,\n SRB: 7,\n};\n\nconst defaultProperties: Record<string, BasicChainProperties> = {\n [ChainSymbol.BSC]: {\n chainSymbol: ChainSymbol.BSC,\n chainId: \"0x38\",\n name: \"BNB Chain\",\n chainType: ChainType.EVM,\n },\n [ChainSymbol.ETH]: {\n chainSymbol: ChainSymbol.ETH,\n chainId: \"0x1\",\n name: \"Ethereum\",\n chainType: ChainType.EVM,\n },\n [ChainSymbol.BAS]: {\n chainSymbol: ChainSymbol.BAS,\n chainId: \"0x2105\",\n name: \"Base\",\n chainType: ChainType.EVM,\n },\n [ChainSymbol.ARB]: {\n chainSymbol: ChainSymbol.ARB,\n chainId: \"0xa4b1\",\n name: \"Arbitrum\",\n chainType: ChainType.EVM,\n },\n [ChainSymbol.AVA]: {\n chainSymbol: ChainSymbol.AVA,\n chainId: \"0xa86a\",\n name: \"Avalanche\",\n chainType: ChainType.EVM,\n },\n [ChainSymbol.CEL]: {\n chainSymbol: ChainSymbol.CEL,\n chainId: \"0xa4ec\",\n name: \"Celo\",\n chainType: ChainType.EVM,\n },\n [ChainSymbol.POL]: {\n chainSymbol: ChainSymbol.POL,\n chainId: \"0x89\",\n name: \"Polygon\",\n chainType: ChainType.EVM,\n },\n [ChainSymbol.OPT]: {\n chainSymbol: ChainSymbol.OPT,\n chainId: \"0xa\",\n name: \"OP Mainnet\",\n chainType: ChainType.EVM,\n },\n [ChainSymbol.SOL]: {\n chainSymbol: ChainSymbol.SOL,\n name: \"Solana\",\n chainType: ChainType.SOLANA,\n },\n [ChainSymbol.TRX]: {\n chainSymbol: ChainSymbol.TRX,\n name: \"Tron\",\n chainType: ChainType.TRX,\n },\n [ChainSymbol.SRB]: {\n chainSymbol: ChainSymbol.SRB,\n name: \"Stellar\",\n chainType: ChainType.SRB,\n },\n [ChainSymbol.STLR]: {\n chainSymbol: ChainSymbol.STLR,\n name: \"Stellar\",\n chainType: ChainType.SRB,\n },\n};\n\nexport const Chains = (() => {\n let chainProperties: Record<string, BasicChainProperties> = { ...defaultProperties };\n\n return {\n addChainsProperties(additionalProperties?: Record<string, BasicChainProperties>) {\n chainProperties = { ...chainProperties, ...additionalProperties };\n },\n\n getChainProperty(chainSymbol: string): BasicChainProperties {\n const property = chainProperties[chainSymbol];\n if (!property) {\n throw new SdkError(`Cannot find chain properties for ${chainSymbol}`);\n }\n return property;\n },\n\n getChainsProperties(): Record<string, BasicChainProperties> {\n return chainProperties;\n },\n\n getChainDecimalsByType(chainType: ChainType): number {\n return chainDecimalsByType[chainType];\n },\n };\n})();\n", "import axios, { Axios } from \"axios\";\nimport { ChainDetailsMapWithFlags, PoolInfoMap, PoolKeyObject } from \"../../tokens-info\";\nimport { VERSION } from \"../../version\";\nimport {\n mapChainDetailsResponseToChainDetailsMap,\n mapChainDetailsResponseToPoolInfoMap,\n mapPoolInfoResponseToPoolInfoMap,\n} from \"./core-api-mapper\";\nimport {\n ChainDetailsResponse,\n GasBalanceResponse,\n PendingInfoResponse,\n PoolInfoResponse,\n ReceiveTransactionCostRequest,\n ReceiveTransactionCostResponse,\n TransferStatusResponse,\n} from \"./core-api.model\";\nimport { AllbridgeCoreClientParams } from \"./core-client-base\";\n\nexport interface TokenInfo {\n chainDetailsMap: ChainDetailsMapWithFlags;\n poolInfoMap: PoolInfoMap;\n}\n\nexport interface ApiClient {\n getTokenInfo(): Promise<TokenInfo>;\n\n getPendingInfo(): Promise<PendingInfoResponse>;\n\n getGasBalance(chainSymbol: string, address: string): Promise<GasBalanceResponse>;\n\n getTransferStatus(chainSymbol: string, txId: string): Promise<TransferStatusResponse>;\n\n getReceiveTransactionCost(args: ReceiveTransactionCostRequest): Promise<ReceiveTransactionCostResponse>;\n\n getPoolInfoMap(pools: PoolKeyObject[] | PoolKeyObject): Promise<PoolInfoMap>;\n}\n\nexport class ApiClientImpl implements ApiClient {\n private api: Axios;\n\n constructor(params: AllbridgeCoreClientParams) {\n this.api = axios.create({\n baseURL: params.coreApiUrl,\n headers: {\n Accept: \"application/json\",\n ...params.coreApiHeaders,\n \"x-Sdk-Agent\": \"AllbridgeCoreSDK/\" + VERSION,\n },\n params: params.coreApiQueryParams,\n });\n }\n\n async getTokenInfo(): Promise<TokenInfo> {\n const { data } = await this.api.get<ChainDetailsResponse>(\"/token-info\", { params: { filter: \"all\" } });\n return {\n chainDetailsMap: mapChainDetailsResponseToChainDetailsMap(data),\n poolInfoMap: mapChainDetailsResponseToPoolInfoMap(data),\n };\n }\n\n async getPendingInfo(): Promise<PendingInfoResponse> {\n const { data } = await this.api.get<PendingInfoResponse>(\"/pending-info\");\n return data;\n }\n\n async getGasBalance(chainSymbol: string, address: string): Promise<GasBalanceResponse> {\n const { data } = await this.api.get<GasBalanceResponse>(`/check/${chainSymbol}/${address}`);\n return data;\n }\n\n async getTransferStatus(chainSymbol: string, txId: string): Promise<TransferStatusResponse> {\n const { data } = await this.api.get<TransferStatusResponse>(`/chain/${chainSymbol}/${txId}`);\n return data;\n }\n\n async getReceiveTransactionCost(args: ReceiveTransactionCostRequest): Promise<ReceiveTransactionCostResponse> {\n const { data } = await this.api.post<ReceiveTransactionCostResponse>(\"/receive-fee\", args, {\n headers: {\n \"Content-Type\": \"application/json\",\n },\n });\n return {\n exchangeRate: data.exchangeRate,\n fee: data.fee,\n sourceNativeTokenPrice: data.sourceNativeTokenPrice,\n };\n }\n\n async getPoolInfoMap(pools: PoolKeyObject[] | PoolKeyObject): Promise<PoolInfoMap> {\n const poolKeys = pools instanceof Array ? pools : [pools];\n const { data } = await this.api.post<PoolInfoResponse>(\n \"/pool-info\",\n { pools: poolKeys },\n {\n headers: {\n \"Content-Type\": \"application/json\",\n },\n }\n );\n return mapPoolInfoResponseToPoolInfoMap(data);\n }\n}\n", "export const VERSION = \"3.18.0\";\n", "import { Big, BigSource } from \"big.js\";\nimport BN from \"bn.js\";\nimport { InsufficientPoolLiquidityError } from \"../../exceptions\";\nimport { PoolInfo, Token } from \"../../tokens-info\";\nimport { SYSTEM_PRECISION } from \"./constants\";\n\nexport function getFeePercent(input: BigSource, output: BigSource): number {\n return Big(100).minus(Big(100).times(output).div(input)).toNumber();\n}\n\nexport function toSystemPrecision(amount: BigSource, decimals: number): Big {\n return convertAmountPrecision(amount, decimals, SYSTEM_PRECISION).round(0, Big.roundDown);\n}\n\nexport function fromSystemPrecision(amount: BigSource, decimals: number): Big {\n return convertAmountPrecision(amount, SYSTEM_PRECISION, decimals);\n}\n\nexport function convertAmountPrecision(amount: BigSource, decimalsFrom: number, decimalsTo: number): Big {\n const dif = Big(decimalsTo).minus(decimalsFrom).toNumber();\n return Big(amount).times(toPowBase10(dif));\n}\n\nexport function toPowBase10(decimals: number): Big {\n return Big(10).pow(decimals);\n}\n\nexport function convertFloatAmountToInt(amountFloat: BigSource, decimals: number): Big {\n return Big(amountFloat).times(toPowBase10(decimals));\n}\n\nexport function convertIntAmountToFloat(amountInt: BigSource, decimals: number): Big {\n const amountValue = Big(amountInt);\n if (amountValue.eq(0)) {\n return Big(0);\n }\n return Big(amountValue).div(toPowBase10(decimals));\n}\n\nexport function calculatePoolInfoImbalance(poolInfo: Pick<PoolInfo, \"tokenBalance\" | \"vUsdBalance\">): string {\n return convertIntAmountToFloat(Big(poolInfo.tokenBalance).minus(poolInfo.vUsdBalance).toFixed(), SYSTEM_PRECISION)\n .div(2)\n .toFixed();\n}\n\nexport function swapToVUsd(\n amount: BigSource,\n { feeShare, decimals }: Pick<Token, \"feeShare\" | \"decimals\">,\n poolInfo: Omit<PoolInfo, \"p\" | \"imbalance\">\n): string {\n const amountValue = Big(amount);\n if (amountValue.lte(0)) {\n return \"0\";\n }\n const fee = amountValue.times(feeShare);\n const amountWithoutFee = amountValue.minus(fee);\n const inSystemPrecision = toSystemPrecision(amountWithoutFee, decimals);\n const tokenBalance = Big(poolInfo.tokenBalance).plus(inSystemPrecision);\n const vUsdNewAmount = getY(tokenBalance, poolInfo.aValue, poolInfo.dValue);\n return Big(poolInfo.vUsdBalance).minus(vUsdNewAmount).round(0, Big.roundDown).toFixed();\n}\n\nexport function swapFromVUsd(\n amount: BigSource,\n { feeShare, decimals }: Pick<Token, \"feeShare\" | \"decimals\">,\n poolInfo: Pick<PoolInfo, \"vUsdBalance\" | \"aValue\" | \"dValue\" | \"tokenBalance\">\n): string {\n const amountValue = Big(amount);\n if (amountValue.lte(0)) {\n return Big(0).toFixed();\n }\n const vUsdBalance = amountValue.plus(poolInfo.vUsdBalance);\n const newAmount = getY(vUsdBalance, poolInfo.aValue, poolInfo.dValue);\n const result = fromSystemPrecision(Big(poolInfo.tokenBalance).minus(newAmount), decimals);\n const fee = Big(result).times(feeShare);\n return Big(result).minus(fee).round(0, Big.roundDown).toFixed();\n}\n\nexport function getSwapFromVUsdPoolInfo(\n vUsdAmount: BigSource,\n poolInfo: Omit<PoolInfo, \"imbalance\">\n): Pick<PoolInfo, \"vUsdBalance\" | \"aValue\" | \"dValue\" | \"tokenBalance\"> {\n const amountValue = Big(vUsdAmount);\n if (amountValue.lte(0)) {\n return poolInfo;\n }\n const vUsdBalance = amountValue.plus(poolInfo.vUsdBalance);\n const newAmount = getY(vUsdBalance, poolInfo.aValue, poolInfo.dValue);\n return {\n aValue: poolInfo.aValue,\n dValue: poolInfo.dValue,\n tokenBalance: newAmount.toFixed(0),\n vUsdBalance: vUsdBalance.toFixed(0),\n };\n}\n\n/**\n * @param amount - vUsd amount should be received\n * @param feeShare\n * @param decimals\n * @param poolInfo\n */\nexport function swapToVUsdReverse(\n amount: BigSource,\n { feeShare, decimals }: Pick<Token, \"feeShare\" | \"decimals\">,\n poolInfo: Omit<PoolInfo, \"imbalance\">\n): Big {\n if (Big(amount).lte(0)) {\n return Big(0);\n }\n const vUsdNewAmount = Big(poolInfo.vUsdBalance).minus(amount);\n if (vUsdNewAmount.lte(0)) {\n throw new InsufficientPoolLiquidityError();\n }\n const tokenBalance = getY(vUsdNewAmount, poolInfo.aValue, poolInfo.dValue);\n const inSystemPrecision = Big(tokenBalance).minus(poolInfo.tokenBalance);\n const amountWithoutFee = fromSystemPrecision(inSystemPrecision, decimals);\n const reversedFeeShare = Big(feeShare).div(Big(1).minus(feeShare));\n const fee = Big(amountWithoutFee).times(reversedFeeShare).round(0, Big.roundUp);\n return Big(amountWithoutFee).plus(fee).round(0, Big.roundDown);\n}\n\n/**\n * @param amount - amount should be received\n * @param feeShare\n * @param decimals\n * @param poolInfo\n */\nexport function swapFromVUsdReverse(\n amount: BigSource,\n { feeShare, decimals }: Pick<Token, \"feeShare\" | \"decimals\">,\n poolInfo: Omit<PoolInfo, \"imbalance\">\n): Big {\n if (Big(amount).lte(0)) {\n return Big(0);\n }\n const reversedFeeShare = Big(feeShare).div(Big(1).minus(feeShare));\n const fee = Big(amount).times(reversedFeeShare).round(0, Big.roundUp);\n const amountWithFee = Big(amount).plus(fee);\n const inSystemPrecision = toSystemPrecision(amountWithFee, decimals);\n const tokenBalance = Big(poolInfo.tokenBalance).minus(inSystemPrecision);\n if (tokenBalance.lte(0)) {\n throw new InsufficientPoolLiquidityError();\n }\n const vUsdNewAmount = getY(tokenBalance, poolInfo.aValue, poolInfo.dValue);\n return Big(vUsdNewAmount).minus(poolInfo.vUsdBalance).round(0, Big.roundDown);\n}\n\n// y = (sqrt(x(4ad\u00B3 + x (4a(d - x) - d )\u00B2)) + x (4a(d - x) - d ))/8ax\n// commonPart = 4a(d - x) - d\n// sqrt = sqrt(x * (4ad\u00B3 + x * commonPart\u00B2)\n// y = (sqrt + x * commonPart) / divider\nexport function getY(x: BigSource, a: BigSource, d: BigSource): Big {\n const commonPartBig = Big(4).times(a).times(Big(d).minus(x)).minus(d);\n const dCubed = Big(d).pow(3);\n const commonPartSquared = commonPartBig.pow(2);\n const sqrtBig = Big(x)\n .times(Big(x).times(commonPartSquared).plus(Big(4).times(a).times(dCubed)))\n .sqrt()\n .round(0, Big.roundDown);\n const dividerBig = Big(8).times(a).times(x);\n const result = commonPartBig.times(x).plus(sqrtBig).div(dividerBig).round(0, Big.roundDown);\n if (result.eq(0)) {\n return Big(0);\n }\n return result.plus(1); // +1 to offset rounding errors\n}\n\nexport function getEarned(userLpAmount: string, userRewardDebt: string, accRewardPerShareP: string, p: number): string {\n const userLpAmountBN = new BN(userLpAmount);\n const accRewardPerSharePBN = new BN(accRewardPerShareP);\n const userRewardDebtBN = new BN(userRewardDebt);\n const rewards = userLpAmountBN.mul(accRewardPerSharePBN).shrn(p);\n return rewards.sub(userRewardDebtBN).toString();\n}\n\nexport function aprInPercents(apr: string): string {\n return Big(apr).gt(0) ? `${Number(Big(apr).times(100).toFixed(2)).toLocaleString()}%` : \"N/A\";\n}\n\n// a = 8Axy(x+y)\n// b = xy(16A - 4) / 3\n// c = sqrt(a\u00B2 + b\u00B3)\n// D = cbrt(a + c) + cbrt(a - c)\nexport function getD(aValue: string, x: string, y: string): string {\n const xy = Big(x).times(y);\n const xPlusY = Big(x).plus(y);\n const a = Big(8).times(aValue).times(xy).times(xPlusY);\n const b = xy.times(Big(16).times(aValue).minus(4)).div(3);\n const aSquared = a.times(a);\n const bCubed = b.times(b).times(b);\n const a2b3 = aSquared.plus(bCubed);\n const c = Big(a2b3).sqrt();\n const cbrtAPlusC = Big(Math.cbrt(+a.plus(c).toFixed()));\n const cbrtAMinusC = Big(Math.cbrt(+a.minus(c).toFixed()));\n return cbrtAPlusC.plus(cbrtAMinusC).toFixed();\n}\n", "import { ChainSymbol } from \"../../chains/chain.enums\";\nimport { PoolInfo } from \"../../tokens-info\";\n\nexport type ChainDetailsResponse = Record<string, ChainDetailsDTO>;\n\nexport interface ChainDetailsDTO {\n tokens: TokenDTO[];\n chainId: number;\n bridgeAddress: string;\n transferTime: TransferTimeDTO;\n txCostAmount: TxCostAmountDTO;\n confirmations: number;\n}\n\nexport enum AddressStatus {\n OK = \"OK\",\n INVALID = \"INVALID\",\n FORBIDDEN = \"FORBIDDEN\",\n UNINITIALIZED = \"UNINITIALIZED\",\n CONTRACT_ADDRESS = \"CONTRACT_ADDRESS\",\n WRONG_ASSOCIATED_ACCOUNT_OWNER = \"WRONG_ASSOCIATED_ACCOUNT_OWNER\",\n}\n\nexport interface TokenDTO {\n symbol: string;\n name: string;\n decimals: number;\n poolAddress: string;\n tokenAddress: string;\n poolInfo: PoolInfoDTO;\n feeShare: string;\n apr: string;\n apr7d: string;\n apr30d: string;\n lpRate: string;\n flags: {\n swap: boolean;\n pool: boolean;\n };\n}\n\nexport interface PoolInfoDTO {\n aValue: string;\n dValue: string;\n tokenBalance: string;\n vUsdBalance: string;\n totalLpAmount: string;\n accRewardPerShareP: string;\n p: number;\n}\n\nexport enum MessengerKeyDTO {\n ALLBRIDGE = \"allbridge\",\n WORMHOLE = \"wormhole\",\n CCTP = \"cctp\",\n}\n\nexport type TransferTimeDTO = Record<string, MessengerTransferTimeDTO>;\n\nexport interface TxCostAmountDTO {\n maxAmount: string;\n swap: string;\n transfer: string;\n}\n\nexport type MessengerTransferTimeDTO = {\n [messenger in MessengerKeyDTO]: number;\n};\n\nexport enum Messenger {\n ALLBRIDGE = 1,\n WORMHOLE = 2,\n CCTP = 3,\n}\n\nexport interface ReceiveTransactionCostRequest {\n sourceChainId: number;\n destinationChainId: number;\n messenger: Messenger;\n}\n\nexport interface ReceiveTransactionCostResponse {\n exchangeRate: string;\n fee: string;\n sourceNativeTokenPrice: string;\n}\n\nexport interface GasBalanceResponse {\n gasBalance: string | null;\n status: AddressStatus;\n}\n\nexport interface CheckAddressResponse {\n gasBalance: string | null;\n status: AddressStatus;\n}\n\nexport interface TransferStatusResponse {\n txId: string;\n\n sourceChainSymbol: ChainSymbol;\n destinationChainSymbol: ChainSymbol;\n\n sendAmount: string;\n sendAmountFormatted: number;\n\n stableFee: string;\n stableFeeFormatted: number;\n\n sourceTokenAddress: string;\n destinationTokenAddress: string;\n\n senderAddress: string;\n recipientAddress: string;\n\n signaturesCount: number;\n signaturesNeeded: number;\n\n send: BridgeTransaction;\n receive?: BridgeTransaction;\n}\n\nexport interface BridgeTransaction {\n txId: string;\n\n sourceChainId: number;\n destinationChainId: number;\n\n fee: string;\n feeFormatted: number;\n\n stableFee: string;\n stableFeeFormatted: number;\n\n amount: string;\n amountFormatted: number;\n virtualAmount: string;\n\n bridgeContract: string;\n sender: string;\n recipient: string;\n\n sourceTokenAddress: string;\n destinationTokenAddress: string;\n\n hash: string;\n\n messenger: Messenger;\n\n blockTime: number;\n blockId: string;\n\n confirmations: number;\n confirmationsNeeded: number;\n\n isClaimable?: boolean;\n}\n\nexport type PoolInfoResponse = Record<ChainSymbol, PoolInfo>;\nexport type PendingInfoResponse = Partial<Record<ChainSymbol, TokenPendingInfoDTO>>;\nexport type TokenPendingInfoDTO = Record<string, PendingInfoDTO>;\n\nexport interface PendingInfoDTO {\n pendingTxs: number;\n totalSentAmount: string;\n}\n", "import { Chains } from \"../../chains\";\nimport { ChainSymbol } from \"../../chains/chain.enums\";\nimport {\n ChainDetails,\n ChainDetailsMap,\n ChainDetailsMapWithFlags,\n ChainDetailsWithTokensWithFlags,\n MessengerTransferTime,\n PoolInfoMap,\n PoolKeyObject,\n TokenWithChainDetailsWithFlags,\n TransferTime,\n} from \"../../tokens-info\";\nimport { calculatePoolInfoImbalance } from \"../../utils/calculation\";\nimport {\n ChainDetailsDTO,\n ChainDetailsResponse,\n Messenger,\n MessengerKeyDTO,\n MessengerTransferTimeDTO,\n PoolInfoResponse,\n TokenDTO,\n TransferTimeDTO,\n} from \"./core-api.model\";\n\nexport function mapChainDetailsResponseToChainDetailsMap(response: ChainDetailsResponse): ChainDetailsMapWithFlags {\n return Object.entries(response).reduce<ChainDetailsMapWithFlags>((map, entry) => {\n const chainSymbol = entry[0];\n const chainDetailsDTO = entry[1];\n const chainDetails = mapChainDetailsFromDto(chainSymbol, chainDetailsDTO);\n if (chainDetails) {\n map[chainSymbol] = chainDetails;\n }\n return map;\n }, {});\n}\n\nexport function mapChainDetailsResponseToPoolInfoMap(response: ChainDetailsResponse): PoolInfoMap {\n const poolInfoMap: PoolInfoMap = {};\n for (const [chainSymbolValue, chainDetailsDTO] of Object.entries(response)) {\n const chainSymbol = chainSymbolValue;\n for (const token of chainDetailsDTO.tokens) {\n const poolKey = mapPoolKeyObjectToPoolKey({\n chainSymbol,\n poolAddress: token.poolAddress,\n });\n const imbalance = calculatePoolInfoImbalance(token.poolInfo);\n poolInfoMap[poolKey] = { ...token.poolInfo, imbalance };\n }\n }\n return poolInfoMap;\n}\n\nfunction mapTokenWithChainDetailsFromDto(chainDetails: ChainDetails, dto: TokenDTO): TokenWithChainDetailsWithFlags {\n const { name: chainName, ...chainDetailsWithoutName } = chainDetails;\n const { poolInfo: _poolInfo, ...dtoWithoutPoolInfo } = dto;\n return {\n ...dtoWithoutPoolInfo,\n ...chainDetailsWithoutName,\n chainName,\n };\n}\n\nfunction mapMessengerKeyDtoToMessenger(dto: MessengerKeyDTO): Messenger | null {\n switch (dto) {\n case MessengerKeyDTO.ALLBRIDGE:\n return Messenger.ALLBRIDGE;\n case MessengerKeyDTO.WORMHOLE:\n return Messenger.WORMHOLE;\n case MessengerKeyDTO.CCTP:\n return Messenger.CCTP;\n default:\n return null;\n }\n}\n\nfunction mapTransferTimeFromDto(dto: TransferTimeDTO): TransferTime {\n return Object.entries(dto).reduce<TransferTime>((result, [key, value]) => {\n result[key as ChainSymbol] = mapMessengerTransferTimeFromDto(value);\n return result;\n }, {});\n}\n\nfunction mapMessengerTransferTimeFromDto(dto: MessengerTransferTimeDTO): MessengerTransferTime {\n return Object.entries(dto).reduce<MessengerTransferTime>((messengerTransferTime, [key, value]) => {\n const messenger = mapMessengerKeyDtoToMessenger(key as MessengerKeyDTO);\n if (messenger) {\n messengerTransferTime[messenger] = value;\n }\n return messengerTransferTime;\n }, {});\n}\n\nfunction mapChainDetailsFromDto(chainSymbol: string, dto: ChainDetailsDTO): ChainDetailsWithTokensWithFlags | null {\n const basicChainProperties = Chains.getChainsProperties()[chainSymbol];\n /* eslint-disable-next-line @typescript-eslint/no-unnecessary-condition */\n if (!basicChainProperties) {\n return null;\n }\n const chainDetails: ChainDetails = {\n ...basicChainProperties,\n allbridgeChainId: dto.chainId,\n bridgeAddress: dto.bridgeAddress,\n transferTime: mapTransferTimeFromDto(dto.transferTime),\n txCostAmount: dto.txCostAmount,\n confirmations: dto.confirmations,\n };\n return {\n ...chainDetails,\n tokens: dto.tokens.map((tokenDto) => mapTokenWithChainDetailsFromDto(chainDetails, tokenDto)),\n };\n}\n\nexport function mapPoolKeyToPoolKeyObject(poolKey: string): PoolKeyObject {\n const dividerPosition = poolKey.indexOf(\"_\");\n return {\n chainSymbol: poolKey.substring(0, dividerPosition),\n poolAddress: poolKey.substring(dividerPosition + 1),\n };\n}\n\nexport function mapPoolKeyObjectToPoolKey(poolKeyObject: PoolKeyObject): string {\n return poolKeyObject.chainSymbol + \"_\" + poolKeyObject.poolAddress;\n}\n\nexport function mapChainDetailsMapToPoolKeyObjects(chainDetailsMap: ChainDetailsMap): PoolKeyObject[] {\n const result = [];\n for (const [chainSymbolValue, chainDetails] of Object.entries(chainDetailsMap)) {\n const chainSymbol = chainSymbolValue;\n for (const token of chainDetails.tokens) {\n result.push({\n chainSymbol,\n poolAddress: token.poolAddress,\n });\n }\n }\n return result;\n}\n\nexport function mapPoolInfoResponseToPoolInfoMap(responseBody: PoolInfoResponse): PoolInfoMap {\n const poolInfoMap: PoolInfoMap = {};\n for (const [chainSymbolValue, poolInfoByAddress] of Object.entries(responseBody)) {\n const chainSymbol = chainSymbolValue;\n for (const [poolAddress, poolInfo] of Object.entries(poolInfoByAddress)) {\n poolInfo.imbalance = calculatePoolInfoImbalance(poolInfo);\n poolInfoMap[mapPoolKeyObjectToPoolKey({ chainSymbol, poolAddress })] = poolInfo;\n }\n }\n return poolInfoMap;\n}\n", "import Cache from \"timed-cache\";\nimport { PoolInfoMap, PoolKeyObject } from \"../../tokens-info\";\nimport { ApiClient, TokenInfo } from \"./api-client\";\nimport {\n GasBalanceResponse,\n PendingInfoResponse,\n ReceiveTransactionCostRequest,\n ReceiveTransactionCostResponse,\n TransferStatusResponse,\n} from \"./core-api.model\";\n\nconst _20_SECONDS_TTL = 20 * 1000;\nconst _55_SECONDS_TTL = 55 * 1000;\n\nexport class ApiClientCaching implements ApiClient {\n private tokenInfoCache: Cache<Promise<TokenInfo>>;\n private pendingInfoCache: Cache<Promise<PendingInfoResponse>>;\n private gasBalanceCache: Cache<Promise<GasBalanceResponse>>;\n private receivedTransactionCache: Cache<ReceiveTransactionCostResponse>;\n\n constructor(private apiClient: ApiClient) {\n this.tokenInfoCache = new Cache({ defaultTtl: _55_SECONDS_TTL });\n this.receivedTransactionCache = new Cache({ defaultTtl: _20_SECONDS_TTL });\n this.pendingInfoCache = new Cache({ defaultTtl: _20_SECONDS_TTL });\n this.gasBalanceCache = new Cache({ defaultTtl: _20_SECONDS_TTL });\n }\n\n getTokenInfo(): Promise<TokenInfo> {\n const TOKEN_INFO_CACHE_KEY = \"TOKEN_INFO_CACHE_KEY\";\n const tokenInfo = this.tokenInfoCache.get(TOKEN_INFO_CACHE_KEY);\n if (tokenInfo) {\n return tokenInfo;\n }\n const tokenInfoPromise = this.apiClient.getTokenInfo();\n this.tokenInfoCache.put(TOKEN_INFO_CACHE_KEY, tokenInfoPromise);\n return tokenInfoPromise;\n }\n\n async getGasBalance(chainSymbol: string, address: string): Promise<GasBalanceResponse> {\n const GAS_BALANCE_CACHE_KEY = `GAS_BALANCE_${chainSymbol}_${address}`;\n const gasBalance = this.gasBalanceCache.get(GAS_BALANCE_CACHE_KEY);\n if (gasBalance) {\n return gasBalance;\n }\n const gasBalancePromise = this.apiClient.getGasBalance(chainSymbol, address);\n this.gasBalanceCache.put(GAS_BALANCE_CACHE_KEY, gasBalancePromise);\n return gasBalancePromise;\n }\n\n async getPendingInfo(): Promise<PendingInfoResponse> {\n const PENDING_INFO_CACHE_KEY = \"PENDING_INFO_CACHE_KEY\";\n const pendingInfo = this.pendingInfoCache.get(PENDING_INFO_CACHE_KEY);\n if (pendingInfo) {\n return pendingInfo;\n }\n const pendingInfoPromise = this.apiClient.getPendingInfo();\n this.pendingInfoCache.put(PENDING_INFO_CACHE_KEY, pendingInfoPromise);\n return pendingInfoPromise;\n }\n\n async getReceiveTransactionCost(args: ReceiveTransactionCostRequest): Promise<ReceiveTransactionCostResponse> {\n const RECEIVE_TX_COST_KEY = `RECEIVE_TX_COST_${args.sourceChainId}_${args.destinationChainId}_${args.messenger}`;\n const transactionCost = this.receivedTransactionCache.get(RECEIVE_TX_COST_KEY);\n if (transactionCost) {\n return transactionCost;\n }\n const fetchedTransactionCost = await this.apiClient.getReceiveTransactionCost(args);\n this.receivedTransactionCache.put(RECEIVE_TX_COST_KEY, fetchedTransactionCost);\n return fetchedTransactionCost;\n }\n\n async getTransferStatus(chainSymbol: string, txId: string): Promise<TransferStatusResponse> {\n return this.apiClient.getTransferStatus(chainSymbol, txId);\n }\n\n async getPoolInfoMap(pools: PoolKeyObject[] | PoolKeyObject): Promise<PoolInfoMap> {\n return this.apiClient.getPoolInfoMap(pools);\n }\n}\n", "import {\n ChainDetailsMapWithFlags,\n PoolInfoMap,\n PoolKeyObject,\n TokenWithChainDetailsWithFlags,\n} from \"../../tokens-info\";\nimport { ApiClient } from \"./api-client\";\nimport {\n GasBalanceResponse,\n PendingInfoResponse,\n ReceiveTransactionCostRequest,\n ReceiveTransactionCostResponse,\n TransferStatusResponse,\n} from \"./core-api.model\";\n\nexport interface AllbridgeCoreClientParams {\n coreApiUrl: string;\n coreApiHeaders?: Record<string, string>;\n coreApiQueryParams?: Record<string, string>;\n}\n\nexport interface AllbridgeCoreClient {\n getPendingInfo(): Promise<PendingInfoResponse>;\n\n getTransferStatus(chainSymbol: string, txId: string): Promise<TransferStatusResponse>;\n\n getReceiveTransactionCost(args: ReceiveTransactionCostRequest): Promise<ReceiveTransactionCostResponse>;\n\n getGasBalance(chainSymbol: string, address: string): Promise<GasBalanceResponse>;\n}\n\nexport interface AllbridgeCoreClientWithTokens extends AllbridgeCoreClient {\n getChainDetailsMap(): Promise<ChainDetailsMapWithFlags>;\n\n tokens(): Promise<TokenWithChainDetailsWithFlags[]>;\n}\n\nexport interface AllbridgeCoreClientWithPoolInfo extends AllbridgeCoreClientWithTokens {\n getChainDetailsMapAndPoolInfoMap(): Promise<{\n chainDetailsMap: ChainDetailsMapWithFlags;\n poolInfoMap: PoolInfoMap;\n }>;\n\n getPoolInfoMap(pools: PoolKeyObject[] | PoolKeyObject): Promise<PoolInfoMap>;\n}\n\nexport class AllbridgeCoreClientImpl implements AllbridgeCoreClientWithPoolInfo {\n constructor(private apiClient: ApiClient) {}\n\n async getChainDetailsMap(): Promise<ChainDetailsMapWithFlags> {\n return (await this.apiClient.getTokenInfo()).chainDetailsMap;\n }\n\n async tokens(): Promise<TokenWithChainDetailsWithFlags[]> {\n const map = await this.getChainDetailsMap();\n return Object.values(map).flatMap((chainDetails) => chainDetails.tokens);\n }\n\n async getPendingInfo(): Promise<PendingInfoResponse> {\n return this.apiClient.getPendingInfo();\n }\n\n async getGasBalance(chainSymbol: string, address: string): Promise<GasBalanceResponse> {\n return this.apiClient.getGasBalance(chainSymbol, address);\n }\n\n async getChainDetailsMapAndPoolInfoMap(): Promise<{\n chainDetailsMap: ChainDetailsMapWithFlags;\n poolInfoMap: PoolInfoMap;\n }> {\n return await this.apiClient.getTokenInfo();\n }\n\n async getTransferStatus(chainSymbol: string, txId: string): Promise<TransferStatusResponse> {\n return await this.apiClient.getTransferStatus(chainSymbol, txId);\n }\n\n async getReceiveTransactionCost(args: ReceiveTransactionCostRequest): Promise<ReceiveTransactionCostResponse> {\n return await this.apiClient.getReceiveTransactionCost(args);\n }\n\n async getPoolInfoMap(pools: PoolKeyObject[] | PoolKeyObject): Promise<PoolInfoMap> {\n return await this.apiClient.getPoolInfoMap(pools);\n }\n}\n", "import { AllbridgeCoreSdkOptions } from \"../../index\";\nimport {\n ChainDetailsMap,\n PoolInfo,\n PoolKeyObject,\n TokenWithChainDetails,\n TokenWithChainDetailsWithFlags,\n} from \"../../tokens-info\";\nimport {\n GasBalanceResponse,\n PendingInfoResponse,\n ReceiveTransactionCostRequest,\n ReceiveTransactionCostResponse,\n TransferStatusResponse,\n} from \"./core-api.model\";\nimport { AllbridgeCoreClient, AllbridgeCoreClientWithTokens } from \"./core-client-base\";\nimport { AllbridgeCoreClientPoolsExt } from \"./core-client-pool-info-caching\";\n\nexport interface AllbridgeCoreClientFiltered extends AllbridgeCoreClient, AllbridgeCoreClientPoolsExt {\n getChainDetailsMap(type: \"swap\" | \"pool\"): Promise<ChainDetailsMap>;\n\n tokens(type: \"swap\" | \"pool\"): Promise<TokenWithChainDetails[]>;\n}\n\nexport class AllbridgeCoreClientFilteredImpl implements AllbridgeCoreClientFiltered {\n private readonly isStaging: boolean;\n\n constructor(\n private client: AllbridgeCoreClientWithTokens & AllbridgeCoreClientPoolsExt,\n params: AllbridgeCoreSdkOptions\n ) {\n this.isStaging = params.coreApiQueryParams?.staging === \"true\";\n }\n\n async getChainDetailsMap(type: \"swap\" | \"pool\"): Promise<ChainDetailsMap> {\n const chainDetailsMapWithFlags = await this.client.getChainDetailsMap();\n const result: ChainDetailsMap = {};\n\n for (const key in chainDetailsMapWithFlags) {\n const chainDetailsWithTokensWithFlag = chainDetailsMapWithFlags[key];\n if (chainDetailsWithTokensWithFlag) {\n result[key] = {\n ...chainDetailsWithTokensWithFlag,\n tokens: filterAndConvertToTokenWithChainDetails(chainDetailsWithTokensWithFlag.tokens, type, this.isStaging),\n };\n }\n }\n return result;\n }\n\n async tokens(type: \"swap\" | \"pool\"): Promise<TokenWithChainDetails[]> {\n return filterAndConvertToTokenWithChainDetails(await this.client.tokens(), type, this.isStaging);\n }\n\n async getPendingInfo(): Promise<PendingInfoResponse> {\n return this.client.getPendingInfo();\n }\n\n async getGasBalance(chainSymbol: string, address: string): Promise<GasBalanceResponse> {\n return this.client.getGasBalance(chainSymbol, address);\n }\n\n async getTransferStatus(chainSymbol: string, txId: string): Promise<TransferStatusResponse> {\n return await this.client.getTransferStatus(chainSymbol, txId);\n }\n\n async getReceiveTransactionCost(args: ReceiveTransactionCostRequest): Promise<ReceiveTransactionCostResponse> {\n return await this.client.getReceiveTransactionCost(args);\n }\n\n cachePut(poolKeyObject: PoolKeyObject, poolInfo: PoolInfo): void {\n return this.client.cachePut(poolKeyObject, poolInfo);\n }\n\n getPoolInfoByKey(poolKeyObject: PoolKeyObject): Promise<PoolInfo> {\n return this.client.getPoolInfoByKey(poolKeyObject);\n }\n\n refreshPoolInfo(poolKeyObjects?: PoolKeyObject | PoolKeyObject[]): Promise<void> {\n return this.client.refreshPoolInfo(poolKeyObjects);\n }\n}\n\nfunction filterAndConvertToTokenWithChainDetails(\n tokens: TokenWithChainDetailsWithFlags[],\n type: \"swap\" | \"pool\",\n isStaging: boolean\n): TokenWithChainDetails[] {\n return tokens.filter((token) => (isStaging ? true : token.flags[type])).map(convertToTokenWithChainDetails);\n}\n\nfunction convertToTokenWithChainDetails(token: TokenWithChainDetailsWithFlags): TokenWithChainDetails {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { flags, ...rest } = token;\n return rest;\n}\n", "import Cache from \"timed-cache\";\nimport { SdkError } from \"../../exceptions\";\nimport {\n ChainDetailsMapWithFlags,\n PoolInfo,\n PoolInfoMap,\n PoolKeyObject,\n TokenWithChainDetailsWithFlags,\n} from \"../../tokens-info\";\nimport { mapChainDetailsMapToPoolKeyObjects, mapPoolKeyObjectToPoolKey } from \"./core-api-mapper\";\nimport {\n GasBalanceResponse,\n PendingInfoResponse,\n ReceiveTransactionCostRequest,\n ReceiveTransactionCostResponse,\n TransferStatusResponse,\n} from \"./core-api.model\";\nimport { AllbridgeCoreClientWithPoolInfo, AllbridgeCoreClientWithTokens } from \"./core-client-base\";\n\nconst _55_SECONDS_TTL = 55 * 1000;\n\nexport interface AllbridgeCoreClientPoolsExt {\n getPoolInfoByKey(poolKeyObject: PoolKeyObject): Promise<PoolInfo>;\n refreshPoolInfo(poolKeyObjects?: PoolKeyObject | PoolKeyObject[]): Promise<void>;\n cachePut(poolKeyObject: PoolKeyObject, poolInfo: PoolInfo): void;\n}\n\nexport class AllbridgeCoreClientPoolInfoCaching implements AllbridgeCoreClientWithTokens, AllbridgeCoreClientPoolsExt {\n private readonly poolInfoCache;\n\n constructor(private readonly client: AllbridgeCoreClientWithPoolInfo) {\n this.poolInfoCache = new PoolInfoCache();\n }\n\n async getChainDetailsMap(): Promise<ChainDetailsMapWithFlags> {\n const result = await this.client.getChainDetailsMapAndPoolInfoMap();\n return result.chainDetailsMap;\n }\n\n async tokens(): Promise<TokenWithChainDetailsWithFlags[]> {\n return await this.client.tokens();\n }\n\n getTransferStatus(chainSymbol: string, txId: string): Promise<TransferStatusResponse> {\n return this.client.getTransferStatus(chainSymbol, txId);\n }\n\n getReceiveTransactionCost(args: ReceiveTransactionCostRequest): Promise<ReceiveTransactionCostResponse> {\n return this.client.getReceiveTransactionCost(args);\n }\n\n getPendingInfo(): Promise<PendingInfoResponse> {\n return this.client.getPendingInfo();\n }\n\n getGasBalance(chainSymbol: string, address: string): Promise<GasBalanceResponse> {\n return this.client.getGasBalance(chainSymbol, address);\n }\n\n async getPoolInfoByKey(poolKeyObject: PoolKeyObject): Promise<PoolInfo> {\n this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap);\n const poolInfo = this.poolInfoCache.get(poolKeyObject);\n /* eslint-disable-next-line @typescript-eslint/no-unnecessary-condition */\n if (poolInfo) {\n return poolInfo;\n } else {\n const poolInfoMap = await this.client.getPoolInfoMap(poolKeyObject);\n this.poolInfoCache.putAll(poolInfoMap);\n const result = poolInfoMap[mapPoolKeyObjectToPoolKey(poolKeyObject)];\n if (result) {\n return result;\n }\n throw new SdkError(\n \"Cannot find pool info for \" + poolKeyObject.poolAddress + \" on chain \" + poolKeyObject.chainSymbol\n );\n }\n }\n\n async refreshPoolInfo(poolKeyObjects?: PoolKeyObject | PoolKeyObject[]): Promise<void> {\n let poolInfoMap;\n if (poolKeyObjects) {\n this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap);\n poolInfoMap = await this.client.getPoolInfoMap(poolKeyObjects);\n } else {\n const result = await this.client.getChainDetailsMapAndPoolInfoMap();\n poolInfoMap = await this.client.getPoolInfoMap(mapChainDetailsMapToPoolKeyObjects(result.chainDetailsMap));\n }\n this.poolInfoCache.putAll(poolInfoMap);\n }\n\n cachePut(poolKeyObject: PoolKeyObject, poolInfo: PoolInfo): void {\n this.poolInfoCache.put(mapPoolKeyObjectToPoolKey(poolKeyObject), poolInfo);\n }\n}\n\nclass PoolInfoCache {\n private cache;\n\n constructor() {\n this.cache = new Cache<PoolInfo>({ defaultTtl: _55_SECONDS_TTL });\n }\n\n putAll(poolInfoMap: PoolInfoMap) {\n for (const [key, value] of Object.entries(poolInfoMap)) {\n this.cache.put(key, value);\n }\n }\n\n putAllIfNotExists(poolInfoMap: PoolInfoMap) {\n for (const [key, value] of Object.entries(poolInfoMap)) {\n if (!this.cache.get(key)) {\n this.cache.put(key, value);\n }\n }\n }\n\n put(key: string, poolInfo: PoolInfo) {\n this.cache.put(key, poolInfo);\n }\n\n get(poolKeyObject: PoolKeyObject): PoolInfo | undefined {\n const key = mapPoolKeyObjectToPoolKey(poolKeyObject);\n return this.cache.get(key);\n }\n}\n", "// @ts-expect-error import tron\nimport TronWeb from \"tronweb\";\nimport Web3 from \"web3\";\nimport { NodeRpcUrlsConfig } from \"..\";\nimport { Chains } from \"../../chains\";\nimport { Messenger } from \"../../client/core-api/core-api.model\";\nimport { AllbridgeCoreClient } from \"../../client/core-api/core-client-base\";\nimport { CCTPDoesNotSupportedError } from \"../../exceptions\";\nimport { AllbridgeCoreSdkOptions, ChainSymbol, ChainType } from \"../../index\";\nimport { TokenWithChainDetails } from \"../../tokens-info\";\nimport { validateAmountDecimals, validateAmountGtZero } from \"../../utils/utils\";\nimport { Provider, TransactionResponse } from \"../models\";\nimport { TokenService } from \"../token\";\nimport { EvmBridgeService } from \"./evm\";\nimport { ApproveParams, CheckAllowanceParams, GetAllowanceParams, SendParams } from \"./models\";\nimport { ChainBridgeService } from \"./models/bridge\";\nimport { DefaultRawBridgeTransactionBuilder, RawBridgeTransactionBuilder } from \"./raw-bridge-transaction-builder\";\nimport { SolanaBridgeService } from \"./sol\";\nimport { SrbBridgeService } from \"./srb\";\nimport { TronBridgeService } from \"./trx\";\n\nexport interface BridgeService {\n rawTxBuilder: RawBridgeTransactionBuilder;\n\n /**\n * Get amount of tokens approved to be sent by the bridge\n * @param provider - will be used to access the network\n * @param params See {@link GetAllowanceParams}\n * @returns the amount of approved tokens\n */\n getAllowance(provider: Provider, params: GetAllowanceParams): Promise<string>;\n\n /**\n * Get amount of tokens approved to be sent by the bridge\n * @param params See {@link GetAllowanceParams}\n * @returns the amount of approved tokens\n */\n getAllowance(params: GetAllowanceParams): Promise<string>;\n\n /**\n * Check if the amount of approved tokens is enough to make a transfer\n * @param provider - will be used to access the network\n * @param params See {@link CheckAllowanceParams}\n * @returns true if the amount of approved tokens is enough to make a transfer\n */\n checkAllowance(provider: Provider, params: CheckAllowanceParams): Promise<boolean>;\n\n /**\n * Check if the amount of approved tokens is enough to make a transfer\n * @param params See {@link CheckAllowanceParams}\n * @returns true if the amount of approved tokens is enough to make a transfer\n */\n checkAllowance(params: CheckAllowanceParams): Promise<boolean>;\n\n /**\n * @Deprecated Use {@link rawTxBuilder}.{@link RawBridgeTransactionBuilder.approve}<p>\n * Approve tokens usage by another address on chains\n * <p>\n * For ETH/USDT: due to specificity of the USDT contract:<br/>\n * If the current allowance is not 0, this function will perform an additional transaction to set allowance to 0 before setting the new allowance value.\n * @param provider - will be used to access the network\n * @param approveData\n */\n approve(provider: Provider, approveData: ApproveParams): Promise<TransactionResponse>;\n\n /**\n * @Deprecated Use {@link rawTxBuilder}.{@link RawBridgeTransactionBuilder.send}<p>\n * Send tokens through the ChainBridgeService\n * @param provider - will be used to access the network\n * @param params\n */\n send(provider: Provider, params: SendParams): Promise<TransactionResponse>;\n}\n\nexport class DefaultBridgeService implements BridgeService {\n public rawTxBuilder: RawBridgeTransactionBuilder;\n\n constructor(\n private api: AllbridgeCoreClient,\n private nodeRpcUrlsConfig: NodeRpcUrlsConfig,\n private params: AllbridgeCoreSdkOptions,\n private tokenService: TokenService\n ) {\n this.rawTxBuilder = new DefaultRawBridgeTransactionBuilder(api, nodeRpcUrlsConfig, params, tokenService);\n }\n\n async getAllowance(a: Provider | GetAllowanceParams, b?: GetAllowanceParams): Promise<string> {\n let provider: Provider | undefined;\n let params: GetAllowanceParams;\n if (b) {\n provider = a as Provider;\n params = b;\n } else {\n params = a as GetAllowanceParams;\n }\n const spender = getSpender(params.token, params.messenger);\n return await this.tokenService.getAllowance({ ...params, spender }, provider);\n }\n\n async checkAllowance(a: Provider | CheckAllowanceParams, b?: CheckAllowanceParams): Promise<boolean> {\n let provider: Provider | undefined;\n let params: CheckAllowanceParams;\n if (b) {\n provider = a as Provider;\n params = b;\n } else {\n params = a as CheckAllowanceParams;\n }\n const spender = getSpender(params.token, params.messenger);\n return this.tokenService.checkAllowance({ ...params, spender }, provider);\n }\n\n async approve(provider: Provider, approveData: ApproveParams): Promise<TransactionResponse> {\n const spender = getSpender(approveData.token, approveData.messenger);\n return this.tokenService.approve(provider, { ...approveData, spender });\n }\n\n async send(provider: Provider, params: SendParams): Promise<TransactionResponse> {\n validateAmountGtZero(params.amount);\n validateAmountDecimals(\"amount\", params.amount, params.sourceToken.decimals);\n return getChainBridgeService(\n params.sourceToken.chainSymbol,\n this.api,\n this.nodeRpcUrlsConfig,\n this.params,\n provider\n ).send(params);\n }\n}\n\nexport function getSpender(token: TokenWithChainDetails, messenger?: Messenger): string {\n if (messenger && messenger == Messenger.CCTP) {\n if (token.cctpAddress) {\n return token.cctpAddress;\n } else {\n throw new CCTPDoesNotSupportedError(\"Such route does not support CCTP protocol\");\n }\n } else {\n return token.bridgeAddress;\n }\n}\n\nexport function getChainBridgeService(\n chainSymbol: string,\n api: AllbridgeCoreClient,\n nodeRpcUrlsConfig: NodeRpcUrlsConfig,\n params: AllbridgeCoreSdkOptions,\n provider?: Provider\n): ChainBridgeService {\n switch (Chains.getChainProperty(chainSymbol).chainType) {\n case ChainType.EVM: {\n if (provider) {\n return new EvmBridgeService(provider as unknown as Web3, api, nodeRpcUrlsConfig);\n } else {\n const nodeRpcUrl = nodeRpcUrlsConfig.getNodeRpcUrl(chainSymbol);\n return new EvmBridgeService(new Web3(nodeRpcUrl), api, nodeRpcUrlsConfig);\n }\n }\n case ChainType.TRX: {\n if (provider) {\n return new TronBridgeService(provider, api);\n } else {\n const nodeRpcUrl = nodeRpcUrlsConfig.getNodeRpcUrl(chainSymbol);\n return new TronBridgeService(new TronWeb({ fullHost: nodeRpcUrl }), api);\n }\n }\n case ChainType.SOLANA: {\n return new SolanaBridgeService(\n nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.SOL),\n {\n wormholeMessengerProgramId: params.wormholeMessengerProgramId,\n solanaLookUpTable: params.solanaLookUpTable,\n cctpParams: params.cctpParams,\n jupiterUrl: params.jupiterUrl,\n },\n api\n );\n }\n case ChainType.SRB: {\n return new SrbBridgeService(nodeRpcUrlsConfig, params, api);\n }\n }\n}\n", "import { Big, BigSource } from \"big.js\";\nimport { AllbridgeCoreClientPoolsExt } from \"../client/core-api/core-client-pool-info-caching\";\nimport { ArgumentInvalidDecimalsError, InvalidAmountError, TimeoutError } from \"../exceptions\";\nimport { PoolInfo, TokenWithChainDetails } from \"../tokens-info\";\n\nexport async function getPoolInfoByToken(\n api: AllbridgeCoreClientPoolsExt,\n sourceChainToken: TokenWithChainDetails\n): Promise<PoolInfo> {\n return await api.getPoolInfoByKey({\n chainSymbol: sourceChainToken.chainSymbol,\n poolAddress: sourceChainToken.poolAddress,\n });\n}\n\nexport function validateAmountGtZero(amount: BigSource) {\n if (Big(amount).lte(0)) {\n throw new InvalidAmountError(\"Amount must be greater than zero\");\n }\n}\n\nexport function validateAmountDecimals(argName: string, amountFloat: number | string | Big, decimalRequired: number) {\n const amount = Big(amountFloat).toFixed();\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const [integerPart, fractionalPart] = amount.split(\".\");\n\n if (fractionalPart && fractionalPart.length > decimalRequired) {\n throw new ArgumentInvalidDecimalsError(argName, fractionalPart.length, decimalRequired);\n }\n}\n\nexport async function promiseWithTimeout<T>(promise: Promise<T>, msg: string, timeoutMs: number): Promise<T> {\n return (await Promise.race([\n promise,\n new Promise((resolve, reject) => {\n setTimeout(() => reject(new TimeoutError(msg)), timeoutMs);\n }),\n ])) as any as T;\n}\n\nexport async function promiseWithTimeoutAndRetries<T>(\n toTry: () => Promise<T>,\n msg: string,\n maxRetries: number,\n timeoutMs: number\n): Promise<T> {\n if (maxRetries < 1)\n throw new Error(`Bad argument: 'maxRetries' must be greater than 0, but ${maxRetries} was received.`);\n let attemptCount = 0;\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition,no-constant-condition\n while (true) {\n try {\n return await promiseWithTimeout(toTry(), msg, timeoutMs);\n } catch (error) {\n if (++attemptCount >= maxRetries) throw new TimeoutError(msg);\n }\n }\n}\n\n/**\n * Keep calling a `fn` for `secondsToWait` seconds, if `keepWaitingIf` is true.\n * Returns an array of all attempts to call the function.\n */\nexport async function withExponentialBackoff<T>(\n fn: (previousFailure?: T) => Promise<T>,\n keepWaitingIf: (result: T) => boolean,\n secondsToWait: number,\n exponentialFactor = 1.5,\n verbose = false\n): Promise<T[]> {\n const attempts: T[] = [];\n\n let count = 0;\n const initialAttempt = await fn();\n attempts.push(initialAttempt);\n if (!keepWaitingIf(initialAttempt)) return attempts;\n\n const waitUntil = new Date(Date.now() + secondsToWait * 1000).valueOf();\n let waitTime = 1000;\n let totalWaitTime = waitTime;\n\n while (Date.now() < waitUntil) {\n const lastAttempt = attempts[attempts.length - 1];\n if (lastAttempt === undefined || !keepWaitingIf(lastAttempt)) break;\n\n count++;\n // Wait a beat\n if (verbose) {\n console.info(\n `Waiting ${waitTime}ms before trying again (bringing the total wait time to ${totalWaitTime}ms so far, of total ${\n secondsToWait * 1000\n }ms)`\n );\n }\n await new Promise((res) => setTimeout(res, waitTime));\n // Exponential backoff\n waitTime = waitTime * exponentialFactor;\n if (new Date(Date.now() + waitTime).valueOf() > waitUntil) {\n waitTime = waitUntil - Date.now();\n if (verbose) {\n console.info(`was gonna wait too long; new waitTime: ${waitTime}ms`);\n }\n }\n totalWaitTime = waitTime + totalWaitTime;\n // Try again\n const nextAttempt = await fn(lastAttempt);\n attempts.push(nextAttempt);\n if (verbose && keepWaitingIf(nextAttempt)) {\n console.info(\n `${count}. Called ${fn.name}; ${attempts.length} prev attempts. Most recent: ${JSON.stringify(\n attempts[attempts.length - 1],\n null,\n 2\n )}`\n );\n }\n }\n\n return attempts;\n}\n", "import * as anchor from \"@project-serum/anchor\";\nimport { PublicKey } from \"@solana/web3.js\";\nimport { Big } from \"big.js\";\nimport BN from \"bn.js\";\nimport Web3 from \"web3\";\nimport { TransactionConfig } from \"web3-core\";\nimport { AbiItem } from \"web3-utils\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport {\n ChainSymbol,\n ChainType,\n FeePaymentMethod,\n Messenger,\n SdkError,\n SwapParams,\n TransactionResponse,\n} from \"../../../models\";\nimport { NodeRpcUrlsConfig } from \"../../index\";\nimport { RawTransaction } from \"../../models\";\nimport bridgeAbi from \"../../models/abi/Bridge.json\";\nimport cctpBridgeAbi from \"../../models/abi/CctpBridge.json\";\nimport { Bridge as BridgeContract } from \"../../models/abi/types/Bridge\";\nimport { CctpBridge as CctpBridgeContract } from \"../../models/abi/types/CctpBridge\";\nimport { BaseContract, PayableTransactionObject } from \"../../models/abi/types/types\";\nimport { getAssociatedAccount } from \"../../utils/sol/accounts\";\nimport { buildAnchorProvider } from \"../../utils/sol/anchor-provider\";\nimport { SendParams, TxSendParams, TxSwapParams } from \"../models\";\nimport { ChainBridgeService } from \"../models/bridge\";\nimport { formatAddress, getNonce, prepareTxSendParams, prepareTxSwapParams } from \"../utils\";\n\nexport class EvmBridgeService extends ChainBridgeService {\n chainType: ChainType.EVM = ChainType.EVM;\n\n constructor(public web3: Web3, public api: AllbridgeCoreClient, private nodeRpcUrlsConfig: NodeRpcUrlsConfig) {\n super();\n }\n\n async send(params: SendParams): Promise<TransactionResponse> {\n const rawTransaction = await this.buildRawTransactionSend(params);\n return this.sendRawTransaction(rawTransaction);\n }\n\n async buildRawTransactionSwap(params: SwapParams): Promise<RawTransaction> {\n const txSwapParams = prepareTxSwapParams(this.chainType, params);\n return await this.buildRawTransactionSwapFromParams(txSwapParams);\n }\n\n async buildRawTransactionSwapFromParams(params: TxSwapParams): Promise<RawTransaction> {\n const {\n amount,\n contractAddress,\n fromAccountAddress,\n fromTokenAddress,\n toAccountAddress,\n toTokenAddress,\n minimumReceiveAmount,\n } = params;\n\n const bridgeContract = this.getBridgeContract(contractAddress);\n\n const swapMethod = bridgeContract.methods.swap(\n amount,\n fromTokenAddress,\n toTokenAddress,\n toAccountAddress,\n minimumReceiveAmount\n );\n\n return Promise.resolve({\n from: fromAccountAddress,\n to: contractAddress,\n data: swapMethod.encodeABI(),\n });\n }\n\n async buildRawTransactionSend(params: SendParams): Promise<RawTransaction> {\n const txSendParams = await prepareTxSendParams(this.chainType, params, this.api);\n const {\n amount,\n contractAddress,\n fromAccountAddress,\n fromTokenAddress,\n toChainId,\n toAccountAddress,\n toTokenAddress,\n messenger,\n fee,\n gasFeePaymentMethod,\n extraGas,\n } = txSendParams;\n\n const nonce = \"0x\" + getNonce().toString(\"hex\");\n let sendMethod: PayableTransactionObject<void>;\n let value: string;\n\n let totalFee = fee;\n if (extraGas) {\n totalFee = Big(totalFee).plus(extraGas).toFixed();\n }\n if (messenger === Messenger.CCTP) {\n const cctp = await this.buildRawTransactionCctpSend(params, txSendParams, totalFee);\n sendMethod = cctp.sendMethod;\n value = cctp.value;\n } else {\n const bridgeContract = this.getBridgeContract(contractAddress);\n if (gasFeePaymentMethod === FeePaymentMethod.WITH_STABLECOIN) {\n sendMethod = bridgeContract.methods.swapAndBridge(\n fromTokenAddress,\n amount,\n toAccountAddress,\n toChainId,\n toTokenAddress,\n nonce,\n messenger,\n totalFee\n );\n value = \"0\";\n } else {\n sendMethod = bridgeContract.methods.swapAndBridge(\n fromTokenAddress,\n amount,\n toAccountAddress,\n toChainId,\n toTokenAddress,\n nonce,\n messenger,\n 0\n );\n value = totalFee;\n }\n }\n\n return Promise.resolve({\n from: fromAccountAddress,\n to: contractAddress,\n value: value,\n data: sendMethod.encodeABI(),\n });\n }\n\n private async buildRawTransactionCctpSend(\n params: SendParams,\n txSendParams: TxSendParams,\n totalFee: string\n ): Promise<{\n sendMethod: PayableTransactionObject<void>;\n value: string;\n }> {\n const { amount, contractAddress, toChainId, toAccountAddress, gasFeePaymentMethod } = txSendParams;\n\n const cctpBridgeContract: CctpBridgeContract = this.getContract(cctpBridgeAbi as AbiItem[], contractAddress);\n let sendMethod: PayableTransactionObject<void>;\n let value: string;\n\n if (params.destinationToken.chainType === ChainType.SOLANA) {\n let recipientWalletAddress: string | number[];\n const receiverAccount = new PublicKey(params.toAccountAddress);\n const receiveMint = new PublicKey(params.destinationToken.tokenAddress);\n const receiveUserToken = await getAssociatedAccount(receiverAccount, receiveMint);\n const provider = buildAnchorProvider(\n this.nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.SOL),\n params.toAccountAddress\n );\n anchor.setProvider(provider);\n const accountData = await anchor.Spl.token(provider).account.token.fetchNullable(receiveUserToken);\n if (accountData?.authority.equals(receiverAccount)) {\n recipientWalletAddress = formatAddress(receiveUserToken.toBase58(), ChainType.SOLANA, this.chainType);\n } else {\n const tokenAccounts = await provider.connection.getTokenAccountsByOwner(receiverAccount, {\n mint: receiveMint,\n });\n if (tokenAccounts.value.length === 0 && !accountData) {\n recipientWalletAddress = formatAddress(receiveUserToken.toBase58(), ChainType.SOLANA, this.chainType);\n } else if (tokenAccounts.value.length > 0) {\n const firstTokenAccount = tokenAccounts.value[0];\n\n if (!firstTokenAccount?.pubkey) {\n throw new SdkError(\"First token account or its public key is undefined\");\n }\n recipientWalletAddress = formatAddress(firstTokenAccount.pubkey.toBase58(), ChainType.SOLANA, this.chainType);\n } else {\n throw new SdkError(\"Associated account has wrong owner\");\n }\n }\n\n if (gasFeePaymentMethod === FeePaymentMethod.WITH_STABLECOIN) {\n sendMethod = cctpBridgeContract.methods.bridgeWithWalletAddress(\n amount,\n recipientWalletAddress,\n toAccountAddress,\n toChainId,\n totalFee\n );\n value = \"0\";\n } else {\n sendMethod = cctpBridgeContract.methods.bridgeWithWalletAddress(\n amount,\n recipientWalletAddress,\n toAccountAddress,\n toChainId,\n 0\n );\n value = totalFee;\n }\n } else {\n if (gasFeePaymentMethod === FeePaymentMethod.WITH_STABLECOIN) {\n sendMethod = cctpBridgeContract.methods.bridge(amount, toAccountAddress, toChainId, totalFee);\n value = \"0\";\n } else {\n sendMethod = cctpBridgeContract.methods.bridge(amount, toAccountAddress, toChainId, 0);\n value = totalFee;\n }\n }\n return { sendMethod, value };\n }\n\n private async sendRawTransaction(rawTransaction: RawTransaction) {\n const estimateGas = await this.web3.eth.estimateGas(rawTransaction as TransactionConfig);\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error DISABLE SITE SUGGESTED GAS FEE IN METAMASK\n // prettier-ignore\n const feeOptions: { maxPriorityFeePerGas?: number | string | BN; maxFeePerGas?: number | string | BN } = { maxPriorityFeePerGas: null, maxFeePerGas: null };\n const { transactionHash } = await this.web3.eth.sendTransaction({\n ...(rawTransaction as Object),\n gas: estimateGas,\n ...feeOptions,\n });\n return { txId: transactionHash };\n }\n\n private getContract<T extends BaseContract>(abiItem: AbiItem[], contractAddress: string): T {\n return new this.web3.eth.Contract(abiItem, contractAddress) as any;\n }\n\n private getBridgeContract(contractAddress: string): BridgeContract {\n return this.getContract<BridgeContract>(bridgeAbi as AbiItem[], contractAddress);\n }\n}\n", "[\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_chainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"_chainPrecision\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"contract Messenger\",\n \"name\": \"_allbridgeMessenger\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"contract WormholeMessenger\",\n \"name\": \"_wormholeMessenger\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"contract IGasOracle\",\n \"name\": \"_gasOracle\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"gas\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"BridgingFeeFromTokens\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"previousOwner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"OwnershipTransferred\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"bridgeTransactionCost\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"messageTransactionCost\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"ReceiveFee\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Received\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"recipient\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"sendToken\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"receiveToken\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"sendAmount\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"receiveAmount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Swapped\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"recipient\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"nonce\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"enum MessengerProtocol\",\n \"name\": \"messenger\",\n \"type\": \"uint8\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"message\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"TokensReceived\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"recipient\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"destinationChainId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"receiveToken\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"nonce\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"enum MessengerProtocol\",\n \"name\": \"messenger\",\n \"type\": \"uint8\"\n }\n ],\n \"name\": \"TokensSent\",\n \"type\": \"event\"\n },\n {\n \"stateMutability\": \"payable\",\n \"type\": \"fallback\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_chainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"tokenAddress\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"addBridgeToken\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"contract Pool\",\n \"name\": \"pool\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"token\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"addPool\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"canSwap\",\n \"outputs\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"\",\n \"type\": \"uint8\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"chainId\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"gasUsage\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"destinationChainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"enum MessengerProtocol\",\n \"name\": \"messenger\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"tokenAddress\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"getBridgingCostInTokens\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"enum MessengerProtocol\",\n \"name\": \"protocol\",\n \"type\": \"uint8\"\n }\n ],\n \"name\": \"getMessageCost\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"enum MessengerProtocol\",\n \"name\": \"protocol\",\n \"type\": \"uint8\"\n }\n ],\n \"name\": \"getMessageGasUsage\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getTransactionCost\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"message\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"enum MessengerProtocol\",\n \"name\": \"protocol\",\n \"type\": \"uint8\"\n }\n ],\n \"name\": \"hasReceivedMessage\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"message\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"hasSentMessage\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"recipient\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"sourceChainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"destinationChainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"receiveToken\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"nonce\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"enum MessengerProtocol\",\n \"name\": \"messenger\",\n \"type\": \"uint8\"\n }\n ],\n \"name\": \"hashMessage\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"pure\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"tokenAddress\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"otherBridgeTokens\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"isSupported\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"otherBridges\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"bridgeAddress\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"owner\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"tokenId\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"pools\",\n \"outputs\": [\n {\n \"internalType\": \"contract Pool\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"messageHash\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"processedMessages\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"isProcessed\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"recipient\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"sourceChainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"receiveToken\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"nonce\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"enum MessengerProtocol\",\n \"name\": \"messenger\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"receiveAmountMin\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"receiveTokens\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_chainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"bridgeAddress\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"registerBridge\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_chainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"tokenAddress\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"removeBridgeToken\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"renounceOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"messageHash\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"sentMessages\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"isSent\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"contract Messenger\",\n \"name\": \"_allbridgeMessenger\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"setAllbridgeMessenger\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"contract IGasOracle\",\n \"name\": \"_gasOracle\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"setGasOracle\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"gasAmount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"setGasUsage\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_rebalancer\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"setRebalancer\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_stopAuthority\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"setStopAuthority\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"contract WormholeMessenger\",\n \"name\": \"_wormholeMessenger\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"setWormholeMessenger\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"startSwap\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"stopSwap\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"token\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"receiveToken\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"recipient\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"receiveAmountMin\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"swap\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"token\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"recipient\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"destinationChainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"receiveToken\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"nonce\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"enum MessengerProtocol\",\n \"name\": \"messenger\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"feeTokenAmount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"swapAndBridge\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"transferOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"contract IERC20\",\n \"name\": \"token\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"withdrawBridgingFeeInTokens\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"withdrawGasTokens\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"stateMutability\": \"payable\",\n \"type\": \"receive\"\n }\n]\n", "[\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId_\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainPrecision_\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"tokenAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"cctpMessenger_\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"cctpTransmitter_\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"contract IGasOracle\",\n \"name\": \"gasOracle_\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"previousOwner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"OwnershipTransferred\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"recipient\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"ReceivedExtraGas\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"ReceivedGas\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"nonce\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"newRecipient\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"RecipientReplaced\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"recipientWalletAddress\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"TokensSentExtras\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"recipient\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"destinationChainId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"nonce\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"receivedRelayerFeeFromGas\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"receivedRelayerFeeFromTokens\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"relayerFee\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"receivedRelayerFeeTokenAmount\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"adminFeeTokenAmount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"TokensSent\",\n \"type\": \"event\"\n },\n {\n \"stateMutability\": \"payable\",\n \"type\": \"fallback\"\n },\n {\n \"inputs\": [],\n \"name\": \"adminFeeShareBP\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"recipient\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"destinationChainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"relayerFeeTokenAmount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"bridge\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"recipient\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"recipientWalletAddress\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"destinationChainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"relayerFeeTokenAmount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"bridgeWithWalletAddress\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"chainId\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"originalMessage\",\n \"type\": \"bytes\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"originalAttestation\",\n \"type\": \"bytes\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"newRecipient\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"changeRecipient\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"gasUsage\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"destinationChainId\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getBridgingCostInTokens\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId_\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getDomainByChainId\",\n \"outputs\": [\n {\n \"internalType\": \"uint32\",\n \"name\": \"\",\n \"type\": \"uint32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getTransactionCost\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"sourceChainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"nonce\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"isMessageProcessed\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"owner\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"recipient\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"message\",\n \"type\": \"bytes\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"signature\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"receiveTokens\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId_\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"domain\",\n \"type\": \"uint32\"\n }\n ],\n \"name\": \"registerBridgeDestination\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"renounceOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"adminFeeShareBP_\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"setAdminFeeShare\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"contract IGasOracle\",\n \"name\": \"gasOracle_\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"setGasOracle\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"gasAmount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"setGasUsage\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"transferOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId_\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"unregisterBridgeDestination\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"withdrawFeeInTokens\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"withdrawGas\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"stateMutability\": \"payable\",\n \"type\": \"receive\"\n }\n]\n", "import * as anchor from \"@project-serum/anchor\";\nimport { PublicKey } from \"@solana/web3.js\";\n\nexport async function getAssociatedAccount(publicKey: PublicKey, mintAccount: PublicKey): Promise<PublicKey> {\n return anchor.utils.token.associatedAddress({\n mint: mintAccount,\n owner: publicKey,\n });\n}\n\nexport async function getConfigAccount(programId: PublicKey): Promise<PublicKey> {\n const [configPda] = await PublicKey.findProgramAddress([anchor.utils.bytes.utf8.encode(\"config\")], programId);\n return configPda;\n}\n\nexport async function getLockAccount(nonce: number[], bridgeProgramId: PublicKey): Promise<PublicKey> {\n const [lockPda] = await PublicKey.findProgramAddress(\n [anchor.utils.bytes.utf8.encode(\"lock\"), Uint8Array.from(nonce)],\n bridgeProgramId\n );\n return lockPda;\n}\n\nexport async function getPriceAccount(chainId: number, gasOracleProgramId: PublicKey): Promise<PublicKey> {\n const [pricePda] = await PublicKey.findProgramAddress(\n [anchor.utils.bytes.utf8.encode(\"price_v2\"), Uint8Array.from([chainId])],\n gasOracleProgramId\n );\n return pricePda;\n}\n\nexport async function getAuthorityAccount(bridgeProgramId: PublicKey): Promise<PublicKey> {\n const configAccount = await getConfigAccount(bridgeProgramId);\n const [poolAuthority] = await PublicKey.findProgramAddress([configAccount.toBuffer()], bridgeProgramId);\n return poolAuthority;\n}\n\nexport async function getCctpAuthorityAccount(\n cctpBridgeAccount: PublicKey,\n cctpBridgeProgramId: PublicKey\n): Promise<PublicKey> {\n const [poolAuthority] = await PublicKey.findProgramAddress([cctpBridgeAccount.toBuffer()], cctpBridgeProgramId);\n return poolAuthority;\n}\n\nexport async function getBridgeTokenAccount(mintAccount: PublicKey, bridgeProgramId: PublicKey): Promise<PublicKey> {\n const [poolPda] = await PublicKey.findProgramAddress(\n [anchor.utils.bytes.utf8.encode(\"token\"), mintAccount.toBytes()],\n bridgeProgramId\n );\n return poolPda;\n}\n\nexport async function getOtherChainTokenAccount(\n chainId: number,\n token: Buffer,\n bridgeProgramId: PublicKey\n): Promise<PublicKey> {\n const [otherChainTokenPda] = await PublicKey.findProgramAddress(\n [anchor.utils.bytes.utf8.encode(\"other_bridge_token\"), Buffer.from([chainId]), token],\n bridgeProgramId\n );\n return otherChainTokenPda;\n}\n\nexport async function getChainBridgeAccount(chainId: number, bridgeProgramId: PublicKey): Promise<PublicKey> {\n const [chainBridgePda] = await PublicKey.findProgramAddress(\n [anchor.utils.bytes.utf8.encode(\"chain_bridge\"), Uint8Array.from([chainId])],\n bridgeProgramId\n );\n return chainBridgePda;\n}\n\nexport async function getGasUsageAccount(chainId: number, messengerProgramId: PublicKey): Promise<PublicKey> {\n const [chainBridgePda] = await PublicKey.findProgramAddress(\n [anchor.utils.bytes.utf8.encode(\"gas_usage\"), Uint8Array.from([chainId])],\n messengerProgramId\n );\n return chainBridgePda;\n}\n\nexport async function getSendMessageAccount(\n messageWithSigner: Uint8Array,\n messengerProgramId: PublicKey\n): Promise<PublicKey> {\n const [sentMessagePda] = await PublicKey.findProgramAddress(\n [anchor.utils.bytes.utf8.encode(\"sent_message\"), messageWithSigner],\n messengerProgramId\n );\n return sentMessagePda;\n}\n\nexport async function getUserDepositAccount(\n userPublicKey: PublicKey,\n tokenMintAccount: PublicKey,\n bridgeProgramId: PublicKey\n): Promise<PublicKey> {\n const [userDepositPda] = await PublicKey.findProgramAddress(\n [anchor.utils.bytes.utf8.encode(\"user_deposit\"), tokenMintAccount.toBytes(), userPublicKey.toBytes()],\n bridgeProgramId\n );\n return userDepositPda;\n}\n\nexport async function getCctpBridgeAccount(mintAccount: PublicKey, cctpBridgeProgramId: PublicKey): Promise<PublicKey> {\n const [configPda] = await PublicKey.findProgramAddress(\n [anchor.utils.bytes.utf8.encode(\"cctp_bridge\"), mintAccount.toBytes()],\n cctpBridgeProgramId\n );\n return configPda;\n}\n\nexport async function getCctpBridgeTokenAccount(token: PublicKey, cctpBridgeProgramId: PublicKey): Promise<PublicKey> {\n const [poolPda] = await PublicKey.findProgramAddress(\n [anchor.utils.bytes.utf8.encode(\"token\"), token.toBytes()],\n cctpBridgeProgramId\n );\n return poolPda;\n}\n\nexport function getCctpLockAccount(cctpBridgeProgramId: PublicKey, messageSentEventDataAccount: PublicKey): PublicKey {\n const [tokenMessengerEventAuthority] = PublicKey.findProgramAddressSync(\n [anchor.utils.bytes.utf8.encode(\"lock\"), messageSentEventDataAccount.toBuffer()],\n cctpBridgeProgramId\n );\n return tokenMessengerEventAuthority;\n}\n\nexport function getCctpAccounts(\n domain: number,\n mintAccount: PublicKey,\n cctpTransmitterProgramId: PublicKey,\n cctpTokenMessengerMinter: PublicKey\n) {\n const messageTransmitterAccount = findProgramAddress(\"message_transmitter\", cctpTransmitterProgramId);\n const tokenMessenger = findProgramAddress(\"token_messenger\", cctpTokenMessengerMinter);\n const tokenMessengerEventAuthority = findProgramAddress(\"__event_authority\", cctpTokenMessengerMinter);\n const tokenMinter = findProgramAddress(\"token_minter\", cctpTokenMessengerMinter);\n const localToken = findProgramAddress(\"local_token\", cctpTokenMessengerMinter, [mintAccount]);\n const remoteTokenMessengerKey = findProgramAddress(\"remote_token_messenger\", cctpTokenMessengerMinter, [\n domain.toString(),\n ]);\n const authorityPda = findProgramAddress(\"sender_authority\", cctpTokenMessengerMinter);\n return {\n messageTransmitterAccount,\n tokenMessenger,\n tokenMessengerEventAuthority,\n tokenMinter,\n localToken,\n remoteTokenMessengerKey,\n authorityPda,\n };\n}\n\nfunction findProgramAddress(\n label: string,\n programId: PublicKey,\n extraSeeds: (string | number[] | Buffer | PublicKey)[] = []\n): PublicKey {\n const seeds = [Buffer.from(anchor.utils.bytes.utf8.encode(label))];\n for (const extraSeed of extraSeeds) {\n if (typeof extraSeed === \"string\") {\n seeds.push(Buffer.from(anchor.utils.bytes.utf8.encode(extraSeed)));\n } else if (Array.isArray(extraSeed)) {\n seeds.push(Buffer.from(extraSeed));\n } else if (Buffer.isBuffer(extraSeed)) {\n seeds.push(extraSeed);\n } else {\n seeds.push(extraSeed.toBuffer());\n }\n }\n const res = PublicKey.findProgramAddressSync(seeds, programId);\n return res[0];\n}\n", "import { AnchorProvider, Provider } from \"@project-serum/anchor\";\nimport { Connection, PublicKey } from \"@solana/web3.js\";\n\nexport function buildAnchorProvider(solanaRpcUrl: string, accountAddress: string): Provider {\n const connection = new Connection(solanaRpcUrl, \"confirmed\");\n\n const publicKey = new PublicKey(accountAddress);\n\n return new AnchorProvider(\n connection,\n // @ts-expect-error enough wallet for fetch actions\n { publicKey: publicKey },\n {\n preflightCommitment: \"confirmed\",\n commitment: \"confirmed\",\n }\n );\n}\n", "import { ChainType } from \"../../../chains/chain.enums\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { RawTransaction, TransactionResponse } from \"../../models\";\nimport { SendParams, SwapParams } from \"./bridge.model\";\n\nexport abstract class ChainBridgeService {\n abstract chainType: ChainType;\n abstract api: AllbridgeCoreClient;\n\n /**\n * @Deprecated Use {@link buildRawTransactionSend} or {@link buildRawTransactionSwap} instead<p>\n * Send tokens through the ChainBridgeService\n * @param params\n */\n abstract send(params: SendParams): Promise<TransactionResponse>;\n abstract buildRawTransactionSend(params: SendParams): Promise<RawTransaction>;\n abstract buildRawTransactionSwap(params: SwapParams): Promise<RawTransaction>;\n}\n", "import { PublicKey } from \"@solana/web3.js\";\nimport { Address } from \"@stellar/stellar-sdk\";\nimport { Big, BigSource } from \"big.js\";\nimport randomBytes from \"randombytes\";\n/* @ts-expect-error Could not find a declaration file for module \"tronweb\"*/\nimport * as TronWebLib from \"tronweb\";\nimport { Chains } from \"../../chains\";\nimport { Messenger } from \"../../client/core-api/core-api.model\";\nimport { AllbridgeCoreClient } from \"../../client/core-api/core-client-base\";\nimport {\n AmountNotEnoughError,\n CCTPDoesNotSupportedError,\n ExtraGasMaxLimitExceededError,\n InvalidGasFeePaymentOptionError,\n SdkError,\n} from \"../../exceptions\";\nimport {\n AmountFormat,\n ChainType,\n ExtraGasMaxLimitResponse,\n ExtraGasMaxLimits,\n FeePaymentMethod,\n GasFeeOptions,\n SwapParams,\n} from \"../../models\";\nimport { ChainDetailsMap, TokenWithChainDetails } from \"../../tokens-info\";\nimport { convertAmountPrecision, convertFloatAmountToInt, convertIntAmountToFloat } from \"../../utils/calculation\";\nimport { SendParams, TxSendParams, TxSwapParams } from \"./models\";\n\nexport function formatAddress(address: string, from: ChainType, to: ChainType): string | number[] {\n let buffer: Buffer;\n switch (from) {\n case ChainType.EVM: {\n buffer = evmAddressToBuffer32(address);\n break;\n }\n case ChainType.SOLANA: {\n buffer = new PublicKey(address).toBuffer();\n break;\n }\n case ChainType.TRX: {\n buffer = tronAddressToBuffer32(address);\n break;\n }\n case ChainType.SRB: {\n buffer = new Address(address).toBuffer();\n break;\n }\n }\n\n switch (to) {\n case ChainType.EVM: {\n return \"0x\" + buffer.toString(\"hex\");\n }\n case ChainType.SOLANA: {\n return Array.from(buffer);\n }\n case ChainType.TRX: {\n return buffer.toJSON().data;\n }\n case ChainType.SRB: {\n return buffer.toJSON().data;\n }\n }\n}\n\nexport function hexToBuffer(hex: string): Buffer {\n return Buffer.from(hex.replace(/^0x/i, \"\"), \"hex\");\n}\n\nexport function evmAddressToBuffer32(address: string): Buffer {\n const length = 32;\n const buff = hexToBuffer(address);\n return Buffer.concat([Buffer.alloc(length - buff.length, 0), buff], length);\n}\n\nfunction tronAddressToBuffer32(address: string): Buffer {\n const ethAddress = tronAddressToEthAddress(address);\n const buffer = hexToBuffer(ethAddress);\n return bufferToSize(buffer, 32);\n}\n\nexport function tronAddressToEthAddress(address: string): string {\n return Buffer.from(TronWebLib.utils.crypto.decodeBase58Address(address)).toString(\"hex\").replace(/^41/, \"0x\");\n}\n\nfunction bufferToSize(buffer: Buffer, size: number): Buffer {\n if (buffer.length >= size) {\n return buffer;\n }\n const result = Buffer.alloc(size, 0);\n buffer.copy(result, size - buffer.length);\n return result;\n}\n\nexport function getTokenByTokenAddress(\n chainDetailsMap: ChainDetailsMap,\n chainSymbol: string,\n tokenAddress: string\n): TokenWithChainDetails {\n const chainDetail = chainDetailsMap[chainSymbol];\n if (!chainDetail) {\n throw new SdkError(\"Cannot find chain detail for \" + chainSymbol);\n }\n const token = chainDetail.tokens.find((value) => value.tokenAddress.toUpperCase() === tokenAddress.toUpperCase());\n if (!token) {\n throw new SdkError(\"Cannot find token info about token \" + tokenAddress + \" on chain \" + chainSymbol);\n }\n return token;\n}\n\nexport function getNonce(): Buffer {\n return randomBytes(32);\n}\n\nexport function getNonceBigInt(): bigint {\n const bigint = randomBytes(32).readBigInt64BE();\n if (bigint < 0) {\n return bigint * -1n;\n }\n return bigint;\n}\n\nexport function prepareTxSwapParams(bridgeChainType: ChainType, params: SwapParams): TxSwapParams {\n const txSwapParams = {} as TxSwapParams;\n const sourceToken = params.sourceToken;\n txSwapParams.amount = convertFloatAmountToInt(params.amount, sourceToken.decimals).toFixed();\n txSwapParams.contractAddress = sourceToken.bridgeAddress;\n txSwapParams.fromAccountAddress = params.fromAccountAddress;\n txSwapParams.fromTokenAddress = formatAddress(sourceToken.tokenAddress, bridgeChainType, bridgeChainType);\n txSwapParams.toAccountAddress = params.toAccountAddress;\n txSwapParams.toTokenAddress = formatAddress(params.destinationToken.tokenAddress, bridgeChainType, bridgeChainType);\n txSwapParams.minimumReceiveAmount = params.minimumReceiveAmount\n ? convertFloatAmountToInt(params.minimumReceiveAmount, params.destinationToken.decimals).toFixed()\n : \"0\";\n return txSwapParams;\n}\n\nexport async function prepareTxSendParams(\n bridgeChainType: ChainType,\n params: SendParams,\n api: AllbridgeCoreClient\n): Promise<TxSendParams> {\n const txSendParams = {} as TxSendParams;\n\n txSendParams.fromChainId = params.sourceToken.allbridgeChainId;\n txSendParams.fromChainSymbol = params.sourceToken.chainSymbol;\n const toChainType = Chains.getChainProperty(params.destinationToken.chainSymbol).chainType;\n txSendParams.fromTokenAddress = params.sourceToken.tokenAddress;\n\n txSendParams.toChainId = params.destinationToken.allbridgeChainId;\n txSendParams.toTokenAddress = params.destinationToken.tokenAddress;\n\n if (params.gasFeePaymentMethod === FeePaymentMethod.WITH_STABLECOIN) {\n txSendParams.gasFeePaymentMethod = FeePaymentMethod.WITH_STABLECOIN;\n } else {\n // default FeePaymentMethod.WITH_NATIVE_CURRENCY\n txSendParams.gasFeePaymentMethod = FeePaymentMethod.WITH_NATIVE_CURRENCY;\n }\n const sourceToken = params.sourceToken;\n if (params.messenger === Messenger.CCTP) {\n if (!sourceToken.cctpAddress || !params.destinationToken.cctpAddress) {\n throw new CCTPDoesNotSupportedError(\"Such route does not support CCTP protocol\");\n }\n txSendParams.contractAddress = sourceToken.cctpAddress;\n } else {\n txSendParams.contractAddress = sourceToken.bridgeAddress;\n }\n txSendParams.messenger = params.messenger;\n txSendParams.fromAccountAddress = params.fromAccountAddress;\n txSendParams.amount = convertFloatAmountToInt(params.amount, sourceToken.decimals).toFixed();\n\n //Fee\n let { fee, feeFormat } = params;\n if (!fee) {\n const gasFeeOptions = await getGasFeeOptions(\n txSendParams.fromChainId,\n params.sourceToken.chainType,\n txSendParams.toChainId,\n sourceToken.decimals,\n txSendParams.messenger,\n api\n );\n\n const gasFeeOption = gasFeeOptions[txSendParams.gasFeePaymentMethod];\n if (!gasFeeOption) {\n throw new InvalidGasFeePaymentOptionError();\n }\n fee = gasFeeOption[AmountFormat.INT];\n feeFormat = AmountFormat.INT;\n }\n if (feeFormat == AmountFormat.FLOAT) {\n switch (txSendParams.gasFeePaymentMethod) {\n case FeePaymentMethod.WITH_NATIVE_CURRENCY:\n txSendParams.fee = convertFloatAmountToInt(fee, Chains.getChainDecimalsByType(sourceToken.chainType)).toFixed(\n 0\n );\n break;\n case FeePaymentMethod.WITH_STABLECOIN:\n txSendParams.fee = convertFloatAmountToInt(fee, sourceToken.decimals).toFixed(0);\n break;\n }\n } else {\n txSendParams.fee = fee;\n }\n\n //ExtraGas\n const { extraGas, extraGasFormat } = params;\n if (extraGas && +extraGas > 0) {\n if (extraGasFormat == AmountFormat.FLOAT) {\n switch (txSendParams.gasFeePaymentMethod) {\n case FeePaymentMethod.WITH_NATIVE_CURRENCY:\n txSendParams.extraGas = convertFloatAmountToInt(\n extraGas,\n Chains.getChainDecimalsByType(sourceToken.chainType)\n ).toFixed(0);\n break;\n case FeePaymentMethod.WITH_STABLECOIN:\n txSendParams.extraGas = convertFloatAmountToInt(extraGas, sourceToken.decimals).toFixed(0);\n break;\n }\n } else {\n txSendParams.extraGas = extraGas;\n }\n await validateExtraGasNotExceeded(\n txSendParams.extraGas,\n txSendParams.gasFeePaymentMethod,\n sourceToken,\n params.destinationToken,\n api\n );\n }\n\n txSendParams.fromTokenAddress = formatAddress(txSendParams.fromTokenAddress, bridgeChainType, bridgeChainType);\n txSendParams.toAccountAddress = formatAddress(params.toAccountAddress, toChainType, bridgeChainType);\n txSendParams.toTokenAddress = formatAddress(txSendParams.toTokenAddress, toChainType, bridgeChainType);\n if (txSendParams.gasFeePaymentMethod == FeePaymentMethod.WITH_STABLECOIN) {\n validateAmountEnough(txSendParams.amount, sourceToken.decimals, txSendParams.fee, txSendParams.extraGas);\n }\n return txSendParams;\n}\n\nfunction validateAmountEnough(\n amountInt: BigSource,\n decimals: number,\n feeInt: BigSource,\n extraGasInt: BigSource | undefined\n) {\n const amountTotal = Big(amountInt)\n .minus(feeInt)\n .minus(extraGasInt ?? 0);\n if (amountTotal.lte(0)) {\n throw new AmountNotEnoughError(\n `Amount not enough to pay fee, ${convertIntAmountToFloat(\n Big(amountTotal).minus(1).neg(),\n decimals\n ).toFixed()} stables is missing`\n );\n }\n}\n\nexport async function getGasFeeOptions(\n sourceAllbridgeChainId: number,\n sourceChainType: ChainType,\n destinationAllbridgeChainId: number,\n sourceChainTokenDecimals: number,\n messenger: Messenger,\n api: AllbridgeCoreClient\n): Promise<GasFeeOptions> {\n const transactionCostResponse = await api.getReceiveTransactionCost({\n sourceChainId: sourceAllbridgeChainId,\n destinationChainId: destinationAllbridgeChainId,\n messenger,\n });\n\n const gasFeeOptions: GasFeeOptions = {\n [FeePaymentMethod.WITH_NATIVE_CURRENCY]: {\n [AmountFormat.INT]: transactionCostResponse.fee,\n [AmountFormat.FLOAT]: convertIntAmountToFloat(\n transactionCostResponse.fee,\n Chains.getChainDecimalsByType(sourceChainType)\n ).toFixed(),\n },\n };\n if (transactionCostResponse.sourceNativeTokenPrice) {\n const gasFeeIntWithStables = convertAmountPrecision(\n new Big(transactionCostResponse.fee).mul(transactionCostResponse.sourceNativeTokenPrice),\n Chains.getChainDecimalsByType(sourceChainType),\n sourceChainTokenDecimals\n ).toFixed(0, Big.roundUp);\n gasFeeOptions[FeePaymentMethod.WITH_STABLECOIN] = {\n [AmountFormat.INT]: gasFeeIntWithStables,\n [AmountFormat.FLOAT]: convertIntAmountToFloat(gasFeeIntWithStables, sourceChainTokenDecimals).toFixed(),\n };\n }\n\n return gasFeeOptions;\n}\n\nasync function validateExtraGasNotExceeded(\n extraGasInt: string,\n gasFeePaymentMethod: FeePaymentMethod,\n sourceToken: TokenWithChainDetails,\n destinationToken: TokenWithChainDetails,\n api: AllbridgeCoreClient\n) {\n const extraGasLimits = await getExtraGasMaxLimits(sourceToken, destinationToken, api);\n const extraGasMaxLimit = extraGasLimits.extraGasMax[gasFeePaymentMethod];\n if (!extraGasMaxLimit) {\n throw new InvalidGasFeePaymentOptionError(`Impossible to pay extra gas by '${gasFeePaymentMethod}' payment method`);\n }\n const extraGasMaxIntLimit = extraGasMaxLimit[AmountFormat.INT];\n if (Big(extraGasInt).gt(extraGasMaxIntLimit)) {\n throw new ExtraGasMaxLimitExceededError(\n `Extra gas ${extraGasInt} in int format, exceeded limit ${extraGasMaxIntLimit} for '${gasFeePaymentMethod}' payment method`\n );\n }\n}\n\nexport async function getExtraGasMaxLimits(\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n api: AllbridgeCoreClient\n): Promise<ExtraGasMaxLimitResponse> {\n const extraGasMaxLimits: ExtraGasMaxLimits = {};\n const transactionCostResponse = await api.getReceiveTransactionCost({\n sourceChainId: sourceChainToken.allbridgeChainId,\n destinationChainId: destinationChainToken.allbridgeChainId,\n messenger: Messenger.ALLBRIDGE,\n });\n const maxAmount = destinationChainToken.txCostAmount.maxAmount;\n const maxAmountFloat = convertIntAmountToFloat(\n maxAmount,\n Chains.getChainDecimalsByType(destinationChainToken.chainType)\n ).toFixed();\n const maxAmountFloatInSourceNative = Big(maxAmountFloat)\n .div(transactionCostResponse.exchangeRate)\n .toFixed(Chains.getChainDecimalsByType(sourceChainToken.chainType), Big.roundDown);\n const maxAmountInSourceNative = convertFloatAmountToInt(\n maxAmountFloatInSourceNative,\n Chains.getChainDecimalsByType(sourceChainToken.chainType)\n ).toFixed(0);\n extraGasMaxLimits[FeePaymentMethod.WITH_NATIVE_CURRENCY] = {\n [AmountFormat.INT]: maxAmountInSourceNative,\n [AmountFormat.FLOAT]: maxAmountFloatInSourceNative,\n };\n if (transactionCostResponse.sourceNativeTokenPrice) {\n const maxAmountFloatInStable = Big(maxAmountFloatInSourceNative)\n .mul(transactionCostResponse.sourceNativeTokenPrice)\n .toFixed(sourceChainToken.decimals, Big.roundDown);\n extraGasMaxLimits[FeePaymentMethod.WITH_STABLECOIN] = {\n [AmountFormat.INT]: convertFloatAmountToInt(maxAmountFloatInStable, sourceChainToken.decimals).toFixed(0),\n [AmountFormat.FLOAT]: maxAmountFloatInStable,\n };\n }\n return {\n extraGasMax: extraGasMaxLimits,\n destinationChain: {\n gasAmountMax: {\n [AmountFormat.INT]: maxAmount,\n [AmountFormat.FLOAT]: maxAmountFloat,\n },\n swap: {\n [AmountFormat.INT]: destinationChainToken.txCostAmount.swap,\n [AmountFormat.FLOAT]: convertIntAmountToFloat(\n destinationChainToken.txCostAmount.swap,\n Chains.getChainDecimalsByType(destinationChainToken.chainType)\n ).toFixed(),\n },\n transfer: {\n [AmountFormat.INT]: destinationChainToken.txCostAmount.transfer,\n [AmountFormat.FLOAT]: convertIntAmountToFloat(\n destinationChainToken.txCostAmount.transfer,\n Chains.getChainDecimalsByType(destinationChainToken.chainType)\n ).toFixed(),\n },\n },\n exchangeRate: transactionCostResponse.exchangeRate,\n sourceNativeTokenPrice: transactionCostResponse.sourceNativeTokenPrice,\n };\n}\n\nexport function isSendParams(params: SwapParams | SendParams): params is SendParams {\n return params.sourceToken.chainSymbol !== params.destinationToken.chainSymbol;\n}\n", "import { NodeRpcUrlsConfig } from \"..\";\nimport { AllbridgeCoreClient } from \"../../client/core-api/core-client-base\";\nimport { AllbridgeCoreSdkOptions } from \"../../index\";\nimport { validateAmountDecimals, validateAmountGtZero } from \"../../utils/utils\";\nimport { Provider, RawTransaction } from \"../models\";\nimport { TokenService } from \"../token\";\nimport { ApproveParams, SendParams, SwapParams } from \"./models\";\nimport { isSendParams } from \"./utils\";\nimport { getChainBridgeService, getSpender } from \"./index\";\n\nexport interface RawBridgeTransactionBuilder {\n /**\n * Creates a Raw Transaction for approving tokens usage by the bridge\n * @param provider - will be used to access the network\n * @param approveData\n */\n approve(provider: Provider, approveData: ApproveParams): Promise<RawTransaction>;\n /**\n * Creates a Raw Transaction for approving tokens usage by the bridge\n * @param approveData\n */\n approve(approveData: ApproveParams): Promise<RawTransaction>;\n /**\n * Creates a Raw Transaction for initiating the transfer of tokens\n * @param params\n * @param provider - will be used to access the network\n */\n send(params: SwapParams | SendParams, provider?: Provider): Promise<RawTransaction>;\n}\n\nexport class DefaultRawBridgeTransactionBuilder implements RawBridgeTransactionBuilder {\n constructor(\n private api: AllbridgeCoreClient,\n private nodeRpcUrlsConfig: NodeRpcUrlsConfig,\n private params: AllbridgeCoreSdkOptions,\n private tokenService: TokenService\n ) {}\n\n async approve(a: Provider | ApproveParams, b?: ApproveParams): Promise<RawTransaction> {\n let provider: Provider | undefined;\n let approveData: ApproveParams;\n if (b) {\n provider = a as Provider;\n approveData = b;\n } else {\n approveData = a as ApproveParams;\n }\n const spender = getSpender(approveData.token, approveData.messenger);\n return this.tokenService.buildRawTransactionApprove(\n {\n ...approveData,\n spender,\n },\n provider\n );\n }\n\n async send(params: SwapParams | SendParams, provider?: Provider): Promise<RawTransaction> {\n validateAmountGtZero(params.amount);\n validateAmountDecimals(\"amount\", params.amount, params.sourceToken.decimals);\n if (isSendParams(params)) {\n return getChainBridgeService(\n params.sourceToken.chainSymbol,\n this.api,\n this.nodeRpcUrlsConfig,\n this.params,\n provider\n ).buildRawTransactionSend(params);\n }\n return getChainBridgeService(\n params.sourceToken.chainSymbol,\n this.api,\n this.nodeRpcUrlsConfig,\n this.params,\n provider\n ).buildRawTransactionSwap(params);\n }\n}\n", "/* eslint-disable @typescript-eslint/ban-ts-comment */\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { BN, Program, Spl, web3 } from \"@project-serum/anchor\";\nimport {\n Connection,\n Keypair,\n PublicKey,\n SystemProgram,\n Transaction,\n TransactionInstruction,\n TransactionMessageArgs,\n VersionedTransaction,\n} from \"@solana/web3.js\";\nimport { Big } from \"big.js\";\nimport { Chains } from \"../../../chains\";\nimport { Messenger } from \"../../../client/core-api/core-api.model\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport {\n AmountNotEnoughError,\n CCTPDoesNotSupportedError,\n JupiterError,\n MethodNotSupportedError,\n SdkError,\n SdkRootError,\n} from \"../../../exceptions\";\nimport { ChainType, FeePaymentMethod, SwapParams, TxFeeParams } from \"../../../models\";\nimport { convertIntAmountToFloat } from \"../../../utils/calculation\";\nimport { RawTransaction, TransactionResponse } from \"../../models\";\nimport { SwapAndBridgeSolData, SwapAndBridgeSolDataCctpData } from \"../../models/sol\";\nimport { Bridge as BridgeType, IDL as bridgeIdl } from \"../../models/sol/types/bridge\";\nimport { CctpBridge as CctpBridgeType, IDL as cctpBridgeIdl } from \"../../models/sol/types/cctp_bridge\";\nimport { getMessage, getTokenAccountData, getVUsdAmount } from \"../../utils/sol\";\nimport {\n getAssociatedAccount,\n getAuthorityAccount,\n getBridgeTokenAccount,\n getCctpAccounts,\n getCctpAuthorityAccount,\n getCctpBridgeAccount,\n getCctpBridgeTokenAccount,\n getCctpLockAccount,\n getChainBridgeAccount,\n getConfigAccount,\n getGasUsageAccount,\n getLockAccount,\n getOtherChainTokenAccount,\n getPriceAccount,\n getSendMessageAccount,\n} from \"../../utils/sol/accounts\";\nimport { buildAnchorProvider } from \"../../utils/sol/anchor-provider\";\nimport { addUnitLimitAndUnitPriceToTx, addUnitLimitAndUnitPriceToVersionedTx } from \"../../utils/sol/compute-budget\";\nimport { SendParams, TxSendParams, TxSwapParams } from \"../models\";\nimport { ChainBridgeService } from \"../models/bridge\";\nimport { getNonce, prepareTxSendParams, prepareTxSwapParams } from \"../utils\";\nimport { JupiterService } from \"./jupiter\";\n\nexport interface SolanaBridgeParams {\n wormholeMessengerProgramId: string;\n solanaLookUpTable: string;\n cctpParams: CctpParams;\n jupiterUrl: string;\n}\n\nexport interface CctpParams {\n cctpTransmitterProgramId: string;\n cctpTokenMessengerMinter: string;\n cctpDomains: CctpDomains;\n}\n\n/**\n * Type representing a map of CCTP domains to their corresponding numeric values.\n *\n * @typedef {Record<string, number>} CctpDomains\n * @property {string} chainSymbol - The symbol of the chain representing one of the supported blockchain networks (e.g., \"ETH\" for Ethereum). For more details, see: {@link ChainSymbol}.\n * @property {number} value - The numeric value associated with the specified chain.\n */\nexport type CctpDomains = Record<string, number>;\n\nconst COMPUTE_UNIT_LIMIT = 1000000;\n\nconst JUP_ADD_INDEX = 1.1;\n\nexport class SolanaBridgeService extends ChainBridgeService {\n chainType: ChainType.SOLANA = ChainType.SOLANA;\n jupiterService: JupiterService;\n\n constructor(public solanaRpcUrl: string, public params: SolanaBridgeParams, public api: AllbridgeCoreClient) {\n super();\n this.jupiterService = new JupiterService(solanaRpcUrl, params.jupiterUrl);\n }\n\n async buildRawTransactionSwap(params: SwapParams): Promise<RawTransaction> {\n const txSwapParams = prepareTxSwapParams(this.chainType, params);\n return await this.buildSwapTransaction(\n txSwapParams,\n params.sourceToken.poolAddress,\n params.destinationToken.poolAddress,\n params.txFeeParams\n );\n }\n\n private async buildSwapTransaction(\n params: TxSwapParams,\n poolAddress: string,\n toPoolAddress: string,\n txFeeParams?: TxFeeParams\n ): Promise<VersionedTransaction> {\n const {\n fromAccountAddress,\n amount,\n contractAddress,\n fromTokenAddress,\n toTokenAddress,\n toAccountAddress,\n minimumReceiveAmount,\n } = params;\n const account = fromAccountAddress;\n const bridgeAddress = contractAddress;\n const tokenAddress = fromTokenAddress;\n const receiveTokenAddress = toTokenAddress;\n const receivePoolAddress = toPoolAddress;\n const receiverOriginal = toAccountAddress;\n\n const userAccount = new PublicKey(account);\n const provider = buildAnchorProvider(this.solanaRpcUrl, userAccount.toString());\n const bridge = new Program<BridgeType>(bridgeIdl, bridgeAddress, provider);\n\n const bridgeAuthority = await getAuthorityAccount(bridge.programId);\n const configAccount = await getConfigAccount(bridge.programId);\n\n const sendMint = new PublicKey(tokenAddress);\n const sendBridgeToken = await getBridgeTokenAccount(sendMint, bridge.programId);\n const sendPool = new PublicKey(poolAddress);\n const sendUserToken = await getAssociatedAccount(userAccount, sendMint);\n\n const receiverAccount = new PublicKey(receiverOriginal);\n const receiveMint = new PublicKey(receiveTokenAddress);\n const receiveBridgeToken = await getBridgeTokenAccount(receiveMint, bridge.programId);\n const receivePool = new PublicKey(receivePoolAddress);\n const receiveUserToken = await getAssociatedAccount(receiverAccount, receiveMint);\n\n const preInstructions: TransactionInstruction[] = [\n web3.ComputeBudgetProgram.setComputeUnitLimit({\n units: COMPUTE_UNIT_LIMIT,\n }),\n ];\n\n try {\n await getTokenAccountData(receiveUserToken, provider);\n } catch (e) {\n const associatedProgram = Spl.associatedToken(provider);\n const createReceiveUserTokenInstruction: TransactionInstruction = await associatedProgram.methods\n .create()\n .accounts({\n mint: receiveMint,\n owner: receiverAccount,\n associatedAccount: receiveUserToken,\n })\n .instruction();\n preInstructions.push(createReceiveUserTokenInstruction);\n }\n const transaction = await bridge.methods\n .swap(new BN(amount), new BN(minimumReceiveAmount || 0))\n .accounts({\n payer: userAccount,\n config: configAccount,\n bridgeAuthority,\n user: userAccount,\n sendBridgeToken,\n sendMint,\n sendPool,\n sendUserToken,\n receiveBridgeToken,\n receiveMint,\n receivePool,\n receiveUserToken,\n })\n .preInstructions(preInstructions)\n .transaction();\n\n const connection = provider.connection;\n transaction.recentBlockhash = (await connection.getLatestBlockhash()).blockhash;\n transaction.feePayer = userAccount;\n await addUnitLimitAndUnitPriceToTx(transaction, txFeeParams, this.solanaRpcUrl);\n return await this.convertToVersionedTransaction(transaction, connection);\n }\n\n async buildRawTransactionSend(params: SendParams): Promise<RawTransaction> {\n const txSendParams = await prepareTxSendParams(this.chainType, params, this.api);\n let solTxSendParams = this.addPoolAddress(params, txSendParams);\n\n const isJupiterForStableCoin = solTxSendParams.gasFeePaymentMethod == FeePaymentMethod.WITH_STABLECOIN;\n\n let jupTx;\n if (isJupiterForStableCoin) {\n try {\n const { tx, solTxSendUpdatedParams } = await this.processJup(solTxSendParams, params, true);\n jupTx = tx;\n solTxSendParams = { ...solTxSendParams, ...solTxSendUpdatedParams };\n } catch (e) {\n try {\n const { tx, solTxSendUpdatedParams } = await this.processJup(solTxSendParams, params, false);\n jupTx = tx;\n solTxSendParams = { ...solTxSendParams, ...solTxSendUpdatedParams };\n } catch (e) {\n if (e instanceof SdkRootError) {\n throw e;\n }\n if (e instanceof Error && e.message) {\n throw new JupiterError(`Some error occurred during creation Jupiter swap transaction. ${e.message}`);\n }\n throw new JupiterError(\"Some error occurred during creation Jupiter swap transaction\");\n }\n }\n }\n\n let swapAndBridgeTx: VersionedTransaction;\n let requiredMessageSigner: Keypair | undefined = undefined;\n switch (txSendParams.messenger) {\n case Messenger.ALLBRIDGE: {\n const swapAndBridgeSolData = await this.prepareSwapAndBridgeData(solTxSendParams);\n swapAndBridgeTx = await this.buildSwapAndBridgeAllbridgeTransaction(swapAndBridgeSolData);\n break;\n }\n case Messenger.WORMHOLE: {\n const swapAndBridgeSolData = await this.prepareSwapAndBridgeData(solTxSendParams);\n const { transaction, messageAccount } = await this.buildSwapAndBridgeWormholeTransaction(swapAndBridgeSolData);\n swapAndBridgeTx = transaction;\n requiredMessageSigner = messageAccount;\n break;\n }\n case Messenger.CCTP: {\n const swapAndBridgeSolData = await this.prepareSwapAndBridgeCctpData(solTxSendParams);\n const { transaction, messageSentEventDataKeypair } = await this.buildSwapAndBridgeCctpTransaction(\n params.destinationToken.chainSymbol,\n swapAndBridgeSolData\n );\n swapAndBridgeTx = transaction;\n requiredMessageSigner = messageSentEventDataKeypair;\n break;\n }\n }\n\n if (isJupiterForStableCoin) {\n if (!jupTx) {\n throw new JupiterError(\"Swap tx is absent\");\n }\n swapAndBridgeTx = await this.jupiterService.amendJupiterWithSdkTx(jupTx, swapAndBridgeTx);\n }\n\n await addUnitLimitAndUnitPriceToVersionedTx(swapAndBridgeTx, params.txFeeParams, this.solanaRpcUrl);\n\n if (requiredMessageSigner) {\n swapAndBridgeTx.sign([requiredMessageSigner]);\n }\n return swapAndBridgeTx;\n }\n\n private async processJup(\n solTxSendParams: SolTxSendParams,\n params: SendParams,\n exactOut: boolean\n ): Promise<{\n tx: VersionedTransaction;\n solTxSendUpdatedParams: {\n amount: string;\n fee: string;\n extraGas?: string;\n gasFeePaymentMethod: FeePaymentMethod;\n };\n }> {\n const { fee, extraGas, gasFeePaymentMethod } = await this.convertStableCoinFeeAndExtraGasToNativeCurrency(\n params.sourceToken.decimals,\n solTxSendParams\n );\n\n let amountToProcess = exactOut ? Big(fee) : Big(solTxSendParams.fee);\n if (extraGas) {\n amountToProcess = amountToProcess.plus(extraGas);\n }\n if (!exactOut) {\n amountToProcess = amountToProcess.mul(JUP_ADD_INDEX);\n }\n\n const { tx, amountIn } = await this.jupiterService.getJupiterSwapTx(\n params.fromAccountAddress,\n params.sourceToken.tokenAddress,\n amountToProcess.toFixed(0),\n exactOut\n );\n\n let newAmount: string;\n if (exactOut) {\n if (!amountIn) {\n throw new JupiterError(\"Cannot get inAmount\");\n }\n newAmount = Big(solTxSendParams.amount).minus(amountIn).toFixed(0);\n } else {\n newAmount = Big(solTxSendParams.amount).minus(amountToProcess).toFixed(0);\n }\n if (Big(newAmount).lte(0)) {\n throw new AmountNotEnoughError(\n `Amount not enough to pay fee, ${convertIntAmountToFloat(\n Big(newAmount).minus(1).neg(),\n params.sourceToken.decimals\n ).toFixed()} stables is missing`\n );\n }\n return {\n tx: tx,\n solTxSendUpdatedParams: {\n amount: newAmount,\n fee: fee,\n extraGas: extraGas,\n gasFeePaymentMethod: gasFeePaymentMethod,\n },\n };\n }\n\n private addPoolAddress(params: SendParams, txSendParams: TxSendParams): SolTxSendParams {\n return {\n ...txSendParams,\n poolAddress: params.sourceToken.poolAddress,\n };\n }\n\n async convertStableCoinFeeAndExtraGasToNativeCurrency(\n tokenDecimals: number,\n solTxSendParams: SolTxSendParams\n ): Promise<{ fee: string; extraGas?: string; gasFeePaymentMethod: FeePaymentMethod }> {\n if (solTxSendParams.gasFeePaymentMethod == FeePaymentMethod.WITH_STABLECOIN) {\n const sourceNativeTokenPrice = (\n await this.api.getReceiveTransactionCost({\n sourceChainId: solTxSendParams.fromChainId,\n destinationChainId: solTxSendParams.toChainId,\n messenger: solTxSendParams.messenger,\n })\n ).sourceNativeTokenPrice;\n const fee = Big(solTxSendParams.fee)\n .div(sourceNativeTokenPrice)\n .mul(Big(10).pow(Chains.getChainDecimalsByType(ChainType.SOLANA) - tokenDecimals))\n .toFixed(0);\n let extraGas;\n if (solTxSendParams.extraGas) {\n extraGas = Big(solTxSendParams.extraGas)\n .div(sourceNativeTokenPrice)\n .mul(Big(10).pow(Chains.getChainDecimalsByType(ChainType.SOLANA) - tokenDecimals))\n .toFixed(0);\n }\n return { fee, extraGas, gasFeePaymentMethod: FeePaymentMethod.WITH_NATIVE_CURRENCY };\n }\n return {\n fee: solTxSendParams.fee,\n extraGas: solTxSendParams.extraGas,\n gasFeePaymentMethod: FeePaymentMethod.WITH_NATIVE_CURRENCY,\n };\n }\n\n private getExtraGasInstruction(\n extraGas: string,\n userAccount: PublicKey,\n configAccount: PublicKey\n ): TransactionInstruction | undefined {\n return web3.SystemProgram.transfer({\n fromPubkey: userAccount,\n toPubkey: configAccount,\n lamports: +extraGas,\n });\n }\n\n private async prepareSwapAndBridgeData(txSendParams: SolTxSendParams): Promise<SwapAndBridgeSolData> {\n const {\n amount,\n contractAddress,\n fromChainId,\n fromAccountAddress,\n fromTokenAddress,\n toChainId,\n toAccountAddress,\n toTokenAddress,\n poolAddress,\n extraGas,\n } = txSendParams;\n const tokenAddress = fromTokenAddress;\n const account = fromAccountAddress;\n const destinationChainId = toChainId;\n const receiveTokenAddress = toTokenAddress;\n const receiverInBuffer32 = toAccountAddress;\n const bridgeAddress = contractAddress;\n const sourceChainId = fromChainId;\n\n const provider = buildAnchorProvider(this.solanaRpcUrl, account);\n const bridge = new Program<BridgeType>(bridgeIdl, bridgeAddress, provider);\n const nonce = Array.from(getNonce());\n const poolAccount = new PublicKey(poolAddress);\n const vUsdAmount = await getVUsdAmount(amount, bridge, poolAccount);\n\n const lockAccount = await getLockAccount(nonce, bridge.programId);\n const bridgeAuthority = await getAuthorityAccount(bridge.programId);\n const userToken = await getAssociatedAccount(new PublicKey(account), new PublicKey(tokenAddress));\n const bridgeTokenAccount = await getBridgeTokenAccount(new PublicKey(tokenAddress), bridge.programId);\n const chainBridgeAccount = await getChainBridgeAccount(destinationChainId, bridge.programId);\n const otherBridgeTokenAccount = await getOtherChainTokenAccount(\n destinationChainId,\n Buffer.from(receiveTokenAddress),\n bridge.programId\n );\n\n const configAccount = await getConfigAccount(bridge.programId);\n const configAccountInfo = await bridge.account.config.fetch(configAccount);\n const priceAccount = await getPriceAccount(destinationChainId, configAccountInfo.gasOracleProgramId);\n const thisGasPriceAccount = await getPriceAccount(sourceChainId, configAccountInfo.gasOracleProgramId);\n\n const message = getMessage({\n amount: vUsdAmount,\n recipient: Buffer.from(receiverInBuffer32),\n nonce: Buffer.from(nonce),\n receiveToken: Buffer.from(receiveTokenAddress),\n destinationChainId,\n sourceChainId,\n chainBridge: (await getAuthorityAccount(bridge.programId)).toBuffer(),\n });\n\n const swapAndBridgeData = {} as SwapAndBridgeSolData;\n\n swapAndBridgeData.bridge = bridge;\n swapAndBridgeData.amount = new BN(amount);\n swapAndBridgeData.vusdAmount = new BN(vUsdAmount);\n swapAndBridgeData.nonce = nonce;\n // @ts-expect-error\n swapAndBridgeData.recipient = Array.from(receiverInBuffer32);\n // @ts-expect-error\n swapAndBridgeData.receiveToken = Array.from(receiveTokenAddress);\n swapAndBridgeData.poolAccount = poolAccount;\n swapAndBridgeData.lockAccount = lockAccount;\n swapAndBridgeData.bridgeAuthority = bridgeAuthority;\n swapAndBridgeData.userToken = userToken;\n swapAndBridgeData.bridgeTokenAccount = bridgeTokenAccount;\n swapAndBridgeData.chainBridgeAccount = chainBridgeAccount;\n swapAndBridgeData.otherBridgeTokenAccount = otherBridgeTokenAccount;\n swapAndBridgeData.userAccount = new PublicKey(account);\n swapAndBridgeData.destinationChainId = destinationChainId;\n // @ts-expect-error\n swapAndBridgeData.mint = new PublicKey(tokenAddress);\n swapAndBridgeData.config = configAccount;\n swapAndBridgeData.configAccountInfo = configAccountInfo;\n swapAndBridgeData.gasPrice = priceAccount;\n swapAndBridgeData.thisGasPrice = thisGasPriceAccount;\n swapAndBridgeData.message = message;\n\n if (extraGas) {\n swapAndBridgeData.extraGasInstruction = this.getExtraGasInstruction(\n extraGas,\n swapAndBridgeData.userAccount,\n configAccount\n );\n }\n return swapAndBridgeData;\n }\n\n private async buildSwapAndBridgeAllbridgeTransaction(\n swapAndBridgeData: SwapAndBridgeSolData\n ): Promise<VersionedTransaction> {\n const {\n bridge,\n vusdAmount,\n nonce,\n recipient,\n receiveToken,\n poolAccount,\n lockAccount,\n bridgeAuthority,\n userToken,\n bridgeTokenAccount,\n chainBridgeAccount,\n otherBridgeTokenAccount,\n userAccount,\n destinationChainId,\n mint,\n config,\n configAccountInfo,\n gasPrice,\n thisGasPrice,\n message,\n extraGasInstruction,\n } = swapAndBridgeData;\n const allbridgeMessengerProgramId = configAccountInfo.allbridgeMessengerProgramId;\n const messengerGasUsageAccount = await getGasUsageAccount(destinationChainId, allbridgeMessengerProgramId);\n const messengerConfig = await getConfigAccount(allbridgeMessengerProgramId);\n\n const sentMessageAccount = await getSendMessageAccount(message, allbridgeMessengerProgramId);\n\n const instructions: TransactionInstruction[] = [];\n if (extraGasInstruction) {\n instructions.push(extraGasInstruction);\n }\n\n const transaction = await bridge.methods\n .swapAndBridge({\n vusdAmount,\n nonce,\n destinationChainId,\n recipient,\n receiveToken,\n })\n .accounts({\n mint,\n user: userAccount,\n config,\n lock: lockAccount,\n pool: poolAccount,\n gasPrice,\n thisGasPrice,\n bridgeAuthority,\n userToken,\n bridgeToken: bridgeTokenAccount,\n chainBridge: chainBridgeAccount,\n messenger: allbridgeMessengerProgramId,\n messengerGasUsage: messengerGasUsageAccount,\n messengerConfig,\n sentMessageAccount,\n otherBridgeToken: otherBridgeTokenAccount,\n })\n .preInstructions([\n web3.ComputeBudgetProgram.setComputeUnitLimit({\n units: COMPUTE_UNIT_LIMIT,\n }),\n ])\n .postInstructions(instructions)\n .transaction();\n const connection = buildAnchorProvider(this.solanaRpcUrl, userAccount.toString()).connection;\n transaction.recentBlockhash = (await connection.getLatestBlockhash()).blockhash;\n transaction.feePayer = userAccount;\n return await this.convertToVersionedTransaction(transaction, connection);\n }\n\n private async convertToVersionedTransaction(tx: Transaction, connection: Connection): Promise<VersionedTransaction> {\n const allbridgeTableAccount = await connection\n .getAddressLookupTable(new PublicKey(this.params.solanaLookUpTable))\n .then((res) => res.value);\n if (!allbridgeTableAccount) {\n throw new SdkError(\"Cannot find allbridgeLookupTableAccount\");\n }\n const messageV0 = new web3.TransactionMessage({\n payerKey: tx.feePayer,\n recentBlockhash: tx.recentBlockhash,\n instructions: tx.instructions,\n } as TransactionMessageArgs).compileToV0Message([allbridgeTableAccount]);\n return new web3.VersionedTransaction(messageV0);\n }\n\n private async buildSwapAndBridgeWormholeTransaction(\n swapAndBridgeData: SwapAndBridgeSolData\n ): Promise<{ transaction: VersionedTransaction; messageAccount: Keypair }> {\n const {\n bridge,\n vusdAmount,\n nonce,\n recipient,\n receiveToken,\n poolAccount,\n lockAccount,\n bridgeAuthority,\n userToken,\n bridgeTokenAccount,\n chainBridgeAccount,\n otherBridgeTokenAccount,\n userAccount,\n destinationChainId,\n mint,\n config,\n configAccountInfo,\n gasPrice,\n thisGasPrice,\n message,\n extraGasInstruction,\n } = swapAndBridgeData;\n const wormholeProgramId = this.params.wormholeMessengerProgramId;\n\n const [whBridgeAccount] = PublicKey.findProgramAddressSync(\n [Buffer.from(\"Bridge\")],\n new PublicKey(wormholeProgramId)\n );\n const [whFeeCollectorAccount] = PublicKey.findProgramAddressSync(\n [Buffer.from(\"fee_collector\")],\n new PublicKey(wormholeProgramId)\n );\n const [whSequenceAccount] = PublicKey.findProgramAddressSync(\n [Buffer.from(\"Sequence\"), bridgeAuthority.toBuffer()],\n new PublicKey(wormholeProgramId)\n );\n\n const messengerGasUsageAccount = await getGasUsageAccount(\n destinationChainId,\n configAccountInfo.wormholeMessengerProgramId\n );\n const wormholeMessengerConfigAccount = await getConfigAccount(configAccountInfo.wormholeMessengerProgramId);\n const messageAccount = Keypair.generate();\n\n const provider = buildAnchorProvider(this.solanaRpcUrl, userAccount.toString());\n\n const bridgeAccountInfo = await provider.connection.getAccountInfo(whBridgeAccount);\n if (bridgeAccountInfo == null) {\n throw new SdkError(\"Cannot fetch wormhole bridge account info\");\n }\n const feeLamports = new BN(bridgeAccountInfo.data.slice(16, 24), \"le\").toString();\n\n const feeInstruction = SystemProgram.transfer({\n fromPubkey: userAccount,\n toPubkey: whFeeCollectorAccount,\n lamports: +feeLamports,\n });\n\n const instructions: TransactionInstruction[] = [];\n if (extraGasInstruction) {\n instructions.push(extraGasInstruction);\n }\n\n const accounts = {\n mint,\n user: userAccount,\n config,\n lock: lockAccount,\n pool: poolAccount,\n gasPrice,\n thisGasPrice,\n bridgeAuthority,\n userToken,\n bridgeToken: bridgeTokenAccount,\n chainBridge: chainBridgeAccount,\n otherBridgeToken: otherBridgeTokenAccount,\n messengerGasUsage: messengerGasUsageAccount,\n wormholeProgram: wormholeProgramId,\n bridge: whBridgeAccount,\n message: messageAccount.publicKey,\n wormholeMessenger: configAccountInfo.wormholeMessengerProgramId,\n sequence: whSequenceAccount,\n feeCollector: whFeeCollectorAccount,\n wormholeMessengerConfig: wormholeMessengerConfigAccount,\n clock: web3.SYSVAR_CLOCK_PUBKEY,\n };\n\n const transaction = await bridge.methods\n .swapAndBridgeWormhole({\n vusdAmount,\n nonce: nonce,\n destinationChainId,\n recipient,\n receiveToken,\n })\n .accounts(accounts)\n .preInstructions([\n web3.ComputeBudgetProgram.setComputeUnitLimit({\n units: COMPUTE_UNIT_LIMIT,\n }),\n feeInstruction,\n ])\n .postInstructions(instructions)\n .signers([messageAccount])\n .transaction();\n transaction.recentBlockhash = (await provider.connection.getLatestBlockhash()).blockhash;\n transaction.feePayer = userAccount;\n return { transaction: await this.convertToVersionedTransaction(transaction, provider.connection), messageAccount };\n }\n\n private async prepareSwapAndBridgeCctpData(txSendParams: SolTxSendParams): Promise<SwapAndBridgeSolDataCctpData> {\n const {\n contractAddress,\n amount,\n fromAccountAddress,\n fromTokenAddress,\n toChainId,\n toAccountAddress,\n toTokenAddress,\n extraGas,\n } = txSendParams;\n const cctpAddress = contractAddress;\n if (!cctpAddress) {\n throw new CCTPDoesNotSupportedError(\"Such route does not support CCTP protocol\");\n }\n const CHAIN_ID = 4;\n\n const account = fromAccountAddress;\n const receiveTokenAddress = toTokenAddress;\n const receiverInBuffer32 = toAccountAddress;\n\n const provider = buildAnchorProvider(this.solanaRpcUrl, account);\n const cctpBridge: Program<CctpBridgeType> = new Program<CctpBridgeType>(cctpBridgeIdl, cctpAddress, provider);\n const mint = new PublicKey(fromTokenAddress);\n const cctpBridgeAccount = await getCctpBridgeAccount(mint, cctpBridge.programId);\n const userAccount = new PublicKey(account);\n\n const configAccountInfo = await cctpBridge.account.cctpBridge.fetch(cctpBridgeAccount);\n\n const swapAndBridgeData = {} as SwapAndBridgeSolDataCctpData;\n\n swapAndBridgeData.cctpBridge = cctpBridge;\n swapAndBridgeData.cctpBridgeAccount = cctpBridgeAccount;\n swapAndBridgeData.cctpAddressAccount = new PublicKey(cctpAddress);\n swapAndBridgeData.amount = new BN(amount);\n // @ts-expect-error\n swapAndBridgeData.recipient = Array.from(receiverInBuffer32);\n // @ts-expect-error\n swapAndBridgeData.receiveToken = Array.from(receiveTokenAddress);\n swapAndBridgeData.userToken = await getAssociatedAccount(userAccount, mint);\n swapAndBridgeData.bridgeAuthority = await getCctpAuthorityAccount(cctpBridgeAccount, cctpBridge.programId);\n swapAndBridgeData.bridgeTokenAccount = await getCctpBridgeTokenAccount(mint, cctpBridge.programId);\n swapAndBridgeData.chainBridgeAccount = await getChainBridgeAccount(toChainId, cctpBridge.programId);\n swapAndBridgeData.userAccount = userAccount;\n swapAndBridgeData.destinationChainId = toChainId;\n swapAndBridgeData.mint = mint;\n swapAndBridgeData.gasPrice = await getPriceAccount(toChainId, configAccountInfo.gasOracleProgramId);\n swapAndBridgeData.thisGasPrice = await getPriceAccount(CHAIN_ID, configAccountInfo.gasOracleProgramId);\n swapAndBridgeData.provider = provider;\n\n if (extraGas) {\n swapAndBridgeData.extraGasInstruction = this.getExtraGasInstruction(\n extraGas,\n swapAndBridgeData.userAccount,\n cctpBridgeAccount\n );\n }\n return swapAndBridgeData;\n }\n\n async buildSwapAndBridgeCctpTransaction(\n destinationChainSymbol: string,\n swapAndBridgeData: SwapAndBridgeSolDataCctpData\n ): Promise<{ transaction: VersionedTransaction; messageSentEventDataKeypair: Keypair }> {\n const {\n cctpBridge,\n cctpBridgeAccount,\n amount,\n recipient,\n receiveToken,\n bridgeAuthority,\n userToken,\n bridgeTokenAccount,\n chainBridgeAccount,\n userAccount,\n destinationChainId,\n mint,\n gasPrice,\n thisGasPrice,\n extraGasInstruction,\n provider,\n } = swapAndBridgeData;\n const domain = this.params.cctpParams.cctpDomains[destinationChainSymbol];\n const cctpTransmitterProgramIdAddress = this.params.cctpParams.cctpTransmitterProgramId;\n const cctpTokenMessengerMinterAddress = this.params.cctpParams.cctpTokenMessengerMinter;\n if (domain == undefined || !cctpTransmitterProgramIdAddress || !cctpTokenMessengerMinterAddress) {\n throw new SdkError(\"CCTP is not configured\");\n }\n const cctpTransmitterProgramId = new PublicKey(cctpTransmitterProgramIdAddress);\n const cctpTokenMessengerMinter = new PublicKey(cctpTokenMessengerMinterAddress);\n const {\n messageTransmitterAccount,\n tokenMessenger,\n tokenMessengerEventAuthority,\n tokenMinter,\n localToken,\n remoteTokenMessengerKey,\n authorityPda,\n } = getCctpAccounts(domain, mint, cctpTransmitterProgramId, cctpTokenMessengerMinter);\n\n const instructions: TransactionInstruction[] = [];\n if (extraGasInstruction) {\n instructions.push(extraGasInstruction);\n }\n\n const messageSentEventDataKeypair = Keypair.generate();\n const lockAccount = getCctpLockAccount(cctpBridge.programId, messageSentEventDataKeypair.publicKey);\n\n const tx = await cctpBridge.methods\n .bridge({\n amount,\n destinationChainId,\n recipient,\n receiveToken,\n })\n .accounts({\n mint: mint,\n user: userAccount,\n cctpBridge: cctpBridgeAccount,\n\n messageSentEventData: messageSentEventDataKeypair.publicKey,\n lock: lockAccount,\n\n cctpMessenger: cctpTokenMessengerMinter,\n messageTransmitterProgram: cctpTransmitterProgramId,\n messageTransmitterAccount: messageTransmitterAccount,\n tokenMessenger: tokenMessenger,\n tokenMinter: tokenMinter,\n localToken: localToken,\n remoteTokenMessengerKey: remoteTokenMessengerKey,\n authorityPda: authorityPda,\n eventAuthority: tokenMessengerEventAuthority,\n\n bridgeToken: bridgeTokenAccount,\n gasPrice: gasPrice,\n thisGasPrice: thisGasPrice,\n chainBridge: chainBridgeAccount,\n userToken,\n bridgeAuthority: bridgeAuthority,\n })\n .preInstructions([\n web3.ComputeBudgetProgram.setComputeUnitLimit({\n units: 2000000,\n }),\n ])\n .postInstructions(instructions)\n .transaction();\n const connection = provider.connection;\n tx.recentBlockhash = (await connection.getLatestBlockhash()).blockhash;\n tx.feePayer = userAccount;\n return { transaction: await this.convertToVersionedTransaction(tx, connection), messageSentEventDataKeypair };\n }\n\n send(params: SendParams): Promise<TransactionResponse> {\n throw new MethodNotSupportedError();\n }\n}\n\ninterface SolTxSendParams extends TxSendParams {\n poolAddress: string;\n}\n", "export interface Bridge {\n version: \"0.1.0\";\n name: \"bridge\";\n instructions: [\n {\n name: \"initialize\";\n accounts: [\n {\n name: \"admin\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"args\";\n type: {\n defined: \"InitializeArgs\";\n };\n }\n ];\n },\n {\n name: \"initializePool\";\n accounts: [\n {\n name: \"payer\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"pool\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"token\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"tokenProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"rent\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"args\";\n type: {\n defined: \"InitializePoolArgs\";\n };\n }\n ];\n },\n {\n name: \"initDepositAccount\";\n accounts: [\n {\n name: \"user\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"payer\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"userDeposit\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [];\n },\n {\n name: \"deposit\";\n accounts: [\n {\n name: \"user\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"config\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"pool\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"userToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"userDeposit\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"tokenProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"amount\";\n type: \"u64\";\n }\n ];\n },\n {\n name: \"withdraw\";\n accounts: [\n {\n name: \"user\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"config\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"pool\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"userToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"userDeposit\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"tokenProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"amountLp\";\n type: \"u64\";\n }\n ];\n },\n {\n name: \"swapAndBridge\";\n accounts: [\n {\n name: \"user\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"payer\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"lock\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"config\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"otherBridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"messenger\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"messengerConfig\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"sentMessageAccount\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"messengerGasUsage\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"pool\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"gasPrice\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"thisGasPrice\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"chainBridge\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"userToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"tokenProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"args\";\n type: {\n defined: \"BridgeArgs\";\n };\n }\n ];\n },\n {\n name: \"swapAndBridgeWormhole\";\n accounts: [\n {\n name: \"user\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"payer\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"lock\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"config\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"otherBridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"pool\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"gasPrice\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"thisGasPrice\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"chainBridge\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"userToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"wormholeMessenger\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"wormholeMessengerConfig\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"wormholeProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"bridge\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"message\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"sequence\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"feeCollector\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"messengerGasUsage\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"clock\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"rent\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"tokenProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"args\";\n type: {\n defined: \"BridgeArgs\";\n };\n }\n ];\n },\n {\n name: \"swap\";\n accounts: [\n {\n name: \"user\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"payer\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"sendMint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"receiveMint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"config\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"sendPool\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"receivePool\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"sendBridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"receiveBridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"sendUserToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"receiveUserToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"tokenProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"amount\";\n type: \"u64\";\n },\n {\n name: \"receiveAmountMin\";\n type: \"u64\";\n }\n ];\n },\n {\n name: \"registerChainBridge\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"payer\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"chainBridge\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"args\";\n type: {\n defined: \"RegisterChainBridgeArgs\";\n };\n }\n ];\n },\n {\n name: \"updateChainBridge\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"chainBridge\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"args\";\n type: {\n defined: \"UpdateChainBridgeArgs\";\n };\n }\n ];\n },\n {\n name: \"receiveAndSwap\";\n accounts: [\n {\n name: \"user\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"payer\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"config\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"pool\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"receivedMessageAccount\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"unlock\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"chainBridge\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"userToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"tokenProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"messengerProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"args\";\n type: {\n defined: \"UnlockArgs\";\n };\n }\n ];\n },\n {\n name: \"receiveAndSwapWormhole\";\n accounts: [\n {\n name: \"user\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"payer\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"config\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"pool\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"receivedMessageAccount\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"unlock\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"chainBridge\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"userToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"tokenProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"messengerProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"args\";\n type: {\n defined: \"UnlockArgs\";\n };\n }\n ];\n },\n {\n name: \"withdrawGasToken\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"recipient\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"config\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"amount\";\n type: \"u64\";\n }\n ];\n },\n {\n name: \"claimRewards\";\n accounts: [\n {\n name: \"user\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"config\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"pool\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"userToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"userDeposit\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"tokenProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [];\n },\n {\n name: \"setAdmin\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"newAdmin\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"config\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [];\n },\n {\n name: \"startBridge\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"actionType\";\n type: {\n defined: \"ActionType\";\n };\n }\n ];\n },\n {\n name: \"stopBridge\";\n accounts: [\n {\n name: \"stopAuthority\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"actionType\";\n type: {\n defined: \"ActionType\";\n };\n }\n ];\n },\n {\n name: \"setRebalancer\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"rebalancer\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [];\n },\n {\n name: \"setStopAuthority\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"newAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"config\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [];\n },\n {\n name: \"setAllbridgeMessengerProgramId\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"newProgramId\";\n type: \"publicKey\";\n }\n ];\n },\n {\n name: \"setWormholeMessengerProgramId\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"newProgramId\";\n type: \"publicKey\";\n }\n ];\n },\n {\n name: \"setGasOracleProgramId\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"newProgramId\";\n type: \"publicKey\";\n }\n ];\n },\n {\n name: \"setPoolFeeShare\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"pool\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"feeShareBp\";\n type: \"u64\";\n }\n ];\n },\n {\n name: \"setBalanceRatioMin\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"pool\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"balanceRatioMinBp\";\n type: \"u16\";\n }\n ];\n },\n {\n name: \"setPoolAdminFeeShare\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"pool\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"feeShareBp\";\n type: \"u64\";\n }\n ];\n },\n {\n name: \"addOtherBridgeToken\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"payer\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"otherBridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"chainId\";\n type: \"u8\";\n },\n {\n name: \"tokenAddress\";\n type: {\n array: [\"u8\", 32];\n };\n }\n ];\n },\n {\n name: \"removeOtherBridgeToken\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"payer\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"otherBridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"chainId\";\n type: \"u8\";\n },\n {\n name: \"tokenAddress\";\n type: {\n array: [\"u8\", 32];\n };\n }\n ];\n },\n {\n name: \"withdrawAdminFee\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"config\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"pool\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"adminToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"tokenProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [];\n },\n {\n name: \"adjustTotalLpAmount\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"config\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"pool\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"userToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"userDeposit\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"tokenProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [];\n }\n ];\n accounts: [\n {\n name: \"chainBridge\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"address\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"chainId\";\n type: \"u8\";\n },\n {\n name: \"gasUsage\";\n type: \"u64\";\n }\n ];\n };\n },\n {\n name: \"config\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"admin\";\n type: \"publicKey\";\n },\n {\n name: \"allbridgeMessengerProgramId\";\n type: \"publicKey\";\n },\n {\n name: \"wormholeMessengerProgramId\";\n type: \"publicKey\";\n },\n {\n name: \"gasOracleProgramId\";\n type: \"publicKey\";\n },\n {\n name: \"rebalancer\";\n type: \"publicKey\";\n },\n {\n name: \"stopAuthority\";\n type: \"publicKey\";\n },\n {\n name: \"authorityBumpSeed\";\n type: \"u8\";\n },\n {\n name: \"canSwap\";\n type: \"bool\";\n },\n {\n name: \"canDeposit\";\n type: \"bool\";\n },\n {\n name: \"canWithdraw\";\n type: \"bool\";\n }\n ];\n };\n },\n {\n name: \"lock\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"sender\";\n type: \"publicKey\";\n },\n {\n name: \"sentTokenAddress\";\n type: \"publicKey\";\n },\n {\n name: \"amount\";\n type: \"u64\";\n },\n {\n name: \"vusdAmount\";\n type: \"u64\";\n },\n {\n name: \"recipient\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"destinationChainId\";\n type: \"u8\";\n },\n {\n name: \"receiveToken\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"nonce\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"messenger\";\n type: {\n defined: \"Messenger\";\n };\n },\n {\n name: \"slot\";\n type: \"u64\";\n },\n {\n name: \"fee\";\n type: \"u64\";\n }\n ];\n };\n },\n {\n name: \"otherBridgeToken\";\n type: {\n kind: \"struct\";\n fields: [];\n };\n },\n {\n name: \"pool\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"mint\";\n type: \"publicKey\";\n },\n {\n name: \"a\";\n type: \"u64\";\n },\n {\n name: \"d\";\n type: \"u64\";\n },\n {\n name: \"tokenBalance\";\n type: \"u64\";\n },\n {\n name: \"vUsdBalance\";\n type: \"u64\";\n },\n {\n name: \"reserves\";\n type: \"u64\";\n },\n {\n name: \"decimals\";\n type: \"u8\";\n },\n {\n name: \"totalLpAmount\";\n type: \"u64\";\n },\n {\n name: \"feeShareBp\";\n type: \"u64\";\n },\n {\n name: \"adminFeeShareBp\";\n type: \"u64\";\n },\n {\n name: \"accRewardPerShareP\";\n type: \"u128\";\n },\n {\n name: \"adminFeeAmount\";\n type: \"u64\";\n },\n {\n name: \"balanceRatioMinBp\";\n type: \"u16\";\n }\n ];\n };\n },\n {\n name: \"unlock\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"hash\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"amount\";\n type: \"u64\";\n },\n {\n name: \"fee\";\n type: \"u64\";\n },\n {\n name: \"vUsdAmount\";\n type: \"u64\";\n },\n {\n name: \"slot\";\n type: \"u64\";\n }\n ];\n };\n },\n {\n name: \"userDeposit\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"userAddress\";\n type: \"publicKey\";\n },\n {\n name: \"mint\";\n type: \"publicKey\";\n },\n {\n name: \"lpAmount\";\n type: \"u64\";\n },\n {\n name: \"rewardDebt\";\n type: \"u64\";\n }\n ];\n };\n }\n ];\n types: [\n {\n name: \"RegisterChainBridgeArgs\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"chainBridgeAddress\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"chainId\";\n type: \"u8\";\n },\n {\n name: \"gasUsage\";\n type: \"u64\";\n }\n ];\n };\n },\n {\n name: \"UpdateChainBridgeArgs\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"chainBridgeAddress\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"chainId\";\n type: \"u8\";\n },\n {\n name: \"gasUsage\";\n type: \"u64\";\n }\n ];\n };\n },\n {\n name: \"InitializeArgs\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"allbridgeMessengerProgramId\";\n type: \"publicKey\";\n },\n {\n name: \"wormholeMessengerProgramId\";\n type: \"publicKey\";\n },\n {\n name: \"gasOracleProgramId\";\n type: \"publicKey\";\n }\n ];\n };\n },\n {\n name: \"InitializePoolArgs\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"a\";\n type: \"u64\";\n },\n {\n name: \"feeShareBp\";\n type: \"u64\";\n },\n {\n name: \"adminFeeShareBp\";\n type: \"u64\";\n },\n {\n name: \"balanceRatioMinBp\";\n type: \"u16\";\n }\n ];\n };\n },\n {\n name: \"BridgeArgs\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"nonce\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"recipient\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"destinationChainId\";\n type: \"u8\";\n },\n {\n name: \"receiveToken\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"vusdAmount\";\n type: \"u64\";\n }\n ];\n };\n },\n {\n name: \"UnlockArgs\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"nonce\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"amount\";\n type: \"u64\";\n },\n {\n name: \"recipient\";\n type: \"publicKey\";\n },\n {\n name: \"sourceChainId\";\n type: \"u8\";\n },\n {\n name: \"receiveToken\";\n type: \"publicKey\";\n },\n {\n name: \"messenger\";\n type: {\n defined: \"Messenger\";\n };\n },\n {\n name: \"hash\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"receiveAmountMin\";\n type: \"u64\";\n }\n ];\n };\n },\n {\n name: \"RewardError\";\n type: {\n kind: \"enum\";\n variants: [\n {\n name: \"FeeTooHigh\";\n }\n ];\n };\n },\n {\n name: \"Messenger\";\n type: {\n kind: \"enum\";\n variants: [\n {\n name: \"None\";\n },\n {\n name: \"Allbridge\";\n },\n {\n name: \"Wormhole\";\n }\n ];\n };\n },\n {\n name: \"ActionType\";\n type: {\n kind: \"enum\";\n variants: [\n {\n name: \"Deposit\";\n },\n {\n name: \"Withdraw\";\n },\n {\n name: \"Swap\";\n }\n ];\n };\n }\n ];\n errors: [\n {\n code: 6000;\n name: \"AccountAlreadyInitialized\";\n msg: \"This account has already been initialized\";\n },\n {\n code: 6001;\n name: \"AdminAuthorityInvalid\";\n msg: \"This instruction requires admin authority\";\n },\n {\n code: 6002;\n name: \"InvalidSignature\";\n msg: \"Provided signature has wrong signer or message\";\n },\n {\n code: 6003;\n name: \"InvalidHash\";\n msg: \"Wrong unlock message hash\";\n },\n {\n code: 6004;\n name: \"PoolOverflow\";\n msg: \"PoolInfo overflow\";\n },\n {\n code: 6005;\n name: \"ReservesExhausted\";\n msg: \"Reserves exhausted\";\n },\n {\n code: 6006;\n name: \"ZeroAmount\";\n msg: \"Zero amount\";\n },\n {\n code: 6007;\n name: \"ZeroChanges\";\n msg: \"Zero changes\";\n },\n {\n code: 6008;\n name: \"HighVusdAmount\";\n msg: \"vUSD amount is too high\";\n },\n {\n code: 6009;\n name: \"BalanceRatioExceeded\";\n msg: \"Balance ratio exceeded\";\n },\n {\n code: 6010;\n name: \"InsufficientReceivedAmount\";\n msg: \"Received insufficient amount\";\n },\n {\n code: 6011;\n name: \"ForbiddenAction\";\n msg: \"ForbiddenAction\";\n },\n {\n code: 6012;\n name: \"ValueTooHigh\";\n msg: \"Value is too high\";\n }\n ];\n}\n\nexport const IDL: Bridge = {\n version: \"0.1.0\",\n name: \"bridge\",\n instructions: [\n {\n name: \"initialize\",\n accounts: [\n {\n name: \"admin\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"args\",\n type: {\n defined: \"InitializeArgs\",\n },\n },\n ],\n },\n {\n name: \"initializePool\",\n accounts: [\n {\n name: \"payer\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"pool\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"token\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"tokenProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"rent\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"args\",\n type: {\n defined: \"InitializePoolArgs\",\n },\n },\n ],\n },\n {\n name: \"initDepositAccount\",\n accounts: [\n {\n name: \"user\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"payer\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"userDeposit\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [],\n },\n {\n name: \"deposit\",\n accounts: [\n {\n name: \"user\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"config\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"pool\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"userToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"userDeposit\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"tokenProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"amount\",\n type: \"u64\",\n },\n ],\n },\n {\n name: \"withdraw\",\n accounts: [\n {\n name: \"user\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"config\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"pool\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"userToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"userDeposit\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"tokenProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"amountLp\",\n type: \"u64\",\n },\n ],\n },\n {\n name: \"swapAndBridge\",\n accounts: [\n {\n name: \"user\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"payer\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"lock\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"config\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"otherBridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"messenger\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"messengerConfig\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"sentMessageAccount\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"messengerGasUsage\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"pool\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"gasPrice\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"thisGasPrice\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"chainBridge\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"userToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"tokenProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"args\",\n type: {\n defined: \"BridgeArgs\",\n },\n },\n ],\n },\n {\n name: \"swapAndBridgeWormhole\",\n accounts: [\n {\n name: \"user\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"payer\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"lock\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"config\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"otherBridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"pool\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"gasPrice\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"thisGasPrice\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"chainBridge\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"userToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"wormholeMessenger\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"wormholeMessengerConfig\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"wormholeProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"bridge\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"message\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"sequence\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"feeCollector\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"messengerGasUsage\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"clock\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"rent\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"tokenProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"args\",\n type: {\n defined: \"BridgeArgs\",\n },\n },\n ],\n },\n {\n name: \"swap\",\n accounts: [\n {\n name: \"user\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"payer\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"sendMint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"receiveMint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"config\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"sendPool\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"receivePool\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"sendBridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"receiveBridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"sendUserToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"receiveUserToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"tokenProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"amount\",\n type: \"u64\",\n },\n {\n name: \"receiveAmountMin\",\n type: \"u64\",\n },\n ],\n },\n {\n name: \"registerChainBridge\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"payer\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"chainBridge\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"args\",\n type: {\n defined: \"RegisterChainBridgeArgs\",\n },\n },\n ],\n },\n {\n name: \"updateChainBridge\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"chainBridge\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"args\",\n type: {\n defined: \"UpdateChainBridgeArgs\",\n },\n },\n ],\n },\n {\n name: \"receiveAndSwap\",\n accounts: [\n {\n name: \"user\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"payer\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"config\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"pool\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"receivedMessageAccount\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"unlock\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"chainBridge\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"userToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"tokenProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"messengerProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"args\",\n type: {\n defined: \"UnlockArgs\",\n },\n },\n ],\n },\n {\n name: \"receiveAndSwapWormhole\",\n accounts: [\n {\n name: \"user\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"payer\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"config\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"pool\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"receivedMessageAccount\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"unlock\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"chainBridge\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"userToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"tokenProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"messengerProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"args\",\n type: {\n defined: \"UnlockArgs\",\n },\n },\n ],\n },\n {\n name: \"withdrawGasToken\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"recipient\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"config\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"amount\",\n type: \"u64\",\n },\n ],\n },\n {\n name: \"claimRewards\",\n accounts: [\n {\n name: \"user\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"config\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"pool\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"userToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"userDeposit\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"tokenProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [],\n },\n {\n name: \"setAdmin\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"newAdmin\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"config\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [],\n },\n {\n name: \"startBridge\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"actionType\",\n type: {\n defined: \"ActionType\",\n },\n },\n ],\n },\n {\n name: \"stopBridge\",\n accounts: [\n {\n name: \"stopAuthority\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"actionType\",\n type: {\n defined: \"ActionType\",\n },\n },\n ],\n },\n {\n name: \"setRebalancer\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"rebalancer\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [],\n },\n {\n name: \"setStopAuthority\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"newAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"config\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [],\n },\n {\n name: \"setAllbridgeMessengerProgramId\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"newProgramId\",\n type: \"publicKey\",\n },\n ],\n },\n {\n name: \"setWormholeMessengerProgramId\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"newProgramId\",\n type: \"publicKey\",\n },\n ],\n },\n {\n name: \"setGasOracleProgramId\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"newProgramId\",\n type: \"publicKey\",\n },\n ],\n },\n {\n name: \"setPoolFeeShare\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"pool\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"feeShareBp\",\n type: \"u64\",\n },\n ],\n },\n {\n name: \"setBalanceRatioMin\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"pool\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"balanceRatioMinBp\",\n type: \"u16\",\n },\n ],\n },\n {\n name: \"setPoolAdminFeeShare\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"pool\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"feeShareBp\",\n type: \"u64\",\n },\n ],\n },\n {\n name: \"addOtherBridgeToken\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"payer\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"otherBridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"chainId\",\n type: \"u8\",\n },\n {\n name: \"tokenAddress\",\n type: {\n array: [\"u8\", 32],\n },\n },\n ],\n },\n {\n name: \"removeOtherBridgeToken\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"payer\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"otherBridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"chainId\",\n type: \"u8\",\n },\n {\n name: \"tokenAddress\",\n type: {\n array: [\"u8\", 32],\n },\n },\n ],\n },\n {\n name: \"withdrawAdminFee\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"config\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"pool\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"adminToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"tokenProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [],\n },\n {\n name: \"adjustTotalLpAmount\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"config\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"pool\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"userToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"userDeposit\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"tokenProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [],\n },\n ],\n accounts: [\n {\n name: \"chainBridge\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"address\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"chainId\",\n type: \"u8\",\n },\n {\n name: \"gasUsage\",\n type: \"u64\",\n },\n ],\n },\n },\n {\n name: \"config\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"admin\",\n type: \"publicKey\",\n },\n {\n name: \"allbridgeMessengerProgramId\",\n type: \"publicKey\",\n },\n {\n name: \"wormholeMessengerProgramId\",\n type: \"publicKey\",\n },\n {\n name: \"gasOracleProgramId\",\n type: \"publicKey\",\n },\n {\n name: \"rebalancer\",\n type: \"publicKey\",\n },\n {\n name: \"stopAuthority\",\n type: \"publicKey\",\n },\n {\n name: \"authorityBumpSeed\",\n type: \"u8\",\n },\n {\n name: \"canSwap\",\n type: \"bool\",\n },\n {\n name: \"canDeposit\",\n type: \"bool\",\n },\n {\n name: \"canWithdraw\",\n type: \"bool\",\n },\n ],\n },\n },\n {\n name: \"lock\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"sender\",\n type: \"publicKey\",\n },\n {\n name: \"sentTokenAddress\",\n type: \"publicKey\",\n },\n {\n name: \"amount\",\n type: \"u64\",\n },\n {\n name: \"vusdAmount\",\n type: \"u64\",\n },\n {\n name: \"recipient\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"destinationChainId\",\n type: \"u8\",\n },\n {\n name: \"receiveToken\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"nonce\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"messenger\",\n type: {\n defined: \"Messenger\",\n },\n },\n {\n name: \"slot\",\n type: \"u64\",\n },\n {\n name: \"fee\",\n type: \"u64\",\n },\n ],\n },\n },\n {\n name: \"otherBridgeToken\",\n type: {\n kind: \"struct\",\n fields: [],\n },\n },\n {\n name: \"pool\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"mint\",\n type: \"publicKey\",\n },\n {\n name: \"a\",\n type: \"u64\",\n },\n {\n name: \"d\",\n type: \"u64\",\n },\n {\n name: \"tokenBalance\",\n type: \"u64\",\n },\n {\n name: \"vUsdBalance\",\n type: \"u64\",\n },\n {\n name: \"reserves\",\n type: \"u64\",\n },\n {\n name: \"decimals\",\n type: \"u8\",\n },\n {\n name: \"totalLpAmount\",\n type: \"u64\",\n },\n {\n name: \"feeShareBp\",\n type: \"u64\",\n },\n {\n name: \"adminFeeShareBp\",\n type: \"u64\",\n },\n {\n name: \"accRewardPerShareP\",\n type: \"u128\",\n },\n {\n name: \"adminFeeAmount\",\n type: \"u64\",\n },\n {\n name: \"balanceRatioMinBp\",\n type: \"u16\",\n },\n ],\n },\n },\n {\n name: \"unlock\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"hash\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"amount\",\n type: \"u64\",\n },\n {\n name: \"fee\",\n type: \"u64\",\n },\n {\n name: \"vUsdAmount\",\n type: \"u64\",\n },\n {\n name: \"slot\",\n type: \"u64\",\n },\n ],\n },\n },\n {\n name: \"userDeposit\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"userAddress\",\n type: \"publicKey\",\n },\n {\n name: \"mint\",\n type: \"publicKey\",\n },\n {\n name: \"lpAmount\",\n type: \"u64\",\n },\n {\n name: \"rewardDebt\",\n type: \"u64\",\n },\n ],\n },\n },\n ],\n types: [\n {\n name: \"RegisterChainBridgeArgs\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"chainBridgeAddress\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"chainId\",\n type: \"u8\",\n },\n {\n name: \"gasUsage\",\n type: \"u64\",\n },\n ],\n },\n },\n {\n name: \"UpdateChainBridgeArgs\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"chainBridgeAddress\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"chainId\",\n type: \"u8\",\n },\n {\n name: \"gasUsage\",\n type: \"u64\",\n },\n ],\n },\n },\n {\n name: \"InitializeArgs\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"allbridgeMessengerProgramId\",\n type: \"publicKey\",\n },\n {\n name: \"wormholeMessengerProgramId\",\n type: \"publicKey\",\n },\n {\n name: \"gasOracleProgramId\",\n type: \"publicKey\",\n },\n ],\n },\n },\n {\n name: \"InitializePoolArgs\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"a\",\n type: \"u64\",\n },\n {\n name: \"feeShareBp\",\n type: \"u64\",\n },\n {\n name: \"adminFeeShareBp\",\n type: \"u64\",\n },\n {\n name: \"balanceRatioMinBp\",\n type: \"u16\",\n },\n ],\n },\n },\n {\n name: \"BridgeArgs\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"nonce\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"recipient\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"destinationChainId\",\n type: \"u8\",\n },\n {\n name: \"receiveToken\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"vusdAmount\",\n type: \"u64\",\n },\n ],\n },\n },\n {\n name: \"UnlockArgs\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"nonce\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"amount\",\n type: \"u64\",\n },\n {\n name: \"recipient\",\n type: \"publicKey\",\n },\n {\n name: \"sourceChainId\",\n type: \"u8\",\n },\n {\n name: \"receiveToken\",\n type: \"publicKey\",\n },\n {\n name: \"messenger\",\n type: {\n defined: \"Messenger\",\n },\n },\n {\n name: \"hash\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"receiveAmountMin\",\n type: \"u64\",\n },\n ],\n },\n },\n {\n name: \"RewardError\",\n type: {\n kind: \"enum\",\n variants: [\n {\n name: \"FeeTooHigh\",\n },\n ],\n },\n },\n {\n name: \"Messenger\",\n type: {\n kind: \"enum\",\n variants: [\n {\n name: \"None\",\n },\n {\n name: \"Allbridge\",\n },\n {\n name: \"Wormhole\",\n },\n ],\n },\n },\n {\n name: \"ActionType\",\n type: {\n kind: \"enum\",\n variants: [\n {\n name: \"Deposit\",\n },\n {\n name: \"Withdraw\",\n },\n {\n name: \"Swap\",\n },\n ],\n },\n },\n ],\n errors: [\n {\n code: 6000,\n name: \"AccountAlreadyInitialized\",\n msg: \"This account has already been initialized\",\n },\n {\n code: 6001,\n name: \"AdminAuthorityInvalid\",\n msg: \"This instruction requires admin authority\",\n },\n {\n code: 6002,\n name: \"InvalidSignature\",\n msg: \"Provided signature has wrong signer or message\",\n },\n {\n code: 6003,\n name: \"InvalidHash\",\n msg: \"Wrong unlock message hash\",\n },\n {\n code: 6004,\n name: \"PoolOverflow\",\n msg: \"PoolInfo overflow\",\n },\n {\n code: 6005,\n name: \"ReservesExhausted\",\n msg: \"Reserves exhausted\",\n },\n {\n code: 6006,\n name: \"ZeroAmount\",\n msg: \"Zero amount\",\n },\n {\n code: 6007,\n name: \"ZeroChanges\",\n msg: \"Zero changes\",\n },\n {\n code: 6008,\n name: \"HighVusdAmount\",\n msg: \"vUSD amount is too high\",\n },\n {\n code: 6009,\n name: \"BalanceRatioExceeded\",\n msg: \"Balance ratio exceeded\",\n },\n {\n code: 6010,\n name: \"InsufficientReceivedAmount\",\n msg: \"Received insufficient amount\",\n },\n {\n code: 6011,\n name: \"ForbiddenAction\",\n msg: \"ForbiddenAction\",\n },\n {\n code: 6012,\n name: \"ValueTooHigh\",\n msg: \"Value is too high\",\n },\n ],\n};\n", "export interface CctpBridge {\n version: \"0.1.0\";\n name: \"cctp_bridge\";\n instructions: [\n {\n name: \"initialize\";\n accounts: [\n {\n name: \"payer\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"admin\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"cctpBridge\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"bridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"tokenProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"rent\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"args\";\n type: {\n defined: \"InitializeArgs\";\n };\n }\n ];\n },\n {\n name: \"bridge\";\n accounts: [\n {\n name: \"user\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"payer\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"messageSentEventData\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"lock\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"mint\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"cctpBridge\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"cctpMessenger\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"messageTransmitterProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"messageTransmitterAccount\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"tokenMessenger\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"tokenMinter\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"localToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"remoteTokenMessengerKey\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"authorityPda\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"eventAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"bridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"gasPrice\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"thisGasPrice\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"chainBridge\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"userToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"tokenProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"args\";\n type: {\n defined: \"BridgeArgs\";\n };\n }\n ];\n },\n {\n name: \"registerChainBridge\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"payer\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"cctpBridge\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"chainBridge\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"args\";\n type: {\n defined: \"RegisterChainBridgeArgs\";\n };\n }\n ];\n },\n {\n name: \"updateChainBridge\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"cctpBridge\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"chainBridge\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"args\";\n type: {\n defined: \"UpdateChainBridgeArgs\";\n };\n }\n ];\n },\n {\n name: \"setAdminFeeShare\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"cctpBridge\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"feeShareBp\";\n type: \"u64\";\n }\n ];\n },\n {\n name: \"setGasOracleProgramId\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"cctpBridge\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"newProgramId\";\n type: \"publicKey\";\n }\n ];\n },\n {\n name: \"withdrawGasToken\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"recipient\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"cctpBridge\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"amount\";\n type: \"u64\";\n }\n ];\n },\n {\n name: \"withdrawAdminFee\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"cctpBridge\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"bridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"adminToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"tokenProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [];\n },\n {\n name: \"setCctpTokenMessengerMinter\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"cctpBridge\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"newProgramId\";\n type: \"publicKey\";\n }\n ];\n }\n ];\n accounts: [\n {\n name: \"cctpBridge\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"mint\";\n type: \"publicKey\";\n },\n {\n name: \"admin\";\n type: \"publicKey\";\n },\n {\n name: \"cctpTokenMessengerMinter\";\n type: \"publicKey\";\n },\n {\n name: \"gasOracleProgramId\";\n type: \"publicKey\";\n },\n {\n name: \"authorityBumpSeed\";\n type: \"u8\";\n },\n {\n name: \"adminFeeShareBp\";\n type: \"u64\";\n },\n {\n name: \"adminFeeAmount\";\n type: \"u64\";\n }\n ];\n };\n },\n {\n name: \"chainBridge\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"chainId\";\n type: \"u8\";\n },\n {\n name: \"gasUsage\";\n type: \"u64\";\n },\n {\n name: \"domain\";\n type: \"u32\";\n }\n ];\n };\n },\n {\n name: \"lock\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"sender\";\n type: \"publicKey\";\n },\n {\n name: \"amount\";\n type: \"u64\";\n },\n {\n name: \"adminFee\";\n type: \"u64\";\n },\n {\n name: \"relayerFee\";\n type: \"u64\";\n },\n {\n name: \"recipient\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"destinationChainId\";\n type: \"u8\";\n },\n {\n name: \"slot\";\n type: \"u64\";\n }\n ];\n };\n }\n ];\n types: [\n {\n name: \"RegisterChainBridgeArgs\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"chainId\";\n type: \"u8\";\n },\n {\n name: \"gasUsage\";\n type: \"u64\";\n },\n {\n name: \"domain\";\n type: \"u32\";\n },\n {\n name: \"mint\";\n type: \"publicKey\";\n }\n ];\n };\n },\n {\n name: \"UpdateChainBridgeArgs\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"chainId\";\n type: \"u8\";\n },\n {\n name: \"gasUsage\";\n type: \"u64\";\n },\n {\n name: \"domain\";\n type: \"u32\";\n },\n {\n name: \"mint\";\n type: \"publicKey\";\n }\n ];\n };\n },\n {\n name: \"BridgeArgs\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"recipient\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"destinationChainId\";\n type: \"u8\";\n },\n {\n name: \"receiveToken\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"amount\";\n type: \"u64\";\n }\n ];\n };\n },\n {\n name: \"InitializeArgs\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"gasOracleProgramId\";\n type: \"publicKey\";\n },\n {\n name: \"cctpTokenMessengerMinter\";\n type: \"publicKey\";\n }\n ];\n };\n }\n ];\n errors: [\n {\n code: 6000;\n name: \"ValueTooHigh\";\n msg: \"Value is too high\";\n }\n ];\n}\n\nexport const IDL: CctpBridge = {\n version: \"0.1.0\",\n name: \"cctp_bridge\",\n instructions: [\n {\n name: \"initialize\",\n accounts: [\n {\n name: \"payer\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"admin\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"cctpBridge\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"bridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"tokenProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"rent\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"args\",\n type: {\n defined: \"InitializeArgs\",\n },\n },\n ],\n },\n {\n name: \"bridge\",\n accounts: [\n {\n name: \"user\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"payer\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"messageSentEventData\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"lock\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"mint\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"cctpBridge\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"cctpMessenger\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"messageTransmitterProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"messageTransmitterAccount\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"tokenMessenger\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"tokenMinter\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"localToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"remoteTokenMessengerKey\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"authorityPda\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"eventAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"bridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"gasPrice\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"thisGasPrice\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"chainBridge\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"userToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"tokenProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"args\",\n type: {\n defined: \"BridgeArgs\",\n },\n },\n ],\n },\n {\n name: \"registerChainBridge\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"payer\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"cctpBridge\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"chainBridge\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"args\",\n type: {\n defined: \"RegisterChainBridgeArgs\",\n },\n },\n ],\n },\n {\n name: \"updateChainBridge\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"cctpBridge\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"chainBridge\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"args\",\n type: {\n defined: \"UpdateChainBridgeArgs\",\n },\n },\n ],\n },\n {\n name: \"setAdminFeeShare\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"cctpBridge\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"feeShareBp\",\n type: \"u64\",\n },\n ],\n },\n {\n name: \"setGasOracleProgramId\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"cctpBridge\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"newProgramId\",\n type: \"publicKey\",\n },\n ],\n },\n {\n name: \"withdrawGasToken\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"recipient\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"cctpBridge\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"amount\",\n type: \"u64\",\n },\n ],\n },\n {\n name: \"withdrawAdminFee\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"cctpBridge\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"bridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"adminToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"tokenProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [],\n },\n {\n name: \"setCctpTokenMessengerMinter\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"cctpBridge\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"newProgramId\",\n type: \"publicKey\",\n },\n ],\n },\n ],\n accounts: [\n {\n name: \"cctpBridge\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"mint\",\n type: \"publicKey\",\n },\n {\n name: \"admin\",\n type: \"publicKey\",\n },\n {\n name: \"cctpTokenMessengerMinter\",\n type: \"publicKey\",\n },\n {\n name: \"gasOracleProgramId\",\n type: \"publicKey\",\n },\n {\n name: \"authorityBumpSeed\",\n type: \"u8\",\n },\n {\n name: \"adminFeeShareBp\",\n type: \"u64\",\n },\n {\n name: \"adminFeeAmount\",\n type: \"u64\",\n },\n ],\n },\n },\n {\n name: \"chainBridge\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"chainId\",\n type: \"u8\",\n },\n {\n name: \"gasUsage\",\n type: \"u64\",\n },\n {\n name: \"domain\",\n type: \"u32\",\n },\n ],\n },\n },\n {\n name: \"lock\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"sender\",\n type: \"publicKey\",\n },\n {\n name: \"amount\",\n type: \"u64\",\n },\n {\n name: \"adminFee\",\n type: \"u64\",\n },\n {\n name: \"relayerFee\",\n type: \"u64\",\n },\n {\n name: \"recipient\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"destinationChainId\",\n type: \"u8\",\n },\n {\n name: \"slot\",\n type: \"u64\",\n },\n ],\n },\n },\n ],\n types: [\n {\n name: \"RegisterChainBridgeArgs\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"chainId\",\n type: \"u8\",\n },\n {\n name: \"gasUsage\",\n type: \"u64\",\n },\n {\n name: \"domain\",\n type: \"u32\",\n },\n {\n name: \"mint\",\n type: \"publicKey\",\n },\n ],\n },\n },\n {\n name: \"UpdateChainBridgeArgs\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"chainId\",\n type: \"u8\",\n },\n {\n name: \"gasUsage\",\n type: \"u64\",\n },\n {\n name: \"domain\",\n type: \"u32\",\n },\n {\n name: \"mint\",\n type: \"publicKey\",\n },\n ],\n },\n },\n {\n name: \"BridgeArgs\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"recipient\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"destinationChainId\",\n type: \"u8\",\n },\n {\n name: \"receiveToken\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"amount\",\n type: \"u64\",\n },\n ],\n },\n },\n {\n name: \"InitializeArgs\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"gasOracleProgramId\",\n type: \"publicKey\",\n },\n {\n name: \"cctpTokenMessengerMinter\",\n type: \"publicKey\",\n },\n ],\n },\n },\n ],\n errors: [\n {\n code: 6000,\n name: \"ValueTooHigh\",\n msg: \"Value is too high\",\n },\n ],\n};\n", "import { Program, Provider, Spl } from \"@project-serum/anchor\";\nimport { PublicKey } from \"@solana/web3.js\";\n/* eslint-disable-next-line import/no-named-as-default */\nimport Big from \"big.js\";\nimport Web3 from \"web3\";\nimport { InvalidTxError, SdkError } from \"../../../exceptions\";\nimport { PoolInfo } from \"../../../tokens-info\";\nimport { swapToVUsd } from \"../../../utils/calculation\";\nimport { TokenAccountData } from \"../../models/sol\";\nimport { Bridge as BridgeType } from \"../../models/sol/types/bridge\";\n\nexport async function getTokenAccountData(account: PublicKey, provider: Provider): Promise<TokenAccountData> {\n return await Spl.token(provider).account.token.fetch(account);\n}\n\nexport async function getVUsdAmount(\n amount: string,\n bridge: Program<BridgeType>,\n poolAccount: PublicKey\n): Promise<string> {\n const poolAccountInfo = await bridge.account.pool.fetch(poolAccount);\n const decimals = poolAccountInfo.decimals;\n const feeShare = Big(poolAccountInfo.feeShareBp.toString()).div(10000).toFixed();\n const poolInfo: Omit<PoolInfo, \"p\" | \"imbalance\"> = {\n aValue: poolAccountInfo.a.toString(),\n dValue: poolAccountInfo.d.toString(),\n totalLpAmount: poolAccountInfo.totalLpAmount.toString(),\n tokenBalance: poolAccountInfo.tokenBalance.toString(),\n vUsdBalance: poolAccountInfo.vUsdBalance.toString(),\n accRewardPerShareP: poolAccountInfo.accRewardPerShareP.toString(),\n };\n return swapToVUsd(amount, { decimals, feeShare }, poolInfo);\n}\n\nexport function getMessage(args: {\n amount: string;\n recipient: Buffer;\n sourceChainId: number;\n destinationChainId: number;\n receiveToken: Buffer;\n nonce: Buffer;\n chainBridge: Buffer;\n}): Buffer {\n const amount = args.amount;\n const recipient = \"0x\" + args.recipient.toString(\"hex\");\n const sourceChainId = args.sourceChainId;\n const destinationsChainId = args.destinationChainId;\n const receiveToken = \"0x\" + args.receiveToken.toString(\"hex\");\n const nonce = \"0x\" + args.nonce.toString(\"hex\");\n const messenger = 1;\n const chainBridge = \"0x\" + args.chainBridge.toString(\"hex\");\n\n const message = Web3.utils.encodePacked(\n { t: \"uint256\", v: amount },\n { t: \"bytes32\", v: recipient },\n { t: \"uint256\", v: sourceChainId },\n { t: \"bytes32\", v: receiveToken },\n { t: \"uint256\", v: nonce },\n { t: \"uint8\", v: messenger }\n );\n\n if (!message) {\n throw new SdkError(\"message cannot be undefined\");\n }\n const hash = Web3.utils.keccak256(Buffer.from(message.replace(\"0x\", \"\"), \"hex\") as any);\n\n const hashBuffer = Buffer.from(hash.replace(\"0x\", \"\"), \"hex\");\n hashBuffer[0] = sourceChainId;\n hashBuffer[1] = destinationsChainId;\n\n const messageWithSigner = Web3.utils.encodePacked(\n { t: \"bytes32\", v: \"0x\" + hashBuffer.toString(\"hex\") },\n { t: \"bytes32\", v: chainBridge }\n );\n\n if (!messageWithSigner) {\n throw new InvalidTxError(\"messageWithSigner cannot be undefined\");\n }\n\n const hashWithSigner = Web3.utils.keccak256(Buffer.from(messageWithSigner.replace(\"0x\", \"\"), \"hex\") as any);\n\n const hashWithSignerBuffer = Buffer.from(hashWithSigner.replace(\"0x\", \"\"), \"hex\");\n\n hashWithSignerBuffer[0] = hashBuffer[0];\n hashWithSignerBuffer[1] = hashBuffer[1];\n return hashWithSignerBuffer;\n}\n", "import {\n ComputeBudgetInstruction,\n ComputeBudgetProgram,\n Connection,\n Transaction,\n TransactionInstruction,\n TransactionMessage,\n VersionedTransaction,\n} from \"@solana/web3.js\";\nimport { Big } from \"big.js\";\nimport { TxTooLargeError } from \"../../../exceptions\";\nimport { toPowBase10 } from \"../../../utils/calculation\";\nimport { fetchAddressLookupTableAccountsFromTx } from \"../../../utils/sol/utils\";\nimport { SolanaAutoTxFee, TxFeeParams } from \"../../models\";\n\nexport async function addUnitLimitAndUnitPriceToTx(\n transaction: Transaction,\n txFeeParams: TxFeeParams | undefined,\n solanaRpcUrl: string\n) {\n const connection = new Connection(solanaRpcUrl, \"confirmed\");\n /* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */\n const simUnitsConsumed = (await connection.simulateTransaction(transaction)).value.unitsConsumed!;\n await addUnitLimitAndUnitPriceToInstructions(transaction.instructions, simUnitsConsumed, txFeeParams, connection);\n}\n\nexport async function addUnitLimitAndUnitPriceToVersionedTx(\n transaction: VersionedTransaction,\n txFeeParams: TxFeeParams | undefined,\n solanaRpcUrl: string\n) {\n const connection = new Connection(solanaRpcUrl, \"confirmed\");\n const addressLookupTableAccounts = await fetchAddressLookupTableAccountsFromTx(transaction, connection);\n const message = TransactionMessage.decompile(transaction.message, {\n addressLookupTableAccounts: addressLookupTableAccounts,\n });\n\n if (transaction.serialize().length > 1232) {\n throw new TxTooLargeError();\n }\n\n // const simUnitsConsumed = (await connection.simulateTransaction(transaction, { replaceRecentBlockhash: true })).value\n // .unitsConsumed!;\n const simUnitsConsumed = 769230; // 1000000/1.3\n\n await addUnitLimitAndUnitPriceToInstructions(message.instructions, simUnitsConsumed, txFeeParams, connection);\n\n transaction.message = message.compileToV0Message(addressLookupTableAccounts);\n}\n\nasync function addUnitLimitAndUnitPriceToInstructions(\n instructions: TransactionInstruction[],\n simUnitsConsumed: number,\n txFeeParams: TxFeeParams | undefined,\n connection: Connection\n) {\n if (simUnitsConsumed > 0) {\n const units = updateUnitLimit(simUnitsConsumed, instructions);\n if (txFeeParams?.solana) {\n const solanaTxFee = txFeeParams.solana;\n if (solanaTxFee === SolanaAutoTxFee) {\n await updateUnitPrice(instructions, connection);\n } else if (\"pricePerUnitInMicroLamports\" in solanaTxFee) {\n await updateUnitPrice(instructions, connection, solanaTxFee.pricePerUnitInMicroLamports);\n } else {\n const pricePerUnitInMicroLamports = Big(solanaTxFee.extraFeeInLamports)\n .div(units)\n .mul(toPowBase10(6))\n .toFixed(0);\n await updateUnitPrice(instructions, connection, pricePerUnitInMicroLamports);\n }\n }\n }\n}\n\nfunction updateUnitLimit(simUnitsConsumed: number, instructions: TransactionInstruction[]): string {\n const computeUnitLimitIndex = instructions.findIndex(\n (instruction) =>\n instruction.programId.equals(ComputeBudgetProgram.programId) &&\n ComputeBudgetInstruction.decodeInstructionType(instruction) === \"SetComputeUnitLimit\"\n );\n const units = Number((simUnitsConsumed * 1.3).toFixed(0));\n const computeUnitLimitInstruction = ComputeBudgetProgram.setComputeUnitLimit({\n units: units,\n });\n if (computeUnitLimitIndex >= 0) {\n instructions[computeUnitLimitIndex] = computeUnitLimitInstruction;\n } else {\n instructions.push(computeUnitLimitInstruction);\n }\n return units.toString();\n}\n\nasync function updateUnitPrice(\n instructions: TransactionInstruction[],\n connection: Connection,\n pricePerUnitInMicroLamports?: string\n): Promise<string> {\n const computeUnitPriceIndex = instructions.findIndex(\n (instruction) =>\n instruction.programId.equals(ComputeBudgetProgram.programId) &&\n ComputeBudgetInstruction.decodeInstructionType(instruction) === \"SetComputeUnitPrice\"\n );\n const unitPrice = pricePerUnitInMicroLamports\n ? BigInt(pricePerUnitInMicroLamports)\n : BigInt(await getAveragePrioritizationFee(connection));\n const computeUnitPriceInstruction = ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: unitPrice,\n });\n if (computeUnitPriceIndex >= 0) {\n instructions[computeUnitPriceIndex] = computeUnitPriceInstruction;\n } else {\n instructions.push(computeUnitPriceInstruction);\n }\n return unitPrice.toString();\n}\n\nasync function getAveragePrioritizationFee(connection: Connection) {\n const prioritizationFees = await connection.getRecentPrioritizationFees();\n let sum = 0;\n for (const prioritizationFee of prioritizationFees) {\n sum += prioritizationFee.prioritizationFee;\n }\n return (sum / prioritizationFees.length).toFixed(0);\n}\n", "import { AddressLookupTableAccount, Connection, VersionedTransaction } from \"@solana/web3.js\";\nimport { SdkError } from \"../../exceptions\";\n\nexport async function fetchAddressLookupTableAccountsFromTx(\n transaction: VersionedTransaction,\n connection: Connection\n): Promise<AddressLookupTableAccount[]> {\n return await Promise.all(\n transaction.message.addressTableLookups.map(async (lookup) => {\n return new AddressLookupTableAccount({\n key: lookup.accountKey,\n state: AddressLookupTableAccount.deserialize(\n await connection.getAccountInfo(lookup.accountKey).then((res) => {\n if (!res) {\n throw new SdkError(\"Cannot get AccountInfo\");\n }\n return res.data;\n })\n ),\n });\n })\n );\n}\n", "import { BN, Program, Provider } from \"@project-serum/anchor\";\nimport { PublicKey, TransactionInstruction } from \"@solana/web3.js\";\nimport { Bridge as BridgeType } from \"./types/bridge\";\nimport { CctpBridge as CctpBridgeType } from \"./types/cctp_bridge\";\n\nexport type SolanaTxFee = PricePerUnitInMicroLamports | ExtraFeeInLamports | typeof SolanaAutoTxFee;\n/**\n * Priority Fee will be calculated based on {@link @solana/web3.js:Connection.getRecentPrioritizationFees}\n */\nexport const SolanaAutoTxFee = \"AUTO\" as const;\n\n/**\n * Add Priority Fee as price per unit in micro-lamports\n */\nexport interface PricePerUnitInMicroLamports {\n pricePerUnitInMicroLamports: string;\n}\n\n/**\n * Total Priority Fee impact will be as extraFeeInLamports param\n */\nexport interface ExtraFeeInLamports {\n extraFeeInLamports: string;\n}\n\nexport interface SwapAndBridgeSolData {\n bridge: Program<BridgeType>;\n amount: BN;\n vusdAmount: BN;\n nonce: number[];\n recipient: number[];\n receiveToken: number[];\n poolAccount: PublicKey;\n lockAccount: PublicKey;\n bridgeAuthority: PublicKey;\n userToken: PublicKey;\n bridgeTokenAccount: PublicKey;\n chainBridgeAccount: PublicKey;\n otherBridgeTokenAccount: PublicKey;\n userAccount: PublicKey;\n destinationChainId: number;\n mint: string;\n config: PublicKey;\n configAccountInfo: ConfigAccountInfo;\n gasPrice: PublicKey;\n thisGasPrice: PublicKey;\n message: Buffer;\n extraGasInstruction?: TransactionInstruction;\n provider: Provider;\n}\n\nexport interface SwapAndBridgeSolDataCctpData {\n cctpBridge: Program<CctpBridgeType>;\n cctpBridgeAccount: PublicKey;\n cctpAddressAccount: PublicKey;\n amount: BN;\n recipient: number[];\n receiveToken: number[];\n userToken: PublicKey;\n bridgeAuthority: PublicKey;\n bridgeTokenAccount: PublicKey;\n chainBridgeAccount: PublicKey;\n userAccount: PublicKey;\n destinationChainId: number;\n mint: PublicKey;\n gasPrice: PublicKey;\n thisGasPrice: PublicKey;\n extraGasInstruction?: TransactionInstruction;\n provider: Provider;\n}\n\ninterface ConfigAccountInfo {\n allbridgeMessengerProgramId: PublicKey;\n wormholeMessengerProgramId: PublicKey;\n gasOracleProgramId: PublicKey;\n}\n\nexport interface TokenAccountData {\n amount: BN;\n authority: PublicKey;\n closeAuthority: unknown;\n delegate: unknown;\n delegatedAmount: BN;\n isNative: unknown;\n mint: PublicKey;\n state: unknown;\n}\n", "import { NATIVE_MINT } from \"@solana/spl-token\";\nimport { Connection, TransactionMessage, VersionedTransaction } from \"@solana/web3.js\";\nimport axios, { AxiosError } from \"axios\";\nimport { JupiterError, SdkError } from \"../../../exceptions\";\nimport { fetchAddressLookupTableAccountsFromTx } from \"../../../utils/sol/utils\";\n\nexport class JupiterService {\n connection: Connection;\n jupiterUrl: string;\n\n constructor(solanaRpcUrl: string, jupiterUrl: string) {\n this.connection = new Connection(solanaRpcUrl);\n this.jupiterUrl = jupiterUrl.replace(/\\/$/, \"\"); // trim last \"/\" if exist\n }\n\n async getJupiterSwapTx(\n userAddress: string,\n stableTokenAddress: string,\n amount: string,\n exactOut: boolean\n ): Promise<{ tx: VersionedTransaction; amountIn?: string }> {\n let quoteResponse: any;\n try {\n const swapMode = exactOut ? \"ExactOut\" : \"ExactIn\";\n quoteResponse = await axios.get(`${this.jupiterUrl}/quote?inputMint=${stableTokenAddress}\n&outputMint=${NATIVE_MINT.toString()}\n&amount=${amount}\n&swapMode=${swapMode}\n&slippageBps=100\n&onlyDirectRoutes=true`);\n } catch (err) {\n if (err instanceof AxiosError && err.response && err.response.data && err.response.data.error) {\n throw new JupiterError(err.response.data.error);\n }\n throw new JupiterError(\"Cannot get route\");\n }\n\n let inAmount;\n if (exactOut && quoteResponse?.data?.inAmount) {\n inAmount = quoteResponse.data.inAmount;\n } else if (exactOut) {\n throw new JupiterError(\"Cannot get inAmount\");\n }\n\n let transactionResponse: any;\n try {\n transactionResponse = await axios.post(`${this.jupiterUrl}/swap`, {\n quoteResponse: quoteResponse.data,\n userPublicKey: userAddress,\n wrapAndUnwrapSol: true,\n });\n } catch (err) {\n if (err instanceof AxiosError && err.response && err.response.data && err.response.data.error) {\n throw new JupiterError(err.response.data.error);\n }\n throw new JupiterError(\"Cannot get swap transaction\");\n }\n\n let swapTransaction;\n if (transactionResponse?.data?.swapTransaction) {\n swapTransaction = transactionResponse.data.swapTransaction;\n } else {\n throw new JupiterError(\"Cannot get swap transaction\");\n }\n\n const swapTransactionBuf = Buffer.from(swapTransaction, \"base64\");\n const tx = VersionedTransaction.deserialize(swapTransactionBuf);\n\n return exactOut ? { tx, amountIn: inAmount } : { tx };\n }\n\n async amendJupiterWithSdkTx(\n transaction: VersionedTransaction,\n sdkTx: VersionedTransaction\n ): Promise<VersionedTransaction> {\n try {\n const addressLookupTableAccounts = await fetchAddressLookupTableAccountsFromTx(transaction, this.connection);\n const sdkAddressLookupTableAccounts = await fetchAddressLookupTableAccountsFromTx(sdkTx, this.connection);\n\n const message = TransactionMessage.decompile(transaction.message, {\n addressLookupTableAccounts: addressLookupTableAccounts,\n });\n const sdkMessage = TransactionMessage.decompile(sdkTx.message, {\n addressLookupTableAccounts: sdkAddressLookupTableAccounts,\n });\n sdkMessage.instructions.shift();\n message.instructions.push(...sdkMessage.instructions);\n\n addressLookupTableAccounts.push(...sdkAddressLookupTableAccounts);\n\n transaction.message = message.compileToV0Message(addressLookupTableAccounts);\n\n if (sdkTx.message.header.numRequiredSignatures === 2 && transaction.signatures.length === 1) {\n const signature = sdkTx.signatures[0];\n if (!signature) {\n throw new SdkError(\"Signature is undefined\");\n }\n transaction.signatures.push(signature);\n }\n return transaction;\n } catch (e) {\n if (e instanceof Error && e.message) {\n throw new JupiterError(`Some error occurred during creation final swap and bridge transaction. ${e.message}`);\n }\n throw new JupiterError(\"Some error occurred during creation final swap and bridge transaction\");\n }\n }\n}\n", "import { Address, contract } from \"@stellar/stellar-sdk\";\nimport { Big } from \"big.js\";\nimport { ChainSymbol } from \"../../../chains/chain.enums\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { MethodNotSupportedError } from \"../../../exceptions\";\nimport { AllbridgeCoreSdkOptions, ChainType } from \"../../../index\";\nimport { FeePaymentMethod } from \"../../../models\";\nimport { NodeRpcUrlsConfig } from \"../../index\";\nimport { RawTransaction, TransactionResponse } from \"../../models\";\nimport { BridgeContract } from \"../../models/srb/bridge-contract\";\nimport { ChainBridgeService, SendParams, SwapParams, TxSendParams, TxSwapParams } from \"../models\";\nimport { getNonceBigInt, prepareTxSendParams, prepareTxSwapParams } from \"../utils\";\nimport ContractClientOptions = contract.ClientOptions;\n\nexport class SrbBridgeService extends ChainBridgeService {\n chainType: ChainType.SRB = ChainType.SRB;\n\n constructor(\n readonly nodeRpcUrlsConfig: NodeRpcUrlsConfig,\n readonly params: AllbridgeCoreSdkOptions,\n readonly api: AllbridgeCoreClient\n ) {\n super();\n }\n\n async buildRawTransactionSend(params: SendParams): Promise<RawTransaction> {\n const txSendParams = await prepareTxSendParams(this.chainType, params, this.api);\n return await this.buildRawTransactionSendFromParams(txSendParams);\n }\n\n async buildRawTransactionSendFromParams(params: TxSendParams): Promise<RawTransaction> {\n const {\n amount,\n contractAddress,\n fromAccountAddress,\n fromTokenAddress,\n toChainId,\n toAccountAddress,\n toTokenAddress,\n fee,\n gasFeePaymentMethod,\n extraGas,\n } = params;\n\n let totalFee = fee;\n if (extraGas) {\n totalFee = Big(totalFee).plus(extraGas).toFixed();\n }\n const contract = this.getContract(BridgeContract, contractAddress, fromAccountAddress);\n let tx;\n if (gasFeePaymentMethod === FeePaymentMethod.WITH_STABLECOIN) {\n tx = await contract.swap_and_bridge({\n sender: fromAccountAddress,\n token: Address.contract(Buffer.from(fromTokenAddress)).toString(),\n amount: BigInt(amount),\n recipient: Buffer.from(toAccountAddress),\n destination_chain_id: +toChainId,\n receive_token: Buffer.from(toTokenAddress),\n nonce: getNonceBigInt(),\n gas_amount: BigInt(0),\n fee_token_amount: BigInt(totalFee),\n });\n } else {\n tx = await contract.swap_and_bridge({\n sender: fromAccountAddress,\n token: Address.contract(Buffer.from(fromTokenAddress)).toString(),\n amount: BigInt(amount),\n recipient: Buffer.from(toAccountAddress),\n destination_chain_id: +toChainId,\n receive_token: Buffer.from(toTokenAddress),\n nonce: getNonceBigInt(),\n gas_amount: BigInt(totalFee),\n fee_token_amount: BigInt(0),\n });\n }\n return tx.toXDR();\n }\n\n async buildRawTransactionSwap(params: SwapParams): Promise<RawTransaction> {\n const txSwapParams = prepareTxSwapParams(this.chainType, params);\n return await this.buildRawTransactionSwapFromParams(txSwapParams);\n }\n\n async buildRawTransactionSwapFromParams(params: TxSwapParams): Promise<RawTransaction> {\n const {\n amount,\n contractAddress,\n fromAccountAddress,\n fromTokenAddress,\n toAccountAddress,\n toTokenAddress,\n minimumReceiveAmount,\n } = params;\n const contract = this.getContract(BridgeContract, contractAddress, fromAccountAddress);\n return (\n await contract.swap({\n sender: fromAccountAddress,\n amount: BigInt(amount),\n token: Address.contract(Buffer.from(fromTokenAddress)).toBuffer(),\n receive_token: Buffer.from(toTokenAddress),\n recipient: toAccountAddress as string,\n receive_amount_min: BigInt(minimumReceiveAmount),\n })\n ).toXDR();\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n send(params: SendParams): Promise<TransactionResponse> {\n throw new MethodNotSupportedError();\n }\n\n private getContract<T>(contract: new (args: ContractClientOptions) => T, address: string, sender?: string): T {\n const config: ContractClientOptions = {\n publicKey: sender,\n contractId: address,\n networkPassphrase: this.params.sorobanNetworkPassphrase,\n rpcUrl: this.nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.SRB),\n };\n return new contract(config);\n }\n}\n", "import { contract } from \"@stellar/stellar-sdk\";\nimport u128 = contract.u128;\nimport u32 = contract.u32;\nimport u256 = contract.u256;\nimport AssembledTransaction = contract.AssembledTransaction;\nimport Result = contract.Result;\nimport Option = contract.Option;\nimport ContractSpec = contract.Spec;\nimport ContractClient = contract.Client;\nimport ContractClientOptions = contract.ClientOptions;\n\nexport interface Swapped {\n receive_amount: u128;\n receive_token: Buffer;\n recipient: string;\n send_amount: u128;\n send_token: Buffer;\n sender: string;\n}\n\nexport interface TokensSent {\n amount: u128;\n destination_chain_id: u32;\n nonce: u256;\n receive_token: Buffer;\n recipient: Buffer;\n}\n\nexport interface TokensReceived {\n amount: u128;\n message: Buffer;\n nonce: u256;\n recipient: Buffer;\n}\n\nexport interface ReceiveFee {\n bridge_transaction_cost: u128;\n extra_gas: u128;\n message_transaction_cost: u128;\n}\n\nexport interface BridgingFeeFromTokens {\n fee_token_amount: u128;\n gas: u128;\n}\n\nexport interface AnotherBridge {\n address: Buffer;\n tokens: Map<Buffer, boolean>;\n}\n\nexport interface Bridge {\n /**\n * precomputed values of the scaling factor required for paying the bridging fee with stable tokens\n */\n bridging_fee_conversion_factor: Map<string, u128>;\n can_swap: boolean;\n /**\n * precomputed values to divide by to change the precision from the Gas Oracle precision to the token precision\n */\n from_gas_oracle_factor: Map<string, u128>;\n messenger: string;\n pools: Map<Buffer, string>;\n rebalancer: string;\n}\n\nexport type DataKey =\n | { tag: \"OtherBridge\"; values: readonly [u32] }\n | { tag: \"SentMessage\"; values: readonly [Buffer] }\n | { tag: \"ReceivedMessage\"; values: readonly [Buffer] };\n\nexport type Admin = readonly [string];\nexport type GasOracleAddress = readonly [string];\nexport type GasUsage = readonly [Map<u32, u128>];\nexport type NativeToken = readonly [string];\nexport type StopAuthority = readonly [string];\nexport const Errors = {\n 0: { message: \"\" },\n 1: { message: \"\" },\n 2: { message: \"\" },\n 3: { message: \"\" },\n 4: { message: \"\" },\n 5: { message: \"\" },\n 6: { message: \"\" },\n 7: { message: \"\" },\n 8: { message: \"\" },\n 9: { message: \"\" },\n 10: { message: \"\" },\n 11: { message: \"\" },\n 12: { message: \"\" },\n 103: { message: \"\" },\n 104: { message: \"\" },\n 105: { message: \"\" },\n 106: { message: \"\" },\n 107: { message: \"\" },\n 108: { message: \"\" },\n 109: { message: \"\" },\n 203: { message: \"\" },\n 204: { message: \"\" },\n 205: { message: \"\" },\n 206: { message: \"\" },\n 207: { message: \"\" },\n 208: { message: \"\" },\n 209: { message: \"\" },\n 210: { message: \"\" },\n 211: { message: \"\" },\n 212: { message: \"\" },\n 214: { message: \"\" },\n 215: { message: \"\" },\n 216: { message: \"\" },\n 217: { message: \"\" },\n 218: { message: \"\" },\n 300: { message: \"\" },\n 301: { message: \"\" },\n 302: { message: \"\" },\n 303: { message: \"\" },\n 400: { message: \"\" },\n};\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\nexport interface BridgeContract {\n /**\n * Construct and simulate a initialize transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n initialize: (\n {\n admin,\n messenger,\n gas_oracle,\n native_token,\n }: {\n admin: string;\n messenger: string;\n gas_oracle: string;\n native_token: string;\n },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a swap_and_bridge transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n swap_and_bridge: (\n {\n sender,\n token,\n amount,\n recipient,\n destination_chain_id,\n receive_token,\n nonce,\n gas_amount,\n fee_token_amount,\n }: {\n sender: string;\n token: string;\n amount: u128;\n recipient: Buffer;\n destination_chain_id: u32;\n receive_token: Buffer;\n nonce: u256;\n gas_amount: u128;\n fee_token_amount: u128;\n },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a receive_tokens transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n receive_tokens: (\n {\n sender,\n amount,\n recipient,\n source_chain_id,\n receive_token,\n nonce,\n receive_amount_min,\n extra_gas,\n }: {\n sender: string;\n amount: u128;\n recipient: string;\n source_chain_id: u32;\n receive_token: Buffer;\n nonce: u256;\n receive_amount_min: u128;\n extra_gas: Option<u128>;\n },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a swap transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n swap: (\n {\n sender,\n amount,\n token,\n receive_token,\n recipient,\n receive_amount_min,\n }: {\n sender: string;\n amount: u128;\n token: Buffer;\n receive_token: Buffer;\n recipient: string;\n receive_amount_min: u128;\n },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a stop_swap transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n stop_swap: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a start_swap transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n start_swap: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a set_gas_oracle transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n set_gas_oracle: (\n { new_address }: { new_address: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a set_stop_authority transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n set_stop_authority: (\n { stop_authority }: { stop_authority: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a set_rebalancer transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n set_rebalancer: (\n { rebalancer }: { rebalancer: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a set_messenger transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n set_messenger: (\n { messenger }: { messenger: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a set_gas_usage transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n set_gas_usage: (\n { chain_id, gas_usage }: { chain_id: u32; gas_usage: u128 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a register_bridge transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n register_bridge: (\n { chain_id, bridge_address }: { chain_id: u32; bridge_address: Buffer },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a add_bridge_token transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n add_bridge_token: (\n { chain_id, token_address }: { chain_id: u32; token_address: Buffer },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a remove_bridge_token transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n remove_bridge_token: (\n { chain_id, token_address }: { chain_id: u32; token_address: Buffer },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a add_pool transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n add_pool: (\n { pool, token }: { pool: string; token: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a withdraw_gas_tokens transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n withdraw_gas_tokens: (\n { sender, amount }: { sender: string; amount: u128 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a withdraw_bridging_fee_in_tokens transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n withdraw_bridging_fee_in_tokens: (\n { sender, token_address }: { sender: string; token_address: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a has_processed_message transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n has_processed_message: (\n { message }: { message: Buffer },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<boolean>>>;\n\n /**\n * Construct and simulate a has_received_message transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n has_received_message: (\n { message }: { message: Buffer },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<boolean>>>;\n\n /**\n * Construct and simulate a get_pool_address transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n get_pool_address: (\n { token_address }: { token_address: Buffer },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<string>>>;\n\n /**\n * Construct and simulate a get_config transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n get_config: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<Bridge>>>;\n\n /**\n * Construct and simulate a get_stop_authority transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n get_stop_authority: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<string>>>;\n\n /**\n * Construct and simulate a get_transaction_cost transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n get_transaction_cost: (\n { chain_id }: { chain_id: u32 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<u128>>>;\n\n /**\n * Construct and simulate a get_gas_usage transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n get_gas_usage: (\n { chain_id }: { chain_id: u32 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<u128>>>;\n\n /**\n * Construct and simulate a get_admin transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n get_admin: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<string>>>;\n\n /**\n * Construct and simulate a get_gas_oracle transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n get_gas_oracle: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<string>>>;\n\n /**\n * Construct and simulate a get_another_bridge transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n get_another_bridge: (\n { chain_id }: { chain_id: u32 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<AnotherBridge>>>;\n\n /**\n * Construct and simulate a set_admin transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n set_admin: (\n { new_admin }: { new_admin: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a upgrade transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n upgrade: (\n { new_wasm_hash }: { new_wasm_hash: Buffer },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\nexport class BridgeContract extends ContractClient {\n constructor(public readonly options: ContractClientOptions) {\n super(\n new ContractSpec([\n \"AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABAAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAltZXNzZW5nZXIAAAAAAAATAAAAAAAAAApnYXNfb3JhY2xlAAAAAAATAAAAAAAAAAxuYXRpdmVfdG9rZW4AAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=\",\n \"AAAAAAAAAAAAAAAPc3dhcF9hbmRfYnJpZGdlAAAAAAkAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAFdG9rZW4AAAAAAAATAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACXJlY2lwaWVudAAAAAAAA+4AAAAgAAAAAAAAABRkZXN0aW5hdGlvbl9jaGFpbl9pZAAAAAQAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAFbm9uY2UAAAAAAAAMAAAAAAAAAApnYXNfYW1vdW50AAAAAAAKAAAAAAAAABBmZWVfdG9rZW5fYW1vdW50AAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAAOcmVjZWl2ZV90b2tlbnMAAAAAAAgAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAlyZWNpcGllbnQAAAAAAAATAAAAAAAAAA9zb3VyY2VfY2hhaW5faWQAAAAABAAAAAAAAAANcmVjZWl2ZV90b2tlbgAAAAAAA+4AAAAgAAAAAAAAAAVub25jZQAAAAAAAAwAAAAAAAAAEnJlY2VpdmVfYW1vdW50X21pbgAAAAAACgAAAAAAAAAJZXh0cmFfZ2FzAAAAAAAD6AAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==\",\n \"AAAAAAAAAAAAAAAEc3dhcAAAAAYAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAV0b2tlbgAAAAAAA+4AAAAgAAAAAAAAAA1yZWNlaXZlX3Rva2VuAAAAAAAD7gAAACAAAAAAAAAACXJlY2lwaWVudAAAAAAAABMAAAAAAAAAEnJlY2VpdmVfYW1vdW50X21pbgAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAAJc3RvcF9zd2FwAAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAAKc3RhcnRfc3dhcAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAAOc2V0X2dhc19vcmFjbGUAAAAAAAEAAAAAAAAAC25ld19hZGRyZXNzAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==\",\n \"AAAAAAAAAAAAAAASc2V0X3N0b3BfYXV0aG9yaXR5AAAAAAABAAAAAAAAAA5zdG9wX2F1dGhvcml0eQAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAAOc2V0X3JlYmFsYW5jZXIAAAAAAAEAAAAAAAAACnJlYmFsYW5jZXIAAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==\",\n \"AAAAAAAAAAAAAAANc2V0X21lc3NlbmdlcgAAAAAAAAEAAAAAAAAACW1lc3NlbmdlcgAAAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==\",\n \"AAAAAAAAAAAAAAANc2V0X2dhc191c2FnZQAAAAAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAAJZ2FzX3VzYWdlAAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAAPcmVnaXN0ZXJfYnJpZGdlAAAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAAOYnJpZGdlX2FkZHJlc3MAAAAAA+4AAAAgAAAAAQAAA+kAAAPtAAAAAAAAAAM=\",\n \"AAAAAAAAAAAAAAAQYWRkX2JyaWRnZV90b2tlbgAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAANdG9rZW5fYWRkcmVzcwAAAAAAA+4AAAAgAAAAAQAAA+kAAAPtAAAAAAAAAAM=\",\n \"AAAAAAAAAAAAAAATcmVtb3ZlX2JyaWRnZV90b2tlbgAAAAACAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAPuAAAAIAAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAAIYWRkX3Bvb2wAAAACAAAAAAAAAARwb29sAAAAEwAAAAAAAAAFdG9rZW4AAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=\",\n \"AAAAAAAAAAAAAAATd2l0aGRyYXdfZ2FzX3Rva2VucwAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAAfd2l0aGRyYXdfYnJpZGdpbmdfZmVlX2luX3Rva2VucwAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=\",\n \"AAAAAAAAAAAAAAAVaGFzX3Byb2Nlc3NlZF9tZXNzYWdlAAAAAAAAAQAAAAAAAAAHbWVzc2FnZQAAAAPuAAAAIAAAAAEAAAPpAAAAAQAAAAM=\",\n \"AAAAAAAAAAAAAAAUaGFzX3JlY2VpdmVkX21lc3NhZ2UAAAABAAAAAAAAAAdtZXNzYWdlAAAAA+4AAAAgAAAAAQAAA+kAAAABAAAAAw==\",\n \"AAAAAAAAAAAAAAAQZ2V0X3Bvb2xfYWRkcmVzcwAAAAEAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAPuAAAAIAAAAAEAAAPpAAAAEwAAAAM=\",\n \"AAAAAAAAAAAAAAAKZ2V0X2NvbmZpZwAAAAAAAAAAAAEAAAPpAAAH0AAAAAZCcmlkZ2UAAAAAAAM=\",\n \"AAAAAAAAAAAAAAASZ2V0X3N0b3BfYXV0aG9yaXR5AAAAAAAAAAAAAQAAA+kAAAATAAAAAw==\",\n \"AAAAAAAAAAAAAAAUZ2V0X3RyYW5zYWN0aW9uX2Nvc3QAAAABAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAABAAAD6QAAAAoAAAAD\",\n \"AAAAAAAAAAAAAAANZ2V0X2dhc191c2FnZQAAAAAAAAEAAAAAAAAACGNoYWluX2lkAAAABAAAAAEAAAPpAAAACgAAAAM=\",\n \"AAAAAAAAAAAAAAAJZ2V0X2FkbWluAAAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=\",\n \"AAAAAAAAAAAAAAAOZ2V0X2dhc19vcmFjbGUAAAAAAAAAAAABAAAD6QAAABMAAAAD\",\n \"AAAAAAAAAAAAAAASZ2V0X2Fub3RoZXJfYnJpZGdlAAAAAAABAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAABAAAD6QAAB9AAAAANQW5vdGhlckJyaWRnZQAAAAAAAAM=\",\n \"AAAAAAAAAAAAAAAJc2V0X2FkbWluAAAAAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAAHdXBncmFkZQAAAAABAAAAAAAAAA1uZXdfd2FzbV9oYXNoAAAAAAAD7gAAACAAAAABAAAD6QAAA+0AAAAAAAAAAw==\",\n \"AAAAAQAAAAAAAAAAAAAAB1N3YXBwZWQAAAAABgAAAAAAAAAOcmVjZWl2ZV9hbW91bnQAAAAAAAoAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAAEwAAAAAAAAALc2VuZF9hbW91bnQAAAAACgAAAAAAAAAKc2VuZF90b2tlbgAAAAAD7gAAACAAAAAAAAAABnNlbmRlcgAAAAAAEw==\",\n \"AAAAAQAAAAAAAAAAAAAAClRva2Vuc1NlbnQAAAAAAAUAAAAAAAAABmFtb3VudAAAAAAACgAAAAAAAAAUZGVzdGluYXRpb25fY2hhaW5faWQAAAAEAAAAAAAAAAVub25jZQAAAAAAAAwAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACA=\",\n \"AAAAAQAAAAAAAAAAAAAADlRva2Vuc1JlY2VpdmVkAAAAAAAEAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAB21lc3NhZ2UAAAAD7gAAACAAAAAAAAAABW5vbmNlAAAAAAAADAAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACA=\",\n \"AAAAAQAAAAAAAAAAAAAAClJlY2VpdmVGZWUAAAAAAAMAAAAAAAAAF2JyaWRnZV90cmFuc2FjdGlvbl9jb3N0AAAAAAoAAAAAAAAACWV4dHJhX2dhcwAAAAAAAAoAAAAAAAAAGG1lc3NhZ2VfdHJhbnNhY3Rpb25fY29zdAAAAAo=\",\n \"AAAAAQAAAAAAAAAAAAAAFUJyaWRnaW5nRmVlRnJvbVRva2VucwAAAAAAAAIAAAAAAAAAEGZlZV90b2tlbl9hbW91bnQAAAAKAAAAAAAAAANnYXMAAAAACg==\",\n \"AAAAAQAAAAAAAAAAAAAADUFub3RoZXJCcmlkZ2UAAAAAAAACAAAAAAAAAAdhZGRyZXNzAAAAA+4AAAAgAAAAAAAAAAZ0b2tlbnMAAAAAA+wAAAPuAAAAIAAAAAE=\",\n \"AAAAAQAAAAAAAAAAAAAABkJyaWRnZQAAAAAABgAAAGBwcmVjb21wdXRlZCB2YWx1ZXMgb2YgdGhlIHNjYWxpbmcgZmFjdG9yIHJlcXVpcmVkIGZvciBwYXlpbmcgdGhlIGJyaWRnaW5nIGZlZSB3aXRoIHN0YWJsZSB0b2tlbnMAAAAeYnJpZGdpbmdfZmVlX2NvbnZlcnNpb25fZmFjdG9yAAAAAAPsAAAAEwAAAAoAAAAAAAAACGNhbl9zd2FwAAAAAQAAAGxwcmVjb21wdXRlZCB2YWx1ZXMgdG8gZGl2aWRlIGJ5IHRvIGNoYW5nZSB0aGUgcHJlY2lzaW9uIGZyb20gdGhlIEdhcyBPcmFjbGUgcHJlY2lzaW9uIHRvIHRoZSB0b2tlbiBwcmVjaXNpb24AAAAWZnJvbV9nYXNfb3JhY2xlX2ZhY3RvcgAAAAAD7AAAABMAAAAKAAAAAAAAAAltZXNzZW5nZXIAAAAAAAATAAAAAAAAAAVwb29scwAAAAAAA+wAAAPuAAAAIAAAABMAAAAAAAAACnJlYmFsYW5jZXIAAAAAABM=\",\n \"AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAwAAAAEAAAAAAAAAC090aGVyQnJpZGdlAAAAAAEAAAAEAAAAAQAAAAAAAAALU2VudE1lc3NhZ2UAAAAAAQAAA+4AAAAgAAAAAQAAAAAAAAAPUmVjZWl2ZWRNZXNzYWdlAAAAAAEAAAPuAAAAIA==\",\n \"AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=\",\n \"AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==\",\n \"AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==\",\n \"AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT\",\n \"AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==\",\n \"AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAKAAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAYVG9rZW5JbnN1ZmZpY2llbnRCYWxhbmNlAAAACgAAAAAAAAAKQ2FzdEZhaWxlZAAAAAAACwAAAAAAAAAMVTI1Nk92ZXJmbG93AAAADAAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ\",\n ]),\n options\n );\n }\n\n public readonly fromJSON = {\n initialize: this.txFromJSON<Result<void>>,\n swap_and_bridge: this.txFromJSON<Result<void>>,\n receive_tokens: this.txFromJSON<Result<void>>,\n swap: this.txFromJSON<Result<void>>,\n stop_swap: this.txFromJSON<Result<void>>,\n start_swap: this.txFromJSON<Result<void>>,\n set_gas_oracle: this.txFromJSON<Result<void>>,\n set_stop_authority: this.txFromJSON<Result<void>>,\n set_rebalancer: this.txFromJSON<Result<void>>,\n set_messenger: this.txFromJSON<Result<void>>,\n set_gas_usage: this.txFromJSON<Result<void>>,\n register_bridge: this.txFromJSON<Result<void>>,\n add_bridge_token: this.txFromJSON<Result<void>>,\n remove_bridge_token: this.txFromJSON<Result<void>>,\n add_pool: this.txFromJSON<Result<void>>,\n withdraw_gas_tokens: this.txFromJSON<Result<void>>,\n withdraw_bridging_fee_in_tokens: this.txFromJSON<Result<void>>,\n has_processed_message: this.txFromJSON<Result<boolean>>,\n has_received_message: this.txFromJSON<Result<boolean>>,\n get_pool_address: this.txFromJSON<Result<string>>,\n get_config: this.txFromJSON<Result<Bridge>>,\n get_stop_authority: this.txFromJSON<Result<string>>,\n get_transaction_cost: this.txFromJSON<Result<u128>>,\n get_gas_usage: this.txFromJSON<Result<u128>>,\n get_admin: this.txFromJSON<Result<string>>,\n get_gas_oracle: this.txFromJSON<Result<string>>,\n get_another_bridge: this.txFromJSON<Result<AnotherBridge>>,\n set_admin: this.txFromJSON<Result<void>>,\n upgrade: this.txFromJSON<Result<void>>,\n };\n}\n", "import { Big } from \"big.js\";\n// @ts-expect-error import tron\nimport TronWeb from \"tronweb\";\nimport { ChainType } from \"../../../chains/chain.enums\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { SdkError } from \"../../../exceptions\";\nimport { FeePaymentMethod, Messenger, SwapParams, TransactionResponse } from \"../../../models\";\nimport { RawTransaction, SmartContractMethodParameter } from \"../../models\";\nimport { sendRawTransaction } from \"../../utils/trx\";\nimport { SendParams, TxSendParams, TxSwapParams } from \"../models\";\nimport { ChainBridgeService } from \"../models/bridge\";\nimport { getNonce, prepareTxSendParams, prepareTxSwapParams } from \"../utils\";\n\nexport class TronBridgeService extends ChainBridgeService {\n chainType: ChainType.TRX = ChainType.TRX;\n\n constructor(public tronWeb: typeof TronWeb, public api: AllbridgeCoreClient) {\n super();\n }\n\n async send(params: SendParams): Promise<TransactionResponse> {\n const txSendParams = await prepareTxSendParams(this.chainType, params, this.api);\n const rawTransaction = await this.buildRawTransactionSendFromParams(txSendParams);\n return await sendRawTransaction(this.tronWeb, rawTransaction);\n }\n\n async buildRawTransactionSwap(params: SwapParams): Promise<RawTransaction> {\n const txSwapParams = prepareTxSwapParams(this.chainType, params);\n return await this.buildRawTransactionSwapFromParams(txSwapParams);\n }\n\n async buildRawTransactionSwapFromParams(params: TxSwapParams): Promise<RawTransaction> {\n const {\n amount,\n contractAddress,\n fromAccountAddress,\n fromTokenAddress,\n toAccountAddress,\n toTokenAddress,\n minimumReceiveAmount,\n } = params;\n\n const parameters = [\n { type: \"uint256\", value: amount },\n { type: \"bytes32\", value: fromTokenAddress },\n { type: \"bytes32\", value: toTokenAddress },\n { type: \"address\", value: toAccountAddress },\n { type: \"uint256\", value: minimumReceiveAmount },\n ];\n const methodSignature = \"swap(uint256,bytes32,bytes32,address,uint256)\";\n return this.buildRawTransaction(contractAddress, methodSignature, parameters, \"0\", fromAccountAddress);\n }\n\n async buildRawTransactionSend(params: SendParams): Promise<RawTransaction> {\n const txSendParams = await prepareTxSendParams(this.chainType, params, this.api);\n return this.buildRawTransactionSendFromParams(txSendParams);\n }\n\n async buildRawTransactionSendFromParams(params: TxSendParams): Promise<RawTransaction> {\n const {\n amount,\n contractAddress,\n fromAccountAddress,\n fromTokenAddress,\n toChainId,\n toAccountAddress,\n toTokenAddress,\n messenger,\n fee,\n gasFeePaymentMethod,\n extraGas,\n } = params;\n\n let totalFee = fee;\n if (extraGas) {\n totalFee = Big(totalFee).plus(extraGas).toFixed();\n }\n\n const nonce = getNonce().toJSON().data;\n let parameters;\n let value: string;\n let methodSignature: string;\n if (messenger == Messenger.CCTP) {\n if (gasFeePaymentMethod === FeePaymentMethod.WITH_STABLECOIN) {\n parameters = [\n { type: \"uint256\", value: amount },\n { type: \"bytes32\", value: toAccountAddress },\n { type: \"uint256\", value: toChainId },\n { type: \"uint256\", value: totalFee },\n ];\n value = \"0\";\n } else {\n parameters = [\n { type: \"uint256\", value: amount },\n { type: \"bytes32\", value: toAccountAddress },\n { type: \"uint256\", value: toChainId },\n { type: \"uint256\", value: 0 },\n ];\n value = totalFee;\n }\n methodSignature = \"bridge(uint256,bytes32,uint256,uint256)\";\n } else {\n if (gasFeePaymentMethod === FeePaymentMethod.WITH_STABLECOIN) {\n parameters = [\n { type: \"bytes32\", value: fromTokenAddress },\n { type: \"uint256\", value: amount },\n { type: \"bytes32\", value: toAccountAddress },\n { type: \"uint256\", value: toChainId },\n { type: \"bytes32\", value: toTokenAddress },\n { type: \"uint256\", value: nonce },\n { type: \"uint8\", value: messenger },\n { type: \"uint256\", value: totalFee },\n ];\n value = \"0\";\n } else {\n parameters = [\n { type: \"bytes32\", value: fromTokenAddress },\n { type: \"uint256\", value: amount },\n { type: \"bytes32\", value: toAccountAddress },\n { type: \"uint256\", value: toChainId },\n { type: \"bytes32\", value: toTokenAddress },\n { type: \"uint256\", value: nonce },\n { type: \"uint8\", value: messenger },\n { type: \"uint256\", value: 0 },\n ];\n value = totalFee;\n }\n methodSignature = \"swapAndBridge(bytes32,uint256,bytes32,uint256,bytes32,uint256,uint8,uint256)\";\n }\n return this.buildRawTransaction(contractAddress, methodSignature, parameters, value, fromAccountAddress);\n }\n\n private async buildRawTransaction(\n contractAddress: string,\n methodSignature: string,\n parameters: SmartContractMethodParameter[],\n value: string,\n fromAddress: string\n ): Promise<RawTransaction> {\n const transactionObject = await this.tronWeb.transactionBuilder.triggerSmartContract(\n contractAddress,\n methodSignature,\n {\n callValue: value,\n },\n parameters,\n fromAddress\n );\n if (!transactionObject?.result?.result) {\n throw new SdkError(\"Unknown error: \" + JSON.stringify(transactionObject, null, 2));\n }\n return transactionObject.transaction;\n }\n}\n", "import BN from \"bn.js\";\n\nexport function amountToHex(amount: string): string {\n return \"0x\" + new BN(amount).toString(\"hex\");\n}\n\nexport function sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(() => resolve(), ms));\n}\n\nexport const promisify =\n // prettier-ignore\n // eslint-disable-next-line @typescript-eslint/ban-types\n (func: Function) =>\n (...args: any[]) =>\n new Promise<any>(\n (resolve, reject) =>\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n func(...args, (err: Error, result: any) => (err ? reject(err) : resolve(result)))\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n );\n", "// @ts-expect-error import tron\nimport TronWeb from \"tronweb\";\nimport { InvalidTxError, VerifyTxError } from \"../../../exceptions\";\nimport { RawTransaction } from \"../../models\";\nimport { sleep } from \"../index\";\n\nexport async function sendRawTransaction(tronWeb: TronWeb, rawTransaction: RawTransaction): Promise<{ txId: string }> {\n const signedTx = await tronWeb.trx.sign(rawTransaction);\n\n if (!signedTx.signature) {\n throw new InvalidTxError(\"Transaction was not signed properly\");\n }\n\n const receipt = await tronWeb.trx.sendRawTransaction(signedTx);\n const transactionHash = receipt.txid;\n await verifyTx(tronWeb, transactionHash);\n return { txId: transactionHash };\n}\n\nexport async function verifyTx(tronWeb: TronWeb, txId: string, timeout = 10000): Promise<any> {\n const start = Date.now();\n /* eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, no-constant-condition */\n while (true) {\n if (Date.now() - start > timeout) {\n throw new VerifyTxError(\"Transaction not found\");\n }\n const result = await tronWeb.trx.getUnconfirmedTransactionInfo(txId);\n if (!result?.receipt) {\n await sleep(2000);\n continue;\n }\n if (result.receipt.result === \"SUCCESS\") {\n return result;\n } else {\n /* eslint-disable-next-line @typescript-eslint/restrict-template-expressions */\n throw new VerifyTxError(`Transaction status is ${result.receipt.result}`);\n }\n }\n}\n", "import { Big } from \"big.js\";\nimport Cache from \"timed-cache\";\n// @ts-expect-error import tron\nimport TronWeb from \"tronweb\";\nimport Web3 from \"web3\";\nimport { NodeRpcUrlsConfig } from \"..\";\nimport { Chains } from \"../../chains\";\nimport { AllbridgeCoreClient } from \"../../client/core-api/core-client-base\";\nimport { AllbridgeCoreClientFiltered } from \"../../client/core-api/core-client-filtered\";\nimport { AllbridgeCoreSdkOptions, ChainType } from \"../../index\";\nimport { PoolInfo, PoolKeyObject, TokenWithChainDetails } from \"../../tokens-info\";\nimport { convertIntAmountToFloat, fromSystemPrecision } from \"../../utils/calculation\";\nimport { SYSTEM_PRECISION } from \"../../utils/calculation/constants\";\nimport { validateAmountDecimals, validateAmountGtZero } from \"../../utils/utils\";\nimport { Provider, TransactionResponse } from \"../models\";\nimport { TokenService } from \"../token\";\nimport { depositAmountToVUsd, vUsdToWithdrawalAmount } from \"../utils/calculation\";\nimport { EvmPoolService } from \"./evm\";\nimport { ApproveParams, ChainPoolService, CheckAllowanceParams, GetAllowanceParams, UserBalanceInfo } from \"./models\";\nimport { DefaultRawPoolTransactionBuilder, RawPoolTransactionBuilder } from \"./raw-pool-transaction-builder\";\nimport { SolanaPoolService } from \"./sol\";\nimport { SrbPoolService } from \"./srb\";\nimport { TronPoolService } from \"./trx\";\n\nexport interface LiquidityPoolService {\n rawTxBuilder: RawPoolTransactionBuilder;\n\n /**\n * Get amount of tokens approved for poolInfo\n * @param provider - will be used to access the network\n * @param params See {@link GetAllowanceParams}\n * @returns the amount of approved tokens\n */\n getAllowance(provider: Provider, params: GetAllowanceParams): Promise<string>;\n\n /**\n * Get amount of tokens approved for poolInfo\n * @param params See {@link GetAllowanceParams}\n * @returns the amount of approved tokens\n */\n getAllowance(params: GetAllowanceParams): Promise<string>;\n\n /**\n * Check if the amount of approved tokens is enough\n * @param provider - will be used to access the network\n * @param params See {@link CheckAllowanceParams}\n * @returns true if the amount of approved tokens is enough to make a transfer\n */\n checkAllowance(provider: Provider, params: CheckAllowanceParams): Promise<boolean>;\n\n /**\n * Check if the amount of approved tokens is enough\n * @param params See {@link CheckAllowanceParams}\n * @returns true if the amount of approved tokens is enough to make a transfer\n */\n checkAllowance(params: CheckAllowanceParams): Promise<boolean>;\n\n /**\n * @Deprecated Use {@link rawTxBuilder}.{@link RawPoolTransactionBuilder.approve}<p>\n * Approve tokens usage by another address on chains\n * <p>\n * For ETH/USDT: due to specificity of the USDT contract:<br/>\n * If the current allowance is not 0, this function will perform an additional transaction to set allowance to 0 before setting the new allowance value.\n * @param provider - will be used to access the network\n * @param approveData\n */\n approve(provider: Provider, approveData: ApproveParams): Promise<TransactionResponse>;\n\n /**\n * Calculates the amount of LP tokens that will be deposited\n * @param amount The float amount of tokens that will be sent\n * @param token\n * @param provider - will be used to access the network\n * @returns amount\n */\n getAmountToBeDeposited(amount: string, token: TokenWithChainDetails, provider?: Provider): Promise<string>;\n\n /**\n * Calculates the amount of tokens will be withdrawn\n * @param amount The float amount of tokens that will be sent\n * @param accountAddress\n * @param token\n * @param provider - will be used to access the network\n * @returns amount\n */\n getAmountToBeWithdrawn(\n amount: string,\n accountAddress: string,\n token: TokenWithChainDetails,\n provider?: Provider\n ): Promise<string>;\n\n /**\n * Get User Balance Info on Liquidity poolInfo\n * @param accountAddress\n * @param token\n * @param provider\n * @returns UserBalanceInfo\n */\n getUserBalanceInfo(\n accountAddress: string,\n token: TokenWithChainDetails,\n provider?: Provider\n ): Promise<UserBalanceInfo>;\n\n /**\n * Gets information about the poolInfo from chain\n * @param token\n * @param provider - will be used to access the network\n * @returns poolInfo\n */\n getPoolInfoFromChain(token: TokenWithChainDetails, provider?: Provider): Promise<Required<PoolInfo>>;\n}\n\nexport class DefaultLiquidityPoolService implements LiquidityPoolService {\n public rawTxBuilder: RawPoolTransactionBuilder;\n private cache: Cache<PoolInfo>;\n\n constructor(\n private api: AllbridgeCoreClientFiltered,\n private nodeRpcUrlsConfig: NodeRpcUrlsConfig,\n private params: AllbridgeCoreSdkOptions,\n private tokenService: TokenService\n ) {\n this.rawTxBuilder = new DefaultRawPoolTransactionBuilder(api, nodeRpcUrlsConfig, this.params, tokenService);\n const ttl = params.cachePoolInfoChainSec > 0 ? params.cachePoolInfoChainSec * 1000 : 20 * 1000;\n this.cache = new Cache<PoolInfo>({ defaultTtl: ttl });\n }\n\n async getAllowance(a: Provider | GetAllowanceParams, b?: GetAllowanceParams): Promise<string> {\n if (b) {\n const provider = a as Provider;\n const params = b;\n return await this.tokenService.getAllowance({ ...params, spender: params.token.poolAddress }, provider);\n } else {\n const params = a as GetAllowanceParams;\n return await this.tokenService.getAllowance({ ...params, spender: params.token.poolAddress });\n }\n }\n\n async checkAllowance(a: Provider | CheckAllowanceParams, b?: CheckAllowanceParams): Promise<boolean> {\n if (b) {\n const provider = a as Provider;\n const params = b;\n return this.tokenService.checkAllowance({ ...params, spender: params.token.poolAddress }, provider);\n } else {\n const params = a as CheckAllowanceParams;\n return this.tokenService.checkAllowance({ ...params, spender: params.token.poolAddress });\n }\n }\n\n async approve(provider: Provider, approveData: ApproveParams): Promise<TransactionResponse> {\n return this.tokenService.approve(provider, { ...approveData, spender: approveData.token.poolAddress });\n }\n\n async getAmountToBeDeposited(amount: string, token: TokenWithChainDetails, provider?: Provider): Promise<string> {\n validateAmountGtZero(amount);\n validateAmountDecimals(\"amount\", amount, token.decimals);\n const pool = await this.getPoolInfoFromChain(token, provider);\n const { vUsdBalance, tokenBalance, aValue, dValue } = pool;\n const vUsd = depositAmountToVUsd(amount, aValue, dValue, tokenBalance, vUsdBalance);\n return convertIntAmountToFloat(vUsd, SYSTEM_PRECISION).toFixed();\n }\n\n async getAmountToBeWithdrawn(\n amount: string,\n accountAddress: string,\n token: TokenWithChainDetails,\n provider?: Provider\n ): Promise<string> {\n validateAmountGtZero(amount);\n validateAmountDecimals(\"amount\", amount, token.decimals);\n const pool = await this.getPoolInfoFromChain(token, provider);\n const tokenAmountInSP = vUsdToWithdrawalAmount(amount);\n const tokenAmount = fromSystemPrecision(tokenAmountInSP, token.decimals);\n const userBalanceInfo = await this.getUserBalanceInfo(accountAddress, token, provider);\n const earned = userBalanceInfo.earned(pool) || \"0\";\n const commonAmount = Big(tokenAmount).plus(earned).toFixed();\n return convertIntAmountToFloat(commonAmount, token.decimals).toFixed();\n }\n\n async getUserBalanceInfo(\n accountAddress: string,\n token: TokenWithChainDetails,\n provider?: Provider\n ): Promise<UserBalanceInfo> {\n return getChainPoolService(\n token.chainSymbol,\n this.api,\n this.nodeRpcUrlsConfig,\n this.params,\n provider\n ).getUserBalanceInfo(accountAddress, token);\n }\n\n async getPoolInfoFromChain(token: TokenWithChainDetails, provider?: Provider): Promise<PoolInfo> {\n const poolKey: PoolKeyObject = { chainSymbol: token.chainSymbol, poolAddress: token.poolAddress };\n const fromCache = this.cache.get(poolKey);\n if (fromCache) {\n return fromCache;\n } else {\n const poolInfo = await getChainPoolService(\n token.chainSymbol,\n this.api,\n this.nodeRpcUrlsConfig,\n this.params,\n provider\n ).getPoolInfoFromChain(token);\n this.cache.put(poolKey, poolInfo);\n this.api.cachePut({ chainSymbol: token.chainSymbol, poolAddress: token.poolAddress }, poolInfo);\n return poolInfo;\n }\n }\n}\n\nexport function getChainPoolService(\n chainSymbol: string,\n api: AllbridgeCoreClient,\n nodeRpcUrlsConfig: NodeRpcUrlsConfig,\n params: AllbridgeCoreSdkOptions,\n provider?: Provider\n): ChainPoolService {\n switch (Chains.getChainProperty(chainSymbol).chainType) {\n case ChainType.EVM: {\n if (provider) {\n return new EvmPoolService(provider as unknown as Web3, api);\n } else {\n const nodeRpcUrl = nodeRpcUrlsConfig.getNodeRpcUrl(chainSymbol);\n return new EvmPoolService(new Web3(nodeRpcUrl), api);\n }\n }\n case ChainType.TRX: {\n const nodeRpcUrl = nodeRpcUrlsConfig.getNodeRpcUrl(chainSymbol);\n const tronJsonRpc = params.tronJsonRpc;\n if (provider) {\n return new TronPoolService(provider, api, tronJsonRpc);\n } else {\n const tronWeb = new TronWeb({ fullHost: nodeRpcUrl });\n return new TronPoolService(tronWeb, api, tronJsonRpc);\n }\n }\n case ChainType.SOLANA: {\n const nodeRpcUrl = nodeRpcUrlsConfig.getNodeRpcUrl(chainSymbol);\n return new SolanaPoolService(nodeRpcUrl, api);\n }\n case ChainType.SRB: {\n return new SrbPoolService(nodeRpcUrlsConfig, params, api);\n }\n }\n}\n", "import { Big } from \"big.js\";\nimport { convertFloatAmountToInt, getD } from \"../../../utils/calculation\";\nimport { SYSTEM_PRECISION } from \"../../../utils/calculation/constants\";\n\nexport function depositAmountToVUsd(\n amount: string,\n aValue: string,\n dValue: string,\n tokenBalance: string,\n vUsdBalance: string\n): string {\n const amountSP = convertFloatAmountToInt(amount, SYSTEM_PRECISION);\n const amountSPBig = Big(amountSP);\n\n const oldD = Big(dValue);\n const oldBalance = Big(tokenBalance).plus(vUsdBalance);\n\n let newTokenBalance;\n let newVUsdBalance;\n\n if (oldD.eq(0) || oldBalance.eq(0)) {\n const halfAmount = amountSPBig.div(2);\n newTokenBalance = Big(tokenBalance).plus(halfAmount);\n newVUsdBalance = Big(vUsdBalance).plus(halfAmount);\n } else {\n newTokenBalance = Big(tokenBalance).plus(amountSPBig.mul(tokenBalance).div(oldBalance));\n newVUsdBalance = Big(vUsdBalance).plus(amountSPBig.mul(vUsdBalance).div(oldBalance));\n }\n const newD = Big(getD(aValue, newTokenBalance.toFixed(), newVUsdBalance.toFixed()));\n return newD.minus(oldD).toFixed();\n}\n\nexport function vUsdToWithdrawalAmount(lpAmount: string): string {\n const lpAmountSP = convertFloatAmountToInt(lpAmount, SYSTEM_PRECISION);\n return Big(lpAmountSP).round().toFixed();\n}\n", "[\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_router\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"_a\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"contract ERC20\",\n \"name\": \"_token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint16\",\n \"name\": \"_feeShareBP\",\n \"type\": \"uint16\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"_balanceRatioMinBP\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"lpName\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"lpSymbol\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Approval\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"user\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Deposit\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"previousOwner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"OwnershipTransferred\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"user\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"RewardsClaimed\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"recipient\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"vUsdAmount\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"fee\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"SwappedFromVUsd\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"vUsdAmount\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"fee\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"SwappedToVUsd\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Transfer\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"user\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Withdraw\",\n \"type\": \"event\"\n },\n {\n \"stateMutability\": \"payable\",\n \"type\": \"fallback\"\n },\n {\n \"inputs\": [],\n \"name\": \"a\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"accRewardPerShareP\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"adjustTotalLpAmount\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"adminFeeAmount\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"adminFeeShareBP\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"allowance\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"approve\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"balanceOf\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"balanceRatioMinBP\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"canDeposit\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"canWithdraw\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"claimAdminFee\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"claimRewards\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"d\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"decimals\",\n \"outputs\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"\",\n \"type\": \"uint8\"\n }\n ],\n \"stateMutability\": \"pure\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"subtractedValue\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"decreaseAllowance\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"deposit\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"feeShareBP\",\n \"outputs\": [\n {\n \"internalType\": \"uint16\",\n \"name\": \"\",\n \"type\": \"uint16\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getPrice\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"x\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getY\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"addedValue\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"increaseAllowance\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"name\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"owner\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"user\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"pendingReward\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"renounceOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"reserves\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"router\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_adminFeeShareBP\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"setAdminFeeShare\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_balanceRatioMinBP\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"setBalanceRatioMinBP\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint16\",\n \"name\": \"_feeShareBP\",\n \"type\": \"uint16\"\n }\n ],\n \"name\": \"setFeeShare\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_router\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"setRouter\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_stopAuthority\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"setStopAuthority\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"startDeposit\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"startWithdraw\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"stopDeposit\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"stopWithdraw\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"user\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"receiveAmountMin\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bool\",\n \"name\": \"zeroFee\",\n \"type\": \"bool\"\n }\n ],\n \"name\": \"swapFromVUsd\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"user\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bool\",\n \"name\": \"zeroFee\",\n \"type\": \"bool\"\n }\n ],\n \"name\": \"swapToVUsd\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"symbol\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"token\",\n \"outputs\": [\n {\n \"internalType\": \"contract ERC20\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"tokenBalance\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"totalSupply\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transfer\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transferFrom\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"transferOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"user\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"userRewardDebt\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"vUsdBalance\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountLp\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"withdraw\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"stateMutability\": \"payable\",\n \"type\": \"receive\"\n }\n]\n", "import { Big } from \"big.js\";\nimport { FeePaymentMethod, TxFeeParams } from \"../../../models\";\nimport { PoolInfo, TokenWithChainDetails } from \"../../../tokens-info\";\nimport { convertIntAmountToFloat, getEarned } from \"../../../utils/calculation\";\nimport { SYSTEM_PRECISION } from \"../../../utils/calculation/constants\";\n\nexport interface ApproveParams {\n /**\n * The token info\n */\n token: TokenWithChainDetails;\n\n /**\n * The address of the token owner who is granting permission to use tokens\n */\n owner: string;\n\n /**\n * The integer amount of tokens to approve.\n * Optional.\n * The maximum amount by default.\n */\n amount?: string | number | Big;\n}\n\nexport interface GetAllowanceParams {\n token: TokenWithChainDetails;\n owner: string;\n gasFeePaymentMethod?: FeePaymentMethod;\n}\n\nexport type GetAllowanceParamsDto = GetAllowanceParams;\n\nexport interface CheckAllowanceParams extends GetAllowanceParams {\n /**\n * The float amount of tokens to check the allowance.\n */\n amount: string | number | Big;\n}\n\nexport interface LiquidityPoolsParams {\n /**\n * The account address to operate tokens with.\n */\n accountAddress: string;\n /**\n * {@link TokenWithChainDetails |The token info object} of operation token.\n */\n token: TokenWithChainDetails;\n\n txFeeParams?: TxFeeParams;\n}\n\nexport interface LiquidityPoolsParamsWithAmount extends LiquidityPoolsParams {\n /**\n * The float amount of tokens.\n */\n amount: string;\n}\n\nexport interface UserBalanceInfoDTO {\n lpAmount: string;\n rewardDebt: string;\n}\n\nexport interface UserBalanceInfo extends UserBalanceInfoDTO {\n userLiquidity: string;\n\n earned(poolInfo: PoolInfo, decimals?: number): string;\n}\n\nexport class UserBalance implements UserBalanceInfo {\n lpAmount: string;\n rewardDebt: string;\n\n constructor(userInfo: UserBalanceInfoDTO) {\n this.lpAmount = userInfo.lpAmount;\n this.rewardDebt = userInfo.rewardDebt;\n }\n\n get userLiquidity(): string {\n return convertIntAmountToFloat(this.lpAmount, SYSTEM_PRECISION).toFixed();\n }\n\n earned(poolInfo: PoolInfo, decimals?: number): string {\n const earned = getEarned(this.lpAmount, this.rewardDebt, poolInfo.accRewardPerShareP, poolInfo.p);\n if (decimals) {\n return convertIntAmountToFloat(earned, decimals).toFixed();\n }\n return earned;\n }\n}\n", "import { ChainType } from \"../../../chains/chain.enums\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { PoolInfo, TokenWithChainDetails } from \"../../../tokens-info\";\nimport { RawTransaction } from \"../../models\";\nimport { LiquidityPoolsParams, LiquidityPoolsParamsWithAmount, UserBalanceInfo } from \"./pool.model\";\n\nexport abstract class ChainPoolService {\n abstract chainType: ChainType;\n abstract api: AllbridgeCoreClient;\n\n abstract getUserBalanceInfo(accountAddress: string, token: TokenWithChainDetails): Promise<UserBalanceInfo>;\n\n abstract getPoolInfoFromChain(token: TokenWithChainDetails): Promise<PoolInfo>;\n\n abstract buildRawTransactionDeposit(params: LiquidityPoolsParamsWithAmount): Promise<RawTransaction>;\n\n abstract buildRawTransactionWithdraw(params: LiquidityPoolsParamsWithAmount): Promise<RawTransaction>;\n\n abstract buildRawTransactionClaimRewards(params: LiquidityPoolsParams): Promise<RawTransaction>;\n}\n", "import Web3 from \"web3\";\nimport { AbiItem } from \"web3-utils\";\nimport { ChainType } from \"../../../chains/chain.enums\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { PoolInfo, TokenWithChainDetails } from \"../../../tokens-info\";\nimport { calculatePoolInfoImbalance } from \"../../../utils/calculation\";\nimport { promiseWithTimeout, promiseWithTimeoutAndRetries } from \"../../../utils/utils\";\nimport { RawTransaction } from \"../../models\";\nimport PoolAbi from \"../../models/abi/Pool.json\";\nimport { Pool as PoolContract } from \"../../models/abi/types/Pool\";\nimport { BaseContract } from \"../../models/abi/types/types\";\nimport { promisify } from \"../../utils\";\nimport {\n ChainPoolService,\n LiquidityPoolsParams,\n LiquidityPoolsParamsWithAmount,\n UserBalance,\n UserBalanceInfo,\n} from \"../models\";\n\nexport class EvmPoolService extends ChainPoolService {\n chainType: ChainType.EVM = ChainType.EVM;\n private P = 52;\n\n constructor(public web3: Web3, public api: AllbridgeCoreClient) {\n super();\n }\n\n async getUserBalanceInfo(accountAddress: string, token: TokenWithChainDetails): Promise<UserBalanceInfo> {\n let userBalanceInfo;\n try {\n userBalanceInfo = await promiseWithTimeout(\n this.getUserBalanceInfoByBatch(accountAddress, token),\n `Cannot get UserBalanceInfo for ${token.name} on ${token.chainSymbol}`,\n 5000\n );\n } catch (err) {\n userBalanceInfo = await promiseWithTimeoutAndRetries(\n () => this.getUserBalanceInfoPerProperty(accountAddress, token),\n `Cannot get UserBalanceInfo for ${token.name} on ${token.chainSymbol}`,\n 5,\n 2000\n );\n }\n return userBalanceInfo;\n }\n\n private async getUserBalanceInfoByBatch(\n accountAddress: string,\n token: TokenWithChainDetails\n ): Promise<UserBalanceInfo> {\n const batch = new this.web3.BatchRequest();\n const contract = new this.web3.eth.Contract(PoolAbi as AbiItem[], token.poolAddress);\n const arr = [\"userRewardDebt\", \"balanceOf\"].map((methodName) =>\n promisify((cb: any) => batch.add(contract.methods[methodName](accountAddress).call.request({}, cb)))()\n );\n batch.execute();\n const [rewardDebt, lpAmount] = await Promise.all(arr);\n return new UserBalance({ lpAmount, rewardDebt });\n }\n\n private async getUserBalanceInfoPerProperty(\n accountAddress: string,\n token: TokenWithChainDetails\n ): Promise<UserBalanceInfo> {\n const rewardDebt = await this.getPoolContract(token.poolAddress).methods.userRewardDebt(accountAddress).call();\n const lpAmount = await this.getPoolContract(token.poolAddress).methods.balanceOf(accountAddress).call();\n return new UserBalance({ lpAmount, rewardDebt });\n }\n\n async getPoolInfoFromChain(token: TokenWithChainDetails): Promise<PoolInfo> {\n let poolInfo;\n try {\n poolInfo = await promiseWithTimeout(\n this.getPoolInfoByBatch(token),\n `Cannot get PoolInfo for ${token.name} on ${token.chainSymbol}`,\n 5000\n );\n } catch (err) {\n poolInfo = await promiseWithTimeoutAndRetries(\n () => this.getPoolInfoPerProperty(token),\n `Cannot get PoolInfo for ${token.name} on ${token.chainSymbol}`,\n 5,\n 2000\n );\n }\n return poolInfo;\n }\n\n private async getPoolInfoByBatch(token: TokenWithChainDetails): Promise<PoolInfo> {\n const batch = new this.web3.BatchRequest();\n const contract = new this.web3.eth.Contract(PoolAbi as AbiItem[], token.poolAddress);\n const arr = [\"a\", \"d\", \"tokenBalance\", \"vUsdBalance\", \"totalSupply\", \"accRewardPerShareP\"].map((methodName) =>\n promisify((cb: any) => batch.add(contract.methods[methodName]().call.request({}, cb)))()\n );\n batch.execute();\n\n const [aValue, dValue, tokenBalance, vUsdBalance, totalLpAmount, accRewardPerShareP] = await Promise.all(arr);\n const tokenBalanceStr = tokenBalance.toString();\n const vUsdBalanceStr = vUsdBalance.toString();\n const imbalance = calculatePoolInfoImbalance({ tokenBalance: tokenBalanceStr, vUsdBalance: vUsdBalanceStr });\n return {\n aValue: aValue.toString(),\n dValue: dValue.toString(),\n tokenBalance: tokenBalanceStr,\n vUsdBalance: vUsdBalanceStr,\n totalLpAmount: totalLpAmount.toString(),\n accRewardPerShareP: accRewardPerShareP.toString(),\n p: this.P,\n imbalance,\n };\n }\n\n private async getPoolInfoPerProperty(token: TokenWithChainDetails): Promise<PoolInfo> {\n const poolContract = this.getPoolContract(token.poolAddress);\n\n const aValue = await poolContract.methods.a().call();\n const dValue = await poolContract.methods.d().call();\n const tokenBalance = await poolContract.methods.tokenBalance().call();\n const vUsdBalance = await poolContract.methods.vUsdBalance().call();\n const totalLpAmount = await poolContract.methods.totalSupply().call();\n const accRewardPerShareP = await poolContract.methods.accRewardPerShareP().call();\n\n const imbalance = calculatePoolInfoImbalance({ tokenBalance, vUsdBalance });\n\n return {\n aValue,\n dValue,\n tokenBalance,\n vUsdBalance,\n totalLpAmount,\n accRewardPerShareP,\n p: this.P,\n imbalance,\n };\n }\n\n async buildRawTransactionDeposit(params: LiquidityPoolsParamsWithAmount): Promise<RawTransaction> {\n return Promise.resolve({\n ...this.buildTxParams(params),\n data: this.getPoolContract(params.token.poolAddress).methods.deposit(params.amount).encodeABI(),\n });\n }\n\n async buildRawTransactionWithdraw(params: LiquidityPoolsParamsWithAmount): Promise<RawTransaction> {\n return Promise.resolve({\n ...this.buildTxParams(params),\n data: this.getPoolContract(params.token.poolAddress).methods.withdraw(params.amount).encodeABI(),\n });\n }\n\n async buildRawTransactionClaimRewards(params: LiquidityPoolsParams): Promise<RawTransaction> {\n return Promise.resolve({\n ...this.buildTxParams(params),\n data: this.getPoolContract(params.token.poolAddress).methods.claimRewards().encodeABI(),\n });\n }\n\n buildTxParams(params: LiquidityPoolsParams) {\n return {\n from: params.accountAddress,\n to: params.token.poolAddress,\n value: \"0\",\n };\n }\n\n private getContract<T extends BaseContract>(abiItem: AbiItem[], contractAddress: string): T {\n return new this.web3.eth.Contract(abiItem, contractAddress) as any;\n }\n\n private getPoolContract(contractAddress: string): PoolContract {\n return this.getContract<PoolContract>(PoolAbi as AbiItem[], contractAddress);\n }\n}\n", "import { NodeRpcUrlsConfig } from \"..\";\nimport { AllbridgeCoreClient } from \"../../client/core-api/core-client-base\";\nimport { AllbridgeCoreSdkOptions } from \"../../index\";\nimport { convertFloatAmountToInt } from \"../../utils/calculation\";\nimport { SYSTEM_PRECISION } from \"../../utils/calculation/constants\";\nimport { validateAmountDecimals, validateAmountGtZero } from \"../../utils/utils\";\nimport { Provider, RawTransaction } from \"../models\";\nimport { TokenService } from \"../token\";\nimport { ApproveParams, LiquidityPoolsParams, LiquidityPoolsParamsWithAmount } from \"./models\";\nimport { getChainPoolService } from \"./index\";\n\nexport interface RawPoolTransactionBuilder {\n /**\n * Creates a Raw Transaction for approving tokens usage by the bridge\n * @param provider - will be used to access the network\n * @param approveData\n */\n approve(provider: Provider, approveData: ApproveParams): Promise<RawTransaction>;\n /**\n * Creates a Raw Transaction for approving tokens usage by the bridge\n * @param approveData\n */\n approve(approveData: ApproveParams): Promise<RawTransaction>;\n\n /**\n * Creates a Raw Transaction for depositing tokens to Liquidity pools\n * @param params\n * @param provider - will be used to access the network\n */\n deposit(params: LiquidityPoolsParamsWithAmount, provider?: Provider): Promise<RawTransaction>;\n\n /**\n * Creates a Raw Transaction for withdrawing tokens from Liquidity pools\n * @param params\n * @param provider - will be used to access the network\n */\n withdraw(params: LiquidityPoolsParamsWithAmount, provider?: Provider): Promise<RawTransaction>;\n\n /**\n * Creates a Raw Transaction for claiming rewards from Liquidity pools\n * @param params\n * @param provider - will be used to access the network\n */\n claimRewards(params: LiquidityPoolsParams, provider?: Provider): Promise<RawTransaction>;\n}\n\nexport class DefaultRawPoolTransactionBuilder implements RawPoolTransactionBuilder {\n constructor(\n private api: AllbridgeCoreClient,\n private nodeRpcUrlsConfig: NodeRpcUrlsConfig,\n private params: AllbridgeCoreSdkOptions,\n private tokenService: TokenService\n ) {}\n\n async approve(a: Provider | ApproveParams, b?: ApproveParams): Promise<RawTransaction> {\n if (b) {\n const provider = a as Provider;\n const approveData: ApproveParams = b;\n return this.tokenService.buildRawTransactionApprove(\n {\n ...approveData,\n spender: approveData.token.poolAddress,\n },\n provider\n );\n } else {\n const approveData: ApproveParams = a as ApproveParams;\n return this.tokenService.buildRawTransactionApprove({\n ...approveData,\n spender: approveData.token.poolAddress,\n });\n }\n }\n\n async deposit(params: LiquidityPoolsParamsWithAmount, provider?: Provider): Promise<RawTransaction> {\n validateAmountGtZero(params.amount);\n validateAmountDecimals(\"amount\", params.amount, params.token.decimals);\n params.amount = convertFloatAmountToInt(params.amount, params.token.decimals).toFixed();\n return getChainPoolService(\n params.token.chainSymbol,\n this.api,\n this.nodeRpcUrlsConfig,\n this.params,\n provider\n ).buildRawTransactionDeposit(params);\n }\n\n async withdraw(params: LiquidityPoolsParamsWithAmount, provider?: Provider): Promise<RawTransaction> {\n validateAmountGtZero(params.amount);\n validateAmountDecimals(\"amount\", params.amount, params.token.decimals);\n params.amount = convertFloatAmountToInt(params.amount, SYSTEM_PRECISION).toFixed();\n return getChainPoolService(\n params.token.chainSymbol,\n this.api,\n this.nodeRpcUrlsConfig,\n this.params,\n provider\n ).buildRawTransactionWithdraw(params);\n }\n\n async claimRewards(params: LiquidityPoolsParams, provider?: Provider): Promise<RawTransaction> {\n return getChainPoolService(\n params.token.chainSymbol,\n this.api,\n this.nodeRpcUrlsConfig,\n this.params,\n provider\n ).buildRawTransactionClaimRewards(params);\n }\n}\n", "import { AnchorProvider, BN, Program, Provider, Spl, web3 } from \"@project-serum/anchor\";\nimport { Connection, PublicKey, TransactionInstruction } from \"@solana/web3.js\";\nimport { ChainType } from \"../../../chains/chain.enums\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { PoolInfo, TokenWithChainDetails } from \"../../../tokens-info\";\nimport { calculatePoolInfoImbalance } from \"../../../utils/calculation\";\nimport { RawTransaction } from \"../../models\";\nimport { Bridge as BridgeType, IDL as bridgeIdl } from \"../../models/sol/types/bridge\";\nimport { getTokenAccountData } from \"../../utils/sol\";\nimport {\n getAssociatedAccount,\n getAuthorityAccount,\n getBridgeTokenAccount,\n getConfigAccount,\n getUserDepositAccount,\n} from \"../../utils/sol/accounts\";\nimport { addUnitLimitAndUnitPriceToTx } from \"../../utils/sol/compute-budget\";\nimport { LiquidityPoolsParams, LiquidityPoolsParamsWithAmount, UserBalance, UserBalanceInfo } from \"../models\";\nimport { ChainPoolService } from \"../models/pool\";\n\ninterface LPAccounts {\n mint: PublicKey;\n user: PublicKey;\n config: PublicKey;\n pool: PublicKey;\n bridgeAuthority: PublicKey;\n userDeposit: PublicKey;\n userToken: PublicKey;\n bridgeToken: PublicKey;\n}\n\ninterface LPTransactionData {\n accounts: LPAccounts;\n preInstructions: TransactionInstruction[];\n}\n\nexport class SolanaPoolService extends ChainPoolService {\n chainType: ChainType.SOLANA = ChainType.SOLANA;\n private P = 48;\n\n constructor(public solanaRpcUrl: string, public api: AllbridgeCoreClient) {\n super();\n }\n\n async getUserBalanceInfo(accountAddress: string, token: TokenWithChainDetails): Promise<UserBalanceInfo> {\n const provider = this.buildAnchorProvider(accountAddress);\n const bridge = this.getBridge(token.bridgeAddress, provider);\n const poolAccount = new PublicKey(token.poolAddress);\n const poolAccountInfo = await bridge.account.pool.fetch(poolAccount);\n try {\n const userDepositAccount = await getUserDepositAccount(\n new PublicKey(accountAddress),\n poolAccountInfo.mint,\n bridge.programId\n );\n const { lpAmount, rewardDebt } = await bridge.account.userDeposit.fetch(userDepositAccount);\n return new UserBalance({\n lpAmount: lpAmount.toString(),\n rewardDebt: rewardDebt.toString(),\n });\n } catch (e) {\n return new UserBalance({ lpAmount: \"0\", rewardDebt: \"0\" });\n }\n }\n\n async getPoolInfoFromChain(token: TokenWithChainDetails): Promise<PoolInfo> {\n const provider = this.buildAnchorProvider(token.bridgeAddress);\n const pool = await this.getBridge(token.bridgeAddress, provider).account.pool.fetch(token.poolAddress);\n const vUsdBalance = pool.vUsdBalance.toString();\n const tokenBalance = pool.tokenBalance.toString();\n const imbalance = calculatePoolInfoImbalance({ tokenBalance, vUsdBalance });\n return {\n dValue: pool.d.toString(),\n aValue: pool.a.toString(),\n totalLpAmount: pool.totalLpAmount.toString(),\n vUsdBalance,\n tokenBalance,\n accRewardPerShareP: pool.accRewardPerShareP.toString(),\n p: this.P,\n imbalance,\n };\n }\n\n async buildRawTransactionDeposit(params: LiquidityPoolsParamsWithAmount): Promise<RawTransaction> {\n const { bridge, accounts, preInstructions } = await this.prepareDataForTransaction(params);\n\n const tx = await bridge.methods\n .deposit(new BN(params.amount))\n .accounts(accounts)\n .preInstructions(preInstructions)\n .transaction();\n tx.recentBlockhash = (\n await this.buildAnchorProvider(params.accountAddress).connection.getLatestBlockhash()\n ).blockhash;\n tx.feePayer = new PublicKey(params.accountAddress);\n await addUnitLimitAndUnitPriceToTx(tx, params.txFeeParams, this.solanaRpcUrl);\n return tx;\n }\n\n async buildRawTransactionWithdraw(params: LiquidityPoolsParamsWithAmount): Promise<RawTransaction> {\n const { bridge, accounts, preInstructions } = await this.prepareDataForTransaction(params);\n\n const tx = await bridge.methods\n .withdraw(new BN(params.amount))\n .accounts(accounts)\n .preInstructions(preInstructions)\n .transaction();\n tx.recentBlockhash = (\n await this.buildAnchorProvider(params.accountAddress).connection.getLatestBlockhash()\n ).blockhash;\n tx.feePayer = new PublicKey(params.accountAddress);\n await addUnitLimitAndUnitPriceToTx(tx, params.txFeeParams, this.solanaRpcUrl);\n return tx;\n }\n\n async buildRawTransactionClaimRewards(params: LiquidityPoolsParams): Promise<RawTransaction> {\n const { bridge, accounts, preInstructions } = await this.prepareDataForTransaction(params);\n\n const tx = await bridge.methods.claimRewards().accounts(accounts).preInstructions(preInstructions).transaction();\n tx.recentBlockhash = (\n await this.buildAnchorProvider(params.accountAddress).connection.getLatestBlockhash()\n ).blockhash;\n tx.feePayer = new PublicKey(params.accountAddress);\n await addUnitLimitAndUnitPriceToTx(tx, params.txFeeParams, this.solanaRpcUrl);\n return tx;\n }\n\n private async prepareDataForTransaction(params: LiquidityPoolsParams) {\n const provider = this.buildAnchorProvider(params.accountAddress);\n const bridge = this.getBridge(params.token.bridgeAddress, provider);\n\n const { accounts, preInstructions } = await this._getLPTransactionData(\n bridge,\n params.token.poolAddress,\n params.accountAddress,\n provider\n );\n return { bridge, accounts, preInstructions };\n }\n\n private getBridge(bridgeAddress: string, provider: Provider): Program<BridgeType> {\n return new Program<BridgeType>(bridgeIdl, bridgeAddress, provider);\n }\n\n private buildAnchorProvider(accountAddress: string): Provider {\n const connection = new Connection(this.solanaRpcUrl, \"confirmed\");\n\n const publicKey = new PublicKey(accountAddress);\n\n return new AnchorProvider(\n connection,\n // @ts-expect-error enough wallet for fetch actions\n { publicKey: publicKey },\n {\n preflightCommitment: \"confirmed\",\n commitment: \"confirmed\",\n }\n );\n }\n\n private async _getLPTransactionData(\n bridge: Program<BridgeType>,\n poolAddress: string,\n account: string,\n provider: Provider\n ): Promise<LPTransactionData> {\n const user = new PublicKey(account);\n const configAccount = await getConfigAccount(bridge.programId);\n const bridgeAuthority = await getAuthorityAccount(bridge.programId);\n const poolAccount = new PublicKey(poolAddress);\n const poolAccountInfo = await bridge.account.pool.fetch(poolAccount);\n const tokenMintAccount = poolAccountInfo.mint;\n const userToken = await getAssociatedAccount(user, tokenMintAccount);\n const bridgeTokenAccount = await getBridgeTokenAccount(tokenMintAccount, bridge.programId);\n const userDepositAccount = await getUserDepositAccount(user, tokenMintAccount, bridge.programId);\n\n const preInstructions: TransactionInstruction[] = [\n web3.ComputeBudgetProgram.setComputeUnitLimit({\n units: 1000000,\n }),\n ];\n\n try {\n await getTokenAccountData(userToken, provider);\n } catch (e) {\n const associatedProgram = Spl.associatedToken(provider);\n const createUserTokenInstruction: TransactionInstruction = await associatedProgram.methods\n .create()\n .accounts({\n mint: tokenMintAccount,\n owner: user,\n associatedAccount: userToken,\n })\n .instruction();\n preInstructions.push(createUserTokenInstruction);\n }\n\n try {\n await bridge.account.userDeposit.fetch(userDepositAccount);\n } catch (error) {\n const instruction: TransactionInstruction = await bridge.methods\n .initDepositAccount()\n .accounts({\n mint: tokenMintAccount,\n user,\n userDeposit: userDepositAccount,\n })\n .instruction();\n preInstructions.push(instruction);\n }\n\n const accounts: LPAccounts = {\n mint: tokenMintAccount,\n user,\n config: configAccount,\n pool: poolAccount,\n bridgeAuthority: bridgeAuthority,\n userDeposit: userDepositAccount,\n userToken,\n bridgeToken: bridgeTokenAccount,\n };\n\n return { accounts, preInstructions };\n }\n}\n", "import { contract } from \"@stellar/stellar-sdk\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { AllbridgeCoreSdkOptions, ChainSymbol, ChainType } from \"../../../index\";\nimport {\n LiquidityPoolsParams,\n LiquidityPoolsParamsWithAmount,\n PoolInfo,\n SdkError,\n TokenWithChainDetails,\n UserBalanceInfo,\n} from \"../../../models\";\nimport { calculatePoolInfoImbalance } from \"../../../utils/calculation\";\nimport { NodeRpcUrlsConfig } from \"../../index\";\nimport { RawTransaction } from \"../../models\";\nimport { PoolContract } from \"../../models/srb/pool-contract\";\nimport { ChainPoolService, UserBalance } from \"../models\";\nimport ContractClientOptions = contract.ClientOptions;\n\nexport class SrbPoolService extends ChainPoolService {\n chainType: ChainType.SRB = ChainType.SRB;\n private P = 48;\n\n constructor(\n readonly nodeRpcUrlsConfig: NodeRpcUrlsConfig,\n readonly params: AllbridgeCoreSdkOptions,\n readonly api: AllbridgeCoreClient\n ) {\n super();\n }\n\n async getUserBalanceInfo(accountAddress: string, token: TokenWithChainDetails): Promise<UserBalanceInfo> {\n const poolContract = this.getContract(token.poolAddress);\n const result = (await poolContract.get_user_deposit({ user: accountAddress })).result;\n if (result.isErr()) {\n throw new SdkError();\n }\n const userDeposit = result.unwrap();\n return new UserBalance({\n lpAmount: userDeposit.lp_amount.toString(),\n rewardDebt: userDeposit.reward_debt.toString(),\n });\n }\n\n async getPoolInfoFromChain(token: TokenWithChainDetails): Promise<PoolInfo> {\n const poolContract = this.getContract(token.poolAddress);\n const result = (await poolContract.get_pool()).result;\n if (result.isErr()) {\n throw new SdkError();\n }\n const pool = result.unwrap();\n return {\n aValue: pool.a.toString(),\n accRewardPerShareP: pool.acc_reward_per_share_p.toString(),\n dValue: pool.d.toString(),\n tokenBalance: pool.token_balance.toString(),\n p: this.P,\n totalLpAmount: pool.total_lp_amount.toString(),\n vUsdBalance: pool.v_usd_balance.toString(),\n imbalance: calculatePoolInfoImbalance({\n tokenBalance: pool.token_balance.toString(),\n vUsdBalance: pool.v_usd_balance.toString(),\n }),\n };\n }\n\n async buildRawTransactionDeposit(params: LiquidityPoolsParamsWithAmount): Promise<RawTransaction> {\n const poolContract = this.getContract(params.token.poolAddress, params.accountAddress);\n return (\n await poolContract.deposit({\n sender: params.accountAddress,\n amount: BigInt(params.amount),\n })\n ).toXDR();\n }\n\n async buildRawTransactionWithdraw(params: LiquidityPoolsParamsWithAmount): Promise<RawTransaction> {\n const poolContract = this.getContract(params.token.poolAddress, params.accountAddress);\n return (\n await poolContract.withdraw({\n sender: params.accountAddress,\n amount_lp: BigInt(params.amount),\n })\n ).toXDR();\n }\n\n async buildRawTransactionClaimRewards(params: LiquidityPoolsParams): Promise<RawTransaction> {\n const poolContract = this.getContract(params.token.poolAddress, params.accountAddress);\n return (\n await poolContract.claim_rewards({\n sender: params.accountAddress,\n })\n ).toXDR();\n }\n\n private getContract(address: string, sender?: string): PoolContract {\n const config: ContractClientOptions = {\n publicKey: sender,\n contractId: address,\n networkPassphrase: this.params.sorobanNetworkPassphrase,\n rpcUrl: this.nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.SRB),\n };\n return new PoolContract(config);\n }\n}\n", "import { contract } from \"@stellar/stellar-sdk\";\nimport u128 = contract.u128;\nimport u32 = contract.u32;\nimport AssembledTransaction = contract.AssembledTransaction;\nimport Result = contract.Result;\nimport ContractSpec = contract.Spec;\nimport ContractClient = contract.Client;\nimport ContractClientOptions = contract.ClientOptions;\n\nexport interface SwappedFromVUsd {\n amount: u128;\n fee: u128;\n recipient: string;\n token: string;\n vusd_amount: u128;\n}\n\nexport interface SwappedToVUsd {\n amount: u128;\n fee: u128;\n sender: string;\n token: string;\n vusd_amount: u128;\n}\n\nexport interface Deposit {\n amount: u128;\n user: string;\n}\n\nexport interface Withdraw {\n amount: u128;\n user: string;\n}\n\nexport interface RewardsClaimed {\n amount: u128;\n user: string;\n}\n\nexport type Bridge = readonly [string];\nexport interface DataKey {\n tag: \"UserDeposit\";\n values: readonly [string];\n}\n\nexport interface Pool {\n a: u128;\n acc_reward_per_share_p: u128;\n admin_fee_amount: u128;\n admin_fee_share_bp: u128;\n balance_ratio_min_bp: u128;\n can_deposit: boolean;\n can_withdraw: boolean;\n d: u128;\n decimals: u32;\n fee_share_bp: u128;\n reserves: u128;\n token: string;\n token_balance: u128;\n total_lp_amount: u128;\n v_usd_balance: u128;\n}\n\nexport interface UserDeposit {\n lp_amount: u128;\n reward_debt: u128;\n}\n\nexport type Admin = readonly [string];\nexport type GasOracleAddress = readonly [string];\nexport type GasUsage = readonly [Map<u32, u128>];\nexport type NativeToken = readonly [string];\nexport type StopAuthority = readonly [string];\nexport const Errors = {\n 0: { message: \"\" },\n 1: { message: \"\" },\n 2: { message: \"\" },\n 3: { message: \"\" },\n 4: { message: \"\" },\n 5: { message: \"\" },\n 6: { message: \"\" },\n 7: { message: \"\" },\n 8: { message: \"\" },\n 9: { message: \"\" },\n 10: { message: \"\" },\n 11: { message: \"\" },\n 12: { message: \"\" },\n 103: { message: \"\" },\n 104: { message: \"\" },\n 105: { message: \"\" },\n 106: { message: \"\" },\n 107: { message: \"\" },\n 108: { message: \"\" },\n 109: { message: \"\" },\n 203: { message: \"\" },\n 204: { message: \"\" },\n 205: { message: \"\" },\n 206: { message: \"\" },\n 207: { message: \"\" },\n 208: { message: \"\" },\n 209: { message: \"\" },\n 210: { message: \"\" },\n 211: { message: \"\" },\n 212: { message: \"\" },\n 214: { message: \"\" },\n 215: { message: \"\" },\n 216: { message: \"\" },\n 217: { message: \"\" },\n 218: { message: \"\" },\n 300: { message: \"\" },\n 301: { message: \"\" },\n 302: { message: \"\" },\n 303: { message: \"\" },\n 400: { message: \"\" },\n};\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\nexport interface PoolContract {\n /**\n * Construct and simulate a initialize transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n initialize: (\n {\n admin,\n bridge,\n a,\n token,\n fee_share_bp,\n balance_ratio_min_bp,\n admin_fee_share_bp,\n }: {\n admin: string;\n bridge: string;\n a: u128;\n token: string;\n fee_share_bp: u128;\n balance_ratio_min_bp: u128;\n admin_fee_share_bp: u128;\n },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a deposit transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n deposit: (\n { sender, amount }: { sender: string; amount: u128 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a withdraw transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n withdraw: (\n { sender, amount_lp }: { sender: string; amount_lp: u128 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a swap_to_v_usd transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n swap_to_v_usd: (\n { user, amount, zero_fee }: { user: string; amount: u128; zero_fee: boolean },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<u128>>>;\n\n /**\n * Construct and simulate a swap_from_v_usd transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n swap_from_v_usd: (\n {\n user,\n vusd_amount,\n receive_amount_min,\n zero_fee,\n }: {\n user: string;\n vusd_amount: u128;\n receive_amount_min: u128;\n zero_fee: boolean;\n },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<u128>>>;\n\n /**\n * Construct and simulate a claim_rewards transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n claim_rewards: (\n { sender }: { sender: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a set_fee_share transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * `admin`\n */\n set_fee_share: (\n { fee_share_bp }: { fee_share_bp: u128 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a adjust_total_lp_amount transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n adjust_total_lp_amount: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a set_balance_ratio_min_bp transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n set_balance_ratio_min_bp: (\n { balance_ratio_min_bp }: { balance_ratio_min_bp: u128 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a stop_deposit transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n stop_deposit: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a start_deposit transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n start_deposit: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a stop_withdraw transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n stop_withdraw: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a start_withdraw transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n start_withdraw: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a set_stop_authority transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n set_stop_authority: (\n { stop_authority }: { stop_authority: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a set_bridge transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n set_bridge: (\n { bridge }: { bridge: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a set_admin transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n set_admin: (\n { new_admin }: { new_admin: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a set_admin_fee_share transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n set_admin_fee_share: (\n { admin_fee_share_bp }: { admin_fee_share_bp: u128 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a claim_admin_fee transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n claim_admin_fee: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a pending_reward transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * `view`\n */\n pending_reward: (\n { user }: { user: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<u128>>>;\n\n /**\n * Construct and simulate a get_pool transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n get_pool: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<Pool>>>;\n\n /**\n * Construct and simulate a get_admin transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n get_admin: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<string>>>;\n\n /**\n * Construct and simulate a get_stop_authority transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n get_stop_authority: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<string>>>;\n\n /**\n * Construct and simulate a get_bridge transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n get_bridge: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<string>>>;\n\n /**\n * Construct and simulate a get_user_deposit transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n get_user_deposit: (\n { user }: { user: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<UserDeposit>>>;\n\n /**\n * Construct and simulate a upgrade transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n upgrade: (\n { new_wasm_hash }: { new_wasm_hash: Buffer },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n}\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\nexport class PoolContract extends ContractClient {\n constructor(public readonly options: ContractClientOptions) {\n super(\n new ContractSpec([\n \"AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABwAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAZicmlkZ2UAAAAAABMAAAAAAAAAAWEAAAAAAAAKAAAAAAAAAAV0b2tlbgAAAAAAABMAAAAAAAAADGZlZV9zaGFyZV9icAAAAAoAAAAAAAAAFGJhbGFuY2VfcmF0aW9fbWluX2JwAAAACgAAAAAAAAASYWRtaW5fZmVlX3NoYXJlX2JwAAAAAAAKAAAAAQAAA+kAAAPtAAAAAAAAAAM=\",\n \"AAAAAAAAAAAAAAAHZGVwb3NpdAAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAAId2l0aGRyYXcAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAACWFtb3VudF9scAAAAAAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==\",\n \"AAAAAAAAAAAAAAANc3dhcF90b192X3VzZAAAAAAAAAMAAAAAAAAABHVzZXIAAAATAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACHplcm9fZmVlAAAAAQAAAAEAAAPpAAAACgAAAAM=\",\n \"AAAAAAAAAAAAAAAPc3dhcF9mcm9tX3ZfdXNkAAAAAAQAAAAAAAAABHVzZXIAAAATAAAAAAAAAAt2dXNkX2Ftb3VudAAAAAAKAAAAAAAAABJyZWNlaXZlX2Ftb3VudF9taW4AAAAAAAoAAAAAAAAACHplcm9fZmVlAAAAAQAAAAEAAAPpAAAACgAAAAM=\",\n \"AAAAAAAAAAAAAAANY2xhaW1fcmV3YXJkcwAAAAAAAAEAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAdgYWRtaW5gAAAAAA1zZXRfZmVlX3NoYXJlAAAAAAAAAQAAAAAAAAAMZmVlX3NoYXJlX2JwAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAAWYWRqdXN0X3RvdGFsX2xwX2Ftb3VudAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAAYc2V0X2JhbGFuY2VfcmF0aW9fbWluX2JwAAAAAQAAAAAAAAAUYmFsYW5jZV9yYXRpb19taW5fYnAAAAAKAAAAAQAAA+kAAAPtAAAAAAAAAAM=\",\n \"AAAAAAAAAAAAAAAMc3RvcF9kZXBvc2l0AAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAANc3RhcnRfZGVwb3NpdAAAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==\",\n \"AAAAAAAAAAAAAAANc3RvcF93aXRoZHJhdwAAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==\",\n \"AAAAAAAAAAAAAAAOc3RhcnRfd2l0aGRyYXcAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==\",\n \"AAAAAAAAAAAAAAASc2V0X3N0b3BfYXV0aG9yaXR5AAAAAAABAAAAAAAAAA5zdG9wX2F1dGhvcml0eQAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAAKc2V0X2JyaWRnZQAAAAAAAQAAAAAAAAAGYnJpZGdlAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=\",\n \"AAAAAAAAAAAAAAAJc2V0X2FkbWluAAAAAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAATc2V0X2FkbWluX2ZlZV9zaGFyZQAAAAABAAAAAAAAABJhZG1pbl9mZWVfc2hhcmVfYnAAAAAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==\",\n \"AAAAAAAAAAAAAAAPY2xhaW1fYWRtaW5fZmVlAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==\",\n \"AAAAAAAAAAZgdmlld2AAAAAAAA5wZW5kaW5nX3Jld2FyZAAAAAAAAQAAAAAAAAAEdXNlcgAAABMAAAABAAAD6QAAAAoAAAAD\",\n \"AAAAAAAAAAAAAAAIZ2V0X3Bvb2wAAAAAAAAAAQAAA+kAAAfQAAAABFBvb2wAAAAD\",\n \"AAAAAAAAAAAAAAAJZ2V0X2FkbWluAAAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=\",\n \"AAAAAAAAAAAAAAASZ2V0X3N0b3BfYXV0aG9yaXR5AAAAAAAAAAAAAQAAA+kAAAATAAAAAw==\",\n \"AAAAAAAAAAAAAAAKZ2V0X2JyaWRnZQAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=\",\n \"AAAAAAAAAAAAAAAQZ2V0X3VzZXJfZGVwb3NpdAAAAAEAAAAAAAAABHVzZXIAAAATAAAAAQAAA+kAAAfQAAAAC1VzZXJEZXBvc2l0AAAAAAM=\",\n \"AAAAAAAAAAAAAAAHdXBncmFkZQAAAAABAAAAAAAAAA1uZXdfd2FzbV9oYXNoAAAAAAAD7gAAACAAAAABAAAD6QAAA+0AAAAAAAAAAw==\",\n \"AAAAAQAAAAAAAAAAAAAAD1N3YXBwZWRGcm9tVlVzZAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAA2ZlZQAAAAAKAAAAAAAAAAlyZWNpcGllbnQAAAAAAAATAAAAAAAAAAV0b2tlbgAAAAAAABMAAAAAAAAAC3Z1c2RfYW1vdW50AAAAAAo=\",\n \"AAAAAQAAAAAAAAAAAAAADVN3YXBwZWRUb1ZVc2QAAAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAA2ZlZQAAAAAKAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABXRva2VuAAAAAAAAEwAAAAAAAAALdnVzZF9hbW91bnQAAAAACg==\",\n \"AAAAAQAAAAAAAAAAAAAAB0RlcG9zaXQAAAAAAgAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAR1c2VyAAAAEw==\",\n \"AAAAAQAAAAAAAAAAAAAACFdpdGhkcmF3AAAAAgAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAR1c2VyAAAAEw==\",\n \"AAAAAQAAAAAAAAAAAAAADlJld2FyZHNDbGFpbWVkAAAAAAACAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAABHVzZXIAAAAT\",\n \"AAAAAQAAAAAAAAAAAAAABkJyaWRnZQAAAAAAAQAAAAAAAAABMAAAAAAAABM=\",\n \"AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAQAAAAEAAAAAAAAAC1VzZXJEZXBvc2l0AAAAAAEAAAAT\",\n \"AAAAAQAAAAAAAAAAAAAABFBvb2wAAAAPAAAAAAAAAAFhAAAAAAAACgAAAAAAAAAWYWNjX3Jld2FyZF9wZXJfc2hhcmVfcAAAAAAACgAAAAAAAAAQYWRtaW5fZmVlX2Ftb3VudAAAAAoAAAAAAAAAEmFkbWluX2ZlZV9zaGFyZV9icAAAAAAACgAAAAAAAAAUYmFsYW5jZV9yYXRpb19taW5fYnAAAAAKAAAAAAAAAAtjYW5fZGVwb3NpdAAAAAABAAAAAAAAAAxjYW5fd2l0aGRyYXcAAAABAAAAAAAAAAFkAAAAAAAACgAAAAAAAAAIZGVjaW1hbHMAAAAEAAAAAAAAAAxmZWVfc2hhcmVfYnAAAAAKAAAAAAAAAAhyZXNlcnZlcwAAAAoAAAAAAAAABXRva2VuAAAAAAAAEwAAAAAAAAANdG9rZW5fYmFsYW5jZQAAAAAAAAoAAAAAAAAAD3RvdGFsX2xwX2Ftb3VudAAAAAAKAAAAAAAAAA12X3VzZF9iYWxhbmNlAAAAAAAACg==\",\n \"AAAAAQAAAAAAAAAAAAAAC1VzZXJEZXBvc2l0AAAAAAIAAAAAAAAACWxwX2Ftb3VudAAAAAAAAAoAAAAAAAAAC3Jld2FyZF9kZWJ0AAAAAAo=\",\n \"AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=\",\n \"AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==\",\n \"AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==\",\n \"AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT\",\n \"AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==\",\n \"AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAKAAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAYVG9rZW5JbnN1ZmZpY2llbnRCYWxhbmNlAAAACgAAAAAAAAAKQ2FzdEZhaWxlZAAAAAAACwAAAAAAAAAMVTI1Nk92ZXJmbG93AAAADAAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ\",\n ]),\n options\n );\n }\n public readonly fromJSON = {\n initialize: this.txFromJSON<Result<void>>,\n deposit: this.txFromJSON<Result<void>>,\n withdraw: this.txFromJSON<Result<void>>,\n swap_to_v_usd: this.txFromJSON<Result<u128>>,\n swap_from_v_usd: this.txFromJSON<Result<u128>>,\n claim_rewards: this.txFromJSON<Result<void>>,\n set_fee_share: this.txFromJSON<Result<void>>,\n adjust_total_lp_amount: this.txFromJSON<Result<void>>,\n set_balance_ratio_min_bp: this.txFromJSON<Result<void>>,\n stop_deposit: this.txFromJSON<Result<void>>,\n start_deposit: this.txFromJSON<Result<void>>,\n stop_withdraw: this.txFromJSON<Result<void>>,\n start_withdraw: this.txFromJSON<Result<void>>,\n set_stop_authority: this.txFromJSON<Result<void>>,\n set_bridge: this.txFromJSON<Result<void>>,\n set_admin: this.txFromJSON<Result<void>>,\n set_admin_fee_share: this.txFromJSON<Result<void>>,\n claim_admin_fee: this.txFromJSON<Result<void>>,\n pending_reward: this.txFromJSON<Result<u128>>,\n get_pool: this.txFromJSON<Result<Pool>>,\n get_admin: this.txFromJSON<Result<string>>,\n get_stop_authority: this.txFromJSON<Result<string>>,\n get_bridge: this.txFromJSON<Result<string>>,\n get_user_deposit: this.txFromJSON<Result<UserDeposit>>,\n upgrade: this.txFromJSON<Result<void>>,\n };\n}\n", "// @ts-expect-error import tron\nimport TronWeb from \"tronweb\";\nimport Web3 from \"web3\";\nimport { AbiItem } from \"web3-utils\";\nimport { ChainType } from \"../../../chains/chain.enums\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { SdkError } from \"../../../exceptions\";\nimport { PoolInfo, TokenWithChainDetails } from \"../../../tokens-info\";\nimport { calculatePoolInfoImbalance } from \"../../../utils/calculation\";\nimport { tronAddressToEthAddress } from \"../../bridge/utils\";\nimport { RawTransaction, SmartContractMethodParameter } from \"../../models\";\nimport PoolAbi from \"../../models/abi/Pool.json\";\nimport { promisify } from \"../../utils\";\nimport { LiquidityPoolsParams, LiquidityPoolsParamsWithAmount, UserBalance, UserBalanceInfo } from \"../models\";\nimport { ChainPoolService } from \"../models/pool\";\n\nexport class TronPoolService extends ChainPoolService {\n chainType: ChainType.TRX = ChainType.TRX;\n private P = 52;\n private web3: Web3 | undefined;\n\n constructor(public tronWeb: typeof TronWeb, public api: AllbridgeCoreClient, tronJsonRpc: string | undefined) {\n super();\n if (tronJsonRpc) {\n this.web3 = new Web3(tronJsonRpc);\n }\n }\n\n async getUserBalanceInfo(accountAddress: string, token: TokenWithChainDetails): Promise<UserBalanceInfo> {\n let userBalanceInfo;\n if (this.web3) {\n try {\n userBalanceInfo = await this.getUserBalanceInfoByBatch(this.web3, accountAddress, token);\n } catch (err) {\n userBalanceInfo = await this.getUserBalanceInfoPerProperty(accountAddress, token);\n }\n } else {\n userBalanceInfo = await this.getUserBalanceInfoPerProperty(accountAddress, token);\n }\n return userBalanceInfo;\n }\n\n private async getUserBalanceInfoByBatch(\n web3: Web3,\n accountAddress: string,\n token: TokenWithChainDetails\n ): Promise<UserBalanceInfo> {\n const batch = new web3.BatchRequest();\n const contract = new web3.eth.Contract(PoolAbi as AbiItem[], tronAddressToEthAddress(token.poolAddress));\n const userAccount = tronAddressToEthAddress(accountAddress);\n const arr = [\"userRewardDebt\", \"balanceOf\"].map((methodName) =>\n promisify((cb: any) => batch.add(contract.methods[methodName](userAccount).call.request({}, cb)))()\n );\n batch.execute();\n const [rewardDebt, lpAmount] = await Promise.all(arr);\n return new UserBalance({ lpAmount, rewardDebt });\n }\n\n private async getUserBalanceInfoPerProperty(\n accountAddress: string,\n token: TokenWithChainDetails\n ): Promise<UserBalanceInfo> {\n if (!this.tronWeb.defaultAddress.base58) {\n this.tronWeb.setAddress(accountAddress);\n }\n const contract = await this.getContract(token.poolAddress);\n const rewardDebt = (await contract.methods.userRewardDebt(accountAddress).call()).toString();\n const lpAmount = (await contract.methods.balanceOf(accountAddress).call()).toString();\n return new UserBalance({ lpAmount, rewardDebt });\n }\n\n async getPoolInfoFromChain(token: TokenWithChainDetails): Promise<PoolInfo> {\n let poolInfo;\n if (this.web3) {\n try {\n poolInfo = await this.getPoolInfoByBatch(this.web3, token);\n } catch (err) {\n poolInfo = await this.getPoolInfoPerProperty(token);\n }\n } else {\n poolInfo = await this.getPoolInfoPerProperty(token);\n }\n return poolInfo;\n }\n\n private async getPoolInfoByBatch(web3: Web3, token: TokenWithChainDetails): Promise<PoolInfo> {\n const batch = new web3.BatchRequest();\n const contract = new web3.eth.Contract(PoolAbi as AbiItem[], tronAddressToEthAddress(token.poolAddress));\n const arr = [\"a\", \"d\", \"tokenBalance\", \"vUsdBalance\", \"totalSupply\", \"accRewardPerShareP\"].map((methodName) =>\n promisify((cb: any) => batch.add(contract.methods[methodName]().call.request({}, cb)))()\n );\n batch.execute();\n\n const [aValue, dValue, tokenBalance, vUsdBalance, totalLpAmount, accRewardPerShareP] = await Promise.all(arr);\n const tokenBalanceStr = tokenBalance.toString();\n const vUsdBalanceStr = vUsdBalance.toString();\n const imbalance = calculatePoolInfoImbalance({ tokenBalance: tokenBalanceStr, vUsdBalance: vUsdBalanceStr });\n return {\n aValue: aValue.toString(),\n dValue: dValue.toString(),\n tokenBalance: tokenBalanceStr,\n vUsdBalance: vUsdBalanceStr,\n totalLpAmount: totalLpAmount.toString(),\n accRewardPerShareP: accRewardPerShareP.toString(),\n p: this.P,\n imbalance,\n };\n }\n\n private async getPoolInfoPerProperty(token: TokenWithChainDetails): Promise<PoolInfo> {\n if (!this.tronWeb.defaultAddress.base58) {\n this.tronWeb.setAddress(token.poolAddress);\n }\n const poolContract = await this.getContract(token.poolAddress);\n const [aValue, dValue, tokenBalance, vUsdBalance, totalLpAmount, accRewardPerShareP] = await Promise.all([\n poolContract.methods.a().call(),\n poolContract.methods.d().call(),\n poolContract.methods.tokenBalance().call(),\n poolContract.methods.vUsdBalance().call(),\n poolContract.methods.totalSupply().call(),\n poolContract.methods.accRewardPerShareP().call(),\n ]);\n const tokenBalanceStr = tokenBalance.toString();\n const vUsdBalanceStr = vUsdBalance.toString();\n const imbalance = calculatePoolInfoImbalance({ tokenBalance: tokenBalanceStr, vUsdBalance: vUsdBalanceStr });\n return {\n aValue: aValue.toString(),\n dValue: dValue.toString(),\n tokenBalance: tokenBalanceStr,\n vUsdBalance: vUsdBalanceStr,\n totalLpAmount: totalLpAmount.toString(),\n accRewardPerShareP: accRewardPerShareP.toString(),\n p: this.P,\n imbalance,\n };\n }\n\n buildRawTransactionDeposit(params: LiquidityPoolsParamsWithAmount): Promise<RawTransaction> {\n const { amount, accountAddress } = params;\n\n const parameter = [{ type: \"uint256\", value: amount }];\n const methodSignature = \"deposit(uint256)\";\n\n return this.buildRawTransaction(params.token.poolAddress, methodSignature, parameter, \"0\", accountAddress);\n }\n\n buildRawTransactionWithdraw(params: LiquidityPoolsParamsWithAmount): Promise<RawTransaction> {\n const { amount, accountAddress } = params;\n\n const parameter = [{ type: \"uint256\", value: amount }];\n const methodSignature = \"withdraw(uint256)\";\n\n return this.buildRawTransaction(params.token.poolAddress, methodSignature, parameter, \"0\", accountAddress);\n }\n\n buildRawTransactionClaimRewards(params: LiquidityPoolsParams): Promise<RawTransaction> {\n const { accountAddress } = params;\n\n const parameter: SmartContractMethodParameter[] = [];\n const methodSignature = \"claimRewards()\";\n\n return this.buildRawTransaction(params.token.poolAddress, methodSignature, parameter, \"0\", accountAddress);\n }\n\n private async buildRawTransaction(\n contractAddress: string,\n methodSignature: string,\n parameter: SmartContractMethodParameter[],\n value: string,\n fromAddress: string\n ): Promise<RawTransaction> {\n const transactionObject = await this.tronWeb.transactionBuilder.triggerSmartContract(\n contractAddress,\n methodSignature,\n {\n callValue: value,\n },\n parameter,\n fromAddress\n );\n if (!transactionObject?.result?.result) {\n throw new SdkError(\"Unknown error: \" + JSON.stringify(transactionObject, null, 2));\n }\n return transactionObject.transaction;\n }\n\n private async getContract(contractAddress: string): Promise<any> {\n return await this.tronWeb.contract(PoolAbi, contractAddress);\n }\n}\n", "import { Big, BigSource } from \"big.js\";\nimport { PoolInfo, Token } from \"../../tokens-info\";\nimport { fromSystemPrecision, getY, toSystemPrecision } from \"./index\";\n\nexport interface SwapPoolInfo {\n decimals: number;\n feeShare: string;\n poolInfo: PoolInfo;\n}\n\nexport interface SwapAndBridgeCalculationData {\n swapToVUsdCalcResult: SwapToVUsdCalcResult;\n swapFromVUsdCalcResult: SwapFromVUsdCalcResult;\n}\n\nexport interface SwapToVUsdCalcResult {\n bridgeFeeInTokenPrecision: string;\n amountIncludingCommissionInSystemPrecision: string;\n amountExcludingCommissionInSystemPrecision: string;\n}\nexport interface SwapFromVUsdCalcResult {\n bridgeFeeInTokenPrecision: string;\n amountIncludingCommissionInTokenPrecision: string;\n amountExcludingCommissionInTokenPrecision: string;\n}\n\nexport function swapAndBridgeFeeCalculation(\n amountInTokenPrecision: string,\n sourcePoolInfo: SwapPoolInfo,\n destinationPoolInfo: SwapPoolInfo\n): SwapAndBridgeCalculationData {\n const swapToVUsdCalcResult = swapToVUsd(\n amountInTokenPrecision,\n { decimals: sourcePoolInfo.decimals, feeShare: sourcePoolInfo.feeShare },\n sourcePoolInfo.poolInfo\n );\n const swapFromVUsdCalcResult = swapFromVUsd(\n swapToVUsdCalcResult.amountIncludingCommissionInSystemPrecision,\n { decimals: destinationPoolInfo.decimals, feeShare: destinationPoolInfo.feeShare },\n destinationPoolInfo.poolInfo\n );\n return { swapToVUsdCalcResult, swapFromVUsdCalcResult };\n}\n\nexport function swapAndBridgeFeeCalculationReverse(\n amountInTokenPrecision: string,\n sourcePoolInfo: SwapPoolInfo,\n destinationPoolInfo: SwapPoolInfo\n): SwapAndBridgeCalculationData {\n const swapToVUsdCalcResult = swapToVUsdReverse(\n amountInTokenPrecision,\n { decimals: destinationPoolInfo.decimals, feeShare: destinationPoolInfo.feeShare },\n destinationPoolInfo.poolInfo\n );\n const swapFromVUsdCalcResult = swapFromVUsdReverse(\n swapToVUsdCalcResult.amountIncludingCommissionInSystemPrecision,\n { decimals: sourcePoolInfo.decimals, feeShare: sourcePoolInfo.feeShare },\n sourcePoolInfo.poolInfo\n );\n return {\n swapToVUsdCalcResult,\n swapFromVUsdCalcResult,\n };\n}\n\nfunction swapToVUsd(\n amount: BigSource,\n { feeShare, decimals }: Pick<Token, \"feeShare\" | \"decimals\">,\n poolInfo: Omit<PoolInfo, \"p\" | \"imbalance\">\n): SwapToVUsdCalcResult {\n const amountValue = Big(amount);\n const fee = amountValue.times(feeShare);\n const amountWithoutFee = amountValue.minus(fee);\n return {\n bridgeFeeInTokenPrecision: fee.round().toFixed(),\n amountIncludingCommissionInSystemPrecision: calcSwapToVUsd(toSystemPrecision(amountWithoutFee, decimals), poolInfo),\n amountExcludingCommissionInSystemPrecision: calcSwapToVUsd(toSystemPrecision(amountValue, decimals), poolInfo),\n };\n}\n\nfunction calcSwapToVUsd(amountInSystemPrecision: Big, poolInfo: Omit<PoolInfo, \"p\" | \"imbalance\">): string {\n if (amountInSystemPrecision.eq(0)) {\n return \"0\";\n }\n const tokenBalance = Big(poolInfo.tokenBalance).plus(amountInSystemPrecision);\n const vUsdNewAmount = getY(tokenBalance.toFixed(), poolInfo.aValue, poolInfo.dValue);\n return Big(poolInfo.vUsdBalance).minus(vUsdNewAmount).round().toFixed();\n}\n\nfunction swapFromVUsd(\n amount: BigSource,\n { feeShare, decimals }: Pick<Token, \"feeShare\" | \"decimals\">,\n poolInfo: Omit<PoolInfo, \"imbalance\">\n): SwapFromVUsdCalcResult {\n if (Big(amount).eq(0)) {\n return {\n bridgeFeeInTokenPrecision: \"0\",\n amountIncludingCommissionInTokenPrecision: \"0\",\n amountExcludingCommissionInTokenPrecision: \"0\",\n };\n }\n const amountValue = Big(amount);\n const vUsdBalance = amountValue.plus(poolInfo.vUsdBalance);\n const newAmount = getY(vUsdBalance, poolInfo.aValue, poolInfo.dValue);\n const result = fromSystemPrecision(Big(poolInfo.tokenBalance).minus(newAmount), decimals);\n const fee = Big(result).times(feeShare);\n const resultWithoutFee = Big(result).minus(fee).round();\n return {\n bridgeFeeInTokenPrecision: fee.round().toFixed(),\n amountIncludingCommissionInTokenPrecision: resultWithoutFee.toFixed(),\n amountExcludingCommissionInTokenPrecision: result.toFixed(),\n };\n}\n\nfunction swapToVUsdReverse(\n amountInTokenPrecision: BigSource,\n { feeShare, decimals }: Pick<Token, \"feeShare\" | \"decimals\">,\n poolInfo: PoolInfo\n): SwapToVUsdCalcResult {\n const reversedFeeShare = Big(feeShare).div(Big(1).minus(feeShare));\n const fee = Big(amountInTokenPrecision).times(reversedFeeShare);\n const amountWithFee = Big(amountInTokenPrecision).plus(fee);\n return {\n bridgeFeeInTokenPrecision: fee.round().toFixed(),\n amountIncludingCommissionInSystemPrecision: calcSwapToVUsdReverse(\n toSystemPrecision(amountWithFee, decimals),\n poolInfo\n ),\n amountExcludingCommissionInSystemPrecision: calcSwapToVUsdReverse(\n toSystemPrecision(amountInTokenPrecision, decimals),\n poolInfo\n ),\n };\n}\n\nfunction calcSwapToVUsdReverse(amountInSystemPrecision: Big, poolInfo: PoolInfo): string {\n const tokenBalance = Big(poolInfo.tokenBalance).minus(amountInSystemPrecision);\n const vUsdNewAmount = getY(tokenBalance.toFixed(), poolInfo.aValue, poolInfo.dValue);\n return Big(vUsdNewAmount).minus(poolInfo.vUsdBalance).round().toFixed();\n}\n\nfunction swapFromVUsdReverse(\n amountInSystemPrecision: BigSource,\n { feeShare, decimals }: Pick<Token, \"feeShare\" | \"decimals\">,\n poolInfo: PoolInfo\n): SwapFromVUsdCalcResult {\n if (Big(amountInSystemPrecision).eq(0)) {\n return {\n bridgeFeeInTokenPrecision: \"0\",\n amountIncludingCommissionInTokenPrecision: \"0\",\n amountExcludingCommissionInTokenPrecision: \"0\",\n };\n }\n const vUsdNewAmount = Big(poolInfo.vUsdBalance).minus(amountInSystemPrecision);\n const tokenBalance = getY(vUsdNewAmount.toFixed(), poolInfo.aValue, poolInfo.dValue);\n const inSystemPrecision = Big(tokenBalance).minus(poolInfo.tokenBalance);\n const amountWithoutFee = fromSystemPrecision(inSystemPrecision.toFixed(), decimals);\n const reversedFeeShare = Big(feeShare).div(Big(1).minus(feeShare));\n const fee = Big(amountWithoutFee).times(reversedFeeShare);\n const amount = Big(amountWithoutFee).plus(fee);\n return {\n bridgeFeeInTokenPrecision: fee.round().toFixed(),\n amountIncludingCommissionInTokenPrecision: amount.round().toFixed(),\n amountExcludingCommissionInTokenPrecision: amountWithoutFee.toFixed(),\n };\n}\n", "import { Big } from \"big.js\";\nimport { PoolInfo, TokenWithChainDetails } from \"../../tokens-info\";\nimport { convertIntAmountToFloat, fromSystemPrecision, swapFromVUsd, swapToVUsd } from \"./index\";\n\nexport interface SendAmountDetails {\n sourceLPSwap: AmountImpact;\n destLPSwap: AmountImpact;\n}\n\nexport interface AmountImpact {\n fee: string;\n swap: string;\n}\n\nexport function getSendAmountDetails(\n amountInTokenPrecision: string,\n sourceToken: TokenWithChainDetails,\n sourcePool: PoolInfo,\n destToken: TokenWithChainDetails,\n destPool: PoolInfo\n): SendAmountDetails {\n const vUsd = swapToVUsd(amountInTokenPrecision, sourceToken, sourcePool);\n const vUsdInTokenPrecision = fromSystemPrecision(vUsd, sourceToken.decimals);\n const result = swapFromVUsd(vUsd, destToken, destPool);\n\n const swapToFeeInt = Big(amountInTokenPrecision).times(sourceToken.feeShare);\n const swapFromFeeInt = Big(result).div(Big(1).minus(destToken.feeShare)).minus(result);\n return {\n sourceLPSwap: {\n fee: convertIntAmountToFloat(swapToFeeInt, sourceToken.decimals)\n .neg()\n .round(sourceToken.decimals, Big.roundUp)\n .toFixed(),\n swap: convertIntAmountToFloat(\n Big(amountInTokenPrecision).minus(vUsdInTokenPrecision).minus(swapToFeeInt),\n sourceToken.decimals\n )\n .neg()\n .round(sourceToken.decimals, Big.roundUp)\n .toFixed(),\n },\n destLPSwap: {\n fee: convertIntAmountToFloat(swapFromFeeInt, destToken.decimals)\n .neg()\n .round(destToken.decimals, Big.roundUp)\n .toFixed(),\n swap: convertIntAmountToFloat(\n fromSystemPrecision(vUsd, destToken.decimals).minus(result).minus(swapFromFeeInt),\n destToken.decimals\n )\n .neg()\n .round(destToken.decimals, Big.roundUp)\n .toFixed(),\n },\n };\n}\n", "import { Connection, PublicKey, TransactionMessage, VersionedTransaction } from \"@solana/web3.js\";\nimport { ChainSymbol } from \"../../chains/chain.enums\";\nimport { AllbridgeCoreSdkOptions, SdkError } from \"../../index\";\nimport { NodeRpcUrlsConfig } from \"../../services\";\nimport { fetchAddressLookupTableAccountsFromTx } from \"./utils\";\n\n/**\n * Contains usefully Solana methods\n */\nexport interface SolUtils {\n /**\n * Add memo to solana's transaction\n * @param transaction transaction to add memo\n * @param memo memo to add (28 char max)\n */\n addMemoToTx(transaction: VersionedTransaction, memo: string): Promise<void>;\n}\n\nexport class DefaultSolUtils implements SolUtils {\n constructor(readonly nodeRpcUrlsConfig: NodeRpcUrlsConfig, readonly params: AllbridgeCoreSdkOptions) {}\n\n async addMemoToTx(transaction: VersionedTransaction, memo: string): Promise<void> {\n if (memo.length > 28) {\n throw new SdkError(\"InvalidArgumentException memo cannot be more than 28 characters\");\n }\n const connection = new Connection(this.nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.SOL), \"confirmed\");\n const addressLookupTableAccounts = await fetchAddressLookupTableAccountsFromTx(transaction, connection);\n const message = TransactionMessage.decompile(transaction.message, {\n addressLookupTableAccounts: addressLookupTableAccounts,\n });\n const lastInstruction = message.instructions[message.instructions.length - 1];\n if (!lastInstruction?.keys) {\n throw new SdkError(\"Last instruction or its keys are invalid.\");\n }\n\n lastInstruction.keys.push({\n pubkey: new PublicKey(Buffer.from(memo)),\n isSigner: false,\n isWritable: false,\n });\n transaction.message = message.compileToV0Message(addressLookupTableAccounts);\n }\n}\n", "import {\n Asset as StellarAsset,\n BASE_FEE,\n Horizon,\n Operation,\n Operation as StellarOperation,\n SorobanRpc,\n TimeoutInfinite,\n Transaction,\n TransactionBuilder,\n TransactionBuilder as StellarTransactionBuilder,\n contract,\n} from \"@stellar/stellar-sdk\";\nimport { ChainSymbol } from \"../../chains/chain.enums\";\nimport { AllbridgeCoreSdkOptions, SdkError } from \"../../index\";\nimport { NodeRpcUrlsConfig } from \"../../services\";\nimport { TokenContract } from \"../../services/models/srb/token-contract\";\nimport { withExponentialBackoff } from \"../utils\";\n\nimport ContractClientOptions = contract.ClientOptions;\nimport BalanceLineAsset = Horizon.HorizonApi.BalanceLineAsset;\n\n/**\n * Contains usefully Soroban methods\n */\nexport interface SrbUtils {\n /**\n * Build change Trust line Tx\n * @param params see {@link TrustLineParams}\n * @returns xdr Tx\n */\n buildChangeTrustLineXdrTx(params: TrustLineParams): Promise<string>;\n\n /**\n * Get Balance Line information if exists\n * @param sender\n * @param tokenAddress\n */\n getBalanceLine(sender: string, tokenAddress: string): Promise<Horizon.HorizonApi.BalanceLineAsset | undefined>;\n\n /**\n * Submit tx\n * @param xdrTx\n */\n submitTransactionStellar(xdrTx: string): Promise<Horizon.HorizonApi.SubmitTransactionResponse>;\n\n /**\n * Simulate and check if Restore needed\n * @param xdrTx - restore\n * @param sourceAccount\n * @returns xdrTx restore transaction if it required after check\n */\n simulateAndCheckRestoreTxRequiredSoroban(xdrTx: string, sourceAccount: string): Promise<string | undefined>;\n\n /**\n * Submit tx\n * @param xdrTx\n */\n sendTransactionSoroban(xdrTx: string): Promise<SorobanRpc.Api.SendTransactionResponse>;\n\n /**\n * Confirm tx\n */\n confirmTx(hash: string, secondsToWait?: number): Promise<SorobanRpc.Api.GetTransactionResponse>;\n}\n\nexport interface TrustLineParams {\n /**\n * Float amount of tokens, default is Number.MAX_SAFE_INTEGER\n */\n limit?: string;\n sender: string;\n tokenAddress: string;\n}\n\nconst FEE = 100;\nconst SEND_TRANSACTION_TIMEOUT = 180;\n\nexport class DefaultSrbUtils implements SrbUtils {\n constructor(readonly nodeRpcUrlsConfig: NodeRpcUrlsConfig, readonly params: AllbridgeCoreSdkOptions) {}\n\n async buildChangeTrustLineXdrTx(params: TrustLineParams): Promise<string> {\n const stellar = new Horizon.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.STLR));\n const stellarAccount = await stellar.loadAccount(params.sender);\n const tokenContract = this.getContract(TokenContract, params.tokenAddress);\n const tokenName = (await tokenContract.name()).result;\n const [symbol, srbTokenAddress] = tokenName.split(\":\");\n if (symbol === undefined || srbTokenAddress === undefined) {\n throw new SdkError(`Invalid token name format. Expected format 'symbol:srbTokenAddress'`);\n }\n const asset = new StellarAsset(symbol, srbTokenAddress);\n const changeTrust = StellarOperation.changeTrust({\n asset: asset,\n limit: params.limit,\n });\n\n return new StellarTransactionBuilder(stellarAccount, {\n fee: FEE.toString(10),\n networkPassphrase: this.params.sorobanNetworkPassphrase,\n })\n .addOperation(changeTrust)\n .setTimeout(SEND_TRANSACTION_TIMEOUT)\n .build()\n .toXDR();\n }\n\n async getBalanceLine(sender: string, tokenAddress: string): Promise<Horizon.HorizonApi.BalanceLineAsset | undefined> {\n const tokenContract = this.getContract(TokenContract, tokenAddress);\n const tokenName = (await tokenContract.name()).result;\n const [symbol, srbTokenAddress] = tokenName.split(\":\");\n const nodeRpcUrl = this.nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.STLR);\n const stellar = new Horizon.Server(nodeRpcUrl);\n const stellarAccount = await stellar.loadAccount(sender);\n const balanceInfo = stellarAccount.balances;\n\n return balanceInfo.find(\n (balance): balance is BalanceLineAsset =>\n (balance.asset_type === \"credit_alphanum4\" || balance.asset_type === \"credit_alphanum12\") &&\n balance.asset_code == symbol &&\n balance.asset_issuer == srbTokenAddress\n );\n }\n\n async submitTransactionStellar(xdrTx: string): Promise<Horizon.HorizonApi.SubmitTransactionResponse> {\n const stellar = new Horizon.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.STLR));\n const transaction = StellarTransactionBuilder.fromXDR(\n xdrTx,\n this.nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.STLR)\n );\n return await stellar.submitTransaction(transaction);\n }\n\n async simulateAndCheckRestoreTxRequiredSoroban(xdrTx: string, sourceAccount: string): Promise<string | undefined> {\n const server = new SorobanRpc.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.SRB));\n const account = await server.getAccount(sourceAccount);\n const transaction = TransactionBuilder.fromXDR(xdrTx, this.params.sorobanNetworkPassphrase) as Transaction;\n const simulation = await server.simulateTransaction(transaction);\n if (SorobanRpc.Api.isSimulationRestore(simulation)) {\n return new TransactionBuilder(account, {\n fee: (+BASE_FEE + +simulation.restorePreamble.minResourceFee).toString(),\n networkPassphrase: this.params.sorobanNetworkPassphrase,\n })\n .setSorobanData(simulation.restorePreamble.transactionData.build())\n .addOperation(Operation.restoreFootprint({}))\n .setTimeout(TimeoutInfinite)\n .build()\n .toXDR();\n }\n return undefined;\n }\n\n async sendTransactionSoroban(xdrTx: string): Promise<SorobanRpc.Api.SendTransactionResponse> {\n const server = new SorobanRpc.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.SRB));\n const transaction = TransactionBuilder.fromXDR(xdrTx, this.params.sorobanNetworkPassphrase) as Transaction;\n return server.sendTransaction(transaction);\n }\n\n async confirmTx(hash: string, secondsToWait = 15): Promise<SorobanRpc.Api.GetTransactionResponse> {\n const server = new SorobanRpc.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.SRB));\n const getTransactionResponseAll = await withExponentialBackoff(\n () => server.getTransaction(hash),\n (resp) => resp.status === SorobanRpc.Api.GetTransactionStatus.NOT_FOUND,\n secondsToWait\n );\n\n if (getTransactionResponseAll.length === 0) {\n throw new SdkError(\"No transaction responses found.\");\n }\n\n const lastResponse = getTransactionResponseAll[getTransactionResponseAll.length - 1];\n if (!lastResponse) {\n throw new SdkError(\"Unexpected error: last response is undefined.\");\n }\n\n return lastResponse;\n }\n\n private getContract<T>(contract: new (args: ContractClientOptions) => T, address: string): T {\n const config: ContractClientOptions = {\n contractId: address,\n networkPassphrase: this.params.sorobanNetworkPassphrase,\n rpcUrl: this.nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.SRB),\n };\n return new contract(config);\n }\n}\n", "import { contract } from \"@stellar/stellar-sdk\";\nimport u32 = contract.u32;\nimport i128 = contract.i128;\nimport AssembledTransaction = contract.AssembledTransaction;\nimport ContractSpec = contract.Spec;\nimport ContractClient = contract.Client;\nimport ContractClientOptions = contract.ClientOptions;\nexport const Errors = {};\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\nexport interface TokenContract {\n /**\n * Construct and simulate a allowance transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Returns the allowance for `spender` to transfer from `from`.\n *\n * The amount returned is the amount that spender is allowed to transfer\n * out of from's balance. When the spender transfers amounts, the allowance\n * will be reduced by the amount transfered.\n *\n * # Arguments\n *\n * * `from` - The address holding the balance of tokens to be drawn from.\n * * `spender` - The address spending the tokens held by `from`.\n */\n allowance: (\n { from, spender }: { from: string; spender: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<i128>>;\n\n /**\n * Construct and simulate a authorized transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Returns true if `id` is authorized to use its balance.\n *\n * # Arguments\n *\n * * `id` - The address for which token authorization is being checked.\n */\n authorized: (\n { id }: { id: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<boolean>>;\n\n /**\n * Construct and simulate a approve transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Set the allowance by `amount` for `spender` to transfer/burn from\n * `from`.\n *\n * The amount set is the amount that spender is approved to transfer out of\n * from's balance. The spender will be allowed to transfer amounts, and\n * when an amount is transferred the allowance will be reduced by the\n * amount transfered.\n *\n * # Arguments\n *\n * * `from` - The address holding the balance of tokens to be drawn from.\n * * `spender` - The address being authorized to spend the tokens held by\n * `from`.\n * * `amount` - The tokens to be made available to `spender`.\n * * `expiration_ledger` - The ledger number where this allowance expires. Cannot\n * be less than the current ledger number unless the amount is being set to 0.\n * An expired entry (where expiration_ledger < the current ledger number)\n * should be treated as a 0 amount allowance.\n *\n * # Events\n *\n * Emits an event with topics `[\"approve\", from: Address,\n * spender: Address], data = [amount: i128, expiration_ledger: u32]`\n */\n approve: (\n {\n from,\n spender,\n amount,\n expiration_ledger,\n }: {\n from: string;\n spender: string;\n amount: i128;\n expiration_ledger: u32;\n },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<null>>;\n\n /**\n * Construct and simulate a balance transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Returns the balance of `id`.\n *\n * # Arguments\n *\n * * `id` - The address for which a balance is being queried. If the\n * address has no existing balance, returns 0.\n */\n balance: (\n { id }: { id: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<i128>>;\n\n /**\n * Construct and simulate a burn transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Burn `amount` from `from`.\n *\n * Reduces from's balance by the amount, without transferring the balance\n * to another holder's balance.\n *\n * # Arguments\n *\n * * `from` - The address holding the balance of tokens which will be\n * burned from.\n * * `amount` - The amount of tokens to be burned.\n *\n * # Events\n *\n * Emits an event with topics `[\"burn\", from: Address], data = [amount:\n * i128]`\n */\n burn: (\n { from, amount }: { from: string; amount: i128 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<null>>;\n\n /**\n * Construct and simulate a burn_from transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Burn `amount` from `from`, consuming the allowance of `spender`.\n *\n * Reduces from's balance by the amount, without transferring the balance\n * to another holder's balance.\n *\n * The spender will be allowed to burn the amount from from's balance, if\n * the amount is less than or equal to the allowance that the spender has\n * on the from's balance. The spender's allowance on from's balance will be\n * reduced by the amount.\n *\n * # Arguments\n *\n * * `spender` - The address authorizing the burn, and having its allowance\n * consumed during the burn.\n * * `from` - The address holding the balance of tokens which will be\n * burned from.\n * * `amount` - The amount of tokens to be burned.\n *\n * # Events\n *\n * Emits an event with topics `[\"burn\", from: Address], data = [amount:\n * i128]`\n */\n burn_from: (\n { spender, from, amount }: { spender: string; from: string; amount: i128 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<null>>;\n\n /**\n * Construct and simulate a clawback transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Clawback `amount` from `from` account. `amount` is burned in the\n * clawback process.\n *\n * # Arguments\n *\n * * `from` - The address holding the balance from which the clawback will\n * take tokens.\n * * `amount` - The amount of tokens to be clawed back.\n *\n * # Events\n *\n * Emits an event with topics `[\"clawback\", admin: Address, to: Address],\n * data = [amount: i128]`\n */\n clawback: (\n { from, amount }: { from: string; amount: i128 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<null>>;\n\n /**\n * Construct and simulate a decimals transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Returns the number of decimals used to represent amounts of this token.\n *\n * # Panics\n *\n * If the contract has not yet been initialized.\n */\n decimals: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<u32>>;\n\n /**\n * Construct and simulate a mint transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Mints `amount` to `to`.\n *\n * # Arguments\n *\n * * `to` - The address which will receive the minted tokens.\n * * `amount` - The amount of tokens to be minted.\n *\n * # Events\n *\n * Emits an event with topics `[\"mint\", admin: Address, to: Address], data\n * = [amount: i128]`\n */\n mint: (\n { to, amount }: { to: string; amount: i128 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<null>>;\n\n /**\n * Construct and simulate a name transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Returns the name for this token.\n *\n * # Panics\n *\n * If the contract has not yet been initialized.\n */\n name: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<string>>;\n\n /**\n * Construct and simulate a set_admin transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Sets the administrator to the specified address `new_admin`.\n *\n * # Arguments\n *\n * * `new_admin` - The address which will henceforth be the administrator\n * of this token contract.\n *\n * # Events\n *\n * Emits an event with topics `[\"set_admin\", admin: Address], data =\n * [new_admin: Address]`\n */\n set_admin: (\n { new_admin }: { new_admin: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<null>>;\n\n /**\n * Construct and simulate a admin transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Returns the admin of the contract.\n *\n * # Panics\n *\n * If the admin is not set.\n */\n admin: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<string>>;\n\n /**\n * Construct and simulate a set_authorized transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Sets whether the account is authorized to use its balance. If\n * `authorized` is true, `id` should be able to use its balance.\n *\n * # Arguments\n *\n * * `id` - The address being (de-)authorized.\n * * `authorize` - Whether or not `id` can use its balance.\n *\n * # Events\n *\n * Emits an event with topics `[\"set_authorized\", id: Address], data =\n * [authorize: bool]`\n */\n set_authorized: (\n { id, authorize }: { id: string; authorize: boolean },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<null>>;\n\n /**\n * Construct and simulate a symbol transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Returns the symbol for this token.\n *\n * # Panics\n *\n * If the contract has not yet been initialized.\n */\n symbol: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<string>>;\n\n /**\n * Construct and simulate a transfer transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Transfer `amount` from `from` to `to`.\n *\n * # Arguments\n *\n * * `from` - The address holding the balance of tokens which will be\n * withdrawn from.\n * * `to` - The address which will receive the transferred tokens.\n * * `amount` - The amount of tokens to be transferred.\n *\n * # Events\n *\n * Emits an event with topics `[\"transfer\", from: Address, to: Address],\n * data = [amount: i128]`\n */\n transfer: (\n { from, to, amount }: { from: string; to: string; amount: i128 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<null>>;\n\n /**\n * Construct and simulate a transfer_from transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Transfer `amount` from `from` to `to`, consuming the allowance that\n * `spender` has on `from`'s balance. Authorized by spender\n * (`spender.require_auth()`).\n *\n * The spender will be allowed to transfer the amount from from's balance\n * if the amount is less than or equal to the allowance that the spender\n * has on the from's balance. The spender's allowance on from's balance\n * will be reduced by the amount.\n *\n * # Arguments\n *\n * * `spender` - The address authorizing the transfer, and having its\n * allowance consumed during the transfer.\n * * `from` - The address holding the balance of tokens which will be\n * withdrawn from.\n * * `to` - The address which will receive the transferred tokens.\n * * `amount` - The amount of tokens to be transferred.\n *\n * # Events\n *\n * Emits an event with topics `[\"transfer\", from: Address, to: Address],\n * data = [amount: i128]`\n */\n transfer_from: (\n { spender, from, to, amount }: { spender: string; from: string; to: string; amount: i128 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<null>>;\n}\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\nexport class TokenContract extends ContractClient {\n constructor(public readonly options: ContractClientOptions) {\n super(\n new ContractSpec([\n \"AAAAAAAAAYlSZXR1cm5zIHRoZSBhbGxvd2FuY2UgZm9yIGBzcGVuZGVyYCB0byB0cmFuc2ZlciBmcm9tIGBmcm9tYC4KClRoZSBhbW91bnQgcmV0dXJuZWQgaXMgdGhlIGFtb3VudCB0aGF0IHNwZW5kZXIgaXMgYWxsb3dlZCB0byB0cmFuc2ZlcgpvdXQgb2YgZnJvbSdzIGJhbGFuY2UuIFdoZW4gdGhlIHNwZW5kZXIgdHJhbnNmZXJzIGFtb3VudHMsIHRoZSBhbGxvd2FuY2UKd2lsbCBiZSByZWR1Y2VkIGJ5IHRoZSBhbW91bnQgdHJhbnNmZXJlZC4KCiMgQXJndW1lbnRzCgoqIGBmcm9tYCAtIFRoZSBhZGRyZXNzIGhvbGRpbmcgdGhlIGJhbGFuY2Ugb2YgdG9rZW5zIHRvIGJlIGRyYXduIGZyb20uCiogYHNwZW5kZXJgIC0gVGhlIGFkZHJlc3Mgc3BlbmRpbmcgdGhlIHRva2VucyBoZWxkIGJ5IGBmcm9tYC4AAAAAAAAJYWxsb3dhbmNlAAAAAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAEAAAAL\",\n \"AAAAAAAAAIlSZXR1cm5zIHRydWUgaWYgYGlkYCBpcyBhdXRob3JpemVkIHRvIHVzZSBpdHMgYmFsYW5jZS4KCiMgQXJndW1lbnRzCgoqIGBpZGAgLSBUaGUgYWRkcmVzcyBmb3Igd2hpY2ggdG9rZW4gYXV0aG9yaXphdGlvbiBpcyBiZWluZyBjaGVja2VkLgAAAAAAAAphdXRob3JpemVkAAAAAAABAAAAAAAAAAJpZAAAAAAAEwAAAAEAAAAB\",\n \"AAAAAAAAA55TZXQgdGhlIGFsbG93YW5jZSBieSBgYW1vdW50YCBmb3IgYHNwZW5kZXJgIHRvIHRyYW5zZmVyL2J1cm4gZnJvbQpgZnJvbWAuCgpUaGUgYW1vdW50IHNldCBpcyB0aGUgYW1vdW50IHRoYXQgc3BlbmRlciBpcyBhcHByb3ZlZCB0byB0cmFuc2ZlciBvdXQgb2YKZnJvbSdzIGJhbGFuY2UuIFRoZSBzcGVuZGVyIHdpbGwgYmUgYWxsb3dlZCB0byB0cmFuc2ZlciBhbW91bnRzLCBhbmQKd2hlbiBhbiBhbW91bnQgaXMgdHJhbnNmZXJyZWQgdGhlIGFsbG93YW5jZSB3aWxsIGJlIHJlZHVjZWQgYnkgdGhlCmFtb3VudCB0cmFuc2ZlcmVkLgoKIyBBcmd1bWVudHMKCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgdG8gYmUgZHJhd24gZnJvbS4KKiBgc3BlbmRlcmAgLSBUaGUgYWRkcmVzcyBiZWluZyBhdXRob3JpemVkIHRvIHNwZW5kIHRoZSB0b2tlbnMgaGVsZCBieQpgZnJvbWAuCiogYGFtb3VudGAgLSBUaGUgdG9rZW5zIHRvIGJlIG1hZGUgYXZhaWxhYmxlIHRvIGBzcGVuZGVyYC4KKiBgZXhwaXJhdGlvbl9sZWRnZXJgIC0gVGhlIGxlZGdlciBudW1iZXIgd2hlcmUgdGhpcyBhbGxvd2FuY2UgZXhwaXJlcy4gQ2Fubm90CmJlIGxlc3MgdGhhbiB0aGUgY3VycmVudCBsZWRnZXIgbnVtYmVyIHVubGVzcyB0aGUgYW1vdW50IGlzIGJlaW5nIHNldCB0byAwLgpBbiBleHBpcmVkIGVudHJ5ICh3aGVyZSBleHBpcmF0aW9uX2xlZGdlciA8IHRoZSBjdXJyZW50IGxlZGdlciBudW1iZXIpCnNob3VsZCBiZSB0cmVhdGVkIGFzIGEgMCBhbW91bnQgYWxsb3dhbmNlLgoKIyBFdmVudHMKCkVtaXRzIGFuIGV2ZW50IHdpdGggdG9waWNzIGBbImFwcHJvdmUiLCBmcm9tOiBBZGRyZXNzLApzcGVuZGVyOiBBZGRyZXNzXSwgZGF0YSA9IFthbW91bnQ6IGkxMjgsIGV4cGlyYXRpb25fbGVkZ2VyOiB1MzJdYAAAAAAAB2FwcHJvdmUAAAAABAAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAAAAABFleHBpcmF0aW9uX2xlZGdlcgAAAAAAAAQAAAAA\",\n \"AAAAAAAAAJhSZXR1cm5zIHRoZSBiYWxhbmNlIG9mIGBpZGAuCgojIEFyZ3VtZW50cwoKKiBgaWRgIC0gVGhlIGFkZHJlc3MgZm9yIHdoaWNoIGEgYmFsYW5jZSBpcyBiZWluZyBxdWVyaWVkLiBJZiB0aGUKYWRkcmVzcyBoYXMgbm8gZXhpc3RpbmcgYmFsYW5jZSwgcmV0dXJucyAwLgAAAAdiYWxhbmNlAAAAAAEAAAAAAAAAAmlkAAAAAAATAAAAAQAAAAs=\",\n \"AAAAAAAAAWRCdXJuIGBhbW91bnRgIGZyb20gYGZyb21gLgoKUmVkdWNlcyBmcm9tJ3MgYmFsYW5jZSBieSB0aGUgYW1vdW50LCB3aXRob3V0IHRyYW5zZmVycmluZyB0aGUgYmFsYW5jZQp0byBhbm90aGVyIGhvbGRlcidzIGJhbGFuY2UuCgojIEFyZ3VtZW50cwoKKiBgZnJvbWAgLSBUaGUgYWRkcmVzcyBob2xkaW5nIHRoZSBiYWxhbmNlIG9mIHRva2VucyB3aGljaCB3aWxsIGJlCmJ1cm5lZCBmcm9tLgoqIGBhbW91bnRgIC0gVGhlIGFtb3VudCBvZiB0b2tlbnMgdG8gYmUgYnVybmVkLgoKIyBFdmVudHMKCkVtaXRzIGFuIGV2ZW50IHdpdGggdG9waWNzIGBbImJ1cm4iLCBmcm9tOiBBZGRyZXNzXSwgZGF0YSA9IFthbW91bnQ6CmkxMjhdYAAAAARidXJuAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=\",\n \"AAAAAAAAAtxCdXJuIGBhbW91bnRgIGZyb20gYGZyb21gLCBjb25zdW1pbmcgdGhlIGFsbG93YW5jZSBvZiBgc3BlbmRlcmAuCgpSZWR1Y2VzIGZyb20ncyBiYWxhbmNlIGJ5IHRoZSBhbW91bnQsIHdpdGhvdXQgdHJhbnNmZXJyaW5nIHRoZSBiYWxhbmNlCnRvIGFub3RoZXIgaG9sZGVyJ3MgYmFsYW5jZS4KClRoZSBzcGVuZGVyIHdpbGwgYmUgYWxsb3dlZCB0byBidXJuIHRoZSBhbW91bnQgZnJvbSBmcm9tJ3MgYmFsYW5jZSwgaWYKdGhlIGFtb3VudCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGFsbG93YW5jZSB0aGF0IHRoZSBzcGVuZGVyIGhhcwpvbiB0aGUgZnJvbSdzIGJhbGFuY2UuIFRoZSBzcGVuZGVyJ3MgYWxsb3dhbmNlIG9uIGZyb20ncyBiYWxhbmNlIHdpbGwgYmUKcmVkdWNlZCBieSB0aGUgYW1vdW50LgoKIyBBcmd1bWVudHMKCiogYHNwZW5kZXJgIC0gVGhlIGFkZHJlc3MgYXV0aG9yaXppbmcgdGhlIGJ1cm4sIGFuZCBoYXZpbmcgaXRzIGFsbG93YW5jZQpjb25zdW1lZCBkdXJpbmcgdGhlIGJ1cm4uCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgd2hpY2ggd2lsbCBiZQpidXJuZWQgZnJvbS4KKiBgYW1vdW50YCAtIFRoZSBhbW91bnQgb2YgdG9rZW5zIHRvIGJlIGJ1cm5lZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJidXJuIiwgZnJvbTogQWRkcmVzc10sIGRhdGEgPSBbYW1vdW50OgppMTI4XWAAAAAJYnVybl9mcm9tAAAAAAAAAwAAAAAAAAAHc3BlbmRlcgAAAAATAAAAAAAAAARmcm9tAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==\",\n \"AAAAAAAAAVNDbGF3YmFjayBgYW1vdW50YCBmcm9tIGBmcm9tYCBhY2NvdW50LiBgYW1vdW50YCBpcyBidXJuZWQgaW4gdGhlCmNsYXdiYWNrIHByb2Nlc3MuCgojIEFyZ3VtZW50cwoKKiBgZnJvbWAgLSBUaGUgYWRkcmVzcyBob2xkaW5nIHRoZSBiYWxhbmNlIGZyb20gd2hpY2ggdGhlIGNsYXdiYWNrIHdpbGwKdGFrZSB0b2tlbnMuCiogYGFtb3VudGAgLSBUaGUgYW1vdW50IG9mIHRva2VucyB0byBiZSBjbGF3ZWQgYmFjay4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJjbGF3YmFjayIsIGFkbWluOiBBZGRyZXNzLCB0bzogQWRkcmVzc10sCmRhdGEgPSBbYW1vdW50OiBpMTI4XWAAAAAACGNsYXdiYWNrAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=\",\n \"AAAAAAAAAIBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGVjaW1hbHMgdXNlZCB0byByZXByZXNlbnQgYW1vdW50cyBvZiB0aGlzIHRva2VuLgoKIyBQYW5pY3MKCklmIHRoZSBjb250cmFjdCBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkLgAAAAhkZWNpbWFscwAAAAAAAAABAAAABA==\",\n \"AAAAAAAAAPVNaW50cyBgYW1vdW50YCB0byBgdG9gLgoKIyBBcmd1bWVudHMKCiogYHRvYCAtIFRoZSBhZGRyZXNzIHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUgbWludGVkIHRva2Vucy4KKiBgYW1vdW50YCAtIFRoZSBhbW91bnQgb2YgdG9rZW5zIHRvIGJlIG1pbnRlZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJtaW50IiwgYWRtaW46IEFkZHJlc3MsIHRvOiBBZGRyZXNzXSwgZGF0YQo9IFthbW91bnQ6IGkxMjhdYAAAAAAAAARtaW50AAAAAgAAAAAAAAACdG8AAAAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=\",\n \"AAAAAAAAAFlSZXR1cm5zIHRoZSBuYW1lIGZvciB0aGlzIHRva2VuLgoKIyBQYW5pY3MKCklmIHRoZSBjb250cmFjdCBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkLgAAAAAAAARuYW1lAAAAAAAAAAEAAAAQ\",\n \"AAAAAAAAAQxTZXRzIHRoZSBhZG1pbmlzdHJhdG9yIHRvIHRoZSBzcGVjaWZpZWQgYWRkcmVzcyBgbmV3X2FkbWluYC4KCiMgQXJndW1lbnRzCgoqIGBuZXdfYWRtaW5gIC0gVGhlIGFkZHJlc3Mgd2hpY2ggd2lsbCBoZW5jZWZvcnRoIGJlIHRoZSBhZG1pbmlzdHJhdG9yCm9mIHRoaXMgdG9rZW4gY29udHJhY3QuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsic2V0X2FkbWluIiwgYWRtaW46IEFkZHJlc3NdLCBkYXRhID0KW25ld19hZG1pbjogQWRkcmVzc11gAAAACXNldF9hZG1pbgAAAAAAAAEAAAAAAAAACW5ld19hZG1pbgAAAAAAABMAAAAA\",\n \"AAAAAAAAAEZSZXR1cm5zIHRoZSBhZG1pbiBvZiB0aGUgY29udHJhY3QuCgojIFBhbmljcwoKSWYgdGhlIGFkbWluIGlzIG5vdCBzZXQuAAAAAAAFYWRtaW4AAAAAAAAAAAAAAQAAABM=\",\n \"AAAAAAAAAVBTZXRzIHdoZXRoZXIgdGhlIGFjY291bnQgaXMgYXV0aG9yaXplZCB0byB1c2UgaXRzIGJhbGFuY2UuIElmCmBhdXRob3JpemVkYCBpcyB0cnVlLCBgaWRgIHNob3VsZCBiZSBhYmxlIHRvIHVzZSBpdHMgYmFsYW5jZS4KCiMgQXJndW1lbnRzCgoqIGBpZGAgLSBUaGUgYWRkcmVzcyBiZWluZyAoZGUtKWF1dGhvcml6ZWQuCiogYGF1dGhvcml6ZWAgLSBXaGV0aGVyIG9yIG5vdCBgaWRgIGNhbiB1c2UgaXRzIGJhbGFuY2UuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsic2V0X2F1dGhvcml6ZWQiLCBpZDogQWRkcmVzc10sIGRhdGEgPQpbYXV0aG9yaXplOiBib29sXWAAAAAOc2V0X2F1dGhvcml6ZWQAAAAAAAIAAAAAAAAAAmlkAAAAAAATAAAAAAAAAAlhdXRob3JpemUAAAAAAAABAAAAAA==\",\n \"AAAAAAAAAFtSZXR1cm5zIHRoZSBzeW1ib2wgZm9yIHRoaXMgdG9rZW4uCgojIFBhbmljcwoKSWYgdGhlIGNvbnRyYWN0IGhhcyBub3QgeWV0IGJlZW4gaW5pdGlhbGl6ZWQuAAAAAAZzeW1ib2wAAAAAAAAAAAABAAAAEA==\",\n \"AAAAAAAAAWRUcmFuc2ZlciBgYW1vdW50YCBmcm9tIGBmcm9tYCB0byBgdG9gLgoKIyBBcmd1bWVudHMKCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgd2hpY2ggd2lsbCBiZQp3aXRoZHJhd24gZnJvbS4KKiBgdG9gIC0gVGhlIGFkZHJlc3Mgd2hpY2ggd2lsbCByZWNlaXZlIHRoZSB0cmFuc2ZlcnJlZCB0b2tlbnMuCiogYGFtb3VudGAgLSBUaGUgYW1vdW50IG9mIHRva2VucyB0byBiZSB0cmFuc2ZlcnJlZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJ0cmFuc2ZlciIsIGZyb206IEFkZHJlc3MsIHRvOiBBZGRyZXNzXSwKZGF0YSA9IFthbW91bnQ6IGkxMjhdYAAAAAh0cmFuc2ZlcgAAAAMAAAAAAAAABGZyb20AAAATAAAAAAAAAAJ0bwAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==\",\n \"AAAAAAAAAzNUcmFuc2ZlciBgYW1vdW50YCBmcm9tIGBmcm9tYCB0byBgdG9gLCBjb25zdW1pbmcgdGhlIGFsbG93YW5jZSB0aGF0CmBzcGVuZGVyYCBoYXMgb24gYGZyb21gJ3MgYmFsYW5jZS4gQXV0aG9yaXplZCBieSBzcGVuZGVyCihgc3BlbmRlci5yZXF1aXJlX2F1dGgoKWApLgoKVGhlIHNwZW5kZXIgd2lsbCBiZSBhbGxvd2VkIHRvIHRyYW5zZmVyIHRoZSBhbW91bnQgZnJvbSBmcm9tJ3MgYmFsYW5jZQppZiB0aGUgYW1vdW50IGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgYWxsb3dhbmNlIHRoYXQgdGhlIHNwZW5kZXIKaGFzIG9uIHRoZSBmcm9tJ3MgYmFsYW5jZS4gVGhlIHNwZW5kZXIncyBhbGxvd2FuY2Ugb24gZnJvbSdzIGJhbGFuY2UKd2lsbCBiZSByZWR1Y2VkIGJ5IHRoZSBhbW91bnQuCgojIEFyZ3VtZW50cwoKKiBgc3BlbmRlcmAgLSBUaGUgYWRkcmVzcyBhdXRob3JpemluZyB0aGUgdHJhbnNmZXIsIGFuZCBoYXZpbmcgaXRzCmFsbG93YW5jZSBjb25zdW1lZCBkdXJpbmcgdGhlIHRyYW5zZmVyLgoqIGBmcm9tYCAtIFRoZSBhZGRyZXNzIGhvbGRpbmcgdGhlIGJhbGFuY2Ugb2YgdG9rZW5zIHdoaWNoIHdpbGwgYmUKd2l0aGRyYXduIGZyb20uCiogYHRvYCAtIFRoZSBhZGRyZXNzIHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUgdHJhbnNmZXJyZWQgdG9rZW5zLgoqIGBhbW91bnRgIC0gVGhlIGFtb3VudCBvZiB0b2tlbnMgdG8gYmUgdHJhbnNmZXJyZWQuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsidHJhbnNmZXIiLCBmcm9tOiBBZGRyZXNzLCB0bzogQWRkcmVzc10sCmRhdGEgPSBbYW1vdW50OiBpMTI4XWAAAAAADXRyYW5zZmVyX2Zyb20AAAAAAAAEAAAAAAAAAAdzcGVuZGVyAAAAABMAAAAAAAAABGZyb20AAAATAAAAAAAAAAJ0bwAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==\",\n ]),\n options\n );\n }\n public readonly fromJSON = {\n allowance: this.txFromJSON<i128>,\n authorized: this.txFromJSON<boolean>,\n approve: this.txFromJSON<null>,\n balance: this.txFromJSON<i128>,\n burn: this.txFromJSON<null>,\n burn_from: this.txFromJSON<null>,\n clawback: this.txFromJSON<null>,\n decimals: this.txFromJSON<u32>,\n mint: this.txFromJSON<null>,\n name: this.txFromJSON<string>,\n set_admin: this.txFromJSON<null>,\n admin: this.txFromJSON<string>,\n set_authorized: this.txFromJSON<null>,\n symbol: this.txFromJSON<string>,\n transfer: this.txFromJSON<null>,\n transfer_from: this.txFromJSON<null>,\n };\n}\n", "import { AllbridgeCoreSdkOptions } from \"../index\";\nimport { NodeRpcUrlsConfig } from \"../services\";\nimport { DefaultSolUtils, SolUtils } from \"./sol\";\nimport { DefaultSrbUtils, SrbUtils } from \"./srb\";\n\n/**\n * Contains usefully methods\n */\nexport interface Utils {\n srb: SrbUtils;\n sol: SolUtils;\n}\n\nexport class DefaultUtils implements Utils {\n srb: SrbUtils;\n sol: SolUtils;\n\n constructor(readonly nodeRpcUrlsConfig: NodeRpcUrlsConfig, params: AllbridgeCoreSdkOptions) {\n this.srb = new DefaultSrbUtils(nodeRpcUrlsConfig, params);\n this.sol = new DefaultSolUtils(nodeRpcUrlsConfig, params);\n }\n}\n", "export {\n ApproveParams as BridgeApproveParams,\n BaseSendParams,\n CheckAllowanceParams,\n GetAllowanceParams,\n GetTokenBalanceParams,\n SendParams,\n SwapParams,\n GetNativeTokenBalanceParams,\n} from \"../services/bridge/models/bridge.model\";\nexport { BridgeService } from \"../services/bridge/index\";\nexport { CctpParams, CctpDomains } from \"../services/bridge/sol\";\nexport { LiquidityPoolService } from \"../services/liquidity-pool/index\";\nexport {\n Messenger,\n TransferStatusResponse,\n BridgeTransaction,\n GasBalanceResponse,\n CheckAddressResponse,\n AddressStatus,\n} from \"../client/core-api/core-api.model\";\nexport { RawBridgeTransactionBuilder } from \"../services/bridge/raw-bridge-transaction-builder\";\nexport { RawPoolTransactionBuilder } from \"../services/liquidity-pool/raw-pool-transaction-builder\";\nexport {\n PoolInfo,\n TokenWithChainDetails,\n TransferTime,\n TxCostAmount,\n MessengerTransferTime,\n} from \"../tokens-info/tokens-info.model\";\nexport {\n UserBalanceInfo,\n UserBalanceInfoDTO,\n LiquidityPoolsParams,\n LiquidityPoolsParamsWithAmount,\n ApproveParams as LiquidityPoolsApproveParams,\n CheckAllowanceParams as LiquidityPoolsCheckAllowanceParams,\n GetAllowanceParams as LiquidityPoolsGetAllowanceParams,\n} from \"../services/liquidity-pool/models/pool.model\";\nexport * from \"../services/models/index\";\nexport {\n SwapAndBridgeCalculationData,\n SwapFromVUsdCalcResult,\n SwapToVUsdCalcResult,\n} from \"../utils/calculation/swap-and-bridge-fee-calc\";\nexport { SendAmountDetails, AmountImpact } from \"../utils/calculation/swap-and-bridge-details\";\nexport { ChainDetailsMap, ChainDetailsWithTokens } from \"../tokens-info\";\nexport { Utils } from \"../utils\";\nexport { SrbUtils, TrustLineParams } from \"../utils/srb\";\nexport { SolUtils } from \"../utils/sol\";\nexport * from \"../exceptions\";\nexport { ChainSymbol, ChainType } from \"../chains/chain.enums\";\nexport { AdditionalBasicChainProperties, BasicChainProperties } from \"../chains/models\";\n\nexport enum FeePaymentMethod {\n /**\n * The fee is paid in the native currency of the source chain.\n */\n WITH_NATIVE_CURRENCY = \"native\",\n\n /**\n * The fee is paid with the stablecoin token.\n */\n WITH_STABLECOIN = \"stablecoin\",\n}\n\nexport interface AmountsAndGasFeeOptions {\n /**\n * The floating point amount of tokens to be sent (not including gas fee).\n */\n amountToSendFloat: string;\n\n /**\n * The floating point amount of tokens to be received.\n */\n amountToBeReceivedFloat: string;\n\n /**\n * Available ways to pay the transfer gas fee and gas fee amount.\n */\n gasFeeOptions: GasFeeOptions;\n}\n\ntype GasFeeOptionsType = {\n [key in FeePaymentMethod]?: AmountFormatted;\n};\n\n/**\n * Describes available options of paying the gas fee and the amount to pay when using the corresponding method.\n *\n * For {@link FeePaymentMethod.WITH_NATIVE_CURRENCY} value contains the amount in the smallest denomination of the source chain currency\n *\n * For {@link FeePaymentMethod.WITH_STABLECOIN} value contains the amount in the smallest denomination of the source token\n */\nexport interface GasFeeOptions extends GasFeeOptionsType {\n [FeePaymentMethod.WITH_NATIVE_CURRENCY]: AmountFormatted;\n [FeePaymentMethod.WITH_STABLECOIN]?: AmountFormatted;\n}\n\n/**\n * Define the type of amount data<p/>\n * Example:<p/>\n * \"1500000\" USDC {@link AmountFormat.INT} = \"1.5\" USDC {@link AmountFormat.FLOAT}, if USDC.decimals = 6\n */\nexport enum AmountFormat {\n /**\n * denominated in the smallest unit of the source token\n */\n INT = \"int\",\n /**\n * denominated in the unit of the source token\n */\n FLOAT = \"float\",\n}\n\n/**\n * Describes the same amount in two variation formats.\n *\n * For {@link AmountFormat.INT} value contains the amount in the smallest denomination\n *\n * For {@link AmountFormat.FLOAT} value contains the amount in tokens denomination\n */\nexport type AmountFormatted = {\n [key in AmountFormat]: string;\n};\n\n/**\n * Describes MAX extra gas value can to be passed when using the corresponding method.\n *\n * For {@link FeePaymentMethod.WITH_NATIVE_CURRENCY} value contains {@link ExtraGasMaxLimit} the amount of the source chain currency\n *\n * For {@link FeePaymentMethod.WITH_STABLECOIN} value contains {@link ExtraGasMaxLimit} the amount of the source token\n */\nexport type ExtraGasMaxLimits = {\n [key in FeePaymentMethod]?: ExtraGasMaxLimit;\n};\n\n/**\n * Describes the same MAX extra gas amount.\n */\nexport type ExtraGasMaxLimit = AmountFormatted;\n\n/**\n * Provide extra gas information\n */\nexport interface ExtraGasMaxLimitResponse {\n /**\n * See {@link ExtraGasMaxLimits}\n */\n extraGasMax: ExtraGasMaxLimits;\n /**\n * Information due to destination chain\n */\n destinationChain: {\n /**\n * gasAmountMax maximum amount you can receive as extra gas on dest chain\n */\n gasAmountMax: ExtraGasMaxLimit;\n /**\n * cost of swap tx on chain\n */\n swap: AmountFormatted;\n /**\n * cost of send tx on chain\n */\n transfer: AmountFormatted;\n };\n /**\n * Exchange rate\n */\n exchangeRate: string;\n /**\n * Source native token price\n */\n sourceNativeTokenPrice: string;\n}\n\n/**\n * Provide pending status information\n */\nexport interface PendingStatusInfoResponse {\n /**\n * Number of pending transactions\n */\n pendingTxs: number;\n /**\n * Total amount of pending transactions\n */\n pendingAmount: AmountFormatted;\n /**\n * The amount of tokens can be received as a result of transfer considering pending transactions\n */\n estimatedAmount: { min: AmountFormatted; max: AmountFormatted };\n}\n", "import { Big } from \"big.js\";\n// @ts-expect-error import tron\nimport TronWeb from \"tronweb\";\nimport Web3 from \"web3\";\nimport { Chains } from \"../../chains\";\nimport { AllbridgeCoreClient } from \"../../client/core-api/core-client-base\";\nimport { AllbridgeCoreSdkOptions, ChainType } from \"../../index\";\nimport { AmountFormat, AmountFormatted } from \"../../models\";\nimport { convertFloatAmountToInt, convertIntAmountToFloat } from \"../../utils/calculation\";\nimport { validateAmountDecimals, validateAmountGtZero } from \"../../utils/utils\";\nimport { GetNativeTokenBalanceParams } from \"../bridge/models\";\nimport { NodeRpcUrlsConfig } from \"../index\";\nimport { Provider, RawTransaction, TransactionResponse } from \"../models\";\nimport { EvmTokenService } from \"./evm\";\nimport {\n ApproveParams,\n ApproveParamsDto,\n CheckAllowanceParams,\n CheckAllowanceParamsDto,\n GetAllowanceParams,\n GetTokenBalanceParams,\n} from \"./models\";\nimport { ChainTokenService } from \"./models/token\";\nimport { SolanaTokenService } from \"./sol\";\nimport { SrbTokenService } from \"./srb\";\nimport { TronTokenService } from \"./trx\";\n\nexport interface TokenService {\n getAllowance(params: GetAllowanceParams, provider?: Provider): Promise<string>;\n\n checkAllowance(params: CheckAllowanceParams, provider?: Provider): Promise<boolean>;\n\n approve(provider: Provider, approveData: ApproveParams): Promise<TransactionResponse>;\n\n buildRawTransactionApprove(approveData: ApproveParams, provider?: Provider): Promise<RawTransaction>;\n\n getTokenBalance(params: GetTokenBalanceParams, provider?: Provider): Promise<string>;\n\n getNativeTokenBalance(params: GetNativeTokenBalanceParams, provider?: Provider): Promise<AmountFormatted>;\n}\n\nexport class DefaultTokenService implements TokenService {\n constructor(\n readonly api: AllbridgeCoreClient,\n readonly nodeRpcUrlsConfig: NodeRpcUrlsConfig,\n readonly params: AllbridgeCoreSdkOptions\n ) {}\n\n async getAllowance(params: GetAllowanceParams, provider?: Provider): Promise<string> {\n const allowanceInt = await this.getChainTokenService(params.token.chainSymbol, params.owner, provider).getAllowance(\n params\n );\n return convertIntAmountToFloat(allowanceInt, params.token.decimals).toFixed();\n }\n\n async checkAllowance(params: CheckAllowanceParams, provider?: Provider): Promise<boolean> {\n validateAmountGtZero(params.amount);\n validateAmountDecimals(\"amount\", params.amount, params.token.decimals);\n return this.getChainTokenService(params.token.chainSymbol, params.owner, provider).checkAllowance(\n this.prepareCheckAllowanceParams(params)\n );\n }\n\n async approve(provider: Provider, approveData: ApproveParams): Promise<TransactionResponse> {\n if (approveData.amount) {\n validateAmountGtZero(approveData.amount);\n validateAmountDecimals(\"amount\", approveData.amount, approveData.token.decimals);\n }\n return this.getChainTokenService(approveData.token.chainSymbol, approveData.owner, provider).approve(\n this.prepareApproveParams(approveData)\n );\n }\n\n async buildRawTransactionApprove(approveData: ApproveParams, provider?: Provider): Promise<RawTransaction> {\n if (approveData.amount) {\n validateAmountGtZero(approveData.amount);\n validateAmountDecimals(\"amount\", approveData.amount, approveData.token.decimals);\n }\n return this.getChainTokenService(\n approveData.token.chainSymbol,\n approveData.owner,\n provider\n ).buildRawTransactionApprove(this.prepareApproveParams(approveData));\n }\n\n async getTokenBalance(params: GetTokenBalanceParams, provider?: Provider): Promise<string> {\n const tokenBalance = await this.getChainTokenService(\n params.token.chainSymbol,\n params.account,\n provider\n ).getTokenBalance(params);\n if (params.token.decimals) {\n return convertIntAmountToFloat(tokenBalance, params.token.decimals).toFixed();\n }\n return tokenBalance;\n }\n\n async getNativeTokenBalance(params: GetNativeTokenBalanceParams, provider?: Provider): Promise<AmountFormatted> {\n const tokenBalance = await this.getChainTokenService(\n params.chainSymbol,\n params.account,\n provider\n ).getNativeTokenBalance(params);\n return {\n [AmountFormat.INT]: tokenBalance,\n [AmountFormat.FLOAT]: convertIntAmountToFloat(\n tokenBalance,\n Chains.getChainDecimalsByType(Chains.getChainProperty(params.chainSymbol).chainType)\n ).toFixed(),\n };\n }\n\n private getChainTokenService(chainSymbol: string, ownerAddress: string, provider?: Provider): ChainTokenService {\n switch (Chains.getChainProperty(chainSymbol).chainType) {\n case ChainType.EVM: {\n if (provider) {\n return new EvmTokenService(provider as unknown as Web3, this.api);\n } else {\n const nodeRpcUrl = this.nodeRpcUrlsConfig.getNodeRpcUrl(chainSymbol);\n return new EvmTokenService(new Web3(nodeRpcUrl), this.api);\n }\n }\n case ChainType.TRX: {\n if (provider) {\n return new TronTokenService(provider, this.api);\n } else {\n const nodeRpcUrl = this.nodeRpcUrlsConfig.getNodeRpcUrl(chainSymbol);\n const tronWeb = new TronWeb({ fullHost: nodeRpcUrl });\n tronWeb.setAddress(ownerAddress);\n return new TronTokenService(tronWeb, this.api);\n }\n }\n case ChainType.SOLANA: {\n const nodeRpcUrl = this.nodeRpcUrlsConfig.getNodeRpcUrl(chainSymbol);\n return new SolanaTokenService(nodeRpcUrl, this.api);\n }\n case ChainType.SRB: {\n return new SrbTokenService(this.nodeRpcUrlsConfig, this.params, this.api);\n }\n }\n }\n\n prepareCheckAllowanceParams(params: CheckAllowanceParams): CheckAllowanceParamsDto {\n return {\n ...params,\n amount: convertFloatAmountToInt(params.amount, params.token.decimals),\n };\n }\n\n private prepareApproveParams(approveData: ApproveParams): ApproveParamsDto {\n return {\n tokenAddress: approveData.token.tokenAddress,\n owner: approveData.owner,\n spender: approveData.spender,\n chainSymbol: approveData.token.chainSymbol,\n amount: approveData.amount == undefined ? undefined : Big(approveData.amount).toFixed(),\n };\n }\n}\n", "import BN from \"bn.js\";\nimport erc20abi from \"erc-20-abi\";\nimport Web3 from \"web3\";\nimport { TransactionConfig } from \"web3-core\";\nimport { AbiItem } from \"web3-utils\";\nimport { ChainSymbol, ChainType } from \"../../../chains/chain.enums\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { GetTokenBalanceParams, TransactionResponse } from \"../../../models\";\nimport { GetNativeTokenBalanceParams } from \"../../bridge/models\";\nimport { RawTransaction } from \"../../models\";\nimport { BaseContract } from \"../../models/abi/types/types\";\nimport { amountToHex } from \"../../utils/index\";\nimport { ApproveParamsDto, GetAllowanceParamsDto } from \"../models\";\nimport { ChainTokenService } from \"../models/token\";\n\nexport const MAX_AMOUNT = \"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\";\n\nconst USDT_TOKEN_ADDRESS = \"0xdac17f958d2ee523a2206206994597c13d831ec7\";\nconst POLYGON_GAS_LIMIT = 100_000;\n\nexport class EvmTokenService extends ChainTokenService {\n chainType: ChainType.EVM = ChainType.EVM;\n\n constructor(public web3: Web3, public api: AllbridgeCoreClient) {\n super();\n }\n\n getAllowance(params: GetAllowanceParamsDto): Promise<string> {\n const tokenAddress = params.token.tokenAddress;\n const owner = params.owner;\n const spender = params.spender;\n return this.getAllowanceByTokenAddress(tokenAddress, owner, spender);\n }\n\n getAllowanceByTokenAddress(tokenAddress: string, owner: string, spender: string): Promise<string> {\n const tokenContract = this.getContract(erc20abi as AbiItem[], tokenAddress);\n return tokenContract.methods.allowance(owner, spender).call();\n }\n\n async getTokenBalance(params: GetTokenBalanceParams): Promise<string> {\n return await this.getContract(erc20abi as AbiItem[], params.token.tokenAddress)\n .methods.balanceOf(params.account)\n .call();\n }\n\n async getNativeTokenBalance(params: GetNativeTokenBalanceParams): Promise<string> {\n return await this.web3.eth.getBalance(params.account);\n }\n\n async approve(params: ApproveParamsDto): Promise<TransactionResponse> {\n if (this.isUsdt(params.tokenAddress)) {\n const allowance = await this.getAllowanceByTokenAddress(params.tokenAddress, params.owner, params.spender);\n if (allowance !== \"0\") {\n const rawTransaction = await this.buildRawTransactionApprove({\n ...params,\n amount: \"0\",\n });\n await this.sendRawTransaction(rawTransaction, params.chainSymbol);\n }\n }\n const rawTransaction = await this.buildRawTransactionApprove(params);\n return await this.sendRawTransaction(rawTransaction, params.chainSymbol);\n }\n\n isUsdt(tokenAddress: string): boolean {\n return tokenAddress.toLowerCase() === USDT_TOKEN_ADDRESS;\n }\n\n async buildRawTransactionApprove(params: ApproveParamsDto): Promise<RawTransaction> {\n const { tokenAddress, spender, owner, amount } = params;\n const tokenContract = this.getContract(erc20abi as AbiItem[], tokenAddress);\n\n const approveMethod = await tokenContract.methods.approve(\n spender,\n amount == undefined ? MAX_AMOUNT : amountToHex(amount)\n );\n\n return {\n from: owner,\n to: tokenAddress,\n value: \"0\",\n data: approveMethod.encodeABI(),\n };\n }\n\n private async sendRawTransaction(rawTransaction: RawTransaction, chainSymbol: string) {\n const transactionConfig: TransactionConfig = rawTransaction as TransactionConfig;\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error DISABLE SITE SUGGESTED GAS FEE IN METAMASK\n // prettier-ignore\n const feeOptions: { maxPriorityFeePerGas?: number | string | BN; maxFeePerGas?: number | string | BN } = { maxPriorityFeePerGas: null, maxFeePerGas: null };\n if ((chainSymbol as ChainSymbol) === ChainSymbol.POL) {\n transactionConfig.gas = POLYGON_GAS_LIMIT;\n } else {\n transactionConfig.gas = await this.web3.eth.estimateGas(rawTransaction as TransactionConfig);\n }\n const { transactionHash } = await this.web3.eth.sendTransaction({ ...transactionConfig, ...feeOptions });\n return { txId: transactionHash };\n }\n\n private getContract<T extends BaseContract>(abiItem: AbiItem[], contractAddress: string): T {\n return new this.web3.eth.Contract(abiItem, contractAddress) as any;\n }\n}\n", "import { Big } from \"big.js\";\nimport { ChainType } from \"../../../chains/chain.enums\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { GetNativeTokenBalanceParams } from \"../../bridge/models\";\nimport { RawTransaction, TransactionResponse } from \"../../models\";\nimport { ApproveParamsDto, CheckAllowanceParamsDto, GetAllowanceParamsDto, GetTokenBalanceParams } from \"./token.model\";\n\nexport abstract class ChainTokenService {\n abstract chainType: ChainType;\n abstract api: AllbridgeCoreClient;\n\n abstract getTokenBalance(params: GetTokenBalanceParams): Promise<string>;\n\n abstract getNativeTokenBalance(params: GetNativeTokenBalanceParams): Promise<string>;\n\n abstract getAllowance(params: GetAllowanceParamsDto): Promise<string>;\n\n async checkAllowance(params: CheckAllowanceParamsDto): Promise<boolean> {\n const allowance = await this.getAllowance(params);\n return Big(allowance).gte(Big(params.amount));\n }\n\n abstract approve(params: ApproveParamsDto): Promise<TransactionResponse>;\n\n abstract buildRawTransactionApprove(params: ApproveParamsDto): Promise<RawTransaction>;\n}\n", "/* eslint-disable @typescript-eslint/ban-ts-comment */\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { AnchorProvider, Provider } from \"@project-serum/anchor\";\nimport { Connection, PublicKey } from \"@solana/web3.js\";\nimport { ChainType } from \"../../../chains/chain.enums\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { MethodNotSupportedError } from \"../../../exceptions\";\nimport { GetNativeTokenBalanceParams } from \"../../bridge/models\";\nimport { RawTransaction, TransactionResponse } from \"../../models\";\nimport { getTokenAccountData } from \"../../utils/sol\";\nimport { getAssociatedAccount } from \"../../utils/sol/accounts\";\nimport { ApproveParamsDto, GetAllowanceParamsDto, GetTokenBalanceParams } from \"../models\";\nimport { ChainTokenService } from \"../models/token\";\n\nexport class SolanaTokenService extends ChainTokenService {\n chainType: ChainType.SOLANA = ChainType.SOLANA;\n\n constructor(public solanaRpcUrl: string, public api: AllbridgeCoreClient) {\n super();\n }\n\n approve(params: ApproveParamsDto): Promise<TransactionResponse> {\n throw new MethodNotSupportedError();\n }\n\n buildRawTransactionApprove(params: ApproveParamsDto): Promise<RawTransaction> {\n throw new MethodNotSupportedError();\n }\n\n private buildAnchorProvider(accountAddress: string): Provider {\n const connection = new Connection(this.solanaRpcUrl, \"confirmed\");\n\n const publicKey = new PublicKey(accountAddress);\n\n return new AnchorProvider(\n connection,\n // @ts-expect-error enough wallet for fetch actions\n { publicKey: publicKey },\n {\n preflightCommitment: \"confirmed\",\n commitment: \"confirmed\",\n }\n );\n }\n\n getAllowance(params: GetAllowanceParamsDto): Promise<string> {\n throw new MethodNotSupportedError();\n }\n\n async getTokenBalance(params: GetTokenBalanceParams): Promise<string> {\n const { account, token } = params;\n try {\n const associatedAccount = await getAssociatedAccount(new PublicKey(account), new PublicKey(token.tokenAddress));\n const accountData = await getTokenAccountData(associatedAccount, this.buildAnchorProvider(account));\n return accountData.amount.toString();\n } catch (e) {\n if (e instanceof Error) {\n e.message.startsWith(\"Account does not exist\");\n return \"0\";\n }\n throw e;\n }\n }\n\n async getNativeTokenBalance(params: GetNativeTokenBalanceParams): Promise<string> {\n return (\n await this.buildAnchorProvider(params.account).connection.getBalance(new PublicKey(params.account))\n ).toString();\n }\n}\n", "import { Horizon, NotFoundError } from \"@stellar/stellar-sdk\";\nimport { Chains } from \"../../../chains\";\nimport { ChainSymbol } from \"../../../chains/chain.enums\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { AllbridgeCoreSdkOptions, ChainType, SdkError } from \"../../../index\";\nimport { GetTokenBalanceParams, MethodNotSupportedError, TransactionResponse } from \"../../../models\";\nimport { convertFloatAmountToInt } from \"../../../utils/calculation\";\nimport { GetNativeTokenBalanceParams } from \"../../bridge/models\";\nimport { NodeRpcUrlsConfig } from \"../../index\";\nimport { RawTransaction } from \"../../models\";\nimport { ChainTokenService } from \"../models\";\n\nimport BalanceLineAsset = Horizon.HorizonApi.BalanceLineAsset;\nimport BalanceLineNative = Horizon.HorizonApi.BalanceLineNative;\n\nexport class SrbTokenService extends ChainTokenService {\n chainType: ChainType.SRB = ChainType.SRB;\n\n constructor(\n readonly nodeRpcUrlsConfig: NodeRpcUrlsConfig,\n readonly params: AllbridgeCoreSdkOptions,\n readonly api: AllbridgeCoreClient\n ) {\n super();\n }\n\n getAllowance(): Promise<string> {\n throw new MethodNotSupportedError();\n }\n\n async getTokenBalance(params: GetTokenBalanceParams): Promise<string> {\n if (!params.token.originTokenAddress) {\n throw new SdkError(\"OriginTokenAddress missing\");\n }\n const [symbol, srbTokenAddress] = params.token.originTokenAddress.split(\":\");\n\n const stellar = new Horizon.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.STLR));\n let stellarAccount;\n try {\n stellarAccount = await stellar.loadAccount(params.account);\n } catch (err) {\n if (err instanceof NotFoundError) {\n return \"0\";\n }\n throw err;\n }\n const balances = stellarAccount.balances;\n\n const balanceInfo = balances.find(\n (balance): balance is BalanceLineAsset =>\n (balance.asset_type === \"credit_alphanum4\" || balance.asset_type === \"credit_alphanum12\") &&\n balance.asset_code == symbol &&\n balance.asset_issuer == srbTokenAddress\n );\n if (balanceInfo?.balance) {\n return convertFloatAmountToInt(\n balanceInfo.balance,\n Chains.getChainDecimalsByType(Chains.getChainProperty(params.token.chainSymbol).chainType)\n ).toFixed();\n }\n return \"0\";\n }\n\n async getNativeTokenBalance(params: GetNativeTokenBalanceParams): Promise<string> {\n const stellar = new Horizon.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.STLR));\n const stellarAccount = await stellar.loadAccount(params.account);\n const balances = stellarAccount.balances;\n\n const nativeBalance = balances.find((balance): balance is BalanceLineNative => balance.asset_type === \"native\");\n if (nativeBalance?.balance) {\n return convertFloatAmountToInt(\n nativeBalance.balance,\n Chains.getChainDecimalsByType(Chains.getChainProperty(params.chainSymbol).chainType)\n ).toFixed();\n }\n return \"0\";\n }\n\n approve(): Promise<TransactionResponse> {\n throw new MethodNotSupportedError();\n }\n\n buildRawTransactionApprove(): Promise<RawTransaction> {\n throw new MethodNotSupportedError();\n }\n}\n", "[\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"name_\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"symbol_\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Approval\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Transfer\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"allowance\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"approve\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"balanceOf\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"decimals\",\n \"outputs\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"\",\n \"type\": \"uint8\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"subtractedValue\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"decreaseAllowance\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"addedValue\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"increaseAllowance\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"name\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"symbol\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"totalSupply\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transfer\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transferFrom\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n]\n", "// @ts-expect-error import tron\nimport TronWeb from \"tronweb\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { SdkError } from \"../../../exceptions\";\nimport { ChainType, GetTokenBalanceParams, TransactionResponse } from \"../../../models\";\nimport { GetNativeTokenBalanceParams } from \"../../bridge/models\";\nimport { RawTransaction, SmartContractMethodParameter } from \"../../models\";\nimport ERC20Abi from \"../../models/abi/ERC20.json\";\nimport { amountToHex } from \"../../utils\";\nimport { sendRawTransaction } from \"../../utils/trx\";\nimport { ApproveParamsDto, GetAllowanceParamsDto } from \"../models\";\nimport { ChainTokenService } from \"../models/token\";\n\nexport const MAX_AMOUNT = \"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\";\n\nexport class TronTokenService extends ChainTokenService {\n chainType: ChainType.TRX = ChainType.TRX;\n\n constructor(public tronWeb: typeof TronWeb, public api: AllbridgeCoreClient) {\n super();\n }\n\n async getAllowance(params: GetAllowanceParamsDto): Promise<string> {\n const {\n token: { tokenAddress },\n owner,\n } = params;\n const tokenContract = await this.getContract(tokenAddress);\n const allowance = await tokenContract.methods.allowance(owner, params.spender).call();\n return allowance.toString();\n }\n\n async getTokenBalance(params: GetTokenBalanceParams): Promise<string> {\n const contract = await this.getContract(params.token.tokenAddress);\n const balance = await contract.balanceOf(params.account).call();\n return balance.toString();\n }\n\n async getNativeTokenBalance(params: GetNativeTokenBalanceParams): Promise<string> {\n return (await this.tronWeb.trx.getBalance(params.account)).toString();\n }\n\n async approve(params: ApproveParamsDto): Promise<TransactionResponse> {\n const rawTransaction = await this.buildRawTransactionApprove(params);\n return await sendRawTransaction(this.tronWeb, rawTransaction);\n }\n\n async buildRawTransactionApprove(params: ApproveParamsDto): Promise<RawTransaction> {\n const { tokenAddress, spender, owner, amount } = params;\n const amountHex = amount == undefined ? MAX_AMOUNT : amountToHex(amount);\n\n const parameter = [\n { type: \"address\", value: spender },\n { type: \"uint256\", value: amountHex },\n ];\n const value = \"0\";\n const methodSignature = \"approve(address,uint256)\";\n return this.buildRawTransaction(tokenAddress, methodSignature, parameter, value, owner);\n }\n\n private async getContract(contractAddress: string): Promise<any> {\n return await this.tronWeb.contract(ERC20Abi, contractAddress);\n }\n\n private async buildRawTransaction(\n contractAddress: string,\n methodSignature: string,\n parameters: SmartContractMethodParameter[],\n value: string,\n fromAddress: string\n ): Promise<RawTransaction> {\n const transactionObject = await this.tronWeb.transactionBuilder.triggerSmartContract(\n contractAddress,\n methodSignature,\n {\n callValue: value,\n },\n parameters,\n fromAddress\n );\n if (!transactionObject?.result?.result) {\n throw new SdkError(\"Unknown error: \" + JSON.stringify(transactionObject, null, 2));\n }\n return transactionObject.transaction;\n }\n}\n", "import { BigSource } from \"big.js\";\nimport { AdditionalBasicChainProperties } from \"./chains/models\";\nimport { mainnet } from \"./configs\";\nimport {\n AmountFormat,\n AmountFormatted,\n AmountsAndGasFeeOptions,\n BridgeService,\n ChainDetailsMap,\n CheckAddressResponse,\n ExtraGasMaxLimitResponse,\n GasBalanceResponse,\n GasFeeOptions,\n GetNativeTokenBalanceParams,\n GetTokenBalanceParams,\n LiquidityPoolService,\n Messenger,\n PendingStatusInfoResponse,\n PoolInfo,\n Provider,\n SendAmountDetails,\n SwapAndBridgeCalculationData,\n TokenWithChainDetails,\n TransferStatusResponse,\n} from \"./models\";\nimport { AllbridgeCoreSdkService, NodeRpcUrlsConfig } from \"./services\";\nimport { CctpParams } from \"./services/bridge/sol\";\nimport { DefaultUtils, Utils } from \"./utils\";\n\nexport * from \"./configs\";\nexport * from \"./models\";\n\nexport interface AllbridgeCoreSdkOptions {\n coreApiUrl: string;\n /**\n * A set of query parameters to be added to all requests to the Core API.\n */\n coreApiQueryParams?: Record<string, string>;\n /**\n * A set of headers to be added to all requests to the Core API.\n */\n coreApiHeaders?: Record<string, string>;\n /**\n * Jupiter v6 Swap Api\n */\n jupiterUrl: string;\n wormholeMessengerProgramId: string;\n solanaLookUpTable: string;\n sorobanNetworkPassphrase: string;\n /**\n * Optional. Will be used in methods</br>\n * {@link LiquidityPoolService.getPoolInfoFromChain} and {@link LiquidityPoolService.getAmountToBeWithdrawn}</br>\n * to fetch information from the blockchain with fewer HTTP requests using JSON-RPC API\n */\n tronJsonRpc?: string;\n cctpParams: CctpParams;\n /**\n * The number of seconds that pool information taken from the chain will be cached.\n *\n * @type {number}\n */\n cachePoolInfoChainSec: number;\n\n /**\n * @Internal\n * Optional additional properties to merge with the default properties.\n */\n additionalChainsProperties?: Record<string, AdditionalBasicChainProperties>;\n}\n\n/**\n * Type representing RPC node URLs for different blockchain chains.</br>\n * Provide node RPC URL for chain connection you intend to communicate with</br>\n * - required for SOL, TRX chains</br>\n * - optional for EVM chains -- you can interact by passing a {@link Provider} that will be used to communicate with the chain</br>\n * @typedef {Record<string, string>} NodeRpcUrls\n * @property {string} chainSymbol - The symbol of the chain representing one of the supported blockchain networks (e.g., \"ETH\" for Ethereum). For more details, see: {@link ChainSymbol}.\n * @property {string} rpcUrl - The RPC node URL for the specified chain.\n */\nexport type NodeRpcUrls = Record<string, string>;\n\n/**\n * @Deprecated Use {@link NodeRpcUrls}\n */\nexport interface NodeUrlsConfig {\n solanaRpcUrl: string;\n tronRpcUrl: string;\n}\n\n/**\n * @Deprecated Use {@link NodeRpcUrls}\n */\nfunction isNodeUrlsConfig(nodeUrls: NodeUrlsConfig | NodeRpcUrls): nodeUrls is NodeUrlsConfig {\n return \"solanaRpcUrl\" in nodeUrls;\n}\n\nexport class AllbridgeCoreSdk {\n readonly params: AllbridgeCoreSdkOptions;\n\n bridge: BridgeService;\n pool: LiquidityPoolService;\n utils: Utils;\n\n private service: AllbridgeCoreSdkService;\n\n /**\n * Initializes the SDK object.\n * @param nodeUrls node rpc urls for full functionality\n * @param params\n * Optional.\n * If not defined, the default {@link mainnet} parameters are used.\n */\n constructor(nodeUrls: NodeUrlsConfig | NodeRpcUrls, params: AllbridgeCoreSdkOptions = mainnet) {\n let nodeRpcUrlsConfig: NodeRpcUrlsConfig;\n if (isNodeUrlsConfig(nodeUrls)) {\n nodeRpcUrlsConfig = new NodeRpcUrlsConfig({ SOL: nodeUrls.solanaRpcUrl, TRX: nodeUrls.tronRpcUrl });\n } else {\n nodeRpcUrlsConfig = new NodeRpcUrlsConfig(nodeUrls);\n }\n this.service = new AllbridgeCoreSdkService(nodeRpcUrlsConfig, params);\n this.bridge = this.service.bridge;\n this.pool = this.service.pool;\n this.utils = new DefaultUtils(nodeRpcUrlsConfig, params);\n this.params = params;\n }\n\n /**\n * Returns {@link ChainDetailsMap} containing a list of supported tokens groped by chain.\n *\n * @param type - A string value which specifies ChainDetailsMap to retrieve.\n * Can be either 'swap' for send or 'pool' for liquidity pools setup.\n * Defaults to 'swap'.\n */\n async chainDetailsMap(type: \"swap\" | \"pool\" = \"swap\"): Promise<ChainDetailsMap> {\n return this.service.chainDetailsMap(type);\n }\n\n /**\n * Returns a list of supported {@link TokenWithChainDetails | tokens}.\n *\n * @param type - A string value which specifies a set of tokens to retrieve.\n * Can be either 'swap' for tokens to send or 'pool' for liquidity pools operations.\n * Defaults to 'swap'.\n * @returns A promise that resolves to an array of {@link TokenWithChainDetails}.\n */\n async tokens(type: \"swap\" | \"pool\" = \"swap\"): Promise<TokenWithChainDetails[]> {\n return this.service.tokens(type);\n }\n\n /**\n * Returns a list of supported {@link TokenWithChainDetails | tokens} on the selected chain.\n * @param chainSymbol - The symbol of the chain representing one of the supported blockchain networks (e.g., \"ETH\" for Ethereum). For more details, see: {@link ChainSymbol}.\n * @param type - A string value which specifies a set of tokens to retrieve.\n * Can be either 'swap' for tokens to send or 'pool' for liquidity pools operations.\n * Defaults to 'swap'.\n */\n async tokensByChain(chainSymbol: string, type: \"swap\" | \"pool\" = \"swap\"): Promise<TokenWithChainDetails[]> {\n return this.service.tokensByChain(chainSymbol, type);\n }\n\n /**\n * Fetches information about tokens transfer by chosen chainSymbol and transaction Id from the Allbridge Core API.\n * @param chainSymbol - The symbol of the chain representing one of the supported blockchain networks (e.g., \"ETH\" for Ethereum). For more details, see: {@link ChainSymbol}.\n * @param txId\n */\n async getTransferStatus(chainSymbol: string, txId: string): Promise<TransferStatusResponse> {\n return this.service.getTransferStatus(chainSymbol, txId);\n }\n\n /**\n * Get gas balance\n * @param chainSymbol - The symbol of the chain representing one of the supported blockchain networks (e.g., \"ETH\" for Ethereum). For more details, see: {@link ChainSymbol}.\n * @param address\n */\n async getGasBalance(chainSymbol: string, address: string): Promise<GasBalanceResponse> {\n return this.service.getGasBalance(chainSymbol, address);\n }\n\n /**\n * Check address and show gas balance\n * @Deprecated\n * @param chainSymbol - The symbol of the chain representing one of the supported blockchain networks (e.g., \"ETH\" for Ethereum). For more details, see: {@link ChainSymbol}.\n * @param recipientAddress\n * @param tokenAddress\n */\n async checkAddress(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n chainSymbol: string,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n recipientAddress: string,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n tokenAddress?: string\n ): Promise<CheckAddressResponse> {\n return await this.service.checkAddress();\n }\n\n /**\n * Returns information about pending transactions for the same destination chain and the amount of tokens can be received as a result of transfer considering pending transactions.\n * @param amount the amount of tokens that will be sent\n * @param amountFormat amount format\n * @param sourceToken selected token transfer from\n * @param destToken selected token transfer to\n * @returns range of possible amount based on already pending transactions\n */\n async getPendingStatusInfo(\n amount: string,\n amountFormat: AmountFormat,\n sourceToken: TokenWithChainDetails,\n destToken: TokenWithChainDetails\n ): Promise<PendingStatusInfoResponse> {\n return this.service.getPendingStatusInfo(amount, amountFormat, sourceToken, destToken);\n }\n\n /**\n * Get token balance\n * @param params\n * @param provider\n * @returns Token balance\n */\n async getTokenBalance(params: GetTokenBalanceParams, provider?: Provider): Promise<string> {\n return this.service.getTokenBalance(params, provider);\n }\n\n /**\n * Get native (gas) token balance\n * @param params\n * @param provider\n * @returns Token balance\n */\n async getNativeTokenBalance(params: GetNativeTokenBalanceParams, provider?: Provider): Promise<AmountFormatted> {\n return this.service.getNativeTokenBalance(params, provider);\n }\n\n /**\n * @Deprecated\n * Calculates the percentage of fee from the initial amount that is charged when swapping from the selected source chain.\n * (Does not include fee related to the destination chain. Does not include gas fee)\n * @param amountFloat initial amount of tokens to swap\n * @param sourceChainToken selected token on the source chain\n * @returns fee percent\n */\n async calculateFeePercentOnSourceChain(\n amountFloat: BigSource,\n sourceChainToken: TokenWithChainDetails\n ): Promise<number> {\n return this.service.calculateFeePercentOnSourceChain(amountFloat, sourceChainToken);\n }\n\n /**\n * @Deprecated\n * Calculates the percentage of fee that is charged when swapping to the selected destination chain. The destination chain fee percent applies to the amount after the source chain fee.\n * (Does not include fee related to the source chain. Does not include gas fee)\n * @see {@link calculateFeePercentOnSourceChain}\n * @param amountFloat initial amount of tokens to swap\n * @param sourceChainToken selected token on the source chain\n * @param destinationChainToken selected token on the destination chain\n * @returns fee percent\n */\n async calculateFeePercentOnDestinationChain(\n amountFloat: BigSource,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails\n ): Promise<number> {\n return this.service.calculateFeePercentOnDestinationChain(amountFloat, sourceChainToken, destinationChainToken);\n }\n\n /**\n * Calculates the amount of tokens to be received as a result of transfer\n * and fetches {@link GasFeeOptions} which contains available ways to pay the gas fee.\n * @param amountToSendFloat the amount of tokens that will be sent\n * @param sourceChainToken selected token on the source chain\n * @param destinationChainToken selected token on the destination chain\n * @param messenger\n */\n async getAmountToBeReceivedAndGasFeeOptions(\n amountToSendFloat: BigSource,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger: Messenger\n ): Promise<AmountsAndGasFeeOptions> {\n return this.service.getAmountToBeReceivedAndGasFeeOptions(\n amountToSendFloat,\n sourceChainToken,\n destinationChainToken,\n messenger\n );\n }\n\n /**\n * Calculates the amount of tokens to send based on requested tokens amount be received as a result of transfer.\n * and fetches {@link GasFeeOptions} which contains available ways to pay the gas fee.\n * @param amountToBeReceivedFloat the amount of tokens that should be received\n * @param sourceChainToken selected token on the source chain\n * @param destinationChainToken selected token on the destination chain\n * @param messenger\n */\n async getAmountToSendAndGasFeeOptions(\n amountToBeReceivedFloat: BigSource,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger: Messenger\n ): Promise<AmountsAndGasFeeOptions> {\n return this.service.getAmountToSendAndGasFeeOptions(\n amountToBeReceivedFloat,\n sourceChainToken,\n destinationChainToken,\n messenger\n );\n }\n\n /**\n * Calculates the amount of tokens to be received as a result of transfer.\n * @param amountToSendFloat the amount of tokens that will be sent\n * @param sourceChainToken selected token on the source chain\n * @param destinationChainToken selected token on the destination chain\n * @param messenger Optional. selected messenger\n */\n async getAmountToBeReceived(\n amountToSendFloat: BigSource,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n /**\n * The Messengers for different routes.\n * Optional.\n * The {@link Messenger.ALLBRIDGE}, {@link Messenger.WORMHOLE} by default.\n */\n messenger?: Messenger\n ): Promise<string> {\n return this.service.getAmountToBeReceived(amountToSendFloat, sourceChainToken, destinationChainToken, messenger);\n }\n\n /**\n * Calculates the amount of tokens to be received as a result of transfer based on actual blockchain pool state.\n * @param amountToSendFloat the amount of tokens that will be sent\n * @param sourceChainToken selected token on the source chain\n * @param destinationChainToken selected token on the destination chain\n * @param messenger Optional. selected messenger\n * @param sourceProvider Optional. source chain Provider\n * @param destinationProvider Optional. destination chain Provider\n */\n async getAmountToBeReceivedFromChain(\n amountToSendFloat: BigSource,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n /**\n * The Messengers for different routes.\n * Optional.\n * The {@link Messenger.ALLBRIDGE}, {@link Messenger.WORMHOLE} by default.\n */\n messenger?: Messenger,\n sourceProvider?: Provider,\n destinationProvider?: Provider\n ): Promise<string> {\n return this.service.getAmountToBeReceivedFromChain(\n amountToSendFloat,\n sourceChainToken,\n destinationChainToken,\n messenger,\n sourceProvider,\n destinationProvider\n );\n }\n\n /**\n * Calculates the amount of tokens to be received as a result of transfer based on passed pool state.\n * @param amountToSendFloat the amount of tokens that will be sent\n * @param sourceChainToken selected token on the source chain\n * @param destinationChainToken selected token on the destination chain\n * @param sourcePool source token pool state\n * @param destinationPool destination token pool state\n * @param messenger Optional. selected messenger\n */\n getAmountToBeReceivedFromPools(\n amountToSendFloat: BigSource,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n sourcePool: PoolInfo,\n destinationPool: PoolInfo,\n messenger?: Messenger\n ): string {\n return this.service.getAmountToBeReceivedFromPools(\n amountToSendFloat,\n sourceChainToken,\n destinationChainToken,\n sourcePool,\n destinationPool,\n messenger\n );\n }\n\n /**\n * Calculates the amount of tokens to send based on requested tokens amount be received as a result of transfer.\n * @param amountToBeReceivedFloat the amount of tokens that should be received\n * @param sourceChainToken selected token on the source chain\n * @param destinationChainToken selected token on the destination chain\n * @param messenger Optional. selected messenger\n */\n async getAmountToSend(\n amountToBeReceivedFloat: BigSource,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n /**\n * The Messengers for different routes.\n * Optional.\n * The {@link Messenger.ALLBRIDGE}, {@link Messenger.WORMHOLE} by default.\n */\n messenger?: Messenger\n ): Promise<string> {\n return this.service.getAmountToSend(amountToBeReceivedFloat, sourceChainToken, destinationChainToken, messenger);\n }\n\n /**\n * Calculates the amount of tokens to send based on requested tokens amount be received as a result of transfer based on actual blockchain pool state.\n * @param amountToBeReceivedFloat the amount of tokens that should be received\n * @param sourceChainToken selected token on the source chain\n * @param destinationChainToken selected token on the destination chain\n * @param messenger Optional. selected messenger\n * @param sourceProvider Optional. source chain Provider\n * @param destinationProvider Optional. destination chain Provider\n */\n async getAmountToSendFromChain(\n amountToBeReceivedFloat: BigSource,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n /**\n * The Messengers for different routes.\n * Optional.\n * The {@link Messenger.ALLBRIDGE}, {@link Messenger.WORMHOLE} by default.\n */\n messenger?: Messenger,\n sourceProvider?: Provider,\n destinationProvider?: Provider\n ): Promise<string> {\n return this.service.getAmountToSendFromChain(\n amountToBeReceivedFloat,\n sourceChainToken,\n destinationChainToken,\n messenger,\n sourceProvider,\n destinationProvider\n );\n }\n\n /**\n * Calculates the amount of tokens to send based on requested tokens amount be received as a result of transfer based on passed pool state.\n * @param amountToBeReceivedFloat the amount of tokens that should be received\n * @param sourceChainToken selected token on the source chain\n * @param destinationChainToken selected token on the destination chain\n * @param sourcePool source token pool state\n * @param destinationPool destination token pool state\n * @param messenger Optional. selected messenger\n */\n getAmountToSendFromPools(\n amountToBeReceivedFloat: BigSource,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n sourcePool: PoolInfo,\n destinationPool: PoolInfo,\n messenger?: Messenger\n ): string {\n return this.service.getAmountToSendFromPools(\n amountToBeReceivedFloat,\n sourceChainToken,\n destinationChainToken,\n sourcePool,\n destinationPool,\n messenger\n );\n }\n\n /**\n * Fetches possible ways to pay the transfer gas fee.\n * @param sourceChainToken selected token on the source chain\n * @param destinationChainToken selected token on the destination chain\n * @param messenger\n * @returns {@link GasFeeOptions}\n */\n async getGasFeeOptions(\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger: Messenger\n ): Promise<GasFeeOptions> {\n return this.service.getGasFeeOptions(sourceChainToken, destinationChainToken, messenger);\n }\n\n /**\n * Gets the average time in ms to complete a transfer for given tokens and messenger.\n * @param sourceChainToken selected token on the source chain.\n * @param destinationChainToken selected token on the destination chain.\n * @param messenger\n * @returns Average transfer time in milliseconds or null if a given combination of tokens and messenger is not supported.\n */\n getAverageTransferTime(\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger: Messenger\n ): number | null {\n return this.service.getAverageTransferTime(sourceChainToken, destinationChainToken, messenger);\n }\n\n /**\n * Gets information about the poolInfo by token\n * @param token\n * @returns poolInfo\n */\n async getPoolInfoByToken(token: TokenWithChainDetails): Promise<PoolInfo> {\n return this.service.getPoolInfoByToken(token);\n }\n\n /**\n * Forces refresh of cached information about the state of liquidity pools.\n * Outdated cache leads to calculated amounts being less accurate.\n * The cache is invalidated at regular intervals, but it can be forced to be refreshed by calling this method.+\n *\n * @param tokens if present, the corresponding liquidity pools will be updated\n */\n async refreshPoolInfo(tokens?: TokenWithChainDetails | TokenWithChainDetails[]): Promise<void> {\n return this.service.refreshPoolInfo(tokens);\n }\n\n /**\n * Convert APR to percentage view\n * @param apr\n * @returns aprPercentageView\n */\n aprInPercents(apr: string): string {\n return this.service.aprInPercents(apr);\n }\n\n /**\n * Get possible limit of extra gas amount.\n * @param sourceChainToken selected token on the source chain\n * @param destinationChainToken selected token on the destination chain\n * @returns {@link ExtraGasMaxLimitResponse}\n */\n async getExtraGasMaxLimits(\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails\n ): Promise<ExtraGasMaxLimitResponse> {\n return this.service.getExtraGasMaxLimits(sourceChainToken, destinationChainToken);\n }\n\n /**\n * @param amount - amount\n * @param amountFormat - AmountFormat\n * @param sourceToken - selected token on the source chain\n * @return virtual amount\n */\n async getVUsdFromAmount(\n amount: string,\n amountFormat: AmountFormat,\n sourceToken: TokenWithChainDetails\n ): Promise<AmountFormatted> {\n return this.service.getVUsdFromAmount(amount, amountFormat, sourceToken);\n }\n\n /**\n * @param vUsdAmount - amount of vUsd, int format\n * @param destToken selected token on the destination chain\n * @return amount of destToken\n */\n async getAmountFromVUsd(vUsdAmount: string, destToken: TokenWithChainDetails): Promise<AmountFormatted> {\n return this.service.getAmountFromVUsd(vUsdAmount, destToken);\n }\n\n /**\n * @Deprecated Use {@link getSendAmountDetails}\n * @param amountInTokenPrecision\n * @param sourceToken\n * @param destToken\n */\n async swapAndBridgeFeeCalculation(\n amountInTokenPrecision: string,\n sourceToken: TokenWithChainDetails,\n destToken: TokenWithChainDetails\n ): Promise<SwapAndBridgeCalculationData> {\n return this.service.swapAndBridgeFeeCalculation(amountInTokenPrecision, sourceToken, destToken);\n }\n\n /**\n * @Deprecated Use {@link getAmountToBeReceived} and then {@link getSendAmountDetails}\n * @param amountInTokenPrecision\n * @param sourceToken\n * @param destToken\n */\n async swapAndBridgeFeeCalculationReverse(\n amountInTokenPrecision: string,\n sourceToken: TokenWithChainDetails,\n destToken: TokenWithChainDetails\n ): Promise<SwapAndBridgeCalculationData> {\n return this.service.swapAndBridgeFeeCalculationReverse(amountInTokenPrecision, sourceToken, destToken);\n }\n\n /**\n * Show amount changes (fee and amount adjustment) during send through pools on source and destination chains\n */\n async getSendAmountDetails(\n amount: string,\n amountFormat: AmountFormat,\n sourceToken: TokenWithChainDetails,\n destToken: TokenWithChainDetails\n ): Promise<SendAmountDetails> {\n return this.service.getSendAmountDetails(amount, amountFormat, sourceToken, destToken);\n }\n}\n"],
|
|
5
|
-
"mappings": "AAAA,IAAIA,GAAY,CAAC,EACbC,GAAa,GACjB,SAASC,IAAQ,CACf,GAAID,GAAY,OAAOD,GACvBC,GAAa,GACbD,GAAU,WAAaG,EACvBH,GAAU,YAAcI,EACxBJ,GAAU,cAAgBK,EAM1B,QALIC,EAAS,CAAC,EACVC,EAAY,CAAC,EACbC,EAAM,OAAO,WAAe,IAAc,WAAa,MACvDC,EAAO,mEAEFC,EAAI,EAAGC,EAAMF,EAAK,OAAQC,EAAIC,EAAK,EAAED,EAC5CJ,EAAOI,CAAC,EAAID,EAAKC,CAAC,EAClBH,EAAUE,EAAK,WAAWC,CAAC,CAAC,EAAIA,EAKlCH,EAAU,EAAiB,EAAI,GAC/BA,EAAU,EAAiB,EAAI,GAE/B,SAASK,EAAQC,EAAK,CACpB,IAAIF,EAAME,EAAI,OAEd,GAAIF,EAAM,EAAI,EACZ,MAAM,IAAI,MAAM,gDAAgD,EAKlE,IAAIG,EAAWD,EAAI,QAAQ,GAAG,EAC1BC,IAAa,KAAIA,EAAWH,GAChC,IAAII,EAAkBD,IAAaH,EAAM,EAAI,EAAIG,EAAW,EAC5D,MAAO,CAACA,EAAUC,CAAe,CACnC,CAGA,SAASZ,EAAWU,EAAK,CACvB,IAAIG,EAAOJ,EAAQC,CAAG,EAClBC,EAAWE,EAAK,CAAC,EACjBD,EAAkBC,EAAK,CAAC,EAC5B,OAAQF,EAAWC,GAAmB,EAAI,EAAIA,CAChD,CAEA,SAASE,EAAYJ,EAAKC,EAAUC,EAAiB,CACnD,OAAQD,EAAWC,GAAmB,EAAI,EAAIA,CAChD,CAEA,SAASX,EAAYS,EAAK,CACxB,IAAIK,EACAF,EAAOJ,EAAQC,CAAG,EAClBC,EAAWE,EAAK,CAAC,EACjBD,EAAkBC,EAAK,CAAC,EACxBG,EAAM,IAAIX,EAAIS,EAAYJ,EAAKC,EAAUC,CAAe,CAAC,EACzDK,EAAU,EAEVT,EAAMI,EAAkB,EAAID,EAAW,EAAIA,EAC3CJ,EAEJ,IAAKA,EAAI,EAAGA,EAAIC,EAAKD,GAAK,EACxBQ,EAAMX,EAAUM,EAAI,WAAWH,CAAC,CAAC,GAAK,GAAKH,EAAUM,EAAI,WAAWH,EAAI,CAAC,CAAC,GAAK,GAAKH,EAAUM,EAAI,WAAWH,EAAI,CAAC,CAAC,GAAK,EAAIH,EAAUM,EAAI,WAAWH,EAAI,CAAC,CAAC,EAC3JS,EAAIC,GAAS,EAAIF,GAAO,GAAK,IAC7BC,EAAIC,GAAS,EAAIF,GAAO,EAAI,IAC5BC,EAAIC,GAAS,EAAIF,EAAM,IAGzB,OAAIH,IAAoB,IACtBG,EAAMX,EAAUM,EAAI,WAAWH,CAAC,CAAC,GAAK,EAAIH,EAAUM,EAAI,WAAWH,EAAI,CAAC,CAAC,GAAK,EAC9ES,EAAIC,GAAS,EAAIF,EAAM,KAGrBH,IAAoB,IACtBG,EAAMX,EAAUM,EAAI,WAAWH,CAAC,CAAC,GAAK,GAAKH,EAAUM,EAAI,WAAWH,EAAI,CAAC,CAAC,GAAK,EAAIH,EAAUM,EAAI,WAAWH,EAAI,CAAC,CAAC,GAAK,EACvHS,EAAIC,GAAS,EAAIF,GAAO,EAAI,IAC5BC,EAAIC,GAAS,EAAIF,EAAM,KAGlBC,CACT,CAEA,SAASE,EAAgBC,EAAK,CAC5B,OAAOhB,EAAOgB,GAAO,GAAK,EAAE,EAAIhB,EAAOgB,GAAO,GAAK,EAAE,EAAIhB,EAAOgB,GAAO,EAAI,EAAE,EAAIhB,EAAOgB,EAAM,EAAE,CAClG,CAEA,SAASC,EAAYC,EAAOC,EAAOC,EAAK,CAItC,QAHIR,EACAS,EAAS,CAAC,EAELjB,EAAIe,EAAOf,EAAIgB,EAAKhB,GAAK,EAChCQ,GAAOM,EAAMd,CAAC,GAAK,GAAK,WAAac,EAAMd,EAAI,CAAC,GAAK,EAAI,QAAUc,EAAMd,EAAI,CAAC,EAAI,KAClFiB,EAAO,KAAKN,EAAgBH,CAAG,CAAC,EAGlC,OAAOS,EAAO,KAAK,EAAE,CACvB,CAEA,SAAStB,EAAcmB,EAAO,CAS5B,QARIN,EACAP,EAAMa,EAAM,OACZI,EAAajB,EAAM,EAEnBkB,EAAQ,CAAC,EACTC,EAAiB,MAGZpB,EAAI,EAAGqB,EAAOpB,EAAMiB,EAAYlB,EAAIqB,EAAMrB,GAAKoB,EACtDD,EAAM,KAAKN,EAAYC,EAAOd,EAAGA,EAAIoB,EAAiBC,EAAOA,EAAOrB,EAAIoB,CAAc,CAAC,EAIzF,OAAIF,IAAe,GACjBV,EAAMM,EAAMb,EAAM,CAAC,EACnBkB,EAAM,KAAKvB,EAAOY,GAAO,CAAC,EAAIZ,EAAOY,GAAO,EAAI,EAAE,EAAI,IAAI,GACjDU,IAAe,IACxBV,GAAOM,EAAMb,EAAM,CAAC,GAAK,GAAKa,EAAMb,EAAM,CAAC,EAC3CkB,EAAM,KAAKvB,EAAOY,GAAO,EAAE,EAAIZ,EAAOY,GAAO,EAAI,EAAE,EAAIZ,EAAOY,GAAO,EAAI,EAAE,EAAI,GAAG,GAG7EW,EAAM,KAAK,EAAE,CACtB,CAEA,OAAO7B,EACT,CAEA,IAAIgC,GAAY,CAAC,EACbC,GAAa,GACjB,SAASC,IAAQ,CACf,GAAID,GAAY,OAAOD,GACvBC,GAAa,GAGb,OAAAD,GAAU,KAAO,SAAUG,EAAQC,EAAQC,EAAMC,EAAMC,EAAQ,CAC7D,IAAIC,EAAGC,EACHC,EAAOH,EAAS,EAAID,EAAO,EAC3BK,GAAQ,GAAKD,GAAQ,EACrBE,EAAQD,GAAQ,EAChBE,EAAQ,GACRnC,EAAI2B,EAAOE,EAAS,EAAI,EACxBO,EAAIT,EAAO,GAAK,EAChBU,EAAIZ,EAAOC,EAAS1B,CAAC,EAMzB,IALAA,GAAKoC,EACLN,EAAIO,GAAK,GAAK,CAACF,GAAS,EACxBE,IAAM,CAACF,EACPA,GAASH,EAEFG,EAAQ,EAAGL,EAAIA,EAAI,IAAML,EAAOC,EAAS1B,CAAC,EAAGA,GAAKoC,EAAGD,GAAS,EAAG,CAMxE,IAJAJ,EAAID,GAAK,GAAK,CAACK,GAAS,EACxBL,IAAM,CAACK,EACPA,GAASP,EAEFO,EAAQ,EAAGJ,EAAIA,EAAI,IAAMN,EAAOC,EAAS1B,CAAC,EAAGA,GAAKoC,EAAGD,GAAS,EAAG,CAExE,GAAIL,IAAM,EACRA,EAAI,EAAII,MACH,IAAIJ,IAAMG,EACf,OAAOF,EAAI,KAAOM,EAAI,GAAK,GAAK,MAEhCN,EAAIA,EAAI,KAAK,IAAI,EAAGH,CAAI,EACxBE,EAAIA,EAAII,EAGV,OAAQG,EAAI,GAAK,GAAKN,EAAI,KAAK,IAAI,EAAGD,EAAIF,CAAI,CAChD,EAEAN,GAAU,MAAQ,SAAUG,EAAQa,EAAOZ,EAAQC,EAAMC,EAAMC,EAAQ,CACrE,IAAIC,EAAGC,EAAGQ,EACNP,EAAOH,EAAS,EAAID,EAAO,EAC3BK,GAAQ,GAAKD,GAAQ,EACrBE,EAAQD,GAAQ,EAChBO,EAAKZ,IAAS,GAAK,KAAK,IAAI,EAAG,GAAG,EAAI,KAAK,IAAI,EAAG,GAAG,EAAI,EACzD5B,EAAI2B,EAAO,EAAIE,EAAS,EACxBO,EAAIT,EAAO,EAAI,GACfU,EAAIC,EAAQ,GAAKA,IAAU,GAAK,EAAIA,EAAQ,EAAI,EAAI,EAqCxD,IApCAA,EAAQ,KAAK,IAAIA,CAAK,EAElB,MAAMA,CAAK,GAAKA,IAAU,KAC5BP,EAAI,MAAMO,CAAK,EAAI,EAAI,EACvBR,EAAIG,IAEJH,EAAI,KAAK,MAAM,KAAK,IAAIQ,CAAK,EAAI,KAAK,GAAG,EAErCA,GAASC,EAAI,KAAK,IAAI,EAAG,CAACT,CAAC,GAAK,IAClCA,IACAS,GAAK,GAGHT,EAAII,GAAS,EACfI,GAASE,EAAKD,EAEdD,GAASE,EAAK,KAAK,IAAI,EAAG,EAAIN,CAAK,EAGjCI,EAAQC,GAAK,IACfT,IACAS,GAAK,GAGHT,EAAII,GAASD,GACfF,EAAI,EACJD,EAAIG,GACKH,EAAII,GAAS,GACtBH,GAAKO,EAAQC,EAAI,GAAK,KAAK,IAAI,EAAGX,CAAI,EACtCE,EAAIA,EAAII,IAERH,EAAIO,EAAQ,KAAK,IAAI,EAAGJ,EAAQ,CAAC,EAAI,KAAK,IAAI,EAAGN,CAAI,EACrDE,EAAI,IAIDF,GAAQ,EAAGH,EAAOC,EAAS1B,CAAC,EAAI+B,EAAI,IAAK/B,GAAKoC,EAAGL,GAAK,IAAKH,GAAQ,EAAG,CAK7E,IAHAE,EAAIA,GAAKF,EAAOG,EAChBC,GAAQJ,EAEDI,EAAO,EAAGP,EAAOC,EAAS1B,CAAC,EAAI8B,EAAI,IAAK9B,GAAKoC,EAAGN,GAAK,IAAKE,GAAQ,EAAG,CAE5EP,EAAOC,EAAS1B,EAAIoC,CAAC,GAAKC,EAAI,GAChC,EAEOf,EACT,CAEA,IAAImB,GAAY,CAAC,EACbC,GAAW,GACf,SAASC,IAAM,CACb,GAAID,GAAU,OAAOD,GACrBC,GAAW,GAEX,IAAME,EAASpD,GAAM,EAEfqD,EAAUrB,GAAM,EAEhBsB,EAAsB,OAAO,QAAW,YAAc,OAAO,OAAO,KAAW,WAAa,OAAO,IAAO,4BAA4B,EAC1I,KACFL,GAAU,OAASM,EACnBN,GAAU,WAAaO,EACvBP,GAAU,kBAAoB,GAC9B,IAAMQ,EAAe,WACrBR,GAAU,WAAaQ,EAgBvBF,EAAO,oBAAsBG,EAAkB,EAE3C,CAACH,EAAO,qBAAuB,OAAO,QAAY,KAAe,OAAO,QAAQ,OAAU,YAC5F,QAAQ,MAAM,+IAAoJ,EAGpK,SAASG,GAAoB,CAE3B,GAAI,CACF,IAAMzC,EAAM,IAAI,WAAW,CAAC,EACtB0C,EAAQ,CACZ,IAAK,UAAY,CACf,MAAO,GACT,CACF,EACA,cAAO,eAAeA,EAAO,WAAW,SAAS,EACjD,OAAO,eAAe1C,EAAK0C,CAAK,EACzB1C,EAAI,IAAI,IAAM,EACvB,MAAY,CACV,MAAO,EACT,CACF,CAEA,OAAO,eAAesC,EAAO,UAAW,SAAU,CAChD,WAAY,GACZ,IAAK,UAAY,CACf,GAAKA,EAAO,SAAS,IAAI,EACzB,OAAO,KAAK,MACd,CACF,CAAC,EACD,OAAO,eAAeA,EAAO,UAAW,SAAU,CAChD,WAAY,GACZ,IAAK,UAAY,CACf,GAAKA,EAAO,SAAS,IAAI,EACzB,OAAO,KAAK,UACd,CACF,CAAC,EAED,SAASK,EAAaC,EAAQ,CAC5B,GAAIA,EAASJ,EACX,MAAM,IAAI,WAAW,cAAiBI,EAAS,gCAAmC,EAIpF,IAAMC,EAAM,IAAI,WAAWD,CAAM,EACjC,cAAO,eAAeC,EAAKP,EAAO,SAAS,EACpCO,CACT,CAYA,SAASP,EAAOQ,EAAKC,EAAkBH,EAAQ,CAE7C,GAAI,OAAOE,GAAQ,SAAU,CAC3B,GAAI,OAAOC,GAAqB,SAC9B,MAAM,IAAI,UAAU,oEAAsE,EAG5F,OAAOC,EAAYF,CAAG,CACxB,CAEA,OAAOG,EAAKH,EAAKC,EAAkBH,CAAM,CAC3C,CAEAN,EAAO,SAAW,KAElB,SAASW,EAAKpB,EAAOkB,EAAkBH,EAAQ,CAC7C,GAAI,OAAOf,GAAU,SACnB,OAAOqB,EAAWrB,EAAOkB,CAAgB,EAG3C,GAAI,YAAY,OAAOlB,CAAK,EAC1B,OAAOsB,EAActB,CAAK,EAG5B,GAAIA,GAAS,KACX,MAAM,IAAI,UAAU,kHAAyH,OAAOA,CAAK,EAO3J,GAJIuB,GAAWvB,EAAO,WAAW,GAAKA,GAASuB,GAAWvB,EAAM,OAAQ,WAAW,GAI/E,OAAO,kBAAsB,MAAgBuB,GAAWvB,EAAO,iBAAiB,GAAKA,GAASuB,GAAWvB,EAAM,OAAQ,iBAAiB,GAC1I,OAAOwB,EAAgBxB,EAAOkB,EAAkBH,CAAM,EAGxD,GAAI,OAAOf,GAAU,SACnB,MAAM,IAAI,UAAU,uEAAyE,EAG/F,IAAMyB,EAAUzB,EAAM,SAAWA,EAAM,QAAQ,EAE/C,GAAIyB,GAAW,MAAQA,IAAYzB,EACjC,OAAOS,EAAO,KAAKgB,EAASP,EAAkBH,CAAM,EAGtD,IAAMW,EAAIC,EAAW3B,CAAK,EAC1B,GAAI0B,EAAG,OAAOA,EAEd,GAAI,OAAO,OAAW,KAAe,OAAO,aAAe,MAAQ,OAAO1B,EAAM,OAAO,WAAW,GAAM,WACtG,OAAOS,EAAO,KAAKT,EAAM,OAAO,WAAW,EAAE,QAAQ,EAAGkB,EAAkBH,CAAM,EAGlF,MAAM,IAAI,UAAU,kHAAyH,OAAOf,CAAK,CAC3J,CAWAS,EAAO,KAAO,SAAUT,EAAOkB,EAAkBH,EAAQ,CACvD,OAAOK,EAAKpB,EAAOkB,EAAkBH,CAAM,CAC7C,EAIA,OAAO,eAAeN,EAAO,UAAW,WAAW,SAAS,EAC5D,OAAO,eAAeA,EAAQ,UAAU,EAExC,SAASmB,EAAWC,EAAM,CACxB,GAAI,OAAOA,GAAS,SAClB,MAAM,IAAI,UAAU,wCAA0C,EACzD,GAAIA,EAAO,EAChB,MAAM,IAAI,WAAW,cAAiBA,EAAO,gCAAmC,CAEpF,CAEA,SAASC,EAAMD,EAAME,EAAMC,EAAU,CAGnC,OAFAJ,EAAWC,CAAI,EAEXA,GAAQ,EACHf,EAAae,CAAI,EAGtBE,IAAS,OAIJ,OAAOC,GAAa,SAAWlB,EAAae,CAAI,EAAE,KAAKE,EAAMC,CAAQ,EAAIlB,EAAae,CAAI,EAAE,KAAKE,CAAI,EAGvGjB,EAAae,CAAI,CAC1B,CAOApB,EAAO,MAAQ,SAAUoB,EAAME,EAAMC,EAAU,CAC7C,OAAOF,EAAMD,EAAME,EAAMC,CAAQ,CACnC,EAEA,SAASb,EAAYU,EAAM,CACzB,OAAAD,EAAWC,CAAI,EACRf,EAAae,EAAO,EAAI,EAAII,EAAQJ,CAAI,EAAI,CAAC,CACtD,CAMApB,EAAO,YAAc,SAAUoB,EAAM,CACnC,OAAOV,EAAYU,CAAI,CACzB,EAMApB,EAAO,gBAAkB,SAAUoB,EAAM,CACvC,OAAOV,EAAYU,CAAI,CACzB,EAEA,SAASR,EAAWa,EAAQF,EAAU,CAKpC,IAJI,OAAOA,GAAa,UAAYA,IAAa,MAC/CA,EAAW,QAGT,CAACvB,EAAO,WAAWuB,CAAQ,EAC7B,MAAM,IAAI,UAAU,qBAAuBA,CAAQ,EAGrD,IAAMjB,EAAS5D,EAAW+E,EAAQF,CAAQ,EAAI,EAC1ChB,EAAMF,EAAaC,CAAM,EACvBoB,EAASnB,EAAI,MAAMkB,EAAQF,CAAQ,EAEzC,OAAIG,IAAWpB,IAIbC,EAAMA,EAAI,MAAM,EAAGmB,CAAM,GAGpBnB,CACT,CAEA,SAASoB,EAAcC,EAAO,CAC5B,IAAMtB,EAASsB,EAAM,OAAS,EAAI,EAAIJ,EAAQI,EAAM,MAAM,EAAI,EACxDrB,EAAMF,EAAaC,CAAM,EAE/B,QAASrD,EAAI,EAAGA,EAAIqD,EAAQrD,GAAK,EAC/BsD,EAAItD,CAAC,EAAI2E,EAAM3E,CAAC,EAAI,IAGtB,OAAOsD,CACT,CAEA,SAASM,EAAcgB,EAAW,CAChC,GAAIf,GAAWe,EAAW,UAAU,EAAG,CACrC,IAAMC,EAAO,IAAI,WAAWD,CAAS,EACrC,OAAOd,EAAgBe,EAAK,OAAQA,EAAK,WAAYA,EAAK,UAAU,CACtE,CAEA,OAAOH,EAAcE,CAAS,CAChC,CAEA,SAASd,EAAgBa,EAAOG,EAAYzB,EAAQ,CAClD,GAAIyB,EAAa,GAAKH,EAAM,WAAaG,EACvC,MAAM,IAAI,WAAW,sCAAwC,EAG/D,GAAIH,EAAM,WAAaG,GAAczB,GAAU,GAC7C,MAAM,IAAI,WAAW,sCAAwC,EAG/D,IAAIC,EAEJ,OAAIwB,IAAe,QAAazB,IAAW,OACzCC,EAAM,IAAI,WAAWqB,CAAK,EACjBtB,IAAW,OACpBC,EAAM,IAAI,WAAWqB,EAAOG,CAAU,EAEtCxB,EAAM,IAAI,WAAWqB,EAAOG,EAAYzB,CAAM,EAIhD,OAAO,eAAeC,EAAKP,EAAO,SAAS,EACpCO,CACT,CAEA,SAASW,EAAWc,EAAK,CACvB,GAAIhC,EAAO,SAASgC,CAAG,EAAG,CACxB,IAAM9E,EAAMsE,EAAQQ,EAAI,MAAM,EAAI,EAC5BzB,EAAMF,EAAanD,CAAG,EAE5B,OAAIqD,EAAI,SAAW,GAInByB,EAAI,KAAKzB,EAAK,EAAG,EAAGrD,CAAG,EAChBqD,CACT,CAEA,GAAIyB,EAAI,SAAW,OACjB,OAAI,OAAOA,EAAI,QAAW,UAAYC,GAAYD,EAAI,MAAM,EACnD3B,EAAa,CAAC,EAGhBsB,EAAcK,CAAG,EAG1B,GAAIA,EAAI,OAAS,UAAY,MAAM,QAAQA,EAAI,IAAI,EACjD,OAAOL,EAAcK,EAAI,IAAI,CAEjC,CAEA,SAASR,EAAQlB,EAAQ,CAGvB,GAAIA,GAAUJ,EACZ,MAAM,IAAI,WAAW,0DAAiEA,EAAa,SAAS,EAAE,EAAI,QAAQ,EAG5H,OAAOI,EAAS,CAClB,CAEA,SAASL,EAAWK,EAAQ,CAC1B,MAAI,CAACA,GAAUA,IAEbA,EAAS,GAGJN,EAAO,MAAM,CAACM,CAAM,CAC7B,CAEAN,EAAO,SAAW,SAAkBiB,EAAG,CACrC,OAAOA,GAAK,MAAQA,EAAE,YAAc,IAAQA,IAAMjB,EAAO,SAC3D,EAEAA,EAAO,QAAU,SAAiBkC,EAAGjB,EAAG,CAItC,GAHIH,GAAWoB,EAAG,UAAU,IAAGA,EAAIlC,EAAO,KAAKkC,EAAGA,EAAE,OAAQA,EAAE,UAAU,GACpEpB,GAAWG,EAAG,UAAU,IAAGA,EAAIjB,EAAO,KAAKiB,EAAGA,EAAE,OAAQA,EAAE,UAAU,GAEpE,CAACjB,EAAO,SAASkC,CAAC,GAAK,CAAClC,EAAO,SAASiB,CAAC,EAC3C,MAAM,IAAI,UAAU,uEAA2E,EAGjG,GAAIiB,IAAMjB,EAAG,MAAO,GACpB,IAAIkB,EAAID,EAAE,OACNE,EAAInB,EAAE,OAEV,QAAShE,EAAI,EAAGC,EAAM,KAAK,IAAIiF,EAAGC,CAAC,EAAGnF,EAAIC,EAAK,EAAED,EAC/C,GAAIiF,EAAEjF,CAAC,IAAMgE,EAAEhE,CAAC,EAAG,CACjBkF,EAAID,EAAEjF,CAAC,EACPmF,EAAInB,EAAEhE,CAAC,EACP,KACF,CAGF,OAAIkF,EAAIC,EAAU,GACdA,EAAID,EAAU,EACX,CACT,EAEAnC,EAAO,WAAa,SAAoBuB,EAAU,CAChD,OAAQ,OAAOA,CAAQ,EAAE,YAAY,EAAG,CACtC,IAAK,MACL,IAAK,OACL,IAAK,QACL,IAAK,QACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,WACH,MAAO,GAET,QACE,MAAO,EACX,CACF,EAEAvB,EAAO,OAAS,SAAgBqC,EAAM/B,EAAQ,CAC5C,GAAI,CAAC,MAAM,QAAQ+B,CAAI,EACrB,MAAM,IAAI,UAAU,6CAA+C,EAGrE,GAAIA,EAAK,SAAW,EAClB,OAAOrC,EAAO,MAAM,CAAC,EAGvB,IAAI/C,EAEJ,GAAIqD,IAAW,OAGb,IAFAA,EAAS,EAEJrD,EAAI,EAAGA,EAAIoF,EAAK,OAAQ,EAAEpF,EAC7BqD,GAAU+B,EAAKpF,CAAC,EAAE,OAItB,IAAMyB,EAASsB,EAAO,YAAYM,CAAM,EACpCgC,EAAM,EAEV,IAAKrF,EAAI,EAAGA,EAAIoF,EAAK,OAAQ,EAAEpF,EAAG,CAChC,IAAIsD,EAAM8B,EAAKpF,CAAC,EAEhB,GAAI6D,GAAWP,EAAK,UAAU,EACxB+B,EAAM/B,EAAI,OAAS7B,EAAO,QACvBsB,EAAO,SAASO,CAAG,IAAGA,EAAMP,EAAO,KAAKO,CAAG,GAChDA,EAAI,KAAK7B,EAAQ4D,CAAG,GAEpB,WAAW,UAAU,IAAI,KAAK5D,EAAQ6B,EAAK+B,CAAG,UAEtCtC,EAAO,SAASO,CAAG,EAG7BA,EAAI,KAAK7B,EAAQ4D,CAAG,MAFpB,OAAM,IAAI,UAAU,6CAA+C,EAKrEA,GAAO/B,EAAI,MACb,CAEA,OAAO7B,CACT,EAEA,SAAShC,EAAW+E,EAAQF,EAAU,CACpC,GAAIvB,EAAO,SAASyB,CAAM,EACxB,OAAOA,EAAO,OAGhB,GAAI,YAAY,OAAOA,CAAM,GAAKX,GAAWW,EAAQ,WAAW,EAC9D,OAAOA,EAAO,WAGhB,GAAI,OAAOA,GAAW,SACpB,MAAM,IAAI,UAAU,2FAAoG,OAAOA,CAAM,EAGvI,IAAMvE,EAAMuE,EAAO,OACbc,EAAY,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,GAC3D,GAAI,CAACA,GAAarF,IAAQ,EAAG,MAAO,GAEpC,IAAIsF,EAAc,GAElB,OACE,OAAQjB,EAAU,CAChB,IAAK,QACL,IAAK,SACL,IAAK,SACH,OAAOrE,EAET,IAAK,OACL,IAAK,QACH,OAAOuF,GAAYhB,CAAM,EAAE,OAE7B,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,WACH,OAAOvE,EAAM,EAEf,IAAK,MACH,OAAOA,IAAQ,EAEjB,IAAK,SACH,OAAOwF,GAAcjB,CAAM,EAAE,OAE/B,QACE,GAAIe,EACF,OAAOD,EAAY,GAAKE,GAAYhB,CAAM,EAAE,OAG9CF,GAAY,GAAKA,GAAU,YAAY,EACvCiB,EAAc,EAClB,CAEJ,CAEAxC,EAAO,WAAatD,EAEpB,SAASiG,EAAapB,EAAUvD,EAAOC,EAAK,CAC1C,IAAIuE,EAAc,GA6BlB,IAtBIxE,IAAU,QAAaA,EAAQ,KACjCA,EAAQ,GAKNA,EAAQ,KAAK,UAIbC,IAAQ,QAAaA,EAAM,KAAK,UAClCA,EAAM,KAAK,QAGTA,GAAO,KAKXA,KAAS,EACTD,KAAW,EAEPC,GAAOD,GACT,MAAO,GAKT,IAFKuD,IAAUA,EAAW,UAGxB,OAAQA,EAAU,CAChB,IAAK,MACH,OAAOqB,GAAS,KAAM5E,EAAOC,CAAG,EAElC,IAAK,OACL,IAAK,QACH,OAAO4E,GAAU,KAAM7E,EAAOC,CAAG,EAEnC,IAAK,QACH,OAAO6E,GAAW,KAAM9E,EAAOC,CAAG,EAEpC,IAAK,SACL,IAAK,SACH,OAAO8E,GAAY,KAAM/E,EAAOC,CAAG,EAErC,IAAK,SACH,OAAO+E,GAAY,KAAMhF,EAAOC,CAAG,EAErC,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,WACH,OAAOgF,GAAa,KAAMjF,EAAOC,CAAG,EAEtC,QACE,GAAIuE,EAAa,MAAM,IAAI,UAAU,qBAAuBjB,CAAQ,EACpEA,GAAYA,EAAW,IAAI,YAAY,EACvCiB,EAAc,EAClB,CAEJ,CAQAxC,EAAO,UAAU,UAAY,GAE7B,SAASkD,EAAKjC,EAAGkC,EAAGnE,EAAG,CACrB,IAAM/B,EAAIgE,EAAEkC,CAAC,EACblC,EAAEkC,CAAC,EAAIlC,EAAEjC,CAAC,EACViC,EAAEjC,CAAC,EAAI/B,CACT,CAEA+C,EAAO,UAAU,OAAS,UAAkB,CAC1C,IAAM9C,EAAM,KAAK,OAEjB,GAAIA,EAAM,IAAM,EACd,MAAM,IAAI,WAAW,2CAA2C,EAGlE,QAASD,EAAI,EAAGA,EAAIC,EAAKD,GAAK,EAC5BiG,EAAK,KAAMjG,EAAGA,EAAI,CAAC,EAGrB,OAAO,IACT,EAEA+C,EAAO,UAAU,OAAS,UAAkB,CAC1C,IAAM9C,EAAM,KAAK,OAEjB,GAAIA,EAAM,IAAM,EACd,MAAM,IAAI,WAAW,2CAA2C,EAGlE,QAASD,EAAI,EAAGA,EAAIC,EAAKD,GAAK,EAC5BiG,EAAK,KAAMjG,EAAGA,EAAI,CAAC,EACnBiG,EAAK,KAAMjG,EAAI,EAAGA,EAAI,CAAC,EAGzB,OAAO,IACT,EAEA+C,EAAO,UAAU,OAAS,UAAkB,CAC1C,IAAM9C,EAAM,KAAK,OAEjB,GAAIA,EAAM,IAAM,EACd,MAAM,IAAI,WAAW,2CAA2C,EAGlE,QAASD,EAAI,EAAGA,EAAIC,EAAKD,GAAK,EAC5BiG,EAAK,KAAMjG,EAAGA,EAAI,CAAC,EACnBiG,EAAK,KAAMjG,EAAI,EAAGA,EAAI,CAAC,EACvBiG,EAAK,KAAMjG,EAAI,EAAGA,EAAI,CAAC,EACvBiG,EAAK,KAAMjG,EAAI,EAAGA,EAAI,CAAC,EAGzB,OAAO,IACT,EAEA+C,EAAO,UAAU,SAAW,UAAoB,CAC9C,IAAMM,EAAS,KAAK,OACpB,OAAIA,IAAW,EAAU,GACrB,UAAU,SAAW,EAAUuC,GAAU,KAAM,EAAGvC,CAAM,EACrDqC,EAAa,MAAM,KAAM,SAAS,CAC3C,EAEA3C,EAAO,UAAU,eAAiBA,EAAO,UAAU,SAEnDA,EAAO,UAAU,OAAS,SAAgBiB,EAAG,CAC3C,GAAI,CAACjB,EAAO,SAASiB,CAAC,EAAG,MAAM,IAAI,UAAU,2BAA2B,EACxE,OAAI,OAASA,EAAU,GAChBjB,EAAO,QAAQ,KAAMiB,CAAC,IAAM,CACrC,EAEAjB,EAAO,UAAU,QAAU,UAAmB,CAC5C,IAAIoD,EAAM,GACJC,EAAM3D,GAAU,kBACtB,OAAA0D,EAAM,KAAK,SAAS,MAAO,EAAGC,CAAG,EAAE,QAAQ,UAAW,KAAK,EAAE,KAAK,EAC9D,KAAK,OAASA,IAAKD,GAAO,SACvB,WAAaA,EAAM,GAC5B,EAEIrD,IACFC,EAAO,UAAUD,CAAmB,EAAIC,EAAO,UAAU,SAG3DA,EAAO,UAAU,QAAU,SAAiBsD,EAAQtF,EAAOC,EAAKsF,EAAWC,EAAS,CAKlF,GAJI1C,GAAWwC,EAAQ,UAAU,IAC/BA,EAAStD,EAAO,KAAKsD,EAAQA,EAAO,OAAQA,EAAO,UAAU,GAG3D,CAACtD,EAAO,SAASsD,CAAM,EACzB,MAAM,IAAI,UAAU,iFAA0F,OAAOA,CAAM,EAmB7H,GAhBItF,IAAU,SACZA,EAAQ,GAGNC,IAAQ,SACVA,EAAMqF,EAASA,EAAO,OAAS,GAG7BC,IAAc,SAChBA,EAAY,GAGVC,IAAY,SACdA,EAAU,KAAK,QAGbxF,EAAQ,GAAKC,EAAMqF,EAAO,QAAUC,EAAY,GAAKC,EAAU,KAAK,OACtE,MAAM,IAAI,WAAW,oBAAoB,EAG3C,GAAID,GAAaC,GAAWxF,GAASC,EACnC,MAAO,GAGT,GAAIsF,GAAaC,EACf,MAAO,GAGT,GAAIxF,GAASC,EACX,MAAO,GAOT,GAJAD,KAAW,EACXC,KAAS,EACTsF,KAAe,EACfC,KAAa,EACT,OAASF,EAAQ,MAAO,GAC5B,IAAInB,EAAIqB,EAAUD,EACdnB,EAAInE,EAAMD,EACRd,EAAM,KAAK,IAAIiF,EAAGC,CAAC,EACnBqB,EAAW,KAAK,MAAMF,EAAWC,CAAO,EACxCE,EAAaJ,EAAO,MAAMtF,EAAOC,CAAG,EAE1C,QAAShB,EAAI,EAAGA,EAAIC,EAAK,EAAED,EACzB,GAAIwG,EAASxG,CAAC,IAAMyG,EAAWzG,CAAC,EAAG,CACjCkF,EAAIsB,EAASxG,CAAC,EACdmF,EAAIsB,EAAWzG,CAAC,EAChB,KACF,CAGF,OAAIkF,EAAIC,EAAU,GACdA,EAAID,EAAU,EACX,CACT,EAWA,SAASwB,EAAqBjF,EAAQkF,EAAK7B,EAAYR,EAAUsC,EAAK,CAEpE,GAAInF,EAAO,SAAW,EAAG,MAAO,GAqBhC,GAnBI,OAAOqD,GAAe,UACxBR,EAAWQ,EACXA,EAAa,GACJA,EAAa,WACtBA,EAAa,WACJA,EAAa,cACtBA,EAAa,aAGfA,EAAa,CAACA,EAEVE,GAAYF,CAAU,IAExBA,EAAa8B,EAAM,EAAInF,EAAO,OAAS,GAIrCqD,EAAa,IAAGA,EAAarD,EAAO,OAASqD,GAE7CA,GAAcrD,EAAO,OAAQ,CAC/B,GAAImF,EAAK,MAAO,GAAQ9B,EAAarD,EAAO,OAAS,CACvD,SAAWqD,EAAa,EACtB,GAAI8B,EAAK9B,EAAa,MAAO,OAAO,GAStC,GALI,OAAO6B,GAAQ,WACjBA,EAAM5D,EAAO,KAAK4D,EAAKrC,CAAQ,GAI7BvB,EAAO,SAAS4D,CAAG,EAErB,OAAIA,EAAI,SAAW,EACV,GAGFE,EAAapF,EAAQkF,EAAK7B,EAAYR,EAAUsC,CAAG,EACrD,GAAI,OAAOD,GAAQ,SAGxB,OAFAA,EAAMA,EAAM,IAER,OAAO,WAAW,UAAU,SAAY,WACtCC,EACK,WAAW,UAAU,QAAQ,KAAKnF,EAAQkF,EAAK7B,CAAU,EAEzD,WAAW,UAAU,YAAY,KAAKrD,EAAQkF,EAAK7B,CAAU,EAIjE+B,EAAapF,EAAQ,CAACkF,CAAG,EAAG7B,EAAYR,EAAUsC,CAAG,EAG9D,MAAM,IAAI,UAAU,sCAAsC,CAC5D,CAEA,SAASC,EAAapG,EAAKkG,EAAK7B,EAAYR,EAAUsC,EAAK,CACzD,IAAIE,EAAY,EACZC,EAAYtG,EAAI,OAChBuG,EAAYL,EAAI,OAEpB,GAAIrC,IAAa,SACfA,EAAW,OAAOA,CAAQ,EAAE,YAAY,EAEpCA,IAAa,QAAUA,IAAa,SAAWA,IAAa,WAAaA,IAAa,YAAY,CACpG,GAAI7D,EAAI,OAAS,GAAKkG,EAAI,OAAS,EACjC,MAAO,GAGTG,EAAY,EACZC,GAAa,EACbC,GAAa,EACblC,GAAc,CAChB,CAGF,SAASmC,EAAK3D,EAAKtD,EAAG,CACpB,OAAI8G,IAAc,EACTxD,EAAItD,CAAC,EAELsD,EAAI,aAAatD,EAAI8G,CAAS,CAEzC,CAEA,IAAI9G,EAEJ,GAAI4G,EAAK,CACP,IAAIM,EAAa,GAEjB,IAAKlH,EAAI8E,EAAY9E,EAAI+G,EAAW/G,IAClC,GAAIiH,EAAKxG,EAAKT,CAAC,IAAMiH,EAAKN,EAAKO,IAAe,GAAK,EAAIlH,EAAIkH,CAAU,GAEnE,GADIA,IAAe,KAAIA,EAAalH,GAChCA,EAAIkH,EAAa,IAAMF,EAAW,OAAOE,EAAaJ,OAEtDI,IAAe,KAAIlH,GAAKA,EAAIkH,GAChCA,EAAa,EAGnB,KAGE,KAFIpC,EAAakC,EAAYD,IAAWjC,EAAaiC,EAAYC,GAE5DhH,EAAI8E,EAAY9E,GAAK,EAAGA,IAAK,CAChC,IAAImH,EAAQ,GAEZ,QAASC,EAAI,EAAGA,EAAIJ,EAAWI,IAC7B,GAAIH,EAAKxG,EAAKT,EAAIoH,CAAC,IAAMH,EAAKN,EAAKS,CAAC,EAAG,CACrCD,EAAQ,GACR,KACF,CAGF,GAAIA,EAAO,OAAOnH,CACpB,CAGF,MAAO,EACT,CAEA+C,EAAO,UAAU,SAAW,SAAkB4D,EAAK7B,EAAYR,EAAU,CACvE,OAAO,KAAK,QAAQqC,EAAK7B,EAAYR,CAAQ,IAAM,EACrD,EAEAvB,EAAO,UAAU,QAAU,SAAiB4D,EAAK7B,EAAYR,EAAU,CACrE,OAAOoC,EAAqB,KAAMC,EAAK7B,EAAYR,EAAU,EAAI,CACnE,EAEAvB,EAAO,UAAU,YAAc,SAAqB4D,EAAK7B,EAAYR,EAAU,CAC7E,OAAOoC,EAAqB,KAAMC,EAAK7B,EAAYR,EAAU,EAAK,CACpE,EAEA,SAAS+C,GAAS/D,EAAKkB,EAAQ9C,EAAQ2B,EAAQ,CAC7C3B,EAAS,OAAOA,CAAM,GAAK,EAC3B,IAAM4F,EAAYhE,EAAI,OAAS5B,EAE1B2B,GAGHA,EAAS,OAAOA,CAAM,EAElBA,EAASiE,IACXjE,EAASiE,IALXjE,EAASiE,EASX,IAAMC,EAAS/C,EAAO,OAElBnB,EAASkE,EAAS,IACpBlE,EAASkE,EAAS,GAGpB,IAAIvH,EAEJ,IAAKA,EAAI,EAAGA,EAAIqD,EAAQ,EAAErD,EAAG,CAC3B,IAAMwH,EAAS,SAAShD,EAAO,OAAOxE,EAAI,EAAG,CAAC,EAAG,EAAE,EACnD,GAAIgF,GAAYwC,CAAM,EAAG,OAAOxH,EAChCsD,EAAI5B,EAAS1B,CAAC,EAAIwH,CACpB,CAEA,OAAOxH,CACT,CAEA,SAASyH,EAAUnE,EAAKkB,EAAQ9C,EAAQ2B,EAAQ,CAC9C,OAAOqE,GAAWlC,GAAYhB,EAAQlB,EAAI,OAAS5B,CAAM,EAAG4B,EAAK5B,EAAQ2B,CAAM,CACjF,CAEA,SAASsE,GAAWrE,EAAKkB,EAAQ9C,EAAQ2B,EAAQ,CAC/C,OAAOqE,GAAWE,GAAapD,CAAM,EAAGlB,EAAK5B,EAAQ2B,CAAM,CAC7D,CAEA,SAASwE,GAAYvE,EAAKkB,EAAQ9C,EAAQ2B,EAAQ,CAChD,OAAOqE,GAAWjC,GAAcjB,CAAM,EAAGlB,EAAK5B,EAAQ2B,CAAM,CAC9D,CAEA,SAASyE,GAAUxE,EAAKkB,EAAQ9C,EAAQ2B,EAAQ,CAC9C,OAAOqE,GAAWK,GAAevD,EAAQlB,EAAI,OAAS5B,CAAM,EAAG4B,EAAK5B,EAAQ2B,CAAM,CACpF,CAEAN,EAAO,UAAU,MAAQ,SAAeyB,EAAQ9C,EAAQ2B,EAAQiB,EAAU,CAExE,GAAI5C,IAAW,OACb4C,EAAW,OACXjB,EAAS,KAAK,OACd3B,EAAS,UACA2B,IAAW,QAAa,OAAO3B,GAAW,SACnD4C,EAAW5C,EACX2B,EAAS,KAAK,OACd3B,EAAS,UACA,SAASA,CAAM,EACxBA,EAASA,IAAW,EAEhB,SAAS2B,CAAM,GACjBA,EAASA,IAAW,EAChBiB,IAAa,SAAWA,EAAW,UAEvCA,EAAWjB,EACXA,EAAS,YAGX,OAAM,IAAI,MAAM,yEAAyE,EAG3F,IAAMiE,EAAY,KAAK,OAAS5F,EAGhC,IAFI2B,IAAW,QAAaA,EAASiE,KAAWjE,EAASiE,GAErD9C,EAAO,OAAS,IAAMnB,EAAS,GAAK3B,EAAS,IAAMA,EAAS,KAAK,OACnE,MAAM,IAAI,WAAW,wCAAwC,EAG1D4C,IAAUA,EAAW,QAC1B,IAAIiB,EAAc,GAElB,OACE,OAAQjB,EAAU,CAChB,IAAK,MACH,OAAO+C,GAAS,KAAM7C,EAAQ9C,EAAQ2B,CAAM,EAE9C,IAAK,OACL,IAAK,QACH,OAAOoE,EAAU,KAAMjD,EAAQ9C,EAAQ2B,CAAM,EAE/C,IAAK,QACL,IAAK,SACL,IAAK,SACH,OAAOsE,GAAW,KAAMnD,EAAQ9C,EAAQ2B,CAAM,EAEhD,IAAK,SAEH,OAAOwE,GAAY,KAAMrD,EAAQ9C,EAAQ2B,CAAM,EAEjD,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,WACH,OAAOyE,GAAU,KAAMtD,EAAQ9C,EAAQ2B,CAAM,EAE/C,QACE,GAAIkC,EAAa,MAAM,IAAI,UAAU,qBAAuBjB,CAAQ,EACpEA,GAAY,GAAKA,GAAU,YAAY,EACvCiB,EAAc,EAClB,CAEJ,EAEAxC,EAAO,UAAU,OAAS,UAAkB,CAC1C,MAAO,CACL,KAAM,SACN,KAAM,MAAM,UAAU,MAAM,KAAK,KAAK,MAAQ,KAAM,CAAC,CACvD,CACF,EAEA,SAASgD,GAAYzC,EAAKvC,EAAOC,EAAK,CACpC,OAAID,IAAU,GAAKC,IAAQsC,EAAI,OACtBV,EAAO,cAAcU,CAAG,EAExBV,EAAO,cAAcU,EAAI,MAAMvC,EAAOC,CAAG,CAAC,CAErD,CAEA,SAAS4E,GAAUtC,EAAKvC,EAAOC,EAAK,CAClCA,EAAM,KAAK,IAAIsC,EAAI,OAAQtC,CAAG,EAC9B,IAAMgH,EAAM,CAAC,EACThI,EAAIe,EAER,KAAOf,EAAIgB,GAAK,CACd,IAAMiH,EAAY3E,EAAItD,CAAC,EACnBkI,EAAY,KACZC,EAAmBF,EAAY,IAAM,EAAIA,EAAY,IAAM,EAAIA,EAAY,IAAM,EAAI,EAEzF,GAAIjI,EAAImI,GAAoBnH,EAAK,CAC/B,IAAIoH,EAAYC,EAAWC,EAAYC,EAEvC,OAAQJ,EAAkB,CACxB,IAAK,GACCF,EAAY,MACdC,EAAYD,GAGd,MAEF,IAAK,GACHG,EAAa9E,EAAItD,EAAI,CAAC,GAEjBoI,EAAa,OAAS,MACzBG,GAAiBN,EAAY,KAAO,EAAIG,EAAa,GAEjDG,EAAgB,MAClBL,EAAYK,IAIhB,MAEF,IAAK,GACHH,EAAa9E,EAAItD,EAAI,CAAC,EACtBqI,EAAY/E,EAAItD,EAAI,CAAC,GAEhBoI,EAAa,OAAS,MAAQC,EAAY,OAAS,MACtDE,GAAiBN,EAAY,KAAO,IAAMG,EAAa,KAAO,EAAIC,EAAY,GAE1EE,EAAgB,OAASA,EAAgB,OAASA,EAAgB,SACpEL,EAAYK,IAIhB,MAEF,IAAK,GACHH,EAAa9E,EAAItD,EAAI,CAAC,EACtBqI,EAAY/E,EAAItD,EAAI,CAAC,EACrBsI,EAAahF,EAAItD,EAAI,CAAC,GAEjBoI,EAAa,OAAS,MAAQC,EAAY,OAAS,MAAQC,EAAa,OAAS,MACpFC,GAAiBN,EAAY,KAAO,IAAMG,EAAa,KAAO,IAAMC,EAAY,KAAO,EAAIC,EAAa,GAEpGC,EAAgB,OAASA,EAAgB,UAC3CL,EAAYK,GAIpB,CACF,CAEIL,IAAc,MAGhBA,EAAY,MACZC,EAAmB,GACVD,EAAY,QAErBA,GAAa,MACbF,EAAI,KAAKE,IAAc,GAAK,KAAO,KAAK,EACxCA,EAAY,MAAQA,EAAY,MAGlCF,EAAI,KAAKE,CAAS,EAClBlI,GAAKmI,CACP,CAEA,OAAOK,GAAsBR,CAAG,CAClC,CAKA,IAAMS,GAAuB,KAE7B,SAASD,GAAsBE,EAAY,CACzC,IAAMzI,EAAMyI,EAAW,OAEvB,GAAIzI,GAAOwI,GACT,OAAO,OAAO,aAAa,MAAM,OAAQC,CAAU,EAIrD,IAAIV,EAAM,GACNhI,EAAI,EAER,KAAOA,EAAIC,GACT+H,GAAO,OAAO,aAAa,MAAM,OAAQU,EAAW,MAAM1I,EAAGA,GAAKyI,EAAoB,CAAC,EAGzF,OAAOT,CACT,CAEA,SAASnC,GAAWvC,EAAKvC,EAAOC,EAAK,CACnC,IAAI2H,EAAM,GACV3H,EAAM,KAAK,IAAIsC,EAAI,OAAQtC,CAAG,EAE9B,QAAShB,EAAIe,EAAOf,EAAIgB,EAAK,EAAEhB,EAC7B2I,GAAO,OAAO,aAAarF,EAAItD,CAAC,EAAI,GAAG,EAGzC,OAAO2I,CACT,CAEA,SAAS7C,GAAYxC,EAAKvC,EAAOC,EAAK,CACpC,IAAI2H,EAAM,GACV3H,EAAM,KAAK,IAAIsC,EAAI,OAAQtC,CAAG,EAE9B,QAAShB,EAAIe,EAAOf,EAAIgB,EAAK,EAAEhB,EAC7B2I,GAAO,OAAO,aAAarF,EAAItD,CAAC,CAAC,EAGnC,OAAO2I,CACT,CAEA,SAAShD,GAASrC,EAAKvC,EAAOC,EAAK,CACjC,IAAMf,EAAMqD,EAAI,QACZ,CAACvC,GAASA,EAAQ,KAAGA,EAAQ,IAC7B,CAACC,GAAOA,EAAM,GAAKA,EAAMf,KAAKe,EAAMf,GACxC,IAAI2I,EAAM,GAEV,QAAS5I,EAAIe,EAAOf,EAAIgB,EAAK,EAAEhB,EAC7B4I,GAAOC,GAAoBvF,EAAItD,CAAC,CAAC,EAGnC,OAAO4I,CACT,CAEA,SAAS5C,GAAa1C,EAAKvC,EAAOC,EAAK,CACrC,IAAM8H,EAAQxF,EAAI,MAAMvC,EAAOC,CAAG,EAC9BgH,EAAM,GAEV,QAAShI,EAAI,EAAGA,EAAI8I,EAAM,OAAS,EAAG9I,GAAK,EACzCgI,GAAO,OAAO,aAAac,EAAM9I,CAAC,EAAI8I,EAAM9I,EAAI,CAAC,EAAI,GAAG,EAG1D,OAAOgI,CACT,CAEAjF,EAAO,UAAU,MAAQ,SAAehC,EAAOC,EAAK,CAClD,IAAMf,EAAM,KAAK,OACjBc,EAAQ,CAAC,CAACA,EACVC,EAAMA,IAAQ,OAAYf,EAAM,CAAC,CAACe,EAE9BD,EAAQ,GACVA,GAASd,EACLc,EAAQ,IAAGA,EAAQ,IACdA,EAAQd,IACjBc,EAAQd,GAGNe,EAAM,GACRA,GAAOf,EACHe,EAAM,IAAGA,EAAM,IACVA,EAAMf,IACfe,EAAMf,GAGJe,EAAMD,IAAOC,EAAMD,GACvB,IAAMgI,EAAS,KAAK,SAAShI,EAAOC,CAAG,EAEvC,cAAO,eAAe+H,EAAQhG,EAAO,SAAS,EACvCgG,CACT,EAMA,SAASC,EAAYtH,EAAQuH,EAAK5F,EAAQ,CACxC,GAAI3B,EAAS,IAAM,GAAKA,EAAS,EAAG,MAAM,IAAI,WAAW,oBAAoB,EAC7E,GAAIA,EAASuH,EAAM5F,EAAQ,MAAM,IAAI,WAAW,uCAAuC,CACzF,CAEAN,EAAO,UAAU,WAAaA,EAAO,UAAU,WAAa,SAAoBrB,EAAQjC,EAAYyJ,EAAU,CAC5GxH,EAASA,IAAW,EACpBjC,EAAaA,IAAe,EACvByJ,GAAUF,EAAYtH,EAAQjC,EAAY,KAAK,MAAM,EAC1D,IAAIkH,EAAM,KAAKjF,CAAM,EACjByH,EAAM,EACNnJ,EAAI,EAER,KAAO,EAAEA,EAAIP,IAAe0J,GAAO,MACjCxC,GAAO,KAAKjF,EAAS1B,CAAC,EAAImJ,EAG5B,OAAOxC,CACT,EAEA5D,EAAO,UAAU,WAAaA,EAAO,UAAU,WAAa,SAAoBrB,EAAQjC,EAAYyJ,EAAU,CAC5GxH,EAASA,IAAW,EACpBjC,EAAaA,IAAe,EAEvByJ,GACHF,EAAYtH,EAAQjC,EAAY,KAAK,MAAM,EAG7C,IAAIkH,EAAM,KAAKjF,EAAS,EAAEjC,CAAU,EAChC0J,EAAM,EAEV,KAAO1J,EAAa,IAAM0J,GAAO,MAC/BxC,GAAO,KAAKjF,EAAS,EAAEjC,CAAU,EAAI0J,EAGvC,OAAOxC,CACT,EAEA5D,EAAO,UAAU,UAAYA,EAAO,UAAU,UAAY,SAAmBrB,EAAQwH,EAAU,CAC7F,OAAAxH,EAASA,IAAW,EACfwH,GAAUF,EAAYtH,EAAQ,EAAG,KAAK,MAAM,EAC1C,KAAKA,CAAM,CACpB,EAEAqB,EAAO,UAAU,aAAeA,EAAO,UAAU,aAAe,SAAsBrB,EAAQwH,EAAU,CACtG,OAAAxH,EAASA,IAAW,EACfwH,GAAUF,EAAYtH,EAAQ,EAAG,KAAK,MAAM,EAC1C,KAAKA,CAAM,EAAI,KAAKA,EAAS,CAAC,GAAK,CAC5C,EAEAqB,EAAO,UAAU,aAAeA,EAAO,UAAU,aAAe,SAAsBrB,EAAQwH,EAAU,CACtG,OAAAxH,EAASA,IAAW,EACfwH,GAAUF,EAAYtH,EAAQ,EAAG,KAAK,MAAM,EAC1C,KAAKA,CAAM,GAAK,EAAI,KAAKA,EAAS,CAAC,CAC5C,EAEAqB,EAAO,UAAU,aAAeA,EAAO,UAAU,aAAe,SAAsBrB,EAAQwH,EAAU,CACtG,OAAAxH,EAASA,IAAW,EACfwH,GAAUF,EAAYtH,EAAQ,EAAG,KAAK,MAAM,GACzC,KAAKA,CAAM,EAAI,KAAKA,EAAS,CAAC,GAAK,EAAI,KAAKA,EAAS,CAAC,GAAK,IAAM,KAAKA,EAAS,CAAC,EAAI,QAC9F,EAEAqB,EAAO,UAAU,aAAeA,EAAO,UAAU,aAAe,SAAsBrB,EAAQwH,EAAU,CACtG,OAAAxH,EAASA,IAAW,EACfwH,GAAUF,EAAYtH,EAAQ,EAAG,KAAK,MAAM,EAC1C,KAAKA,CAAM,EAAI,UAAY,KAAKA,EAAS,CAAC,GAAK,GAAK,KAAKA,EAAS,CAAC,GAAK,EAAI,KAAKA,EAAS,CAAC,EACpG,EAEAqB,EAAO,UAAU,gBAAkBqG,GAAmB,SAAyB1H,EAAQ,CACrFA,EAASA,IAAW,EACpB2H,GAAe3H,EAAQ,QAAQ,EAC/B,IAAM4H,EAAQ,KAAK5H,CAAM,EACnB6H,EAAO,KAAK7H,EAAS,CAAC,GAExB4H,IAAU,QAAaC,IAAS,SAClCC,GAAY9H,EAAQ,KAAK,OAAS,CAAC,EAGrC,IAAM+H,EAAKH,EAAQ,KAAK,EAAE5H,CAAM,EAAI,GAAK,EAAI,KAAK,EAAEA,CAAM,EAAI,GAAK,GAAK,KAAK,EAAEA,CAAM,EAAI,GAAK,GACxFgI,EAAK,KAAK,EAAEhI,CAAM,EAAI,KAAK,EAAEA,CAAM,EAAI,GAAK,EAAI,KAAK,EAAEA,CAAM,EAAI,GAAK,GAAK6H,EAAO,GAAK,GAC7F,OAAO,OAAOE,CAAE,GAAK,OAAOC,CAAE,GAAK,OAAO,EAAE,EAC9C,CAAC,EACD3G,EAAO,UAAU,gBAAkBqG,GAAmB,SAAyB1H,EAAQ,CACrFA,EAASA,IAAW,EACpB2H,GAAe3H,EAAQ,QAAQ,EAC/B,IAAM4H,EAAQ,KAAK5H,CAAM,EACnB6H,EAAO,KAAK7H,EAAS,CAAC,GAExB4H,IAAU,QAAaC,IAAS,SAClCC,GAAY9H,EAAQ,KAAK,OAAS,CAAC,EAGrC,IAAMgI,EAAKJ,EAAQ,GAAK,GAAK,KAAK,EAAE5H,CAAM,EAAI,GAAK,GAAK,KAAK,EAAEA,CAAM,EAAI,GAAK,EAAI,KAAK,EAAEA,CAAM,EACzF+H,EAAK,KAAK,EAAE/H,CAAM,EAAI,GAAK,GAAK,KAAK,EAAEA,CAAM,EAAI,GAAK,GAAK,KAAK,EAAEA,CAAM,EAAI,GAAK,EAAI6H,EAC3F,OAAQ,OAAOG,CAAE,GAAK,OAAO,EAAE,GAAK,OAAOD,CAAE,CAC/C,CAAC,EAED1G,EAAO,UAAU,UAAY,SAAmBrB,EAAQjC,EAAYyJ,EAAU,CAC5ExH,EAASA,IAAW,EACpBjC,EAAaA,IAAe,EACvByJ,GAAUF,EAAYtH,EAAQjC,EAAY,KAAK,MAAM,EAC1D,IAAIkH,EAAM,KAAKjF,CAAM,EACjByH,EAAM,EACNnJ,EAAI,EAER,KAAO,EAAEA,EAAIP,IAAe0J,GAAO,MACjCxC,GAAO,KAAKjF,EAAS1B,CAAC,EAAImJ,EAG5B,OAAAA,GAAO,IACHxC,GAAOwC,IAAKxC,GAAO,KAAK,IAAI,EAAG,EAAIlH,CAAU,GAC1CkH,CACT,EAEA5D,EAAO,UAAU,UAAY,SAAmBrB,EAAQjC,EAAYyJ,EAAU,CAC5ExH,EAASA,IAAW,EACpBjC,EAAaA,IAAe,EACvByJ,GAAUF,EAAYtH,EAAQjC,EAAY,KAAK,MAAM,EAC1D,IAAIO,EAAIP,EACJ0J,EAAM,EACNxC,EAAM,KAAKjF,EAAS,EAAE1B,CAAC,EAE3B,KAAOA,EAAI,IAAMmJ,GAAO,MACtBxC,GAAO,KAAKjF,EAAS,EAAE1B,CAAC,EAAImJ,EAG9B,OAAAA,GAAO,IACHxC,GAAOwC,IAAKxC,GAAO,KAAK,IAAI,EAAG,EAAIlH,CAAU,GAC1CkH,CACT,EAEA5D,EAAO,UAAU,SAAW,SAAkBrB,EAAQwH,EAAU,CAG9D,OAFAxH,EAASA,IAAW,EACfwH,GAAUF,EAAYtH,EAAQ,EAAG,KAAK,MAAM,EAC3C,KAAKA,CAAM,EAAI,KACb,IAAM,KAAKA,CAAM,EAAI,GAAK,GADA,KAAKA,CAAM,CAE/C,EAEAqB,EAAO,UAAU,YAAc,SAAqBrB,EAAQwH,EAAU,CACpExH,EAASA,IAAW,EACfwH,GAAUF,EAAYtH,EAAQ,EAAG,KAAK,MAAM,EACjD,IAAMiF,EAAM,KAAKjF,CAAM,EAAI,KAAKA,EAAS,CAAC,GAAK,EAC/C,OAAOiF,EAAM,MAAQA,EAAM,WAAaA,CAC1C,EAEA5D,EAAO,UAAU,YAAc,SAAqBrB,EAAQwH,EAAU,CACpExH,EAASA,IAAW,EACfwH,GAAUF,EAAYtH,EAAQ,EAAG,KAAK,MAAM,EACjD,IAAMiF,EAAM,KAAKjF,EAAS,CAAC,EAAI,KAAKA,CAAM,GAAK,EAC/C,OAAOiF,EAAM,MAAQA,EAAM,WAAaA,CAC1C,EAEA5D,EAAO,UAAU,YAAc,SAAqBrB,EAAQwH,EAAU,CACpE,OAAAxH,EAASA,IAAW,EACfwH,GAAUF,EAAYtH,EAAQ,EAAG,KAAK,MAAM,EAC1C,KAAKA,CAAM,EAAI,KAAKA,EAAS,CAAC,GAAK,EAAI,KAAKA,EAAS,CAAC,GAAK,GAAK,KAAKA,EAAS,CAAC,GAAK,EAC7F,EAEAqB,EAAO,UAAU,YAAc,SAAqBrB,EAAQwH,EAAU,CACpE,OAAAxH,EAASA,IAAW,EACfwH,GAAUF,EAAYtH,EAAQ,EAAG,KAAK,MAAM,EAC1C,KAAKA,CAAM,GAAK,GAAK,KAAKA,EAAS,CAAC,GAAK,GAAK,KAAKA,EAAS,CAAC,GAAK,EAAI,KAAKA,EAAS,CAAC,CAC9F,EAEAqB,EAAO,UAAU,eAAiBqG,GAAmB,SAAwB1H,EAAQ,CACnFA,EAASA,IAAW,EACpB2H,GAAe3H,EAAQ,QAAQ,EAC/B,IAAM4H,EAAQ,KAAK5H,CAAM,EACnB6H,EAAO,KAAK7H,EAAS,CAAC,GAExB4H,IAAU,QAAaC,IAAS,SAClCC,GAAY9H,EAAQ,KAAK,OAAS,CAAC,EAGrC,IAAMiF,EAAM,KAAKjF,EAAS,CAAC,EAAI,KAAKA,EAAS,CAAC,EAAI,GAAK,EAAI,KAAKA,EAAS,CAAC,EAAI,GAAK,IAAM6H,GAAQ,IAEjG,OAAQ,OAAO5C,CAAG,GAAK,OAAO,EAAE,GAAK,OAAO2C,EAAQ,KAAK,EAAE5H,CAAM,EAAI,GAAK,EAAI,KAAK,EAAEA,CAAM,EAAI,GAAK,GAAK,KAAK,EAAEA,CAAM,EAAI,GAAK,EAAE,CACnI,CAAC,EACDqB,EAAO,UAAU,eAAiBqG,GAAmB,SAAwB1H,EAAQ,CACnFA,EAASA,IAAW,EACpB2H,GAAe3H,EAAQ,QAAQ,EAC/B,IAAM4H,EAAQ,KAAK5H,CAAM,EACnB6H,EAAO,KAAK7H,EAAS,CAAC,GAExB4H,IAAU,QAAaC,IAAS,SAClCC,GAAY9H,EAAQ,KAAK,OAAS,CAAC,EAGrC,IAAMiF,GAAO2C,GAAS,IACtB,KAAK,EAAE5H,CAAM,EAAI,GAAK,GAAK,KAAK,EAAEA,CAAM,EAAI,GAAK,EAAI,KAAK,EAAEA,CAAM,EAClE,OAAQ,OAAOiF,CAAG,GAAK,OAAO,EAAE,GAAK,OAAO,KAAK,EAAEjF,CAAM,EAAI,GAAK,GAAK,KAAK,EAAEA,CAAM,EAAI,GAAK,GAAK,KAAK,EAAEA,CAAM,EAAI,GAAK,EAAI6H,CAAI,CAClI,CAAC,EAEDxG,EAAO,UAAU,YAAc,SAAqBrB,EAAQwH,EAAU,CACpE,OAAAxH,EAASA,IAAW,EACfwH,GAAUF,EAAYtH,EAAQ,EAAG,KAAK,MAAM,EAC1CmB,EAAQ,KAAK,KAAMnB,EAAQ,GAAM,GAAI,CAAC,CAC/C,EAEAqB,EAAO,UAAU,YAAc,SAAqBrB,EAAQwH,EAAU,CACpE,OAAAxH,EAASA,IAAW,EACfwH,GAAUF,EAAYtH,EAAQ,EAAG,KAAK,MAAM,EAC1CmB,EAAQ,KAAK,KAAMnB,EAAQ,GAAO,GAAI,CAAC,CAChD,EAEAqB,EAAO,UAAU,aAAe,SAAsBrB,EAAQwH,EAAU,CACtE,OAAAxH,EAASA,IAAW,EACfwH,GAAUF,EAAYtH,EAAQ,EAAG,KAAK,MAAM,EAC1CmB,EAAQ,KAAK,KAAMnB,EAAQ,GAAM,GAAI,CAAC,CAC/C,EAEAqB,EAAO,UAAU,aAAe,SAAsBrB,EAAQwH,EAAU,CACtE,OAAAxH,EAASA,IAAW,EACfwH,GAAUF,EAAYtH,EAAQ,EAAG,KAAK,MAAM,EAC1CmB,EAAQ,KAAK,KAAMnB,EAAQ,GAAO,GAAI,CAAC,CAChD,EAEA,SAASiI,EAASrG,EAAKhB,EAAOZ,EAAQuH,EAAK7C,EAAKwD,EAAK,CACnD,GAAI,CAAC7G,EAAO,SAASO,CAAG,EAAG,MAAM,IAAI,UAAU,6CAA+C,EAC9F,GAAIhB,EAAQ8D,GAAO9D,EAAQsH,EAAK,MAAM,IAAI,WAAW,mCAAqC,EAC1F,GAAIlI,EAASuH,EAAM3F,EAAI,OAAQ,MAAM,IAAI,WAAW,oBAAoB,CAC1E,CAEAP,EAAO,UAAU,YAAcA,EAAO,UAAU,YAAc,SAAqBT,EAAOZ,EAAQjC,EAAYyJ,EAAU,CAKtH,GAJA5G,EAAQ,CAACA,EACTZ,EAASA,IAAW,EACpBjC,EAAaA,IAAe,EAExB,CAACyJ,EAAU,CACb,IAAMW,EAAW,KAAK,IAAI,EAAG,EAAIpK,CAAU,EAAI,EAC/CkK,EAAS,KAAMrH,EAAOZ,EAAQjC,EAAYoK,EAAU,CAAC,CACvD,CAEA,IAAIV,EAAM,EACNnJ,EAAI,EAGR,IAFA,KAAK0B,CAAM,EAAIY,EAAQ,IAEhB,EAAEtC,EAAIP,IAAe0J,GAAO,MACjC,KAAKzH,EAAS1B,CAAC,EAAIsC,EAAQ6G,EAAM,IAGnC,OAAOzH,EAASjC,CAClB,EAEAsD,EAAO,UAAU,YAAcA,EAAO,UAAU,YAAc,SAAqBT,EAAOZ,EAAQjC,EAAYyJ,EAAU,CAKtH,GAJA5G,EAAQ,CAACA,EACTZ,EAASA,IAAW,EACpBjC,EAAaA,IAAe,EAExB,CAACyJ,EAAU,CACb,IAAMW,EAAW,KAAK,IAAI,EAAG,EAAIpK,CAAU,EAAI,EAC/CkK,EAAS,KAAMrH,EAAOZ,EAAQjC,EAAYoK,EAAU,CAAC,CACvD,CAEA,IAAI7J,EAAIP,EAAa,EACjB0J,EAAM,EAGV,IAFA,KAAKzH,EAAS1B,CAAC,EAAIsC,EAAQ,IAEpB,EAAEtC,GAAK,IAAMmJ,GAAO,MACzB,KAAKzH,EAAS1B,CAAC,EAAIsC,EAAQ6G,EAAM,IAGnC,OAAOzH,EAASjC,CAClB,EAEAsD,EAAO,UAAU,WAAaA,EAAO,UAAU,WAAa,SAAoBT,EAAOZ,EAAQwH,EAAU,CACvG,OAAA5G,EAAQ,CAACA,EACTZ,EAASA,IAAW,EACfwH,GAAUS,EAAS,KAAMrH,EAAOZ,EAAQ,EAAG,IAAK,CAAC,EACtD,KAAKA,CAAM,EAAIY,EAAQ,IAChBZ,EAAS,CAClB,EAEAqB,EAAO,UAAU,cAAgBA,EAAO,UAAU,cAAgB,SAAuBT,EAAOZ,EAAQwH,EAAU,CAChH,OAAA5G,EAAQ,CAACA,EACTZ,EAASA,IAAW,EACfwH,GAAUS,EAAS,KAAMrH,EAAOZ,EAAQ,EAAG,MAAO,CAAC,EACxD,KAAKA,CAAM,EAAIY,EAAQ,IACvB,KAAKZ,EAAS,CAAC,EAAIY,IAAU,EACtBZ,EAAS,CAClB,EAEAqB,EAAO,UAAU,cAAgBA,EAAO,UAAU,cAAgB,SAAuBT,EAAOZ,EAAQwH,EAAU,CAChH,OAAA5G,EAAQ,CAACA,EACTZ,EAASA,IAAW,EACfwH,GAAUS,EAAS,KAAMrH,EAAOZ,EAAQ,EAAG,MAAO,CAAC,EACxD,KAAKA,CAAM,EAAIY,IAAU,EACzB,KAAKZ,EAAS,CAAC,EAAIY,EAAQ,IACpBZ,EAAS,CAClB,EAEAqB,EAAO,UAAU,cAAgBA,EAAO,UAAU,cAAgB,SAAuBT,EAAOZ,EAAQwH,EAAU,CAChH,OAAA5G,EAAQ,CAACA,EACTZ,EAASA,IAAW,EACfwH,GAAUS,EAAS,KAAMrH,EAAOZ,EAAQ,EAAG,WAAY,CAAC,EAC7D,KAAKA,EAAS,CAAC,EAAIY,IAAU,GAC7B,KAAKZ,EAAS,CAAC,EAAIY,IAAU,GAC7B,KAAKZ,EAAS,CAAC,EAAIY,IAAU,EAC7B,KAAKZ,CAAM,EAAIY,EAAQ,IAChBZ,EAAS,CAClB,EAEAqB,EAAO,UAAU,cAAgBA,EAAO,UAAU,cAAgB,SAAuBT,EAAOZ,EAAQwH,EAAU,CAChH,OAAA5G,EAAQ,CAACA,EACTZ,EAASA,IAAW,EACfwH,GAAUS,EAAS,KAAMrH,EAAOZ,EAAQ,EAAG,WAAY,CAAC,EAC7D,KAAKA,CAAM,EAAIY,IAAU,GACzB,KAAKZ,EAAS,CAAC,EAAIY,IAAU,GAC7B,KAAKZ,EAAS,CAAC,EAAIY,IAAU,EAC7B,KAAKZ,EAAS,CAAC,EAAIY,EAAQ,IACpBZ,EAAS,CAClB,EAEA,SAASoI,GAAexG,EAAKhB,EAAOZ,EAAQkI,EAAKxD,EAAK,CACpD2D,GAAWzH,EAAOsH,EAAKxD,EAAK9C,EAAK5B,EAAQ,CAAC,EAC1C,IAAI+H,EAAK,OAAOnH,EAAQ,OAAO,UAAU,CAAC,EAC1CgB,EAAI5B,GAAQ,EAAI+H,EAChBA,EAAKA,GAAM,EACXnG,EAAI5B,GAAQ,EAAI+H,EAChBA,EAAKA,GAAM,EACXnG,EAAI5B,GAAQ,EAAI+H,EAChBA,EAAKA,GAAM,EACXnG,EAAI5B,GAAQ,EAAI+H,EAChB,IAAIC,EAAK,OAAOpH,GAAS,OAAO,EAAE,EAAI,OAAO,UAAU,CAAC,EACxD,OAAAgB,EAAI5B,GAAQ,EAAIgI,EAChBA,EAAKA,GAAM,EACXpG,EAAI5B,GAAQ,EAAIgI,EAChBA,EAAKA,GAAM,EACXpG,EAAI5B,GAAQ,EAAIgI,EAChBA,EAAKA,GAAM,EACXpG,EAAI5B,GAAQ,EAAIgI,EACThI,CACT,CAEA,SAASsI,GAAe1G,EAAKhB,EAAOZ,EAAQkI,EAAKxD,EAAK,CACpD2D,GAAWzH,EAAOsH,EAAKxD,EAAK9C,EAAK5B,EAAQ,CAAC,EAC1C,IAAI+H,EAAK,OAAOnH,EAAQ,OAAO,UAAU,CAAC,EAC1CgB,EAAI5B,EAAS,CAAC,EAAI+H,EAClBA,EAAKA,GAAM,EACXnG,EAAI5B,EAAS,CAAC,EAAI+H,EAClBA,EAAKA,GAAM,EACXnG,EAAI5B,EAAS,CAAC,EAAI+H,EAClBA,EAAKA,GAAM,EACXnG,EAAI5B,EAAS,CAAC,EAAI+H,EAClB,IAAIC,EAAK,OAAOpH,GAAS,OAAO,EAAE,EAAI,OAAO,UAAU,CAAC,EACxD,OAAAgB,EAAI5B,EAAS,CAAC,EAAIgI,EAClBA,EAAKA,GAAM,EACXpG,EAAI5B,EAAS,CAAC,EAAIgI,EAClBA,EAAKA,GAAM,EACXpG,EAAI5B,EAAS,CAAC,EAAIgI,EAClBA,EAAKA,GAAM,EACXpG,EAAI5B,CAAM,EAAIgI,EACPhI,EAAS,CAClB,CAEAqB,EAAO,UAAU,iBAAmBqG,GAAmB,SAA0B9G,EAAOZ,EAAS,EAAG,CAClG,OAAOoI,GAAe,KAAMxH,EAAOZ,EAAQ,OAAO,CAAC,EAAG,OAAO,oBAAoB,CAAC,CACpF,CAAC,EACDqB,EAAO,UAAU,iBAAmBqG,GAAmB,SAA0B9G,EAAOZ,EAAS,EAAG,CAClG,OAAOsI,GAAe,KAAM1H,EAAOZ,EAAQ,OAAO,CAAC,EAAG,OAAO,oBAAoB,CAAC,CACpF,CAAC,EAEDqB,EAAO,UAAU,WAAa,SAAoBT,EAAOZ,EAAQjC,EAAYyJ,EAAU,CAIrF,GAHA5G,EAAQ,CAACA,EACTZ,EAASA,IAAW,EAEhB,CAACwH,EAAU,CACb,IAAMe,EAAQ,KAAK,IAAI,EAAG,EAAIxK,EAAa,CAAC,EAC5CkK,EAAS,KAAMrH,EAAOZ,EAAQjC,EAAYwK,EAAQ,EAAG,CAACA,CAAK,CAC7D,CAEA,IAAIjK,EAAI,EACJmJ,EAAM,EACNe,EAAM,EAGV,IAFA,KAAKxI,CAAM,EAAIY,EAAQ,IAEhB,EAAEtC,EAAIP,IAAe0J,GAAO,MAC7B7G,EAAQ,GAAK4H,IAAQ,GAAK,KAAKxI,EAAS1B,EAAI,CAAC,IAAM,IACrDkK,EAAM,GAGR,KAAKxI,EAAS1B,CAAC,GAAKsC,EAAQ6G,GAAO,GAAKe,EAAM,IAGhD,OAAOxI,EAASjC,CAClB,EAEAsD,EAAO,UAAU,WAAa,SAAoBT,EAAOZ,EAAQjC,EAAYyJ,EAAU,CAIrF,GAHA5G,EAAQ,CAACA,EACTZ,EAASA,IAAW,EAEhB,CAACwH,EAAU,CACb,IAAMe,EAAQ,KAAK,IAAI,EAAG,EAAIxK,EAAa,CAAC,EAC5CkK,EAAS,KAAMrH,EAAOZ,EAAQjC,EAAYwK,EAAQ,EAAG,CAACA,CAAK,CAC7D,CAEA,IAAIjK,EAAIP,EAAa,EACjB0J,EAAM,EACNe,EAAM,EAGV,IAFA,KAAKxI,EAAS1B,CAAC,EAAIsC,EAAQ,IAEpB,EAAEtC,GAAK,IAAMmJ,GAAO,MACrB7G,EAAQ,GAAK4H,IAAQ,GAAK,KAAKxI,EAAS1B,EAAI,CAAC,IAAM,IACrDkK,EAAM,GAGR,KAAKxI,EAAS1B,CAAC,GAAKsC,EAAQ6G,GAAO,GAAKe,EAAM,IAGhD,OAAOxI,EAASjC,CAClB,EAEAsD,EAAO,UAAU,UAAY,SAAmBT,EAAOZ,EAAQwH,EAAU,CACvE,OAAA5G,EAAQ,CAACA,EACTZ,EAASA,IAAW,EACfwH,GAAUS,EAAS,KAAMrH,EAAOZ,EAAQ,EAAG,IAAK,IAAI,EACrDY,EAAQ,IAAGA,EAAQ,IAAMA,EAAQ,GACrC,KAAKZ,CAAM,EAAIY,EAAQ,IAChBZ,EAAS,CAClB,EAEAqB,EAAO,UAAU,aAAe,SAAsBT,EAAOZ,EAAQwH,EAAU,CAC7E,OAAA5G,EAAQ,CAACA,EACTZ,EAASA,IAAW,EACfwH,GAAUS,EAAS,KAAMrH,EAAOZ,EAAQ,EAAG,MAAO,MAAM,EAC7D,KAAKA,CAAM,EAAIY,EAAQ,IACvB,KAAKZ,EAAS,CAAC,EAAIY,IAAU,EACtBZ,EAAS,CAClB,EAEAqB,EAAO,UAAU,aAAe,SAAsBT,EAAOZ,EAAQwH,EAAU,CAC7E,OAAA5G,EAAQ,CAACA,EACTZ,EAASA,IAAW,EACfwH,GAAUS,EAAS,KAAMrH,EAAOZ,EAAQ,EAAG,MAAO,MAAM,EAC7D,KAAKA,CAAM,EAAIY,IAAU,EACzB,KAAKZ,EAAS,CAAC,EAAIY,EAAQ,IACpBZ,EAAS,CAClB,EAEAqB,EAAO,UAAU,aAAe,SAAsBT,EAAOZ,EAAQwH,EAAU,CAC7E,OAAA5G,EAAQ,CAACA,EACTZ,EAASA,IAAW,EACfwH,GAAUS,EAAS,KAAMrH,EAAOZ,EAAQ,EAAG,WAAY,WAAW,EACvE,KAAKA,CAAM,EAAIY,EAAQ,IACvB,KAAKZ,EAAS,CAAC,EAAIY,IAAU,EAC7B,KAAKZ,EAAS,CAAC,EAAIY,IAAU,GAC7B,KAAKZ,EAAS,CAAC,EAAIY,IAAU,GACtBZ,EAAS,CAClB,EAEAqB,EAAO,UAAU,aAAe,SAAsBT,EAAOZ,EAAQwH,EAAU,CAC7E,OAAA5G,EAAQ,CAACA,EACTZ,EAASA,IAAW,EACfwH,GAAUS,EAAS,KAAMrH,EAAOZ,EAAQ,EAAG,WAAY,WAAW,EACnEY,EAAQ,IAAGA,EAAQ,WAAaA,EAAQ,GAC5C,KAAKZ,CAAM,EAAIY,IAAU,GACzB,KAAKZ,EAAS,CAAC,EAAIY,IAAU,GAC7B,KAAKZ,EAAS,CAAC,EAAIY,IAAU,EAC7B,KAAKZ,EAAS,CAAC,EAAIY,EAAQ,IACpBZ,EAAS,CAClB,EAEAqB,EAAO,UAAU,gBAAkBqG,GAAmB,SAAyB9G,EAAOZ,EAAS,EAAG,CAChG,OAAOoI,GAAe,KAAMxH,EAAOZ,EAAQ,CAAC,OAAO,oBAAoB,EAAG,OAAO,oBAAoB,CAAC,CACxG,CAAC,EACDqB,EAAO,UAAU,gBAAkBqG,GAAmB,SAAyB9G,EAAOZ,EAAS,EAAG,CAChG,OAAOsI,GAAe,KAAM1H,EAAOZ,EAAQ,CAAC,OAAO,oBAAoB,EAAG,OAAO,oBAAoB,CAAC,CACxG,CAAC,EAED,SAASyI,GAAa7G,EAAKhB,EAAOZ,EAAQuH,EAAK7C,EAAKwD,EAAK,CACvD,GAAIlI,EAASuH,EAAM3F,EAAI,OAAQ,MAAM,IAAI,WAAW,oBAAoB,EACxE,GAAI5B,EAAS,EAAG,MAAM,IAAI,WAAW,oBAAoB,CAC3D,CAEA,SAAS0I,GAAW9G,EAAKhB,EAAOZ,EAAQ2I,EAAcnB,EAAU,CAC9D,OAAA5G,EAAQ,CAACA,EACTZ,EAASA,IAAW,EAEfwH,GACHiB,GAAa7G,EAAKhB,EAAOZ,EAAQ,CAAC,EAGpCmB,EAAQ,MAAMS,EAAKhB,EAAOZ,EAAQ2I,EAAc,GAAI,CAAC,EAC9C3I,EAAS,CAClB,CAEAqB,EAAO,UAAU,aAAe,SAAsBT,EAAOZ,EAAQwH,EAAU,CAC7E,OAAOkB,GAAW,KAAM9H,EAAOZ,EAAQ,GAAMwH,CAAQ,CACvD,EAEAnG,EAAO,UAAU,aAAe,SAAsBT,EAAOZ,EAAQwH,EAAU,CAC7E,OAAOkB,GAAW,KAAM9H,EAAOZ,EAAQ,GAAOwH,CAAQ,CACxD,EAEA,SAASoB,GAAYhH,EAAKhB,EAAOZ,EAAQ2I,EAAcnB,EAAU,CAC/D,OAAA5G,EAAQ,CAACA,EACTZ,EAASA,IAAW,EAEfwH,GACHiB,GAAa7G,EAAKhB,EAAOZ,EAAQ,CAAC,EAGpCmB,EAAQ,MAAMS,EAAKhB,EAAOZ,EAAQ2I,EAAc,GAAI,CAAC,EAC9C3I,EAAS,CAClB,CAEAqB,EAAO,UAAU,cAAgB,SAAuBT,EAAOZ,EAAQwH,EAAU,CAC/E,OAAOoB,GAAY,KAAMhI,EAAOZ,EAAQ,GAAMwH,CAAQ,CACxD,EAEAnG,EAAO,UAAU,cAAgB,SAAuBT,EAAOZ,EAAQwH,EAAU,CAC/E,OAAOoB,GAAY,KAAMhI,EAAOZ,EAAQ,GAAOwH,CAAQ,CACzD,EAGAnG,EAAO,UAAU,KAAO,SAAcsD,EAAQkE,EAAaxJ,EAAOC,EAAK,CACrE,GAAI,CAAC+B,EAAO,SAASsD,CAAM,EAAG,MAAM,IAAI,UAAU,6BAA6B,EAQ/E,GAPKtF,IAAOA,EAAQ,GAChB,CAACC,GAAOA,IAAQ,IAAGA,EAAM,KAAK,QAC9BuJ,GAAelE,EAAO,SAAQkE,EAAclE,EAAO,QAClDkE,IAAaA,EAAc,GAC5BvJ,EAAM,GAAKA,EAAMD,IAAOC,EAAMD,GAE9BC,IAAQD,GACRsF,EAAO,SAAW,GAAK,KAAK,SAAW,EAAG,MAAO,GAErD,GAAIkE,EAAc,EAChB,MAAM,IAAI,WAAW,2BAA2B,EAGlD,GAAIxJ,EAAQ,GAAKA,GAAS,KAAK,OAAQ,MAAM,IAAI,WAAW,oBAAoB,EAChF,GAAIC,EAAM,EAAG,MAAM,IAAI,WAAW,yBAAyB,EAEvDA,EAAM,KAAK,SAAQA,EAAM,KAAK,QAE9BqF,EAAO,OAASkE,EAAcvJ,EAAMD,IACtCC,EAAMqF,EAAO,OAASkE,EAAcxJ,GAGtC,IAAMd,EAAMe,EAAMD,EAElB,OAAI,OAASsF,GAAU,OAAO,WAAW,UAAU,YAAe,WAEhE,KAAK,WAAWkE,EAAaxJ,EAAOC,CAAG,EAEvC,WAAW,UAAU,IAAI,KAAKqF,EAAQ,KAAK,SAAStF,EAAOC,CAAG,EAAGuJ,CAAW,EAGvEtK,CACT,EAMA8C,EAAO,UAAU,KAAO,SAAc4D,EAAK5F,EAAOC,EAAKsD,EAAU,CAE/D,GAAI,OAAOqC,GAAQ,SAAU,CAU3B,GATI,OAAO5F,GAAU,UACnBuD,EAAWvD,EACXA,EAAQ,EACRC,EAAM,KAAK,QACF,OAAOA,GAAQ,WACxBsD,EAAWtD,EACXA,EAAM,KAAK,QAGTsD,IAAa,QAAa,OAAOA,GAAa,SAChD,MAAM,IAAI,UAAU,2BAA2B,EAGjD,GAAI,OAAOA,GAAa,UAAY,CAACvB,EAAO,WAAWuB,CAAQ,EAC7D,MAAM,IAAI,UAAU,qBAAuBA,CAAQ,EAGrD,GAAIqC,EAAI,SAAW,EAAG,CACpB,IAAM5G,EAAO4G,EAAI,WAAW,CAAC,GAEzBrC,IAAa,QAAUvE,EAAO,KAAOuE,IAAa,YAEpDqC,EAAM5G,EAEV,CACF,MAAW,OAAO4G,GAAQ,SACxBA,EAAMA,EAAM,IACH,OAAOA,GAAQ,YACxBA,EAAM,OAAOA,CAAG,GAIlB,GAAI5F,EAAQ,GAAK,KAAK,OAASA,GAAS,KAAK,OAASC,EACpD,MAAM,IAAI,WAAW,oBAAoB,EAG3C,GAAIA,GAAOD,EACT,OAAO,KAGTA,EAAQA,IAAU,EAClBC,EAAMA,IAAQ,OAAY,KAAK,OAASA,IAAQ,EAC3C2F,IAAKA,EAAM,GAChB,IAAI3G,EAEJ,GAAI,OAAO2G,GAAQ,SACjB,IAAK3G,EAAIe,EAAOf,EAAIgB,EAAK,EAAEhB,EACzB,KAAKA,CAAC,EAAI2G,MAEP,CACL,IAAMmC,EAAQ/F,EAAO,SAAS4D,CAAG,EAAIA,EAAM5D,EAAO,KAAK4D,EAAKrC,CAAQ,EAC9DrE,EAAM6I,EAAM,OAElB,GAAI7I,IAAQ,EACV,MAAM,IAAI,UAAU,cAAiB0G,EAAM,mCAAsC,EAGnF,IAAK3G,EAAI,EAAGA,EAAIgB,EAAMD,EAAO,EAAEf,EAC7B,KAAKA,EAAIe,CAAK,EAAI+H,EAAM9I,EAAIC,CAAG,CAEnC,CAEA,OAAO,IACT,EAKA,IAAMuK,GAAS,CAAC,EAEhB,SAASC,GAAEC,EAAKC,EAAYC,EAAM,CAChCJ,GAAOE,CAAG,EAAI,cAAwBE,CAAK,CACzC,aAAc,CACZ,MAAM,EACN,OAAO,eAAe,KAAM,UAAW,CACrC,MAAOD,EAAW,MAAM,KAAM,SAAS,EACvC,SAAU,GACV,aAAc,EAChB,CAAC,EAED,KAAK,KAAO,GAAG,KAAK,IAAI,KAAKD,CAAG,IAGhC,KAAK,MAGL,OAAO,KAAK,IACd,CAEA,IAAI,MAAO,CACT,OAAOA,CACT,CAEA,IAAI,KAAKpI,EAAO,CACd,OAAO,eAAe,KAAM,OAAQ,CAClC,aAAc,GACd,WAAY,GACZ,MAAAA,EACA,SAAU,EACZ,CAAC,CACH,CAEA,UAAW,CACT,MAAO,GAAG,KAAK,IAAI,KAAKoI,CAAG,MAAM,KAAK,OAAO,EAC/C,CAEF,CACF,CAEAD,GAAE,2BAA4B,SAAUI,EAAM,CAC5C,OAAIA,EACK,GAAGA,CAAI,+BAGT,gDACT,EAAG,UAAU,EACbJ,GAAE,uBAAwB,SAAUI,EAAMpG,EAAQ,CAChD,MAAO,QAAQoG,CAAI,oDAAoD,OAAOpG,CAAM,EACtF,EAAG,SAAS,EACZgG,GAAE,mBAAoB,SAAUtE,EAAK2E,EAAOC,EAAO,CACjD,IAAIC,EAAM,iBAAiB7E,CAAG,qBAC1B8E,EAAWF,EAEf,OAAI,OAAO,UAAUA,CAAK,GAAK,KAAK,IAAIA,CAAK,EAAI,GAAK,GACpDE,EAAWC,GAAsB,OAAOH,CAAK,CAAC,EACrC,OAAOA,GAAU,WAC1BE,EAAW,OAAOF,CAAK,GAEnBA,EAAQ,OAAO,CAAC,GAAK,OAAO,EAAE,GAAKA,EAAQ,EAAE,OAAO,CAAC,GAAK,OAAO,EAAE,MACrEE,EAAWC,GAAsBD,CAAQ,GAG3CA,GAAY,KAGdD,GAAO,eAAeF,CAAK,cAAcG,CAAQ,GAC1CD,CACT,EAAG,UAAU,EAEb,SAASE,GAAsBvE,EAAK,CAClC,IAAIqB,EAAM,GACNhI,EAAI2G,EAAI,OACN5F,EAAQ4F,EAAI,CAAC,IAAM,IAAM,EAAI,EAEnC,KAAO3G,GAAKe,EAAQ,EAAGf,GAAK,EAC1BgI,EAAM,IAAIrB,EAAI,MAAM3G,EAAI,EAAGA,CAAC,CAAC,GAAGgI,CAAG,GAGrC,MAAO,GAAGrB,EAAI,MAAM,EAAG3G,CAAC,CAAC,GAAGgI,CAAG,EACjC,CAIA,SAASmD,GAAY7H,EAAK5B,EAAQjC,EAAY,CAC5C4J,GAAe3H,EAAQ,QAAQ,GAE3B4B,EAAI5B,CAAM,IAAM,QAAa4B,EAAI5B,EAASjC,CAAU,IAAM,SAC5D+J,GAAY9H,EAAQ4B,EAAI,QAAU7D,EAAa,EAAE,CAErD,CAEA,SAASsK,GAAWzH,EAAOsH,EAAKxD,EAAK9C,EAAK5B,EAAQjC,EAAY,CAC5D,GAAI6C,EAAQ8D,GAAO9D,EAAQsH,EAAK,CAC9B,IAAM1D,EAAI,OAAO0D,GAAQ,SAAW,IAAM,GACtCkB,EAEJ,MAAIrL,EAAa,EACXmK,IAAQ,GAAKA,IAAQ,OAAO,CAAC,EAC/BkB,EAAQ,OAAO5E,CAAC,WAAWA,CAAC,QAAQzG,EAAa,GAAK,CAAC,GAAGyG,CAAC,GAE3D4E,EAAQ,SAAS5E,CAAC,QAAQzG,EAAa,GAAK,EAAI,CAAC,GAAGyG,CAAC,iBAAsBzG,EAAa,GAAK,EAAI,CAAC,GAAGyG,CAAC,GAGxG4E,EAAQ,MAAMlB,CAAG,GAAG1D,CAAC,WAAWE,CAAG,GAAGF,CAAC,GAGnC,IAAIsE,GAAO,iBAAiB,QAASM,EAAOxI,CAAK,CACzD,CAEA6I,GAAY7H,EAAK5B,EAAQjC,CAAU,CACrC,CAEA,SAAS4J,GAAe/G,EAAOuI,EAAM,CACnC,GAAI,OAAOvI,GAAU,SACnB,MAAM,IAAIkI,GAAO,qBAAqBK,EAAM,SAAUvI,CAAK,CAE/D,CAEA,SAASkH,GAAYlH,EAAOe,EAAQ+H,EAAM,CACxC,MAAI,KAAK,MAAM9I,CAAK,IAAMA,GACxB+G,GAAe/G,EAAO8I,CAAI,EACpB,IAAIZ,GAAO,iBAAiBY,GAAQ,SAAU,aAAc9I,CAAK,GAGrEe,EAAS,EACL,IAAImH,GAAO,yBAGb,IAAIA,GAAO,iBAAiBY,GAAQ,SAAU,MAAMA,EAAO,EAAI,CAAC,WAAW/H,CAAM,GAAIf,CAAK,CAClG,CAIA,IAAM+I,GAAoB,oBAE1B,SAASC,GAAYnF,EAAK,CAMxB,GAJAA,EAAMA,EAAI,MAAM,GAAG,EAAE,CAAC,EAEtBA,EAAMA,EAAI,KAAK,EAAE,QAAQkF,GAAmB,EAAE,EAE1ClF,EAAI,OAAS,EAAG,MAAO,GAE3B,KAAOA,EAAI,OAAS,IAAM,GACxBA,EAAMA,EAAM,IAGd,OAAOA,CACT,CAEA,SAASX,GAAYhB,EAAQ+G,EAAO,CAClCA,EAAQA,GAAS,IACjB,IAAIrD,EACE7E,EAASmB,EAAO,OAClBgH,EAAgB,KACd1C,EAAQ,CAAC,EAEf,QAAS9I,EAAI,EAAGA,EAAIqD,EAAQ,EAAErD,EAAG,CAG/B,GAFAkI,EAAY1D,EAAO,WAAWxE,CAAC,EAE3BkI,EAAY,OAASA,EAAY,MAAO,CAE1C,GAAI,CAACsD,EAAe,CAElB,GAAItD,EAAY,MAAO,EAEhBqD,GAAS,GAAK,IAAIzC,EAAM,KAAK,IAAK,IAAK,GAAG,EAC/C,QACF,SAAW9I,EAAI,IAAMqD,EAAQ,EAEtBkI,GAAS,GAAK,IAAIzC,EAAM,KAAK,IAAK,IAAK,GAAG,EAC/C,QACF,CAGA0C,EAAgBtD,EAChB,QACF,CAGA,GAAIA,EAAY,MAAO,EAChBqD,GAAS,GAAK,IAAIzC,EAAM,KAAK,IAAK,IAAK,GAAG,EAC/C0C,EAAgBtD,EAChB,QACF,CAGAA,GAAasD,EAAgB,OAAS,GAAKtD,EAAY,OAAS,KAClE,MAAWsD,IAEJD,GAAS,GAAK,IAAIzC,EAAM,KAAK,IAAK,IAAK,GAAG,EAKjD,GAFA0C,EAAgB,KAEZtD,EAAY,IAAK,CACnB,IAAKqD,GAAS,GAAK,EAAG,MACtBzC,EAAM,KAAKZ,CAAS,CACtB,SAAWA,EAAY,KAAM,CAC3B,IAAKqD,GAAS,GAAK,EAAG,MACtBzC,EAAM,KAAKZ,GAAa,EAAI,IAAKA,EAAY,GAAK,GAAG,CACvD,SAAWA,EAAY,MAAO,CAC5B,IAAKqD,GAAS,GAAK,EAAG,MACtBzC,EAAM,KAAKZ,GAAa,GAAK,IAAKA,GAAa,EAAI,GAAK,IAAKA,EAAY,GAAK,GAAG,CACnF,SAAWA,EAAY,QAAS,CAC9B,IAAKqD,GAAS,GAAK,EAAG,MACtBzC,EAAM,KAAKZ,GAAa,GAAK,IAAKA,GAAa,GAAK,GAAK,IAAKA,GAAa,EAAI,GAAK,IAAKA,EAAY,GAAK,GAAG,CAC/G,KACE,OAAM,IAAI,MAAM,oBAAoB,CAExC,CAEA,OAAOY,CACT,CAEA,SAASlB,GAAazB,EAAK,CACzB,IAAMsF,EAAY,CAAC,EAEnB,QAASzL,EAAI,EAAGA,EAAImG,EAAI,OAAQ,EAAEnG,EAEhCyL,EAAU,KAAKtF,EAAI,WAAWnG,CAAC,EAAI,GAAG,EAGxC,OAAOyL,CACT,CAEA,SAAS1D,GAAe5B,EAAKoF,EAAO,CAClC,IAAIhJ,EAAGmH,EAAID,EACLgC,EAAY,CAAC,EAEnB,QAASzL,EAAI,EAAGA,EAAImG,EAAI,QACjB,GAAAoF,GAAS,GAAK,GADW,EAAEvL,EAEhCuC,EAAI4D,EAAI,WAAWnG,CAAC,EACpB0J,EAAKnH,GAAK,EACVkH,EAAKlH,EAAI,IACTkJ,EAAU,KAAKhC,CAAE,EACjBgC,EAAU,KAAK/B,CAAE,EAGnB,OAAO+B,CACT,CAEA,SAAShG,GAAcU,EAAK,CAC1B,OAAOvD,EAAO,YAAY0I,GAAYnF,CAAG,CAAC,CAC5C,CAEA,SAASuB,GAAWgE,EAAKC,EAAKjK,EAAQ2B,EAAQ,CAC5C,IAAIrD,EAEJ,IAAKA,EAAI,EAAGA,EAAIqD,GACV,EAAArD,EAAI0B,GAAUiK,EAAI,QAAU3L,GAAK0L,EAAI,QADnB,EAAE1L,EAExB2L,EAAI3L,EAAI0B,CAAM,EAAIgK,EAAI1L,CAAC,EAGzB,OAAOA,CACT,CAKA,SAAS6D,GAAWkB,EAAKqG,EAAM,CAC7B,OAAOrG,aAAeqG,GAAQrG,GAAO,MAAQA,EAAI,aAAe,MAAQA,EAAI,YAAY,MAAQ,MAAQA,EAAI,YAAY,OAASqG,EAAK,IACxI,CAEA,SAASpG,GAAYD,EAAK,CAExB,OAAOA,IAAQA,CACjB,CAIA,IAAM8D,GAAsB,UAAY,CACtC,IAAM+C,EAAW,mBACXC,EAAQ,IAAI,MAAM,GAAG,EAE3B,QAAS7L,EAAI,EAAGA,EAAI,GAAI,EAAEA,EAAG,CAC3B,IAAM8L,EAAM9L,EAAI,GAEhB,QAASoH,EAAI,EAAGA,EAAI,GAAI,EAAEA,EACxByE,EAAMC,EAAM1E,CAAC,EAAIwE,EAAS5L,CAAC,EAAI4L,EAASxE,CAAC,CAE7C,CAEA,OAAOyE,CACT,EAAE,EAGF,SAASzC,GAAmB2C,EAAI,CAC9B,OAAO,OAAO,OAAW,IAAcC,GAAyBD,CAClE,CAEA,SAASC,IAAyB,CAChC,MAAM,IAAI,MAAM,sBAAsB,CACxC,CAEA,OAAOvJ,EACT,CAEA,IAAMwJ,GAAUtJ,GAAI,EACpBsJ,GAAQ,OAAWA,GAAQ,WAAeA,GAAQ,kBAAsBA,GAAQ,WAEhF,IAAIlJ,EAASkJ,GAAQ,OACjBC,GAAoBD,GAAQ,kBAC5BE,GAAaF,GAAQ,WCnwElB,IAAMG,GAAmC,CAC9C,WAAY,wCACZ,mBAAoB,CAAC,EACrB,eAAgB,CAAC,EACjB,WAAY,8BACZ,2BAA4B,8CAC5B,kBAAmB,+CACnB,yBAA0B,iDAC1B,YAAa,kCACb,WAAY,CACV,yBAA0B,+CAC1B,yBAA0B,+CAC1B,YAAa,CAAE,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,CAAE,CACxE,EACA,sBAAuB,EACzB,EAMaC,GAAkC,CAC7C,aAAc,sCACd,WAAY,yBACd,EAKaC,GAAkC,CAC7C,IAAK,sCACL,IAAK,0BACL,IAAK,8BACL,KAAM,6BACR,ECpCA,OAAS,OAAAC,OAAW,SCAb,IAAeC,EAAf,cAAoC,KAAM,CAGrC,YAAYC,EAAiBC,EAAkB,CACvD,MAAMA,CAAO,EACb,KAAK,UAAYD,CACnB,CACF,EAEaE,EAAN,cAAuBH,CAAa,CACzC,YAAYE,EAAkB,CAC5B,MAAM,WAAqBA,CAAO,CACpC,CACF,EAEaE,GAAN,cAAiCJ,CAAa,CACnD,YAAYE,EAAkB,CAC5B,MAAM,qBAAgCA,CAAO,CAC/C,CACF,EAEaG,GAAN,cAAmCL,CAAa,CACrD,YAAYE,EAAkB,CAC5B,MAAM,uBAAmCA,CAAO,CAClD,CACF,EAEaI,GAAN,cAA6CN,CAAa,CAC/D,YAAYE,EAAkB,CAC5B,MAAM,iCAA6CA,CAAO,CAC5D,CACF,EAEaK,GAAN,cAA2BP,CAAa,CAC7C,YAAYE,EAAkB,CAC5B,MAAM,eAAyBA,CAAO,CACxC,CACF,EAEaM,GAAN,cAA8CR,CAAa,CAChE,YAAYE,EAAkB,CAC5B,MAAM,kCAAgDA,CAAO,CAC/D,CACF,EAEaO,GAAN,cAA0CT,CAAa,CAC5D,YAAYE,EAAkB,CAC5B,MAAM,8BAA0CA,CAAO,CACzD,CACF,EAEaQ,GAAN,cAAsCV,CAAa,CACxD,YAAYE,EAAkB,CAC5B,MAAM,0BAAsCA,CAAO,CACrD,CACF,EAEaS,GAAN,cAA4BX,CAAa,CAC9C,YAAYE,EAAkB,CAC5B,MAAM,gBAA2BA,CAAO,CAC1C,CACF,EAEaU,GAAN,cAA6BZ,CAAa,CAC/C,YAAYE,EAAkB,CAC5B,MAAM,iBAA4BA,CAAO,CAC3C,CACF,EAEaW,GAAN,cAA4Cb,CAAa,CAC9D,YAAYE,EAAkB,CAC5B,MAAM,gCAA8CA,CAAO,CAC7D,CACF,EAEaY,GAAN,cAA2Cd,CAAa,CAC7D,YAAYe,EAAiBC,EAAoBC,EAA0B,CACzE,MACE,+BACA,aAAaF,CAAO,eAAeC,CAAU,6BAA6BC,CAAgB,GAC5F,CACF,CACF,EAEaC,GAAN,cAA2BlB,CAAa,CAC7C,YAAYE,EAAkB,CAC5B,MAAM,eAAyBA,CAAO,CACxC,CACF,EAEaiB,GAAN,cAA4CnB,CAAa,CAC9D,YAAYoB,EAAqB,CAC/B,MAAM,gCAA8C,cAAcA,CAAW,gCAAgC,CAC/G,CACF,EAEaC,GAAN,cAAwCrB,CAAa,CAC1D,YAAYE,EAAkB,CAC5B,MAAM,4BAAyCA,CAAO,CACxD,CACF,EAEaoB,GAAN,cAA8BtB,CAAa,CAChD,aAAc,CACZ,MACE,kBACA,iHACF,CACF,CACF,EAEYuB,QACVA,EAAA,UAAY,WACZA,EAAA,qBAAuB,qBACvBA,EAAA,wBAA0B,uBAC1BA,EAAA,kCAAoC,iCACpCA,EAAA,cAAgB,eAChBA,EAAA,qCAAuC,kCACvCA,EAAA,+BAAiC,8BACjCA,EAAA,2BAA6B,0BAC7BA,EAAA,gBAAkB,gBAClBA,EAAA,iBAAmB,iBACnBA,EAAA,mCAAqC,gCACrCA,EAAA,gCAAkC,+BAClCA,EAAA,cAAgB,eAChBA,EAAA,mCAAqC,gCACrCA,EAAA,8BAAgC,4BAChCA,EAAA,aAAe,kBAhBLA,QAAA,IC/GL,IAAKC,QAIVA,EAAA,IAAM,MAKNA,EAAA,IAAM,MAKNA,EAAA,IAAM,MAKNA,EAAA,IAAM,MAKNA,EAAA,IAAM,MAKNA,EAAA,IAAM,MAKNA,EAAA,IAAM,MAKNA,EAAA,IAAM,MAKNA,EAAA,IAAM,MAKNA,EAAA,IAAM,MAKNA,EAAA,KAAO,OAKPA,EAAA,IAAM,MA3DIA,QAAA,IA8DAC,QACVA,EAAA,IAAM,MACNA,EAAA,OAAS,SACTA,EAAA,IAAM,MACNA,EAAA,IAAM,MAJIA,QAAA,ICvDZ,IAAMC,GAAiD,CACrD,IAAK,GACL,OAAQ,EACR,IAAK,EACL,IAAK,CACP,EAEMC,GAA0D,CAC7D,IAAkB,CACjB,kBACA,QAAS,OACT,KAAM,YACN,eACF,EACC,IAAkB,CACjB,kBACA,QAAS,MACT,KAAM,WACN,eACF,EACC,IAAkB,CACjB,kBACA,QAAS,SACT,KAAM,OACN,eACF,EACC,IAAkB,CACjB,kBACA,QAAS,SACT,KAAM,WACN,eACF,EACC,IAAkB,CACjB,kBACA,QAAS,SACT,KAAM,YACN,eACF,EACC,IAAkB,CACjB,kBACA,QAAS,SACT,KAAM,OACN,eACF,EACC,IAAkB,CACjB,kBACA,QAAS,OACT,KAAM,UACN,eACF,EACC,IAAkB,CACjB,kBACA,QAAS,MACT,KAAM,aACN,eACF,EACC,IAAkB,CACjB,kBACA,KAAM,SACN,kBACF,EACC,IAAkB,CACjB,kBACA,KAAM,OACN,eACF,EACC,IAAkB,CACjB,kBACA,KAAM,UACN,eACF,EACC,KAAmB,CAClB,mBACA,KAAM,UACN,eACF,CACF,EAEaC,GAAU,IAAM,CAC3B,IAAIC,EAAwD,CAAE,GAAGF,EAAkB,EAEnF,MAAO,CACL,oBAAoBG,EAA6D,CAC/ED,EAAkB,CAAE,GAAGA,EAAiB,GAAGC,CAAqB,CAClE,EAEA,iBAAiBC,EAA2C,CAC1D,IAAMC,EAAWH,EAAgBE,CAAW,EAC5C,GAAI,CAACC,EACH,MAAM,IAAIC,EAAS,oCAAoCF,CAAW,EAAE,EAEtE,OAAOC,CACT,EAEA,qBAA4D,CAC1D,OAAOH,CACT,EAEA,uBAAuBK,EAA8B,CACnD,OAAOR,GAAoBQ,CAAS,CACtC,CACF,CACF,GAAG,EC7GH,OAAOC,OAAsB,QCAtB,IAAMC,GAAU,SCAvB,OAAS,OAAAC,MAAsB,SAC/B,OAAOC,OAAQ,QAKR,SAASC,GAAcC,EAAkBC,EAA2B,CACzE,OAAOC,EAAI,GAAG,EAAE,MAAMA,EAAI,GAAG,EAAE,MAAMD,CAAM,EAAE,IAAID,CAAK,CAAC,EAAE,SAAS,CACpE,CAEO,SAASG,GAAkBC,EAAmBC,EAAuB,CAC1E,OAAOC,GAAuBF,EAAQC,EAAU,CAAgB,EAAE,MAAM,EAAGH,EAAI,SAAS,CAC1F,CAEO,SAASK,GAAoBH,EAAmBC,EAAuB,CAC5E,OAAOC,GAAuBF,EAAQ,EAAkBC,CAAQ,CAClE,CAEO,SAASC,GAAuBF,EAAmBI,EAAsBC,EAAyB,CACvG,IAAMC,EAAMR,EAAIO,CAAU,EAAE,MAAMD,CAAY,EAAE,SAAS,EACzD,OAAON,EAAIE,CAAM,EAAE,MAAMO,GAAYD,CAAG,CAAC,CAC3C,CAEO,SAASC,GAAYN,EAAuB,CACjD,OAAOH,EAAI,EAAE,EAAE,IAAIG,CAAQ,CAC7B,CAEO,SAASO,EAAwBC,EAAwBR,EAAuB,CACrF,OAAOH,EAAIW,CAAW,EAAE,MAAMF,GAAYN,CAAQ,CAAC,CACrD,CAEO,SAASS,EAAwBC,EAAsBV,EAAuB,CACnF,IAAMW,EAAcd,EAAIa,CAAS,EACjC,OAAIC,EAAY,GAAG,CAAC,EACXd,EAAI,CAAC,EAEPA,EAAIc,CAAW,EAAE,IAAIL,GAAYN,CAAQ,CAAC,CACnD,CAEO,SAASY,GAA2BC,EAAkE,CAC3G,OAAOJ,EAAwBZ,EAAIgB,EAAS,YAAY,EAAE,MAAMA,EAAS,WAAW,EAAE,QAAQ,EAAG,CAAgB,EAC9G,IAAI,CAAC,EACL,QAAQ,CACb,CAEO,SAASC,GACdf,EACA,CAAE,SAAAgB,EAAU,SAAAf,CAAS,EACrBa,EACQ,CACR,IAAMF,EAAcd,EAAIE,CAAM,EAC9B,GAAIY,EAAY,IAAI,CAAC,EACnB,MAAO,IAET,IAAMK,EAAML,EAAY,MAAMI,CAAQ,EAChCE,EAAmBN,EAAY,MAAMK,CAAG,EACxCE,EAAoBpB,GAAkBmB,EAAkBjB,CAAQ,EAChEmB,EAAetB,EAAIgB,EAAS,YAAY,EAAE,KAAKK,CAAiB,EAChEE,EAAgBC,GAAKF,EAAcN,EAAS,OAAQA,EAAS,MAAM,EACzE,OAAOhB,EAAIgB,EAAS,WAAW,EAAE,MAAMO,CAAa,EAAE,MAAM,EAAGvB,EAAI,SAAS,EAAE,QAAQ,CACxF,CAEO,SAASyB,GACdvB,EACA,CAAE,SAAAgB,EAAU,SAAAf,CAAS,EACrBa,EACQ,CACR,IAAMF,EAAcd,EAAIE,CAAM,EAC9B,GAAIY,EAAY,IAAI,CAAC,EACnB,OAAOd,EAAI,CAAC,EAAE,QAAQ,EAExB,IAAM0B,EAAcZ,EAAY,KAAKE,EAAS,WAAW,EACnDW,EAAYH,GAAKE,EAAaV,EAAS,OAAQA,EAAS,MAAM,EAC9DY,EAASvB,GAAoBL,EAAIgB,EAAS,YAAY,EAAE,MAAMW,CAAS,EAAGxB,CAAQ,EAClFgB,EAAMnB,EAAI4B,CAAM,EAAE,MAAMV,CAAQ,EACtC,OAAOlB,EAAI4B,CAAM,EAAE,MAAMT,CAAG,EAAE,MAAM,EAAGnB,EAAI,SAAS,EAAE,QAAQ,CAChE,CAEO,SAAS6B,GACdC,EACAd,EACsE,CACtE,IAAMF,EAAcd,EAAI8B,CAAU,EAClC,GAAIhB,EAAY,IAAI,CAAC,EACnB,OAAOE,EAET,IAAMU,EAAcZ,EAAY,KAAKE,EAAS,WAAW,EACnDW,EAAYH,GAAKE,EAAaV,EAAS,OAAQA,EAAS,MAAM,EACpE,MAAO,CACL,OAAQA,EAAS,OACjB,OAAQA,EAAS,OACjB,aAAcW,EAAU,QAAQ,CAAC,EACjC,YAAaD,EAAY,QAAQ,CAAC,CACpC,CACF,CAQO,SAASK,GACd7B,EACA,CAAE,SAAAgB,EAAU,SAAAf,CAAS,EACrBa,EACK,CACL,GAAIhB,EAAIE,CAAM,EAAE,IAAI,CAAC,EACnB,OAAOF,EAAI,CAAC,EAEd,IAAMuB,EAAgBvB,EAAIgB,EAAS,WAAW,EAAE,MAAMd,CAAM,EAC5D,GAAIqB,EAAc,IAAI,CAAC,EACrB,MAAM,IAAIS,GAEZ,IAAMV,EAAeE,GAAKD,EAAeP,EAAS,OAAQA,EAAS,MAAM,EACnEK,EAAoBrB,EAAIsB,CAAY,EAAE,MAAMN,EAAS,YAAY,EACjEI,EAAmBf,GAAoBgB,EAAmBlB,CAAQ,EAClE8B,EAAmBjC,EAAIkB,CAAQ,EAAE,IAAIlB,EAAI,CAAC,EAAE,MAAMkB,CAAQ,CAAC,EAC3DC,EAAMnB,EAAIoB,CAAgB,EAAE,MAAMa,CAAgB,EAAE,MAAM,EAAGjC,EAAI,OAAO,EAC9E,OAAOA,EAAIoB,CAAgB,EAAE,KAAKD,CAAG,EAAE,MAAM,EAAGnB,EAAI,SAAS,CAC/D,CAQO,SAASkC,GACdhC,EACA,CAAE,SAAAgB,EAAU,SAAAf,CAAS,EACrBa,EACK,CACL,GAAIhB,EAAIE,CAAM,EAAE,IAAI,CAAC,EACnB,OAAOF,EAAI,CAAC,EAEd,IAAMiC,EAAmBjC,EAAIkB,CAAQ,EAAE,IAAIlB,EAAI,CAAC,EAAE,MAAMkB,CAAQ,CAAC,EAC3DC,EAAMnB,EAAIE,CAAM,EAAE,MAAM+B,CAAgB,EAAE,MAAM,EAAGjC,EAAI,OAAO,EAC9DmC,EAAgBnC,EAAIE,CAAM,EAAE,KAAKiB,CAAG,EACpCE,EAAoBpB,GAAkBkC,EAAehC,CAAQ,EAC7DmB,EAAetB,EAAIgB,EAAS,YAAY,EAAE,MAAMK,CAAiB,EACvE,GAAIC,EAAa,IAAI,CAAC,EACpB,MAAM,IAAIU,GAEZ,IAAMT,EAAgBC,GAAKF,EAAcN,EAAS,OAAQA,EAAS,MAAM,EACzE,OAAOhB,EAAIuB,CAAa,EAAE,MAAMP,EAAS,WAAW,EAAE,MAAM,EAAGhB,EAAI,SAAS,CAC9E,CAMO,SAASwB,GAAKY,EAAcC,EAAcC,EAAmB,CAClE,IAAMC,EAAgBvC,EAAI,CAAC,EAAE,MAAMqC,CAAC,EAAE,MAAMrC,EAAIsC,CAAC,EAAE,MAAMF,CAAC,CAAC,EAAE,MAAME,CAAC,EAC9DE,EAASxC,EAAIsC,CAAC,EAAE,IAAI,CAAC,EACrBG,EAAoBF,EAAc,IAAI,CAAC,EACvCG,EAAU1C,EAAIoC,CAAC,EAClB,MAAMpC,EAAIoC,CAAC,EAAE,MAAMK,CAAiB,EAAE,KAAKzC,EAAI,CAAC,EAAE,MAAMqC,CAAC,EAAE,MAAMG,CAAM,CAAC,CAAC,EACzE,KAAK,EACL,MAAM,EAAGxC,EAAI,SAAS,EACnB2C,EAAa3C,EAAI,CAAC,EAAE,MAAMqC,CAAC,EAAE,MAAMD,CAAC,EACpCR,EAASW,EAAc,MAAMH,CAAC,EAAE,KAAKM,CAAO,EAAE,IAAIC,CAAU,EAAE,MAAM,EAAG3C,EAAI,SAAS,EAC1F,OAAI4B,EAAO,GAAG,CAAC,EACN5B,EAAI,CAAC,EAEP4B,EAAO,KAAK,CAAC,CACtB,CAEO,SAASgB,GAAUC,EAAsBC,EAAwBC,EAA4BC,EAAmB,CACrH,IAAMC,EAAiB,IAAIC,GAAGL,CAAY,EACpCM,EAAuB,IAAID,GAAGH,CAAkB,EAChDK,EAAmB,IAAIF,GAAGJ,CAAc,EAE9C,OADgBG,EAAe,IAAIE,CAAoB,EAAE,KAAKH,CAAC,EAChD,IAAII,CAAgB,EAAE,SAAS,CAChD,CAEO,SAASC,GAAcC,EAAqB,CACjD,OAAOtD,EAAIsD,CAAG,EAAE,GAAG,CAAC,EAAI,GAAG,OAAOtD,EAAIsD,CAAG,EAAE,MAAM,GAAG,EAAE,QAAQ,CAAC,CAAC,EAAE,eAAe,CAAC,IAAM,KAC1F,CAMO,SAASC,GAAKC,EAAgBpB,EAAWqB,EAAmB,CACjE,IAAMC,EAAK1D,EAAIoC,CAAC,EAAE,MAAMqB,CAAC,EACnBE,EAAS3D,EAAIoC,CAAC,EAAE,KAAKqB,CAAC,EACtBpB,EAAIrC,EAAI,CAAC,EAAE,MAAMwD,CAAM,EAAE,MAAME,CAAE,EAAE,MAAMC,CAAM,EAC/CC,EAAIF,EAAG,MAAM1D,EAAI,EAAE,EAAE,MAAMwD,CAAM,EAAE,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,EAClDK,EAAWxB,EAAE,MAAMA,CAAC,EACpByB,EAASF,EAAE,MAAMA,CAAC,EAAE,MAAMA,CAAC,EAC3BG,EAAOF,EAAS,KAAKC,CAAM,EAC3BE,EAAIhE,EAAI+D,CAAI,EAAE,KAAK,EACnBE,EAAajE,EAAI,KAAK,KAAK,CAACqC,EAAE,KAAK2B,CAAC,EAAE,QAAQ,CAAC,CAAC,EAChDE,EAAclE,EAAI,KAAK,KAAK,CAACqC,EAAE,MAAM2B,CAAC,EAAE,QAAQ,CAAC,CAAC,EACxD,OAAOC,EAAW,KAAKC,CAAW,EAAE,QAAQ,CAC9C,CCtLO,IAAKC,QACVA,EAAA,GAAK,KACLA,EAAA,QAAU,UACVA,EAAA,UAAY,YACZA,EAAA,cAAgB,gBAChBA,EAAA,iBAAmB,mBACnBA,EAAA,+BAAiC,iCANvBA,QAAA,IAuDL,IAAKC,QACVA,IAAA,UAAY,GAAZ,YACAA,IAAA,SAAW,GAAX,WACAA,IAAA,KAAO,GAAP,OAHUA,QAAA,IC5CL,SAASC,GAAyCC,EAA0D,CACjH,OAAO,OAAO,QAAQA,CAAQ,EAAE,OAAiC,CAACC,EAAKC,IAAU,CAC/E,IAAMC,EAAcD,EAAM,CAAC,EACrBE,EAAkBF,EAAM,CAAC,EACzBG,EAAeC,GAAuBH,EAAaC,CAAe,EACxE,OAAIC,IACFJ,EAAIE,CAAW,EAAIE,GAEdJ,CACT,EAAG,CAAC,CAAC,CACP,CAEO,SAASM,GAAqCP,EAA6C,CAChG,IAAMQ,EAA2B,CAAC,EAClC,OAAW,CAACC,EAAkBL,CAAe,IAAK,OAAO,QAAQJ,CAAQ,EAAG,CAC1E,IAAMG,EAAcM,EACpB,QAAWC,KAASN,EAAgB,OAAQ,CAC1C,IAAMO,EAAUC,GAA0B,CACxC,YAAAT,EACA,YAAaO,EAAM,WACrB,CAAC,EACKG,EAAYC,GAA2BJ,EAAM,QAAQ,EAC3DF,EAAYG,CAAO,EAAI,CAAE,GAAGD,EAAM,SAAU,UAAAG,CAAU,CACxD,CACF,CACA,OAAOL,CACT,CAEA,SAASO,GAAgCV,EAA4BW,EAA+C,CAClH,GAAM,CAAE,KAAMC,EAAW,GAAGC,CAAwB,EAAIb,EAClD,CAAE,SAAUc,EAAW,GAAGC,CAAmB,EAAIJ,EACvD,MAAO,CACL,GAAGI,EACH,GAAGF,EACH,UAAAD,CACF,CACF,CAEA,SAASI,GAA8BL,EAAwC,CAC7E,OAAQA,EAAK,CACX,gBACE,SACF,eACE,SACF,WACE,SACF,QACE,OAAO,IACX,CACF,CAEA,SAASM,GAAuBN,EAAoC,CAClE,OAAO,OAAO,QAAQA,CAAG,EAAE,OAAqB,CAACO,EAAQ,CAACC,EAAKC,CAAK,KAClEF,EAAOC,CAAkB,EAAIE,GAAgCD,CAAK,EAC3DF,GACN,CAAC,CAAC,CACP,CAEA,SAASG,GAAgCV,EAAsD,CAC7F,OAAO,OAAO,QAAQA,CAAG,EAAE,OAA8B,CAACW,EAAuB,CAACH,EAAKC,CAAK,IAAM,CAChG,IAAMG,EAAYP,GAA8BG,CAAsB,EACtE,OAAII,IACFD,EAAsBC,CAAS,EAAIH,GAE9BE,CACT,EAAG,CAAC,CAAC,CACP,CAEA,SAASrB,GAAuBH,EAAqBa,EAA8D,CACjH,IAAMa,EAAuBC,EAAO,oBAAoB,EAAE3B,CAAW,EAErE,GAAI,CAAC0B,EACH,OAAO,KAET,IAAMxB,EAA6B,CACjC,GAAGwB,EACH,iBAAkBb,EAAI,QACtB,cAAeA,EAAI,cACnB,aAAcM,GAAuBN,EAAI,YAAY,EACrD,aAAcA,EAAI,aAClB,cAAeA,EAAI,aACrB,EACA,MAAO,CACL,GAAGX,EACH,OAAQW,EAAI,OAAO,IAAKe,GAAahB,GAAgCV,EAAc0B,CAAQ,CAAC,CAC9F,CACF,CAUO,SAASC,GAA0BC,EAAsC,CAC9E,OAAOA,EAAc,YAAc,IAAMA,EAAc,WACzD,CAEO,SAASC,GAAmCC,EAAmD,CACpG,IAAMC,EAAS,CAAC,EAChB,OAAW,CAACC,EAAkBC,CAAY,IAAK,OAAO,QAAQH,CAAe,EAAG,CAC9E,IAAMI,EAAcF,EACpB,QAAWG,KAASF,EAAa,OAC/BF,EAAO,KAAK,CACV,YAAAG,EACA,YAAaC,EAAM,WACrB,CAAC,CAEL,CACA,OAAOJ,CACT,CAEO,SAASK,GAAiCC,EAA6C,CAC5F,IAAMC,EAA2B,CAAC,EAClC,OAAW,CAACN,EAAkBO,CAAiB,IAAK,OAAO,QAAQF,CAAY,EAAG,CAChF,IAAMH,EAAcF,EACpB,OAAW,CAACQ,EAAaC,CAAQ,IAAK,OAAO,QAAQF,CAAiB,EACpEE,EAAS,UAAYC,GAA2BD,CAAQ,EACxDH,EAAYX,GAA0B,CAAE,YAAAO,EAAa,YAAAM,CAAY,CAAC,CAAC,EAAIC,CAE3E,CACA,OAAOH,CACT,CJ/GO,IAAMK,GAAN,KAAyC,CAG9C,YAAYC,EAAmC,CAC7C,KAAK,IAAMC,GAAM,OAAO,CACtB,QAASD,EAAO,WAChB,QAAS,CACP,OAAQ,mBACR,GAAGA,EAAO,eACV,cAAe,oBAAsBE,EACvC,EACA,OAAQF,EAAO,kBACjB,CAAC,CACH,CAEA,MAAM,cAAmC,CACvC,GAAM,CAAE,KAAAG,CAAK,EAAI,MAAM,KAAK,IAAI,IAA0B,cAAe,CAAE,OAAQ,CAAE,OAAQ,KAAM,CAAE,CAAC,EACtG,MAAO,CACL,gBAAiBC,GAAyCD,CAAI,EAC9D,YAAaE,GAAqCF,CAAI,CACxD,CACF,CAEA,MAAM,gBAA+C,CACnD,GAAM,CAAE,KAAAA,CAAK,EAAI,MAAM,KAAK,IAAI,IAAyB,eAAe,EACxE,OAAOA,CACT,CAEA,MAAM,cAAcG,EAAqBC,EAA8C,CACrF,GAAM,CAAE,KAAAJ,CAAK,EAAI,MAAM,KAAK,IAAI,IAAwB,UAAUG,CAAW,IAAIC,CAAO,EAAE,EAC1F,OAAOJ,CACT,CAEA,MAAM,kBAAkBG,EAAqBE,EAA+C,CAC1F,GAAM,CAAE,KAAAL,CAAK,EAAI,MAAM,KAAK,IAAI,IAA4B,UAAUG,CAAW,IAAIE,CAAI,EAAE,EAC3F,OAAOL,CACT,CAEA,MAAM,0BAA0BM,EAA8E,CAC5G,GAAM,CAAE,KAAAN,CAAK,EAAI,MAAM,KAAK,IAAI,KAAqC,eAAgBM,EAAM,CACzF,QAAS,CACP,eAAgB,kBAClB,CACF,CAAC,EACD,MAAO,CACL,aAAcN,EAAK,aACnB,IAAKA,EAAK,IACV,uBAAwBA,EAAK,sBAC/B,CACF,CAEA,MAAM,eAAeO,EAA8D,CACjF,IAAMC,EAAWD,aAAiB,MAAQA,EAAQ,CAACA,CAAK,EAClD,CAAE,KAAAP,CAAK,EAAI,MAAM,KAAK,IAAI,KAC9B,aACA,CAAE,MAAOQ,CAAS,EAClB,CACE,QAAS,CACP,eAAgB,kBAClB,CACF,CACF,EACA,OAAOC,GAAiCT,CAAI,CAC9C,CACF,EKtGA,OAAOU,OAAW,cAWlB,IAAMC,GAAkB,GAAK,IACvBC,GAAkB,GAAK,IAEhBC,GAAN,KAA4C,CAMjD,YAAoBC,EAAsB,CAAtB,eAAAA,EAClB,KAAK,eAAiB,IAAIJ,GAAM,CAAE,WAAYE,EAAgB,CAAC,EAC/D,KAAK,yBAA2B,IAAIF,GAAM,CAAE,WAAYC,EAAgB,CAAC,EACzE,KAAK,iBAAmB,IAAID,GAAM,CAAE,WAAYC,EAAgB,CAAC,EACjE,KAAK,gBAAkB,IAAID,GAAM,CAAE,WAAYC,EAAgB,CAAC,CAClE,CAEA,cAAmC,CACjC,IAAMI,EAAuB,uBACvBC,EAAY,KAAK,eAAe,IAAID,CAAoB,EAC9D,GAAIC,EACF,OAAOA,EAET,IAAMC,EAAmB,KAAK,UAAU,aAAa,EACrD,YAAK,eAAe,IAAIF,EAAsBE,CAAgB,EACvDA,CACT,CAEA,MAAM,cAAcC,EAAqBC,EAA8C,CACrF,IAAMC,EAAwB,eAAeF,CAAW,IAAIC,CAAO,GAC7DE,EAAa,KAAK,gBAAgB,IAAID,CAAqB,EACjE,GAAIC,EACF,OAAOA,EAET,IAAMC,EAAoB,KAAK,UAAU,cAAcJ,EAAaC,CAAO,EAC3E,YAAK,gBAAgB,IAAIC,EAAuBE,CAAiB,EAC1DA,CACT,CAEA,MAAM,gBAA+C,CACnD,IAAMC,EAAyB,yBACzBC,EAAc,KAAK,iBAAiB,IAAID,CAAsB,EACpE,GAAIC,EACF,OAAOA,EAET,IAAMC,EAAqB,KAAK,UAAU,eAAe,EACzD,YAAK,iBAAiB,IAAIF,EAAwBE,CAAkB,EAC7DA,CACT,CAEA,MAAM,0BAA0BC,EAA8E,CAC5G,IAAMC,EAAsB,mBAAmBD,EAAK,aAAa,IAAIA,EAAK,kBAAkB,IAAIA,EAAK,SAAS,GACxGE,EAAkB,KAAK,yBAAyB,IAAID,CAAmB,EAC7E,GAAIC,EACF,OAAOA,EAET,IAAMC,EAAyB,MAAM,KAAK,UAAU,0BAA0BH,CAAI,EAClF,YAAK,yBAAyB,IAAIC,EAAqBE,CAAsB,EACtEA,CACT,CAEA,MAAM,kBAAkBX,EAAqBY,EAA+C,CAC1F,OAAO,KAAK,UAAU,kBAAkBZ,EAAaY,CAAI,CAC3D,CAEA,MAAM,eAAeC,EAA8D,CACjF,OAAO,KAAK,UAAU,eAAeA,CAAK,CAC5C,CACF,EChCO,IAAMC,GAAN,KAAyE,CAC9E,YAAoBC,EAAsB,CAAtB,eAAAA,CAAuB,CAE3C,MAAM,oBAAwD,CAC5D,OAAQ,MAAM,KAAK,UAAU,aAAa,GAAG,eAC/C,CAEA,MAAM,QAAoD,CACxD,IAAMC,EAAM,MAAM,KAAK,mBAAmB,EAC1C,OAAO,OAAO,OAAOA,CAAG,EAAE,QAASC,GAAiBA,EAAa,MAAM,CACzE,CAEA,MAAM,gBAA+C,CACnD,OAAO,KAAK,UAAU,eAAe,CACvC,CAEA,MAAM,cAAcC,EAAqBC,EAA8C,CACrF,OAAO,KAAK,UAAU,cAAcD,EAAaC,CAAO,CAC1D,CAEA,MAAM,kCAGH,CACD,OAAO,MAAM,KAAK,UAAU,aAAa,CAC3C,CAEA,MAAM,kBAAkBD,EAAqBE,EAA+C,CAC1F,OAAO,MAAM,KAAK,UAAU,kBAAkBF,EAAaE,CAAI,CACjE,CAEA,MAAM,0BAA0BC,EAA8E,CAC5G,OAAO,MAAM,KAAK,UAAU,0BAA0BA,CAAI,CAC5D,CAEA,MAAM,eAAeC,EAA8D,CACjF,OAAO,MAAM,KAAK,UAAU,eAAeA,CAAK,CAClD,CACF,EC5DO,IAAMC,GAAN,KAA6E,CAGlF,YACUC,EACRC,EACA,CAFQ,YAAAD,EAGR,KAAK,UAAYC,EAAO,oBAAoB,UAAY,MAC1D,CAEA,MAAM,mBAAmBC,EAAiD,CACxE,IAAMC,EAA2B,MAAM,KAAK,OAAO,mBAAmB,EAChEC,EAA0B,CAAC,EAEjC,QAAWC,KAAOF,EAA0B,CAC1C,IAAMG,EAAiCH,EAAyBE,CAAG,EAC/DC,IACFF,EAAOC,CAAG,EAAI,CACZ,GAAGC,EACH,OAAQC,GAAwCD,EAA+B,OAAQJ,EAAM,KAAK,SAAS,CAC7G,EAEJ,CACA,OAAOE,CACT,CAEA,MAAM,OAAOF,EAAyD,CACpE,OAAOK,GAAwC,MAAM,KAAK,OAAO,OAAO,EAAGL,EAAM,KAAK,SAAS,CACjG,CAEA,MAAM,gBAA+C,CACnD,OAAO,KAAK,OAAO,eAAe,CACpC,CAEA,MAAM,cAAcM,EAAqBC,EAA8C,CACrF,OAAO,KAAK,OAAO,cAAcD,EAAaC,CAAO,CACvD,CAEA,MAAM,kBAAkBD,EAAqBE,EAA+C,CAC1F,OAAO,MAAM,KAAK,OAAO,kBAAkBF,EAAaE,CAAI,CAC9D,CAEA,MAAM,0BAA0BC,EAA8E,CAC5G,OAAO,MAAM,KAAK,OAAO,0BAA0BA,CAAI,CACzD,CAEA,SAASC,EAA8BC,EAA0B,CAC/D,OAAO,KAAK,OAAO,SAASD,EAAeC,CAAQ,CACrD,CAEA,iBAAiBD,EAAiD,CAChE,OAAO,KAAK,OAAO,iBAAiBA,CAAa,CACnD,CAEA,gBAAgBE,EAAiE,CAC/E,OAAO,KAAK,OAAO,gBAAgBA,CAAc,CACnD,CACF,EAEA,SAASP,GACPQ,EACAb,EACAc,EACyB,CACzB,OAAOD,EAAO,OAAQE,GAAWD,EAAY,GAAOC,EAAM,MAAMf,CAAI,CAAE,EAAE,IAAIgB,EAA8B,CAC5G,CAEA,SAASA,GAA+BD,EAA8D,CAEpG,GAAM,CAAE,MAAAE,EAAO,GAAGC,CAAK,EAAIH,EAC3B,OAAOG,CACT,CC/FA,OAAOC,OAAW,cAmBlB,IAAMC,GAAkB,GAAK,IAQhBC,GAAN,KAA+G,CAGpH,YAA6BC,EAAyC,CAAzC,YAAAA,EAC3B,KAAK,cAAgB,IAAIC,EAC3B,CAEA,MAAM,oBAAwD,CAE5D,OADe,MAAM,KAAK,OAAO,iCAAiC,GACpD,eAChB,CAEA,MAAM,QAAoD,CACxD,OAAO,MAAM,KAAK,OAAO,OAAO,CAClC,CAEA,kBAAkBC,EAAqBC,EAA+C,CACpF,OAAO,KAAK,OAAO,kBAAkBD,EAAaC,CAAI,CACxD,CAEA,0BAA0BC,EAA8E,CACtG,OAAO,KAAK,OAAO,0BAA0BA,CAAI,CACnD,CAEA,gBAA+C,CAC7C,OAAO,KAAK,OAAO,eAAe,CACpC,CAEA,cAAcF,EAAqBG,EAA8C,CAC/E,OAAO,KAAK,OAAO,cAAcH,EAAaG,CAAO,CACvD,CAEA,MAAM,iBAAiBC,EAAiD,CACtE,KAAK,cAAc,mBAAmB,MAAM,KAAK,OAAO,iCAAiC,GAAG,WAAW,EACvG,IAAMC,EAAW,KAAK,cAAc,IAAID,CAAa,EAErD,GAAIC,EACF,OAAOA,EACF,CACL,IAAMC,EAAc,MAAM,KAAK,OAAO,eAAeF,CAAa,EAClE,KAAK,cAAc,OAAOE,CAAW,EACrC,IAAMC,EAASD,EAAYE,GAA0BJ,CAAa,CAAC,EACnE,GAAIG,EACF,OAAOA,EAET,MAAM,IAAIE,EACR,6BAA+BL,EAAc,YAAc,aAAeA,EAAc,WAC1F,CACF,CACF,CAEA,MAAM,gBAAgBM,EAAiE,CACrF,IAAIJ,EACJ,GAAII,EACF,KAAK,cAAc,mBAAmB,MAAM,KAAK,OAAO,iCAAiC,GAAG,WAAW,EACvGJ,EAAc,MAAM,KAAK,OAAO,eAAeI,CAAc,MACxD,CACL,IAAMH,EAAS,MAAM,KAAK,OAAO,iCAAiC,EAClED,EAAc,MAAM,KAAK,OAAO,eAAeK,GAAmCJ,EAAO,eAAe,CAAC,CAC3G,CACA,KAAK,cAAc,OAAOD,CAAW,CACvC,CAEA,SAASF,EAA8BC,EAA0B,CAC/D,KAAK,cAAc,IAAIG,GAA0BJ,CAAa,EAAGC,CAAQ,CAC3E,CACF,EAEMN,GAAN,KAAoB,CAGlB,aAAc,CACZ,KAAK,MAAQ,IAAIa,GAAgB,CAAE,WAAYhB,EAAgB,CAAC,CAClE,CAEA,OAAOU,EAA0B,CAC/B,OAAW,CAACO,EAAKC,CAAK,IAAK,OAAO,QAAQR,CAAW,EACnD,KAAK,MAAM,IAAIO,EAAKC,CAAK,CAE7B,CAEA,kBAAkBR,EAA0B,CAC1C,OAAW,CAACO,EAAKC,CAAK,IAAK,OAAO,QAAQR,CAAW,EAC9C,KAAK,MAAM,IAAIO,CAAG,GACrB,KAAK,MAAM,IAAIA,EAAKC,CAAK,CAG/B,CAEA,IAAID,EAAaR,EAAoB,CACnC,KAAK,MAAM,IAAIQ,EAAKR,CAAQ,CAC9B,CAEA,IAAID,EAAoD,CACtD,IAAMS,EAAML,GAA0BJ,CAAa,EACnD,OAAO,KAAK,MAAM,IAAIS,CAAG,CAC3B,CACF,EC3HA,OAAOE,OAAa,UACpB,OAAOC,OAAU,OCFjB,OAAS,OAAAC,OAAsB,SAK/B,eAAsBC,GACpBC,EACAC,EACmB,CACnB,OAAO,MAAMD,EAAI,iBAAiB,CAChC,YAAaC,EAAiB,YAC9B,YAAaA,EAAiB,WAChC,CAAC,CACH,CAEO,SAASC,EAAqBC,EAAmB,CACtD,GAAIC,GAAID,CAAM,EAAE,IAAI,CAAC,EACnB,MAAM,IAAIE,GAAmB,kCAAkC,CAEnE,CAEO,SAASC,EAAuBC,EAAiBC,EAAoCC,EAAyB,CACnH,IAAMN,EAASC,GAAII,CAAW,EAAE,QAAQ,EAElC,CAACE,EAAaC,CAAc,EAAIR,EAAO,MAAM,GAAG,EAEtD,GAAIQ,GAAkBA,EAAe,OAASF,EAC5C,MAAM,IAAIG,GAA6BL,EAASI,EAAe,OAAQF,CAAe,CAE1F,CAEA,eAAsBI,GAAsBC,EAAqBC,EAAaC,EAA+B,CAC3G,OAAQ,MAAM,QAAQ,KAAK,CACzBF,EACA,IAAI,QAAQ,CAACG,EAASC,IAAW,CAC/B,WAAW,IAAMA,EAAO,IAAIC,GAAaJ,CAAG,CAAC,EAAGC,CAAS,CAC3D,CAAC,CACH,CAAC,CACH,CAEA,eAAsBI,GACpBC,EACAN,EACAO,EACAN,EACY,CACZ,GAAIM,EAAa,EACf,MAAM,IAAI,MAAM,0DAA0DA,CAAU,gBAAgB,EACtG,IAAIC,EAAe,EAEnB,OACE,GAAI,CACF,OAAO,MAAMV,GAAmBQ,EAAM,EAAGN,EAAKC,CAAS,CACzD,MAAgB,CACd,GAAI,EAAEO,GAAgBD,EAAY,MAAM,IAAIH,GAAaJ,CAAG,CAC9D,CAEJ,CAMA,eAAsBS,GACpBC,EACAC,EACAC,EACAC,EAAoB,IACpBC,EAAU,GACI,CACd,IAAMC,EAAgB,CAAC,EAEnBC,EAAQ,EACNC,EAAiB,MAAMP,EAAG,EAEhC,GADAK,EAAS,KAAKE,CAAc,EACxB,CAACN,EAAcM,CAAc,EAAG,OAAOF,EAE3C,IAAMG,EAAY,IAAI,KAAK,KAAK,IAAI,EAAIN,EAAgB,GAAI,EAAE,QAAQ,EAClEO,EAAW,IACXC,EAAgBD,EAEpB,KAAO,KAAK,IAAI,EAAID,GAAW,CAC7B,IAAMG,EAAcN,EAASA,EAAS,OAAS,CAAC,EAChD,GAAIM,IAAgB,QAAa,CAACV,EAAcU,CAAW,EAAG,MAE9DL,IAEIF,GACF,QAAQ,KACN,WAAWK,CAAQ,2DAA2DC,CAAa,uBACzFR,EAAgB,GAClB,KACF,EAEF,MAAM,IAAI,QAASU,GAAQ,WAAWA,EAAKH,CAAQ,CAAC,EAEpDA,EAAWA,EAAWN,EAClB,IAAI,KAAK,KAAK,IAAI,EAAIM,CAAQ,EAAE,QAAQ,EAAID,IAC9CC,EAAWD,EAAY,KAAK,IAAI,EAC5BJ,GACF,QAAQ,KAAK,0CAA0CK,CAAQ,IAAI,GAGvEC,EAAgBD,EAAWC,EAE3B,IAAMG,EAAc,MAAMb,EAAGW,CAAW,EACxCN,EAAS,KAAKQ,CAAW,EACrBT,GAAWH,EAAcY,CAAW,GACtC,QAAQ,KACN,GAAGP,CAAK,YAAYN,EAAG,IAAI,KAAKK,EAAS,MAAM,gCAAgC,KAAK,UAClFA,EAASA,EAAS,OAAS,CAAC,EAC5B,KACA,CACF,CAAC,EACH,CAEJ,CAEA,OAAOA,CACT,CCvHA,UAAYS,OAAY,wBACxB,OAAS,aAAAC,OAAiB,kBAC1B,OAAS,OAAAC,OAAW,SCFpB,IAAAC,GAAA,CACE,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,WACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,kBACR,KAAQ,SACV,EACA,CACE,aAAgB,qBAChB,KAAQ,sBACR,KAAQ,SACV,EACA,CACE,aAAgB,6BAChB,KAAQ,qBACR,KAAQ,SACV,EACA,CACE,aAAgB,sBAChB,KAAQ,aACR,KAAQ,SACV,CACF,EACA,gBAAmB,aACnB,KAAQ,aACV,EACA,CACE,UAAa,GACb,OAAU,CACR,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,MACR,KAAQ,SACV,CACF,EACA,KAAQ,wBACR,KAAQ,OACV,EACA,CACE,UAAa,GACb,OAAU,CACR,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,gBACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,WACR,KAAQ,SACV,CACF,EACA,KAAQ,uBACR,KAAQ,OACV,EACA,CACE,UAAa,GACb,OAAU,CACR,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,wBACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,yBACR,KAAQ,SACV,CACF,EACA,KAAQ,aACR,KAAQ,OACV,EACA,CACE,UAAa,GACb,OAAU,CACR,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,CACF,EACA,KAAQ,WACR,KAAQ,OACV,EACA,CACE,UAAa,GACb,OAAU,CACR,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,YACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,YACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,eACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,aACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,gBACR,KAAQ,SACV,CACF,EACA,KAAQ,UACR,KAAQ,OACV,EACA,CACE,UAAa,GACb,OAAU,CACR,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,YACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,QACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,yBAChB,KAAQ,YACR,KAAQ,OACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,UACR,KAAQ,SACV,CACF,EACA,KAAQ,iBACR,KAAQ,OACV,EACA,CACE,UAAa,GACb,OAAU,CACR,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,YACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,qBACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,eACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,QACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,yBAChB,KAAQ,YACR,KAAQ,OACV,CACF,EACA,KAAQ,aACR,KAAQ,OACV,EACA,CACE,gBAAmB,UACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,WACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,eACR,KAAQ,SACV,CACF,EACA,KAAQ,iBACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,gBAChB,KAAQ,OACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,QACR,KAAQ,SACV,CACF,EACA,KAAQ,UACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CAAC,EACX,KAAQ,UACR,QAAW,CACT,CACE,aAAgB,QAChB,KAAQ,GACR,KAAQ,OACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CAAC,EACX,KAAQ,UACR,QAAW,CACT,CACE,aAAgB,UAChB,KAAQ,GACR,KAAQ,SACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,UACR,KAAQ,SACV,CACF,EACA,KAAQ,WACR,QAAW,CACT,CACE,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,qBACR,KAAQ,SACV,EACA,CACE,aAAgB,yBAChB,KAAQ,YACR,KAAQ,OACV,EACA,CACE,aAAgB,UAChB,KAAQ,eACR,KAAQ,SACV,CACF,EACA,KAAQ,0BACR,QAAW,CACT,CACE,aAAgB,UAChB,KAAQ,GACR,KAAQ,SACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,UACR,KAAQ,SACV,EACA,CACE,aAAgB,yBAChB,KAAQ,WACR,KAAQ,OACV,CACF,EACA,KAAQ,iBACR,QAAW,CACT,CACE,aAAgB,UAChB,KAAQ,GACR,KAAQ,SACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,UACR,KAAQ,SACV,EACA,CACE,aAAgB,yBAChB,KAAQ,WACR,KAAQ,OACV,CACF,EACA,KAAQ,qBACR,QAAW,CACT,CACE,aAAgB,UAChB,KAAQ,GACR,KAAQ,SACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,UACR,KAAQ,SACV,CACF,EACA,KAAQ,qBACR,QAAW,CACT,CACE,aAAgB,UAChB,KAAQ,GACR,KAAQ,SACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,UACR,KAAQ,SACV,EACA,CACE,aAAgB,yBAChB,KAAQ,WACR,KAAQ,OACV,CACF,EACA,KAAQ,qBACR,QAAW,CACT,CACE,aAAgB,OAChB,KAAQ,GACR,KAAQ,MACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,UACR,KAAQ,SACV,CACF,EACA,KAAQ,iBACR,QAAW,CACT,CACE,aAAgB,OAChB,KAAQ,GACR,KAAQ,MACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,YACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,gBACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,qBACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,eACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,QACR,KAAQ,SACV,EACA,CACE,aAAgB,yBAChB,KAAQ,YACR,KAAQ,OACV,CACF,EACA,KAAQ,cACR,QAAW,CACT,CACE,aAAgB,UAChB,KAAQ,GACR,KAAQ,SACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,UACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,eACR,KAAQ,SACV,CACF,EACA,KAAQ,oBACR,QAAW,CACT,CACE,aAAgB,OAChB,KAAQ,cACR,KAAQ,MACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,UACR,KAAQ,SACV,CACF,EACA,KAAQ,eACR,QAAW,CACT,CACE,aAAgB,UAChB,KAAQ,gBACR,KAAQ,SACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CAAC,EACX,KAAQ,QACR,QAAW,CACT,CACE,aAAgB,UAChB,KAAQ,GACR,KAAQ,SACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,UACR,KAAQ,SACV,CACF,EACA,KAAQ,QACR,QAAW,CACT,CACE,aAAgB,gBAChB,KAAQ,GACR,KAAQ,SACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,cACR,KAAQ,SACV,CACF,EACA,KAAQ,oBACR,QAAW,CACT,CACE,aAAgB,UAChB,KAAQ,cACR,KAAQ,SACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,YACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,gBACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,eACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,QACR,KAAQ,SACV,EACA,CACE,aAAgB,yBAChB,KAAQ,YACR,KAAQ,OACV,EACA,CACE,aAAgB,UAChB,KAAQ,mBACR,KAAQ,SACV,CACF,EACA,KAAQ,gBACR,QAAW,CAAC,EACZ,gBAAmB,UACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,WACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,gBACR,KAAQ,SACV,CACF,EACA,KAAQ,iBACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,WACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,eACR,KAAQ,SACV,CACF,EACA,KAAQ,oBACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CAAC,EACX,KAAQ,oBACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,cACR,KAAQ,SACV,CACF,EACA,KAAQ,eACR,QAAW,CACT,CACE,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,qBAChB,KAAQ,sBACR,KAAQ,SACV,CACF,EACA,KAAQ,wBACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,sBAChB,KAAQ,aACR,KAAQ,SACV,CACF,EACA,KAAQ,eACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,UACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,YACR,KAAQ,SACV,CACF,EACA,KAAQ,cACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,cACR,KAAQ,SACV,CACF,EACA,KAAQ,gBACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,iBACR,KAAQ,SACV,CACF,EACA,KAAQ,mBACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,6BAChB,KAAQ,qBACR,KAAQ,SACV,CACF,EACA,KAAQ,uBACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CAAC,EACX,KAAQ,YACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CAAC,EACX,KAAQ,WACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,QACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,eACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,YACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,mBACR,KAAQ,SACV,CACF,EACA,KAAQ,OACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,QACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,YACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,qBACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,eACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,QACR,KAAQ,SACV,EACA,CACE,aAAgB,yBAChB,KAAQ,YACR,KAAQ,OACV,EACA,CACE,aAAgB,UAChB,KAAQ,iBACR,KAAQ,SACV,CACF,EACA,KAAQ,gBACR,QAAW,CAAC,EACZ,gBAAmB,UACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,WACR,KAAQ,SACV,CACF,EACA,KAAQ,oBACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,kBAChB,KAAQ,QACR,KAAQ,SACV,CACF,EACA,KAAQ,8BACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,CACF,EACA,KAAQ,oBACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,gBAAmB,UACnB,KAAQ,SACV,CACF,ECt5BA,IAAAC,GAAA,CACE,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,WACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,kBACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,eACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,iBACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,mBACR,KAAQ,SACV,EACA,CACE,aAAgB,sBAChB,KAAQ,aACR,KAAQ,SACV,CACF,EACA,gBAAmB,aACnB,KAAQ,aACV,EACA,CACE,UAAa,GACb,OAAU,CACR,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,gBACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,WACR,KAAQ,SACV,CACF,EACA,KAAQ,uBACR,KAAQ,OACV,EACA,CACE,UAAa,GACb,OAAU,CACR,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,YACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,CACF,EACA,KAAQ,mBACR,KAAQ,OACV,EACA,CACE,UAAa,GACb,OAAU,CACR,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,CACF,EACA,KAAQ,cACR,KAAQ,OACV,EACA,CACE,UAAa,GACb,OAAU,CACR,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,QACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,eACR,KAAQ,SACV,CACF,EACA,KAAQ,oBACR,KAAQ,OACV,EACA,CACE,UAAa,GACb,OAAU,CACR,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,yBACR,KAAQ,SACV,CACF,EACA,KAAQ,mBACR,KAAQ,OACV,EACA,CACE,UAAa,GACb,OAAU,CACR,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,YACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,qBACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,QACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,4BACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,+BACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,aACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,gCACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,sBACR,KAAQ,SACV,CACF,EACA,KAAQ,aACR,KAAQ,OACV,EACA,CACE,gBAAmB,UACnB,KAAQ,UACV,EACA,CACE,OAAU,CAAC,EACX,KAAQ,kBACR,QAAW,CACT,CACE,aAAgB,UAChB,KAAQ,GACR,KAAQ,SACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,YACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,qBACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,wBACR,KAAQ,SACV,CACF,EACA,KAAQ,SACR,QAAW,CAAC,EACZ,gBAAmB,UACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,YACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,yBACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,qBACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,wBACR,KAAQ,SACV,CACF,EACA,KAAQ,0BACR,QAAW,CAAC,EACZ,gBAAmB,UACnB,KAAQ,UACV,EACA,CACE,OAAU,CAAC,EACX,KAAQ,UACR,QAAW,CACT,CACE,aAAgB,UAChB,KAAQ,GACR,KAAQ,SACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,QAChB,KAAQ,kBACR,KAAQ,OACV,EACA,CACE,aAAgB,QAChB,KAAQ,sBACR,KAAQ,OACV,EACA,CACE,aAAgB,UAChB,KAAQ,eACR,KAAQ,SACV,CACF,EACA,KAAQ,kBACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,UACR,KAAQ,SACV,CACF,EACA,KAAQ,WACR,QAAW,CACT,CACE,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,qBACR,KAAQ,SACV,CACF,EACA,KAAQ,0BACR,QAAW,CACT,CACE,aAAgB,UAChB,KAAQ,GACR,KAAQ,SACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,WACR,KAAQ,SACV,CACF,EACA,KAAQ,qBACR,QAAW,CACT,CACE,aAAgB,SAChB,KAAQ,GACR,KAAQ,QACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,UACR,KAAQ,SACV,CACF,EACA,KAAQ,qBACR,QAAW,CACT,CACE,aAAgB,UAChB,KAAQ,GACR,KAAQ,SACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,gBACR,KAAQ,SACV,EACA,CACE,aAAgB,SAChB,KAAQ,QACR,KAAQ,QACV,CACF,EACA,KAAQ,qBACR,QAAW,CACT,CACE,aAAgB,OAChB,KAAQ,GACR,KAAQ,MACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CAAC,EACX,KAAQ,QACR,QAAW,CACT,CACE,aAAgB,UAChB,KAAQ,GACR,KAAQ,SACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,YACR,KAAQ,SACV,EACA,CACE,aAAgB,QAChB,KAAQ,UACR,KAAQ,OACV,EACA,CACE,aAAgB,QAChB,KAAQ,YACR,KAAQ,OACV,CACF,EACA,KAAQ,gBACR,QAAW,CAAC,EACZ,gBAAmB,UACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,WACR,KAAQ,SACV,EACA,CACE,aAAgB,SAChB,KAAQ,SACR,KAAQ,QACV,CACF,EACA,KAAQ,4BACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CAAC,EACX,KAAQ,oBACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,mBACR,KAAQ,SACV,CACF,EACA,KAAQ,mBACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,sBAChB,KAAQ,aACR,KAAQ,SACV,CACF,EACA,KAAQ,eACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,UACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,YACR,KAAQ,SACV,CACF,EACA,KAAQ,cACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,WACR,KAAQ,SACV,CACF,EACA,KAAQ,oBACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,WACR,KAAQ,SACV,CACF,EACA,KAAQ,8BACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CAAC,EACX,KAAQ,sBACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,CACF,EACA,KAAQ,cACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,gBAAmB,UACnB,KAAQ,SACV,CACF,ECxjBA,UAAYC,OAAY,wBACxB,OAAS,aAAAC,OAAiB,kBAE1B,eAAsBC,GAAqBC,EAAsBC,EAA4C,CAC3G,OAAc,SAAM,MAAM,kBAAkB,CAC1C,KAAMA,EACN,MAAOD,CACT,CAAC,CACH,CAEA,eAAsBE,GAAiBC,EAA0C,CAC/E,GAAM,CAACC,CAAS,EAAI,MAAMN,GAAU,mBAAmB,CAAQ,SAAM,MAAM,KAAK,OAAO,QAAQ,CAAC,EAAGK,CAAS,EAC5G,OAAOC,CACT,CAEA,eAAsBC,GAAeC,EAAiBC,EAAgD,CACpG,GAAM,CAACC,CAAO,EAAI,MAAMV,GAAU,mBAChC,CAAQ,SAAM,MAAM,KAAK,OAAO,MAAM,EAAG,WAAW,KAAKQ,CAAK,CAAC,EAC/DC,CACF,EACA,OAAOC,CACT,CAEA,eAAsBC,GAAgBC,EAAiBC,EAAmD,CACxG,GAAM,CAACC,CAAQ,EAAI,MAAMd,GAAU,mBACjC,CAAQ,SAAM,MAAM,KAAK,OAAO,UAAU,EAAG,WAAW,KAAK,CAACY,CAAO,CAAC,CAAC,EACvEC,CACF,EACA,OAAOC,CACT,CAEA,eAAsBC,GAAoBN,EAAgD,CACxF,IAAMO,EAAgB,MAAMZ,GAAiBK,CAAe,EACtD,CAACQ,CAAa,EAAI,MAAMjB,GAAU,mBAAmB,CAACgB,EAAc,SAAS,CAAC,EAAGP,CAAe,EACtG,OAAOQ,CACT,CAEA,eAAsBC,GACpBC,EACAC,EACoB,CACpB,GAAM,CAACH,CAAa,EAAI,MAAMjB,GAAU,mBAAmB,CAACmB,EAAkB,SAAS,CAAC,EAAGC,CAAmB,EAC9G,OAAOH,CACT,CAEA,eAAsBI,GAAsBlB,EAAwBM,EAAgD,CAClH,GAAM,CAACa,CAAO,EAAI,MAAMtB,GAAU,mBAChC,CAAQ,SAAM,MAAM,KAAK,OAAO,OAAO,EAAGG,EAAY,QAAQ,CAAC,EAC/DM,CACF,EACA,OAAOa,CACT,CAEA,eAAsBC,GACpBX,EACAY,EACAf,EACoB,CACpB,GAAM,CAACgB,CAAkB,EAAI,MAAMzB,GAAU,mBAC3C,CAAQ,SAAM,MAAM,KAAK,OAAO,oBAAoB,EAAG0B,EAAO,KAAK,CAACd,CAAO,CAAC,EAAGY,CAAK,EACpFf,CACF,EACA,OAAOgB,CACT,CAEA,eAAsBE,GAAsBf,EAAiBH,EAAgD,CAC3G,GAAM,CAACmB,CAAc,EAAI,MAAM5B,GAAU,mBACvC,CAAQ,SAAM,MAAM,KAAK,OAAO,cAAc,EAAG,WAAW,KAAK,CAACY,CAAO,CAAC,CAAC,EAC3EH,CACF,EACA,OAAOmB,CACT,CAEA,eAAsBC,GAAmBjB,EAAiBkB,EAAmD,CAC3G,GAAM,CAACF,CAAc,EAAI,MAAM5B,GAAU,mBACvC,CAAQ,SAAM,MAAM,KAAK,OAAO,WAAW,EAAG,WAAW,KAAK,CAACY,CAAO,CAAC,CAAC,EACxEkB,CACF,EACA,OAAOF,CACT,CAEA,eAAsBG,GACpBC,EACAF,EACoB,CACpB,GAAM,CAACG,CAAc,EAAI,MAAMjC,GAAU,mBACvC,CAAQ,SAAM,MAAM,KAAK,OAAO,cAAc,EAAGgC,CAAiB,EAClEF,CACF,EACA,OAAOG,CACT,CAEA,eAAsBC,GACpBC,EACAC,EACA3B,EACoB,CACpB,GAAM,CAAC4B,CAAc,EAAI,MAAMrC,GAAU,mBACvC,CAAQ,SAAM,MAAM,KAAK,OAAO,cAAc,EAAGoC,EAAiB,QAAQ,EAAGD,EAAc,QAAQ,CAAC,EACpG1B,CACF,EACA,OAAO4B,CACT,CAEA,eAAsBC,GAAqBnC,EAAwBiB,EAAoD,CACrH,GAAM,CAACd,CAAS,EAAI,MAAMN,GAAU,mBAClC,CAAQ,SAAM,MAAM,KAAK,OAAO,aAAa,EAAGG,EAAY,QAAQ,CAAC,EACrEiB,CACF,EACA,OAAOd,CACT,CAEA,eAAsBiC,GAA0Bf,EAAkBJ,EAAoD,CACpH,GAAM,CAACE,CAAO,EAAI,MAAMtB,GAAU,mBAChC,CAAQ,SAAM,MAAM,KAAK,OAAO,OAAO,EAAGwB,EAAM,QAAQ,CAAC,EACzDJ,CACF,EACA,OAAOE,CACT,CAEO,SAASkB,GAAmBpB,EAAgCqB,EAAmD,CACpH,GAAM,CAACC,CAA4B,EAAI1C,GAAU,uBAC/C,CAAQ,SAAM,MAAM,KAAK,OAAO,MAAM,EAAGyC,EAA4B,SAAS,CAAC,EAC/ErB,CACF,EACA,OAAOsB,CACT,CAEO,SAASC,GACdC,EACAzC,EACA0C,EACAC,EACA,CACA,IAAMC,EAA4BC,GAAmB,sBAAuBH,CAAwB,EAC9FI,EAAiBD,GAAmB,kBAAmBF,CAAwB,EAC/EJ,EAA+BM,GAAmB,oBAAqBF,CAAwB,EAC/FI,EAAcF,GAAmB,eAAgBF,CAAwB,EACzEK,EAAaH,GAAmB,cAAeF,EAA0B,CAAC3C,CAAW,CAAC,EACtFiD,EAA0BJ,GAAmB,yBAA0BF,EAA0B,CACrGF,EAAO,SAAS,CAClB,CAAC,EACKS,EAAeL,GAAmB,mBAAoBF,CAAwB,EACpF,MAAO,CACL,0BAAAC,EACA,eAAAE,EACA,6BAAAP,EACA,YAAAQ,EACA,WAAAC,EACA,wBAAAC,EACA,aAAAC,CACF,CACF,CAEA,SAASL,GACPM,EACAjD,EACAkD,EAAyD,CAAC,EAC/C,CACX,IAAMC,EAAQ,CAAC9B,EAAO,KAAY,SAAM,MAAM,KAAK,OAAO4B,CAAK,CAAC,CAAC,EACjE,QAAWG,KAAaF,EAClB,OAAOE,GAAc,SACvBD,EAAM,KAAK9B,EAAO,KAAY,SAAM,MAAM,KAAK,OAAO+B,CAAS,CAAC,CAAC,EACxD,MAAM,QAAQA,CAAS,EAChCD,EAAM,KAAK9B,EAAO,KAAK+B,CAAS,CAAC,EACxB/B,EAAO,SAAS+B,CAAS,EAClCD,EAAM,KAAKC,CAAS,EAEpBD,EAAM,KAAKC,EAAU,SAAS,CAAC,EAInC,OADYzD,GAAU,uBAAuBwD,EAAOnD,CAAS,EAClD,CAAC,CACd,CC7KA,OAAS,kBAAAqD,OAAgC,wBACzC,OAAS,cAAAC,GAAY,aAAAC,OAAiB,kBAE/B,SAASC,GAAoBC,EAAsBC,EAAkC,CAC1F,IAAMC,EAAa,IAAIL,GAAWG,EAAc,WAAW,EAErDG,EAAY,IAAIL,GAAUG,CAAc,EAE9C,OAAO,IAAIL,GACTM,EAEA,CAAE,UAAWC,CAAU,EACvB,CACE,oBAAqB,YACrB,WAAY,WACd,CACF,CACF,CCZO,IAAeC,GAAf,KAAkC,CAYzC,ECjBA,OAAS,aAAAC,OAAiB,kBAC1B,OAAS,WAAAC,OAAe,uBACxB,OAAS,OAAAC,OAAsB,SAC/B,OAAOC,OAAiB,cAExB,UAAYC,OAAgB,UAwBrB,SAASC,GAAcC,EAAiBC,EAAiBC,EAAkC,CAChG,IAAIC,EACJ,OAAQF,EAAM,CACZ,UAAoB,CAClBE,EAASC,GAAqBJ,CAAO,EACrC,KACF,CACA,aAAuB,CACrBG,EAAS,IAAIE,GAAUL,CAAO,EAAE,SAAS,EACzC,KACF,CACA,UAAoB,CAClBG,EAASG,GAAsBN,CAAO,EACtC,KACF,CACA,UAAoB,CAClBG,EAAS,IAAII,GAAQP,CAAO,EAAE,SAAS,EACvC,KACF,CACF,CAEA,OAAQE,EAAI,CACV,UACE,MAAO,KAAOC,EAAO,SAAS,KAAK,EAErC,aACE,OAAO,MAAM,KAAKA,CAAM,EAE1B,UACE,OAAOA,EAAO,OAAO,EAAE,KAEzB,UACE,OAAOA,EAAO,OAAO,EAAE,IAE3B,CACF,CAEO,SAASK,GAAYC,EAAqB,CAC/C,OAAOC,EAAO,KAAKD,EAAI,QAAQ,OAAQ,EAAE,EAAG,KAAK,CACnD,CAEO,SAASL,GAAqBJ,EAAyB,CAE5D,IAAMW,EAAOH,GAAYR,CAAO,EAChC,OAAOU,EAAO,OAAO,CAACA,EAAO,MAAM,GAASC,EAAK,OAAQ,CAAC,EAAGA,CAAI,EAAG,EAAM,CAC5E,CAEA,SAASL,GAAsBN,EAAyB,CACtD,IAAMY,EAAaC,GAAwBb,CAAO,EAC5CG,EAASK,GAAYI,CAAU,EACrC,OAAOE,GAAaX,EAAQ,EAAE,CAChC,CAEO,SAASU,GAAwBb,EAAyB,CAC/D,OAAOU,EAAO,KAAgB,SAAM,OAAO,oBAAoBV,CAAO,CAAC,EAAE,SAAS,KAAK,EAAE,QAAQ,MAAO,IAAI,CAC9G,CAEA,SAASc,GAAaX,EAAgBY,EAAsB,CAC1D,GAAIZ,EAAO,QAAUY,EACnB,OAAOZ,EAET,IAAMa,EAASN,EAAO,MAAMK,EAAM,CAAC,EACnC,OAAAZ,EAAO,KAAKa,EAAQD,EAAOZ,EAAO,MAAM,EACjCa,CACT,CAkBO,SAASC,IAAmB,CACjC,OAAOC,GAAY,EAAE,CACvB,CAEO,SAASC,IAAyB,CACvC,IAAMC,EAASF,GAAY,EAAE,EAAE,eAAe,EAC9C,OAAIE,EAAS,EACJA,EAAS,CAAC,GAEZA,CACT,CAEO,SAASC,GAAoBC,EAA4BC,EAAkC,CAChG,IAAMC,EAAe,CAAC,EAChBC,EAAcF,EAAO,YAC3B,OAAAC,EAAa,OAASE,EAAwBH,EAAO,OAAQE,EAAY,QAAQ,EAAE,QAAQ,EAC3FD,EAAa,gBAAkBC,EAAY,cAC3CD,EAAa,mBAAqBD,EAAO,mBACzCC,EAAa,iBAAmBG,GAAcF,EAAY,aAAcH,EAAiBA,CAAe,EACxGE,EAAa,iBAAmBD,EAAO,iBACvCC,EAAa,eAAiBG,GAAcJ,EAAO,iBAAiB,aAAcD,EAAiBA,CAAe,EAClHE,EAAa,qBAAuBD,EAAO,qBACvCG,EAAwBH,EAAO,qBAAsBA,EAAO,iBAAiB,QAAQ,EAAE,QAAQ,EAC/F,IACGC,CACT,CAEA,eAAsBI,GACpBN,EACAC,EACAM,EACuB,CACvB,IAAMC,EAAe,CAAC,EAEtBA,EAAa,YAAcP,EAAO,YAAY,iBAC9CO,EAAa,gBAAkBP,EAAO,YAAY,YAClD,IAAMQ,EAAcC,EAAO,iBAAiBT,EAAO,iBAAiB,WAAW,EAAE,UACjFO,EAAa,iBAAmBP,EAAO,YAAY,aAEnDO,EAAa,UAAYP,EAAO,iBAAiB,iBACjDO,EAAa,eAAiBP,EAAO,iBAAiB,aAElDA,EAAO,sBAAwB,aACjCO,EAAa,oBAAsB,aAGnCA,EAAa,oBAAsB,SAErC,IAAML,EAAcF,EAAO,YAC3B,GAAIA,EAAO,YAAc,EAAgB,CACvC,GAAI,CAACE,EAAY,aAAe,CAACF,EAAO,iBAAiB,YACvD,MAAM,IAAIU,GAA0B,2CAA2C,EAEjFH,EAAa,gBAAkBL,EAAY,WAC7C,MACEK,EAAa,gBAAkBL,EAAY,cAE7CK,EAAa,UAAYP,EAAO,UAChCO,EAAa,mBAAqBP,EAAO,mBACzCO,EAAa,OAASJ,EAAwBH,EAAO,OAAQE,EAAY,QAAQ,EAAE,QAAQ,EAG3F,GAAI,CAAE,IAAAS,EAAK,UAAAC,CAAU,EAAIZ,EACzB,GAAI,CAACW,EAAK,CAUR,IAAME,GATgB,MAAMC,GAC1BP,EAAa,YACbP,EAAO,YAAY,UACnBO,EAAa,UACbL,EAAY,SACZK,EAAa,UACbD,CACF,GAEmCC,EAAa,mBAAmB,EACnE,GAAI,CAACM,EACH,MAAM,IAAIE,GAEZJ,EAAME,EAAa,IACnBD,EAAY,KACd,CACA,GAAIA,GAAa,QACf,OAAQL,EAAa,oBAAqB,CACxC,aACEA,EAAa,IAAMJ,EAAwBQ,EAAKF,EAAO,uBAAuBP,EAAY,SAAS,CAAC,EAAE,QACpG,CACF,EACA,MACF,iBACEK,EAAa,IAAMJ,EAAwBQ,EAAKT,EAAY,QAAQ,EAAE,QAAQ,CAAC,EAC/E,KACJ,MAEAK,EAAa,IAAMI,EAIrB,GAAM,CAAE,SAAAK,EAAU,eAAAC,CAAe,EAAIjB,EACrC,GAAIgB,GAAY,CAACA,EAAW,EAAG,CAC7B,GAAIC,GAAkB,QACpB,OAAQV,EAAa,oBAAqB,CACxC,aACEA,EAAa,SAAWJ,EACtBa,EACAP,EAAO,uBAAuBP,EAAY,SAAS,CACrD,EAAE,QAAQ,CAAC,EACX,MACF,iBACEK,EAAa,SAAWJ,EAAwBa,EAAUd,EAAY,QAAQ,EAAE,QAAQ,CAAC,EACzF,KACJ,MAEAK,EAAa,SAAWS,EAE1B,MAAME,GACJX,EAAa,SACbA,EAAa,oBACbL,EACAF,EAAO,iBACPM,CACF,CACF,CAEA,OAAAC,EAAa,iBAAmBH,GAAcG,EAAa,iBAAkBR,EAAiBA,CAAe,EAC7GQ,EAAa,iBAAmBH,GAAcJ,EAAO,iBAAkBQ,EAAaT,CAAe,EACnGQ,EAAa,eAAiBH,GAAcG,EAAa,eAAgBC,EAAaT,CAAe,EACjGQ,EAAa,qBAAuB,cACtCY,GAAqBZ,EAAa,OAAQL,EAAY,SAAUK,EAAa,IAAKA,EAAa,QAAQ,EAElGA,CACT,CAEA,SAASY,GACPC,EACAC,EACAC,EACAC,EACA,CACA,IAAMC,EAAcC,GAAIL,CAAS,EAC9B,MAAME,CAAM,EACZ,MAAMC,GAAe,CAAC,EACzB,GAAIC,EAAY,IAAI,CAAC,EACnB,MAAM,IAAIE,GACR,iCAAiCC,EAC/BF,GAAID,CAAW,EAAE,MAAM,CAAC,EAAE,IAAI,EAC9BH,CACF,EAAE,QAAQ,CAAC,qBACb,CAEJ,CAEA,eAAsBP,GACpBc,EACAC,EACAC,EACAC,EACAC,EACA1B,EACwB,CACxB,IAAM2B,EAA0B,MAAM3B,EAAI,0BAA0B,CAClE,cAAesB,EACf,mBAAoBE,EACpB,UAAAE,CACF,CAAC,EAEKE,EAA+B,CAClC,OAAwC,CACtC,IAAmBD,EAAwB,IAC3C,MAAqBN,EACpBM,EAAwB,IACxBxB,EAAO,uBAAuBoB,CAAe,CAC/C,EAAE,QAAQ,CACZ,CACF,EACA,GAAII,EAAwB,uBAAwB,CAClD,IAAME,EAAuBC,GAC3B,IAAIX,GAAIQ,EAAwB,GAAG,EAAE,IAAIA,EAAwB,sBAAsB,EACvFxB,EAAO,uBAAuBoB,CAAe,EAC7CE,CACF,EAAE,QAAQ,EAAGN,GAAI,OAAO,EACxBS,EAAc,WAAoC,CAC/C,IAAmBC,EACnB,MAAqBR,EAAwBQ,EAAsBJ,CAAwB,EAAE,QAAQ,CACxG,CACF,CAEA,OAAOG,CACT,CAEA,eAAehB,GACbK,EACAc,EACAnC,EACAoC,EACAhC,EACA,CAEA,IAAMiC,GADiB,MAAMC,GAAqBtC,EAAaoC,EAAkBhC,CAAG,GAC5C,YAAY+B,CAAmB,EACvE,GAAI,CAACE,EACH,MAAM,IAAIxB,GAAgC,mCAAmCsB,CAAmB,kBAAkB,EAEpH,IAAMI,EAAsBF,EAAiB,IAC7C,GAAId,GAAIF,CAAW,EAAE,GAAGkB,CAAmB,EACzC,MAAM,IAAIC,GACR,aAAanB,CAAW,kCAAkCkB,CAAmB,SAASJ,CAAmB,kBAC3G,CAEJ,CAEA,eAAsBG,GACpBG,EACAC,EACAtC,EACmC,CACnC,IAAMuC,EAAuC,CAAC,EACxCZ,EAA0B,MAAM3B,EAAI,0BAA0B,CAClE,cAAeqC,EAAiB,iBAChC,mBAAoBC,EAAsB,iBAC1C,WACF,CAAC,EACKE,EAAYF,EAAsB,aAAa,UAC/CG,EAAiBpB,EACrBmB,EACArC,EAAO,uBAAuBmC,EAAsB,SAAS,CAC/D,EAAE,QAAQ,EACJI,EAA+BvB,GAAIsB,CAAc,EACpD,IAAId,EAAwB,YAAY,EACxC,QAAQxB,EAAO,uBAAuBkC,EAAiB,SAAS,EAAGlB,GAAI,SAAS,EAC7EwB,EAA0B9C,EAC9B6C,EACAvC,EAAO,uBAAuBkC,EAAiB,SAAS,CAC1D,EAAE,QAAQ,CAAC,EAKX,GAJAE,EAAkB,OAAyC,CACxD,IAAmBI,EACnB,MAAqBD,CACxB,EACIf,EAAwB,uBAAwB,CAClD,IAAMiB,EAAyBzB,GAAIuB,CAA4B,EAC5D,IAAIf,EAAwB,sBAAsB,EAClD,QAAQU,EAAiB,SAAUlB,GAAI,SAAS,EACnDoB,EAAkB,WAAoC,CACnD,IAAmB1C,EAAwB+C,EAAwBP,EAAiB,QAAQ,EAAE,QAAQ,CAAC,EACvG,MAAqBO,CACxB,CACF,CACA,MAAO,CACL,YAAaL,EACb,iBAAkB,CAChB,aAAc,CACX,IAAmBC,EACnB,MAAqBC,CACxB,EACA,KAAM,CACH,IAAmBH,EAAsB,aAAa,KACtD,MAAqBjB,EACpBiB,EAAsB,aAAa,KACnCnC,EAAO,uBAAuBmC,EAAsB,SAAS,CAC/D,EAAE,QAAQ,CACZ,EACA,SAAU,CACP,IAAmBA,EAAsB,aAAa,SACtD,MAAqBjB,EACpBiB,EAAsB,aAAa,SACnCnC,EAAO,uBAAuBmC,EAAsB,SAAS,CAC/D,EAAE,QAAQ,CACZ,CACF,EACA,aAAcX,EAAwB,aACtC,uBAAwBA,EAAwB,sBAClD,CACF,CAEO,SAASkB,GAAanD,EAAuD,CAClF,OAAOA,EAAO,YAAY,cAAgBA,EAAO,iBAAiB,WACpE,CNlWO,IAAMoD,GAAN,cAA+BC,EAAmB,CAGvD,YAAmBC,EAAmBC,EAAkCC,EAAsC,CAC5G,MAAM,EADW,UAAAF,EAAmB,SAAAC,EAAkC,uBAAAC,EAFxE,eAA2B,KAI3B,CAEA,MAAM,KAAKC,EAAkD,CAC3D,IAAMC,EAAiB,MAAM,KAAK,wBAAwBD,CAAM,EAChE,OAAO,KAAK,mBAAmBC,CAAc,CAC/C,CAEA,MAAM,wBAAwBD,EAA6C,CACzE,IAAME,EAAeC,GAAoB,KAAK,UAAWH,CAAM,EAC/D,OAAO,MAAM,KAAK,kCAAkCE,CAAY,CAClE,CAEA,MAAM,kCAAkCF,EAA+C,CACrF,GAAM,CACJ,OAAAI,EACA,gBAAAC,EACA,mBAAAC,EACA,iBAAAC,EACA,iBAAAC,EACA,eAAAC,EACA,qBAAAC,CACF,EAAIV,EAIEW,EAFiB,KAAK,kBAAkBN,CAAe,EAE3B,QAAQ,KACxCD,EACAG,EACAE,EACAD,EACAE,CACF,EAEA,OAAO,QAAQ,QAAQ,CACrB,KAAMJ,EACN,GAAID,EACJ,KAAMM,EAAW,UAAU,CAC7B,CAAC,CACH,CAEA,MAAM,wBAAwBX,EAA6C,CACzE,IAAMY,EAAe,MAAMC,GAAoB,KAAK,UAAWb,EAAQ,KAAK,GAAG,EACzE,CACJ,OAAAI,EACA,gBAAAC,EACA,mBAAAC,EACA,iBAAAC,EACA,UAAAO,EACA,iBAAAN,EACA,eAAAC,EACA,UAAAM,EACA,IAAAC,EACA,oBAAAC,EACA,SAAAC,CACF,EAAIN,EAEEO,EAAQ,KAAOC,GAAS,EAAE,SAAS,KAAK,EAC1CC,EACAC,EAEAC,EAAWP,EAIf,GAHIE,IACFK,EAAWC,GAAID,CAAQ,EAAE,KAAKL,CAAQ,EAAE,QAAQ,GAE9CH,IAAc,EAAgB,CAChC,IAAMU,EAAO,MAAM,KAAK,4BAA4BzB,EAAQY,EAAcW,CAAQ,EAClFF,EAAaI,EAAK,WAClBH,EAAQG,EAAK,KACf,KAAO,CACL,IAAMC,EAAiB,KAAK,kBAAkBrB,CAAe,EACzDY,IAAwB,cAC1BI,EAAaK,EAAe,QAAQ,cAClCnB,EACAH,EACAI,EACAM,EACAL,EACAU,EACAJ,EACAQ,CACF,EACAD,EAAQ,MAERD,EAAaK,EAAe,QAAQ,cAClCnB,EACAH,EACAI,EACAM,EACAL,EACAU,EACAJ,EACA,CACF,EACAO,EAAQC,EAEZ,CAEA,OAAO,QAAQ,QAAQ,CACrB,KAAMjB,EACN,GAAID,EACJ,MAAOiB,EACP,KAAMD,EAAW,UAAU,CAC7B,CAAC,CACH,CAEA,MAAc,4BACZrB,EACAY,EACAW,EAIC,CACD,GAAM,CAAE,OAAAnB,EAAQ,gBAAAC,EAAiB,UAAAS,EAAW,iBAAAN,EAAkB,oBAAAS,CAAoB,EAAIL,EAEhFe,EAAyC,KAAK,YAAYC,GAA4BvB,CAAe,EACvGgB,EACAC,EAEJ,GAAItB,EAAO,iBAAiB,YAAc,SAAkB,CAC1D,IAAI6B,EACEC,EAAkB,IAAIC,GAAU/B,EAAO,gBAAgB,EACvDgC,EAAc,IAAID,GAAU/B,EAAO,iBAAiB,YAAY,EAChEiC,EAAmB,MAAMC,GAAqBJ,EAAiBE,CAAW,EAC1EG,EAAWC,GACf,KAAK,kBAAkB,mBAA6B,EACpDpC,EAAO,gBACT,EACO,eAAYmC,CAAQ,EAC3B,IAAME,EAAc,MAAa,OAAI,MAAMF,CAAQ,EAAE,QAAQ,MAAM,cAAcF,CAAgB,EACjG,GAAII,GAAa,UAAU,OAAOP,CAAe,EAC/CD,EAAyBS,GAAcL,EAAiB,SAAS,WAAqB,KAAK,SAAS,MAC/F,CACL,IAAMM,EAAgB,MAAMJ,EAAS,WAAW,wBAAwBL,EAAiB,CACvF,KAAME,CACR,CAAC,EACD,GAAIO,EAAc,MAAM,SAAW,GAAK,CAACF,EACvCR,EAAyBS,GAAcL,EAAiB,SAAS,WAAqB,KAAK,SAAS,UAC3FM,EAAc,MAAM,OAAS,EAAG,CACzC,IAAMC,EAAoBD,EAAc,MAAM,CAAC,EAE/C,GAAI,CAACC,GAAmB,OACtB,MAAM,IAAIC,EAAS,oDAAoD,EAEzEZ,EAAyBS,GAAcE,EAAkB,OAAO,SAAS,WAAqB,KAAK,SAAS,CAC9G,KACE,OAAM,IAAIC,EAAS,oCAAoC,CAE3D,CAEIxB,IAAwB,cAC1BI,EAAaM,EAAmB,QAAQ,wBACtCvB,EACAyB,EACArB,EACAM,EACAS,CACF,EACAD,EAAQ,MAERD,EAAaM,EAAmB,QAAQ,wBACtCvB,EACAyB,EACArB,EACAM,EACA,CACF,EACAQ,EAAQC,EAEZ,MACMN,IAAwB,cAC1BI,EAAaM,EAAmB,QAAQ,OAAOvB,EAAQI,EAAkBM,EAAWS,CAAQ,EAC5FD,EAAQ,MAERD,EAAaM,EAAmB,QAAQ,OAAOvB,EAAQI,EAAkBM,EAAW,CAAC,EACrFQ,EAAQC,GAGZ,MAAO,CAAE,WAAAF,EAAY,MAAAC,CAAM,CAC7B,CAEA,MAAc,mBAAmBrB,EAAgC,CAC/D,IAAMyC,EAAc,MAAM,KAAK,KAAK,IAAI,YAAYzC,CAAmC,EAIjF0C,EAAmG,CAAE,qBAAsB,KAAM,aAAc,IAAK,EACpJ,CAAE,gBAAAC,CAAgB,EAAI,MAAM,KAAK,KAAK,IAAI,gBAAgB,CAC9D,GAAI3C,EACJ,IAAKyC,EACL,GAAGC,CACL,CAAC,EACD,MAAO,CAAE,KAAMC,CAAgB,CACjC,CAEQ,YAAoCC,EAAoBxC,EAA4B,CAC1F,OAAO,IAAI,KAAK,KAAK,IAAI,SAASwC,EAASxC,CAAe,CAC5D,CAEQ,kBAAkBA,EAAyC,CACjE,OAAO,KAAK,YAA4ByC,GAAwBzC,CAAe,CACjF,CACF,EO/MO,IAAM0C,GAAN,KAAgF,CACrF,YACUC,EACAC,EACAC,EACAC,EACR,CAJQ,SAAAH,EACA,uBAAAC,EACA,YAAAC,EACA,kBAAAC,CACP,CAEH,MAAM,QAAQC,EAA6BC,EAA4C,CACrF,IAAIC,EACAC,EACAF,GACFC,EAAWF,EACXG,EAAcF,GAEdE,EAAcH,EAEhB,IAAMI,EAAUC,GAAWF,EAAY,MAAOA,EAAY,SAAS,EACnE,OAAO,KAAK,aAAa,2BACvB,CACE,GAAGA,EACH,QAAAC,CACF,EACAF,CACF,CACF,CAEA,MAAM,KAAKJ,EAAiCI,EAA8C,CAGxF,OAFAI,EAAqBR,EAAO,MAAM,EAClCS,EAAuB,SAAUT,EAAO,OAAQA,EAAO,YAAY,QAAQ,EACvEU,GAAaV,CAAM,EACdW,GACLX,EAAO,YAAY,YACnB,KAAK,IACL,KAAK,kBACL,KAAK,OACLI,CACF,EAAE,wBAAwBJ,CAAM,EAE3BW,GACLX,EAAO,YAAY,YACnB,KAAK,IACL,KAAK,kBACL,KAAK,OACLI,CACF,EAAE,wBAAwBJ,CAAM,CAClC,CACF,EC3EA,OAAS,MAAAY,GAAI,WAAAC,GAAS,OAAAC,GAAK,QAAAC,OAAY,wBACvC,OAEE,WAAAC,GACA,aAAAC,EACA,iBAAAC,OAKK,kBACP,OAAS,OAAAC,OAAW,SCyzDb,IAAMC,GAAc,CACzB,QAAS,QACT,KAAM,SACN,aAAc,CACZ,CACE,KAAM,aACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,OACN,KAAM,CACJ,QAAS,gBACX,CACF,CACF,CACF,EACA,CACE,KAAM,iBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,OACN,KAAM,CACJ,QAAS,oBACX,CACF,CACF,CACF,EACA,CACE,KAAM,qBACN,SAAU,CACR,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CAAC,CACT,EACA,CACE,KAAM,UACN,SAAU,CACR,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,YACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,SACN,KAAM,KACR,CACF,CACF,EACA,CACE,KAAM,WACN,SAAU,CACR,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,YACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,WACN,KAAM,KACR,CACF,CACF,EACA,CACE,KAAM,gBACN,SAAU,CACR,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,mBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,YACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,qBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,oBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,WACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,YACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,OACN,KAAM,CACJ,QAAS,YACX,CACF,CACF,CACF,EACA,CACE,KAAM,wBACN,SAAU,CACR,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,mBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,WACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,YACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,oBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,0BACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,UACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,WACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,oBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,OACN,KAAM,CACJ,QAAS,YACX,CACF,CACF,CACF,EACA,CACE,KAAM,OACN,SAAU,CACR,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,WACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,WACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,qBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,mBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,SACN,KAAM,KACR,EACA,CACE,KAAM,mBACN,KAAM,KACR,CACF,CACF,EACA,CACE,KAAM,sBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,OACN,KAAM,CACJ,QAAS,yBACX,CACF,CACF,CACF,EACA,CACE,KAAM,oBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,OACN,KAAM,CACJ,QAAS,uBACX,CACF,CACF,CACF,EACA,CACE,KAAM,iBACN,SAAU,CACR,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,yBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,YACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,mBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,OACN,KAAM,CACJ,QAAS,YACX,CACF,CACF,CACF,EACA,CACE,KAAM,yBACN,SAAU,CACR,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,yBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,YACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,mBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,OACN,KAAM,CACJ,QAAS,YACX,CACF,CACF,CACF,EACA,CACE,KAAM,mBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,YACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,SACN,KAAM,KACR,CACF,CACF,EACA,CACE,KAAM,eACN,SAAU,CACR,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,YACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CAAC,CACT,EACA,CACE,KAAM,WACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,WACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CAAC,CACT,EACA,CACE,KAAM,cACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,aACN,KAAM,CACJ,QAAS,YACX,CACF,CACF,CACF,EACA,CACE,KAAM,aACN,SAAU,CACR,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,aACN,KAAM,CACJ,QAAS,YACX,CACF,CACF,CACF,EACA,CACE,KAAM,gBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,aACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CAAC,CACT,EACA,CACE,KAAM,mBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CAAC,CACT,EACA,CACE,KAAM,iCACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,eACN,KAAM,WACR,CACF,CACF,EACA,CACE,KAAM,gCACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,eACN,KAAM,WACR,CACF,CACF,EACA,CACE,KAAM,wBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,eACN,KAAM,WACR,CACF,CACF,EACA,CACE,KAAM,kBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,aACN,KAAM,KACR,CACF,CACF,EACA,CACE,KAAM,qBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,oBACN,KAAM,KACR,CACF,CACF,EACA,CACE,KAAM,uBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,aACN,KAAM,KACR,CACF,CACF,EACA,CACE,KAAM,sBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,mBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,UACN,KAAM,IACR,EACA,CACE,KAAM,eACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,CACF,CACF,EACA,CACE,KAAM,yBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,mBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,UACN,KAAM,IACR,EACA,CACE,KAAM,eACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,CACF,CACF,EACA,CACE,KAAM,mBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,aACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CAAC,CACT,EACA,CACE,KAAM,sBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,YACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CAAC,CACT,CACF,EACA,SAAU,CACR,CACE,KAAM,cACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,UACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,EACA,CACE,KAAM,UACN,KAAM,IACR,EACA,CACE,KAAM,WACN,KAAM,KACR,CACF,CACF,CACF,EACA,CACE,KAAM,SACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,QACN,KAAM,WACR,EACA,CACE,KAAM,8BACN,KAAM,WACR,EACA,CACE,KAAM,6BACN,KAAM,WACR,EACA,CACE,KAAM,qBACN,KAAM,WACR,EACA,CACE,KAAM,aACN,KAAM,WACR,EACA,CACE,KAAM,gBACN,KAAM,WACR,EACA,CACE,KAAM,oBACN,KAAM,IACR,EACA,CACE,KAAM,UACN,KAAM,MACR,EACA,CACE,KAAM,aACN,KAAM,MACR,EACA,CACE,KAAM,cACN,KAAM,MACR,CACF,CACF,CACF,EACA,CACE,KAAM,OACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,SACN,KAAM,WACR,EACA,CACE,KAAM,mBACN,KAAM,WACR,EACA,CACE,KAAM,SACN,KAAM,KACR,EACA,CACE,KAAM,aACN,KAAM,KACR,EACA,CACE,KAAM,YACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,EACA,CACE,KAAM,qBACN,KAAM,IACR,EACA,CACE,KAAM,eACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,EACA,CACE,KAAM,QACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,EACA,CACE,KAAM,YACN,KAAM,CACJ,QAAS,WACX,CACF,EACA,CACE,KAAM,OACN,KAAM,KACR,EACA,CACE,KAAM,MACN,KAAM,KACR,CACF,CACF,CACF,EACA,CACE,KAAM,mBACN,KAAM,CACJ,KAAM,SACN,OAAQ,CAAC,CACX,CACF,EACA,CACE,KAAM,OACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,OACN,KAAM,WACR,EACA,CACE,KAAM,IACN,KAAM,KACR,EACA,CACE,KAAM,IACN,KAAM,KACR,EACA,CACE,KAAM,eACN,KAAM,KACR,EACA,CACE,KAAM,cACN,KAAM,KACR,EACA,CACE,KAAM,WACN,KAAM,KACR,EACA,CACE,KAAM,WACN,KAAM,IACR,EACA,CACE,KAAM,gBACN,KAAM,KACR,EACA,CACE,KAAM,aACN,KAAM,KACR,EACA,CACE,KAAM,kBACN,KAAM,KACR,EACA,CACE,KAAM,qBACN,KAAM,MACR,EACA,CACE,KAAM,iBACN,KAAM,KACR,EACA,CACE,KAAM,oBACN,KAAM,KACR,CACF,CACF,CACF,EACA,CACE,KAAM,SACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,OACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,EACA,CACE,KAAM,SACN,KAAM,KACR,EACA,CACE,KAAM,MACN,KAAM,KACR,EACA,CACE,KAAM,aACN,KAAM,KACR,EACA,CACE,KAAM,OACN,KAAM,KACR,CACF,CACF,CACF,EACA,CACE,KAAM,cACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,cACN,KAAM,WACR,EACA,CACE,KAAM,OACN,KAAM,WACR,EACA,CACE,KAAM,WACN,KAAM,KACR,EACA,CACE,KAAM,aACN,KAAM,KACR,CACF,CACF,CACF,CACF,EACA,MAAO,CACL,CACE,KAAM,0BACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,qBACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,EACA,CACE,KAAM,UACN,KAAM,IACR,EACA,CACE,KAAM,WACN,KAAM,KACR,CACF,CACF,CACF,EACA,CACE,KAAM,wBACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,qBACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,EACA,CACE,KAAM,UACN,KAAM,IACR,EACA,CACE,KAAM,WACN,KAAM,KACR,CACF,CACF,CACF,EACA,CACE,KAAM,iBACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,8BACN,KAAM,WACR,EACA,CACE,KAAM,6BACN,KAAM,WACR,EACA,CACE,KAAM,qBACN,KAAM,WACR,CACF,CACF,CACF,EACA,CACE,KAAM,qBACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,IACN,KAAM,KACR,EACA,CACE,KAAM,aACN,KAAM,KACR,EACA,CACE,KAAM,kBACN,KAAM,KACR,EACA,CACE,KAAM,oBACN,KAAM,KACR,CACF,CACF,CACF,EACA,CACE,KAAM,aACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,QACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,EACA,CACE,KAAM,YACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,EACA,CACE,KAAM,qBACN,KAAM,IACR,EACA,CACE,KAAM,eACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,EACA,CACE,KAAM,aACN,KAAM,KACR,CACF,CACF,CACF,EACA,CACE,KAAM,aACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,QACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,EACA,CACE,KAAM,SACN,KAAM,KACR,EACA,CACE,KAAM,YACN,KAAM,WACR,EACA,CACE,KAAM,gBACN,KAAM,IACR,EACA,CACE,KAAM,eACN,KAAM,WACR,EACA,CACE,KAAM,YACN,KAAM,CACJ,QAAS,WACX,CACF,EACA,CACE,KAAM,OACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,EACA,CACE,KAAM,mBACN,KAAM,KACR,CACF,CACF,CACF,EACA,CACE,KAAM,cACN,KAAM,CACJ,KAAM,OACN,SAAU,CACR,CACE,KAAM,YACR,CACF,CACF,CACF,EACA,CACE,KAAM,YACN,KAAM,CACJ,KAAM,OACN,SAAU,CACR,CACE,KAAM,MACR,EACA,CACE,KAAM,WACR,EACA,CACE,KAAM,UACR,CACF,CACF,CACF,EACA,CACE,KAAM,aACN,KAAM,CACJ,KAAM,OACN,SAAU,CACR,CACE,KAAM,SACR,EACA,CACE,KAAM,UACR,EACA,CACE,KAAM,MACR,CACF,CACF,CACF,CACF,EACA,OAAQ,CACN,CACE,KAAM,IACN,KAAM,4BACN,IAAK,2CACP,EACA,CACE,KAAM,KACN,KAAM,wBACN,IAAK,2CACP,EACA,CACE,KAAM,KACN,KAAM,mBACN,IAAK,gDACP,EACA,CACE,KAAM,KACN,KAAM,cACN,IAAK,2BACP,EACA,CACE,KAAM,KACN,KAAM,eACN,IAAK,mBACP,EACA,CACE,KAAM,KACN,KAAM,oBACN,IAAK,oBACP,EACA,CACE,KAAM,KACN,KAAM,aACN,IAAK,aACP,EACA,CACE,KAAM,KACN,KAAM,cACN,IAAK,cACP,EACA,CACE,KAAM,KACN,KAAM,iBACN,IAAK,yBACP,EACA,CACE,KAAM,KACN,KAAM,uBACN,IAAK,wBACP,EACA,CACE,KAAM,KACN,KAAM,6BACN,IAAK,8BACP,EACA,CACE,KAAM,KACN,KAAM,kBACN,IAAK,iBACP,EACA,CACE,KAAM,KACN,KAAM,eACN,IAAK,mBACP,CACF,CACF,ECviGO,IAAMC,GAAkB,CAC7B,QAAS,QACT,KAAM,cACN,aAAc,CACZ,CACE,KAAM,aACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,aACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,OACN,KAAM,CACJ,QAAS,gBACX,CACF,CACF,CACF,EACA,CACE,KAAM,SACN,SAAU,CACR,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,uBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,aACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,4BACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,4BACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,iBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,aACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,0BACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,iBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,WACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,YACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,OACN,KAAM,CACJ,QAAS,YACX,CACF,CACF,CACF,EACA,CACE,KAAM,sBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,aACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,OACN,KAAM,CACJ,QAAS,yBACX,CACF,CACF,CACF,EACA,CACE,KAAM,oBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,aACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,OACN,KAAM,CACJ,QAAS,uBACX,CACF,CACF,CACF,EACA,CACE,KAAM,mBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,aACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,aACN,KAAM,KACR,CACF,CACF,EACA,CACE,KAAM,wBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,aACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,eACN,KAAM,WACR,CACF,CACF,EACA,CACE,KAAM,mBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,YACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,aACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,SACN,KAAM,KACR,CACF,CACF,EACA,CACE,KAAM,mBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,aACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,aACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CAAC,CACT,EACA,CACE,KAAM,8BACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,aACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,eACN,KAAM,WACR,CACF,CACF,CACF,EACA,SAAU,CACR,CACE,KAAM,aACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,OACN,KAAM,WACR,EACA,CACE,KAAM,QACN,KAAM,WACR,EACA,CACE,KAAM,2BACN,KAAM,WACR,EACA,CACE,KAAM,qBACN,KAAM,WACR,EACA,CACE,KAAM,oBACN,KAAM,IACR,EACA,CACE,KAAM,kBACN,KAAM,KACR,EACA,CACE,KAAM,iBACN,KAAM,KACR,CACF,CACF,CACF,EACA,CACE,KAAM,cACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,UACN,KAAM,IACR,EACA,CACE,KAAM,WACN,KAAM,KACR,EACA,CACE,KAAM,SACN,KAAM,KACR,CACF,CACF,CACF,EACA,CACE,KAAM,OACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,SACN,KAAM,WACR,EACA,CACE,KAAM,SACN,KAAM,KACR,EACA,CACE,KAAM,WACN,KAAM,KACR,EACA,CACE,KAAM,aACN,KAAM,KACR,EACA,CACE,KAAM,YACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,EACA,CACE,KAAM,qBACN,KAAM,IA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",
|
|
4
|
+
"sourcesContent": ["var exports$3 = {},\n _dewExec$2 = false;\nfunction dew$2() {\n if (_dewExec$2) return exports$3;\n _dewExec$2 = true;\n exports$3.byteLength = byteLength;\n exports$3.toByteArray = toByteArray;\n exports$3.fromByteArray = fromByteArray;\n var lookup = [];\n var revLookup = [];\n var Arr = typeof Uint8Array !== \"undefined\" ? Uint8Array : Array;\n var code = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n\n for (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i];\n revLookup[code.charCodeAt(i)] = i;\n } // Support decoding URL-safe base64 strings, as Node.js does.\n // See: https://en.wikipedia.org/wiki/Base64#URL_applications\n\n\n revLookup[\"-\".charCodeAt(0)] = 62;\n revLookup[\"_\".charCodeAt(0)] = 63;\n\n function getLens(b64) {\n var len = b64.length;\n\n if (len % 4 > 0) {\n throw new Error(\"Invalid string. Length must be a multiple of 4\");\n } // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n\n\n var validLen = b64.indexOf(\"=\");\n if (validLen === -1) validLen = len;\n var placeHoldersLen = validLen === len ? 0 : 4 - validLen % 4;\n return [validLen, placeHoldersLen];\n } // base64 is 4/3 + up to two characters of the original data\n\n\n function byteLength(b64) {\n var lens = getLens(b64);\n var validLen = lens[0];\n var placeHoldersLen = lens[1];\n return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen;\n }\n\n function _byteLength(b64, validLen, placeHoldersLen) {\n return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen;\n }\n\n function toByteArray(b64) {\n var tmp;\n var lens = getLens(b64);\n var validLen = lens[0];\n var placeHoldersLen = lens[1];\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen));\n var curByte = 0; // if there are placeholders, only get up to the last complete 4 chars\n\n var len = placeHoldersLen > 0 ? validLen - 4 : validLen;\n var i;\n\n for (i = 0; i < len; i += 4) {\n tmp = revLookup[b64.charCodeAt(i)] << 18 | revLookup[b64.charCodeAt(i + 1)] << 12 | revLookup[b64.charCodeAt(i + 2)] << 6 | revLookup[b64.charCodeAt(i + 3)];\n arr[curByte++] = tmp >> 16 & 255;\n arr[curByte++] = tmp >> 8 & 255;\n arr[curByte++] = tmp & 255;\n }\n\n if (placeHoldersLen === 2) {\n tmp = revLookup[b64.charCodeAt(i)] << 2 | revLookup[b64.charCodeAt(i + 1)] >> 4;\n arr[curByte++] = tmp & 255;\n }\n\n if (placeHoldersLen === 1) {\n tmp = revLookup[b64.charCodeAt(i)] << 10 | revLookup[b64.charCodeAt(i + 1)] << 4 | revLookup[b64.charCodeAt(i + 2)] >> 2;\n arr[curByte++] = tmp >> 8 & 255;\n arr[curByte++] = tmp & 255;\n }\n\n return arr;\n }\n\n function tripletToBase64(num) {\n return lookup[num >> 18 & 63] + lookup[num >> 12 & 63] + lookup[num >> 6 & 63] + lookup[num & 63];\n }\n\n function encodeChunk(uint8, start, end) {\n var tmp;\n var output = [];\n\n for (var i = start; i < end; i += 3) {\n tmp = (uint8[i] << 16 & 16711680) + (uint8[i + 1] << 8 & 65280) + (uint8[i + 2] & 255);\n output.push(tripletToBase64(tmp));\n }\n\n return output.join(\"\");\n }\n\n function fromByteArray(uint8) {\n var tmp;\n var len = uint8.length;\n var extraBytes = len % 3; // if we have 1 byte left, pad 2 bytes\n\n var parts = [];\n var maxChunkLength = 16383; // must be multiple of 3\n // go through the array every three bytes, we'll deal with trailing stuff later\n\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, i + maxChunkLength > len2 ? len2 : i + maxChunkLength));\n } // pad the end with zeros, but make sure to not forget the extra bytes\n\n\n if (extraBytes === 1) {\n tmp = uint8[len - 1];\n parts.push(lookup[tmp >> 2] + lookup[tmp << 4 & 63] + \"==\");\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1];\n parts.push(lookup[tmp >> 10] + lookup[tmp >> 4 & 63] + lookup[tmp << 2 & 63] + \"=\");\n }\n\n return parts.join(\"\");\n }\n\n return exports$3;\n}\n\nvar exports$2 = {},\n _dewExec$1 = false;\nfunction dew$1() {\n if (_dewExec$1) return exports$2;\n _dewExec$1 = true;\n\n /*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\n exports$2.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m;\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = -7;\n var i = isLE ? nBytes - 1 : 0;\n var d = isLE ? -1 : 1;\n var s = buffer[offset + i];\n i += d;\n e = s & (1 << -nBits) - 1;\n s >>= -nBits;\n nBits += eLen;\n\n for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n\n for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : (s ? -1 : 1) * Infinity;\n } else {\n m = m + Math.pow(2, mLen);\n e = e - eBias;\n }\n\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen);\n };\n\n exports$2.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c;\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0;\n var i = isLE ? 0 : nBytes - 1;\n var d = isLE ? 1 : -1;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n value = Math.abs(value);\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0;\n e = eMax;\n } else {\n e = Math.floor(Math.log(value) / Math.LN2);\n\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * Math.pow(2, 1 - eBias);\n }\n\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * Math.pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);\n e = 0;\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 255, i += d, m /= 256, mLen -= 8) {}\n\n e = e << mLen | m;\n eLen += mLen;\n\n for (; eLen > 0; buffer[offset + i] = e & 255, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128;\n };\n\n return exports$2;\n}\n\nvar exports$1 = {},\n _dewExec = false;\nfunction dew() {\n if (_dewExec) return exports$1;\n _dewExec = true;\n\n const base64 = dew$2();\n\n const ieee754 = dew$1();\n\n const customInspectSymbol = typeof Symbol === \"function\" && typeof Symbol[\"for\"] === \"function\" ? Symbol[\"for\"](\"nodejs.util.inspect.custom\") // eslint-disable-line dot-notation\n : null;\n exports$1.Buffer = Buffer;\n exports$1.SlowBuffer = SlowBuffer;\n exports$1.INSPECT_MAX_BYTES = 50;\n const K_MAX_LENGTH = 2147483647;\n exports$1.kMaxLength = K_MAX_LENGTH;\n /**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\n\n Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport();\n\n if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== \"undefined\" && typeof console.error === \"function\") {\n console.error(\"This browser lacks typed array (Uint8Array) support which is required by \" + \"`buffer` v5.x. Use `buffer` v4.x if you require old browser support.\");\n }\n\n function typedArraySupport() {\n // Can typed array instances can be augmented?\n try {\n const arr = new Uint8Array(1);\n const proto = {\n foo: function () {\n return 42;\n }\n };\n Object.setPrototypeOf(proto, Uint8Array.prototype);\n Object.setPrototypeOf(arr, proto);\n return arr.foo() === 42;\n } catch (e) {\n return false;\n }\n }\n\n Object.defineProperty(Buffer.prototype, \"parent\", {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined;\n return this.buffer;\n }\n });\n Object.defineProperty(Buffer.prototype, \"offset\", {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined;\n return this.byteOffset;\n }\n });\n\n function createBuffer(length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError(\"The value \\\"\" + length + \"\\\" is invalid for option \\\"size\\\"\");\n } // Return an augmented `Uint8Array` instance\n\n\n const buf = new Uint8Array(length);\n Object.setPrototypeOf(buf, Buffer.prototype);\n return buf;\n }\n /**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\n\n function Buffer(arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === \"number\") {\n if (typeof encodingOrOffset === \"string\") {\n throw new TypeError(\"The \\\"string\\\" argument must be of type string. Received type number\");\n }\n\n return allocUnsafe(arg);\n }\n\n return from(arg, encodingOrOffset, length);\n }\n\n Buffer.poolSize = 8192; // not used by this implementation\n\n function from(value, encodingOrOffset, length) {\n if (typeof value === \"string\") {\n return fromString(value, encodingOrOffset);\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value);\n }\n\n if (value == null) {\n throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, \" + \"or Array-like Object. Received type \" + typeof value);\n }\n\n if (isInstance(value, ArrayBuffer) || value && isInstance(value.buffer, ArrayBuffer)) {\n return fromArrayBuffer(value, encodingOrOffset, length);\n }\n\n if (typeof SharedArrayBuffer !== \"undefined\" && (isInstance(value, SharedArrayBuffer) || value && isInstance(value.buffer, SharedArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length);\n }\n\n if (typeof value === \"number\") {\n throw new TypeError(\"The \\\"value\\\" argument must not be of type number. Received type number\");\n }\n\n const valueOf = value.valueOf && value.valueOf();\n\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length);\n }\n\n const b = fromObject(value);\n if (b) return b;\n\n if (typeof Symbol !== \"undefined\" && Symbol.toPrimitive != null && typeof value[Symbol.toPrimitive] === \"function\") {\n return Buffer.from(value[Symbol.toPrimitive](\"string\"), encodingOrOffset, length);\n }\n\n throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, \" + \"or Array-like Object. Received type \" + typeof value);\n }\n /**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\n\n\n Buffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length);\n }; // Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n // https://github.com/feross/buffer/pull/148\n\n\n Object.setPrototypeOf(Buffer.prototype, Uint8Array.prototype);\n Object.setPrototypeOf(Buffer, Uint8Array);\n\n function assertSize(size) {\n if (typeof size !== \"number\") {\n throw new TypeError(\"\\\"size\\\" argument must be of type number\");\n } else if (size < 0) {\n throw new RangeError(\"The value \\\"\" + size + \"\\\" is invalid for option \\\"size\\\"\");\n }\n }\n\n function alloc(size, fill, encoding) {\n assertSize(size);\n\n if (size <= 0) {\n return createBuffer(size);\n }\n\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === \"string\" ? createBuffer(size).fill(fill, encoding) : createBuffer(size).fill(fill);\n }\n\n return createBuffer(size);\n }\n /**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\n\n\n Buffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding);\n };\n\n function allocUnsafe(size) {\n assertSize(size);\n return createBuffer(size < 0 ? 0 : checked(size) | 0);\n }\n /**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\n\n\n Buffer.allocUnsafe = function (size) {\n return allocUnsafe(size);\n };\n /**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\n\n\n Buffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size);\n };\n\n function fromString(string, encoding) {\n if (typeof encoding !== \"string\" || encoding === \"\") {\n encoding = \"utf8\";\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError(\"Unknown encoding: \" + encoding);\n }\n\n const length = byteLength(string, encoding) | 0;\n let buf = createBuffer(length);\n const actual = buf.write(string, encoding);\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual);\n }\n\n return buf;\n }\n\n function fromArrayLike(array) {\n const length = array.length < 0 ? 0 : checked(array.length) | 0;\n const buf = createBuffer(length);\n\n for (let i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255;\n }\n\n return buf;\n }\n\n function fromArrayView(arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n const copy = new Uint8Array(arrayView);\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength);\n }\n\n return fromArrayLike(arrayView);\n }\n\n function fromArrayBuffer(array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError(\"\\\"offset\\\" is outside of buffer bounds\");\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError(\"\\\"length\\\" is outside of buffer bounds\");\n }\n\n let buf;\n\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array);\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset);\n } else {\n buf = new Uint8Array(array, byteOffset, length);\n } // Return an augmented `Uint8Array` instance\n\n\n Object.setPrototypeOf(buf, Buffer.prototype);\n return buf;\n }\n\n function fromObject(obj) {\n if (Buffer.isBuffer(obj)) {\n const len = checked(obj.length) | 0;\n const buf = createBuffer(len);\n\n if (buf.length === 0) {\n return buf;\n }\n\n obj.copy(buf, 0, 0, len);\n return buf;\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== \"number\" || numberIsNaN(obj.length)) {\n return createBuffer(0);\n }\n\n return fromArrayLike(obj);\n }\n\n if (obj.type === \"Buffer\" && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data);\n }\n }\n\n function checked(length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError(\"Attempt to allocate Buffer larger than maximum \" + \"size: 0x\" + K_MAX_LENGTH.toString(16) + \" bytes\");\n }\n\n return length | 0;\n }\n\n function SlowBuffer(length) {\n if (+length != length) {\n // eslint-disable-line eqeqeq\n length = 0;\n }\n\n return Buffer.alloc(+length);\n }\n\n Buffer.isBuffer = function isBuffer(b) {\n return b != null && b._isBuffer === true && b !== Buffer.prototype; // so Buffer.isBuffer(Buffer.prototype) will be false\n };\n\n Buffer.compare = function compare(a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength);\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength);\n\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\"The \\\"buf1\\\", \\\"buf2\\\" arguments must be one of type Buffer or Uint8Array\");\n }\n\n if (a === b) return 0;\n let x = a.length;\n let y = b.length;\n\n for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i];\n y = b[i];\n break;\n }\n }\n\n if (x < y) return -1;\n if (y < x) return 1;\n return 0;\n };\n\n Buffer.isEncoding = function isEncoding(encoding) {\n switch (String(encoding).toLowerCase()) {\n case \"hex\":\n case \"utf8\":\n case \"utf-8\":\n case \"ascii\":\n case \"latin1\":\n case \"binary\":\n case \"base64\":\n case \"ucs2\":\n case \"ucs-2\":\n case \"utf16le\":\n case \"utf-16le\":\n return true;\n\n default:\n return false;\n }\n };\n\n Buffer.concat = function concat(list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError(\"\\\"list\\\" argument must be an Array of Buffers\");\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0);\n }\n\n let i;\n\n if (length === undefined) {\n length = 0;\n\n for (i = 0; i < list.length; ++i) {\n length += list[i].length;\n }\n }\n\n const buffer = Buffer.allocUnsafe(length);\n let pos = 0;\n\n for (i = 0; i < list.length; ++i) {\n let buf = list[i];\n\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf);\n buf.copy(buffer, pos);\n } else {\n Uint8Array.prototype.set.call(buffer, buf, pos);\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError(\"\\\"list\\\" argument must be an Array of Buffers\");\n } else {\n buf.copy(buffer, pos);\n }\n\n pos += buf.length;\n }\n\n return buffer;\n };\n\n function byteLength(string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length;\n }\n\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength;\n }\n\n if (typeof string !== \"string\") {\n throw new TypeError(\"The \\\"string\\\" argument must be one of type string, Buffer, or ArrayBuffer. \" + \"Received type \" + typeof string);\n }\n\n const len = string.length;\n const mustMatch = arguments.length > 2 && arguments[2] === true;\n if (!mustMatch && len === 0) return 0; // Use a for loop to avoid recursion\n\n let loweredCase = false;\n\n for (;;) {\n switch (encoding) {\n case \"ascii\":\n case \"latin1\":\n case \"binary\":\n return len;\n\n case \"utf8\":\n case \"utf-8\":\n return utf8ToBytes(string).length;\n\n case \"ucs2\":\n case \"ucs-2\":\n case \"utf16le\":\n case \"utf-16le\":\n return len * 2;\n\n case \"hex\":\n return len >>> 1;\n\n case \"base64\":\n return base64ToBytes(string).length;\n\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length; // assume utf8\n }\n\n encoding = (\"\" + encoding).toLowerCase();\n loweredCase = true;\n }\n }\n }\n\n Buffer.byteLength = byteLength;\n\n function slowToString(encoding, start, end) {\n let loweredCase = false; // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n\n if (start === undefined || start < 0) {\n start = 0;\n } // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n\n\n if (start > this.length) {\n return \"\";\n }\n\n if (end === undefined || end > this.length) {\n end = this.length;\n }\n\n if (end <= 0) {\n return \"\";\n } // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n\n\n end >>>= 0;\n start >>>= 0;\n\n if (end <= start) {\n return \"\";\n }\n\n if (!encoding) encoding = \"utf8\";\n\n while (true) {\n switch (encoding) {\n case \"hex\":\n return hexSlice(this, start, end);\n\n case \"utf8\":\n case \"utf-8\":\n return utf8Slice(this, start, end);\n\n case \"ascii\":\n return asciiSlice(this, start, end);\n\n case \"latin1\":\n case \"binary\":\n return latin1Slice(this, start, end);\n\n case \"base64\":\n return base64Slice(this, start, end);\n\n case \"ucs2\":\n case \"ucs-2\":\n case \"utf16le\":\n case \"utf-16le\":\n return utf16leSlice(this, start, end);\n\n default:\n if (loweredCase) throw new TypeError(\"Unknown encoding: \" + encoding);\n encoding = (encoding + \"\").toLowerCase();\n loweredCase = true;\n }\n }\n } // This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n // to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n // reliably in a browserify context because there could be multiple different\n // copies of the 'buffer' package in use. This method works even for Buffer\n // instances that were created from another copy of the `buffer` package.\n // See: https://github.com/feross/buffer/issues/154\n\n\n Buffer.prototype._isBuffer = true;\n\n function swap(b, n, m) {\n const i = b[n];\n b[n] = b[m];\n b[m] = i;\n }\n\n Buffer.prototype.swap16 = function swap16() {\n const len = this.length;\n\n if (len % 2 !== 0) {\n throw new RangeError(\"Buffer size must be a multiple of 16-bits\");\n }\n\n for (let i = 0; i < len; i += 2) {\n swap(this, i, i + 1);\n }\n\n return this;\n };\n\n Buffer.prototype.swap32 = function swap32() {\n const len = this.length;\n\n if (len % 4 !== 0) {\n throw new RangeError(\"Buffer size must be a multiple of 32-bits\");\n }\n\n for (let i = 0; i < len; i += 4) {\n swap(this, i, i + 3);\n swap(this, i + 1, i + 2);\n }\n\n return this;\n };\n\n Buffer.prototype.swap64 = function swap64() {\n const len = this.length;\n\n if (len % 8 !== 0) {\n throw new RangeError(\"Buffer size must be a multiple of 64-bits\");\n }\n\n for (let i = 0; i < len; i += 8) {\n swap(this, i, i + 7);\n swap(this, i + 1, i + 6);\n swap(this, i + 2, i + 5);\n swap(this, i + 3, i + 4);\n }\n\n return this;\n };\n\n Buffer.prototype.toString = function toString() {\n const length = this.length;\n if (length === 0) return \"\";\n if (arguments.length === 0) return utf8Slice(this, 0, length);\n return slowToString.apply(this, arguments);\n };\n\n Buffer.prototype.toLocaleString = Buffer.prototype.toString;\n\n Buffer.prototype.equals = function equals(b) {\n if (!Buffer.isBuffer(b)) throw new TypeError(\"Argument must be a Buffer\");\n if (this === b) return true;\n return Buffer.compare(this, b) === 0;\n };\n\n Buffer.prototype.inspect = function inspect() {\n let str = \"\";\n const max = exports$1.INSPECT_MAX_BYTES;\n str = this.toString(\"hex\", 0, max).replace(/(.{2})/g, \"$1 \").trim();\n if (this.length > max) str += \" ... \";\n return \"<Buffer \" + str + \">\";\n };\n\n if (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect;\n }\n\n Buffer.prototype.compare = function compare(target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength);\n }\n\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\"The \\\"target\\\" argument must be one of type Buffer or Uint8Array. \" + \"Received type \" + typeof target);\n }\n\n if (start === undefined) {\n start = 0;\n }\n\n if (end === undefined) {\n end = target ? target.length : 0;\n }\n\n if (thisStart === undefined) {\n thisStart = 0;\n }\n\n if (thisEnd === undefined) {\n thisEnd = this.length;\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError(\"out of range index\");\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0;\n }\n\n if (thisStart >= thisEnd) {\n return -1;\n }\n\n if (start >= end) {\n return 1;\n }\n\n start >>>= 0;\n end >>>= 0;\n thisStart >>>= 0;\n thisEnd >>>= 0;\n if (this === target) return 0;\n let x = thisEnd - thisStart;\n let y = end - start;\n const len = Math.min(x, y);\n const thisCopy = this.slice(thisStart, thisEnd);\n const targetCopy = target.slice(start, end);\n\n for (let i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i];\n y = targetCopy[i];\n break;\n }\n }\n\n if (x < y) return -1;\n if (y < x) return 1;\n return 0;\n }; // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n // OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n //\n // Arguments:\n // - buffer - a Buffer to search\n // - val - a string, Buffer, or number\n // - byteOffset - an index into `buffer`; will be clamped to an int32\n // - encoding - an optional encoding, relevant is val is a string\n // - dir - true for indexOf, false for lastIndexOf\n\n\n function bidirectionalIndexOf(buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1; // Normalize byteOffset\n\n if (typeof byteOffset === \"string\") {\n encoding = byteOffset;\n byteOffset = 0;\n } else if (byteOffset > 2147483647) {\n byteOffset = 2147483647;\n } else if (byteOffset < -2147483648) {\n byteOffset = -2147483648;\n }\n\n byteOffset = +byteOffset; // Coerce to Number.\n\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : buffer.length - 1;\n } // Normalize byteOffset: negative offsets start from the end of the buffer\n\n\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset;\n\n if (byteOffset >= buffer.length) {\n if (dir) return -1;else byteOffset = buffer.length - 1;\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0;else return -1;\n } // Normalize val\n\n\n if (typeof val === \"string\") {\n val = Buffer.from(val, encoding);\n } // Finally, search either indexOf (if dir is true) or lastIndexOf\n\n\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1;\n }\n\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir);\n } else if (typeof val === \"number\") {\n val = val & 255; // Search for a byte value [0-255]\n\n if (typeof Uint8Array.prototype.indexOf === \"function\") {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset);\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset);\n }\n }\n\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir);\n }\n\n throw new TypeError(\"val must be string, number or Buffer\");\n }\n\n function arrayIndexOf(arr, val, byteOffset, encoding, dir) {\n let indexSize = 1;\n let arrLength = arr.length;\n let valLength = val.length;\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase();\n\n if (encoding === \"ucs2\" || encoding === \"ucs-2\" || encoding === \"utf16le\" || encoding === \"utf-16le\") {\n if (arr.length < 2 || val.length < 2) {\n return -1;\n }\n\n indexSize = 2;\n arrLength /= 2;\n valLength /= 2;\n byteOffset /= 2;\n }\n }\n\n function read(buf, i) {\n if (indexSize === 1) {\n return buf[i];\n } else {\n return buf.readUInt16BE(i * indexSize);\n }\n }\n\n let i;\n\n if (dir) {\n let foundIndex = -1;\n\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i;\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize;\n } else {\n if (foundIndex !== -1) i -= i - foundIndex;\n foundIndex = -1;\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength;\n\n for (i = byteOffset; i >= 0; i--) {\n let found = true;\n\n for (let j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false;\n break;\n }\n }\n\n if (found) return i;\n }\n }\n\n return -1;\n }\n\n Buffer.prototype.includes = function includes(val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1;\n };\n\n Buffer.prototype.indexOf = function indexOf(val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true);\n };\n\n Buffer.prototype.lastIndexOf = function lastIndexOf(val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false);\n };\n\n function hexWrite(buf, string, offset, length) {\n offset = Number(offset) || 0;\n const remaining = buf.length - offset;\n\n if (!length) {\n length = remaining;\n } else {\n length = Number(length);\n\n if (length > remaining) {\n length = remaining;\n }\n }\n\n const strLen = string.length;\n\n if (length > strLen / 2) {\n length = strLen / 2;\n }\n\n let i;\n\n for (i = 0; i < length; ++i) {\n const parsed = parseInt(string.substr(i * 2, 2), 16);\n if (numberIsNaN(parsed)) return i;\n buf[offset + i] = parsed;\n }\n\n return i;\n }\n\n function utf8Write(buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length);\n }\n\n function asciiWrite(buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length);\n }\n\n function base64Write(buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length);\n }\n\n function ucs2Write(buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length);\n }\n\n Buffer.prototype.write = function write(string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = \"utf8\";\n length = this.length;\n offset = 0; // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === \"string\") {\n encoding = offset;\n length = this.length;\n offset = 0; // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0;\n\n if (isFinite(length)) {\n length = length >>> 0;\n if (encoding === undefined) encoding = \"utf8\";\n } else {\n encoding = length;\n length = undefined;\n }\n } else {\n throw new Error(\"Buffer.write(string, encoding, offset[, length]) is no longer supported\");\n }\n\n const remaining = this.length - offset;\n if (length === undefined || length > remaining) length = remaining;\n\n if (string.length > 0 && (length < 0 || offset < 0) || offset > this.length) {\n throw new RangeError(\"Attempt to write outside buffer bounds\");\n }\n\n if (!encoding) encoding = \"utf8\";\n let loweredCase = false;\n\n for (;;) {\n switch (encoding) {\n case \"hex\":\n return hexWrite(this, string, offset, length);\n\n case \"utf8\":\n case \"utf-8\":\n return utf8Write(this, string, offset, length);\n\n case \"ascii\":\n case \"latin1\":\n case \"binary\":\n return asciiWrite(this, string, offset, length);\n\n case \"base64\":\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length);\n\n case \"ucs2\":\n case \"ucs-2\":\n case \"utf16le\":\n case \"utf-16le\":\n return ucs2Write(this, string, offset, length);\n\n default:\n if (loweredCase) throw new TypeError(\"Unknown encoding: \" + encoding);\n encoding = (\"\" + encoding).toLowerCase();\n loweredCase = true;\n }\n }\n };\n\n Buffer.prototype.toJSON = function toJSON() {\n return {\n type: \"Buffer\",\n data: Array.prototype.slice.call(this._arr || this, 0)\n };\n };\n\n function base64Slice(buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf);\n } else {\n return base64.fromByteArray(buf.slice(start, end));\n }\n }\n\n function utf8Slice(buf, start, end) {\n end = Math.min(buf.length, end);\n const res = [];\n let i = start;\n\n while (i < end) {\n const firstByte = buf[i];\n let codePoint = null;\n let bytesPerSequence = firstByte > 239 ? 4 : firstByte > 223 ? 3 : firstByte > 191 ? 2 : 1;\n\n if (i + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint;\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 128) {\n codePoint = firstByte;\n }\n\n break;\n\n case 2:\n secondByte = buf[i + 1];\n\n if ((secondByte & 192) === 128) {\n tempCodePoint = (firstByte & 31) << 6 | secondByte & 63;\n\n if (tempCodePoint > 127) {\n codePoint = tempCodePoint;\n }\n }\n\n break;\n\n case 3:\n secondByte = buf[i + 1];\n thirdByte = buf[i + 2];\n\n if ((secondByte & 192) === 128 && (thirdByte & 192) === 128) {\n tempCodePoint = (firstByte & 15) << 12 | (secondByte & 63) << 6 | thirdByte & 63;\n\n if (tempCodePoint > 2047 && (tempCodePoint < 55296 || tempCodePoint > 57343)) {\n codePoint = tempCodePoint;\n }\n }\n\n break;\n\n case 4:\n secondByte = buf[i + 1];\n thirdByte = buf[i + 2];\n fourthByte = buf[i + 3];\n\n if ((secondByte & 192) === 128 && (thirdByte & 192) === 128 && (fourthByte & 192) === 128) {\n tempCodePoint = (firstByte & 15) << 18 | (secondByte & 63) << 12 | (thirdByte & 63) << 6 | fourthByte & 63;\n\n if (tempCodePoint > 65535 && tempCodePoint < 1114112) {\n codePoint = tempCodePoint;\n }\n }\n\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 65533;\n bytesPerSequence = 1;\n } else if (codePoint > 65535) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 65536;\n res.push(codePoint >>> 10 & 1023 | 55296);\n codePoint = 56320 | codePoint & 1023;\n }\n\n res.push(codePoint);\n i += bytesPerSequence;\n }\n\n return decodeCodePointsArray(res);\n } // Based on http://stackoverflow.com/a/22747272/680742, the browser with\n // the lowest limit is Chrome, with 0x10000 args.\n // We go 1 magnitude less, for safety\n\n\n const MAX_ARGUMENTS_LENGTH = 4096;\n\n function decodeCodePointsArray(codePoints) {\n const len = codePoints.length;\n\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints); // avoid extra slice()\n } // Decode in chunks to avoid \"call stack size exceeded\".\n\n\n let res = \"\";\n let i = 0;\n\n while (i < len) {\n res += String.fromCharCode.apply(String, codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH));\n }\n\n return res;\n }\n\n function asciiSlice(buf, start, end) {\n let ret = \"\";\n end = Math.min(buf.length, end);\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 127);\n }\n\n return ret;\n }\n\n function latin1Slice(buf, start, end) {\n let ret = \"\";\n end = Math.min(buf.length, end);\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i]);\n }\n\n return ret;\n }\n\n function hexSlice(buf, start, end) {\n const len = buf.length;\n if (!start || start < 0) start = 0;\n if (!end || end < 0 || end > len) end = len;\n let out = \"\";\n\n for (let i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]];\n }\n\n return out;\n }\n\n function utf16leSlice(buf, start, end) {\n const bytes = buf.slice(start, end);\n let res = \"\"; // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n\n for (let i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256);\n }\n\n return res;\n }\n\n Buffer.prototype.slice = function slice(start, end) {\n const len = this.length;\n start = ~~start;\n end = end === undefined ? len : ~~end;\n\n if (start < 0) {\n start += len;\n if (start < 0) start = 0;\n } else if (start > len) {\n start = len;\n }\n\n if (end < 0) {\n end += len;\n if (end < 0) end = 0;\n } else if (end > len) {\n end = len;\n }\n\n if (end < start) end = start;\n const newBuf = this.subarray(start, end); // Return an augmented `Uint8Array` instance\n\n Object.setPrototypeOf(newBuf, Buffer.prototype);\n return newBuf;\n };\n /*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\n\n\n function checkOffset(offset, ext, length) {\n if (offset % 1 !== 0 || offset < 0) throw new RangeError(\"offset is not uint\");\n if (offset + ext > length) throw new RangeError(\"Trying to access beyond buffer length\");\n }\n\n Buffer.prototype.readUintLE = Buffer.prototype.readUIntLE = function readUIntLE(offset, byteLength, noAssert) {\n offset = offset >>> 0;\n byteLength = byteLength >>> 0;\n if (!noAssert) checkOffset(offset, byteLength, this.length);\n let val = this[offset];\n let mul = 1;\n let i = 0;\n\n while (++i < byteLength && (mul *= 256)) {\n val += this[offset + i] * mul;\n }\n\n return val;\n };\n\n Buffer.prototype.readUintBE = Buffer.prototype.readUIntBE = function readUIntBE(offset, byteLength, noAssert) {\n offset = offset >>> 0;\n byteLength = byteLength >>> 0;\n\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length);\n }\n\n let val = this[offset + --byteLength];\n let mul = 1;\n\n while (byteLength > 0 && (mul *= 256)) {\n val += this[offset + --byteLength] * mul;\n }\n\n return val;\n };\n\n Buffer.prototype.readUint8 = Buffer.prototype.readUInt8 = function readUInt8(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 1, this.length);\n return this[offset];\n };\n\n Buffer.prototype.readUint16LE = Buffer.prototype.readUInt16LE = function readUInt16LE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 2, this.length);\n return this[offset] | this[offset + 1] << 8;\n };\n\n Buffer.prototype.readUint16BE = Buffer.prototype.readUInt16BE = function readUInt16BE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 2, this.length);\n return this[offset] << 8 | this[offset + 1];\n };\n\n Buffer.prototype.readUint32LE = Buffer.prototype.readUInt32LE = function readUInt32LE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 4, this.length);\n return (this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16) + this[offset + 3] * 16777216;\n };\n\n Buffer.prototype.readUint32BE = Buffer.prototype.readUInt32BE = function readUInt32BE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 4, this.length);\n return this[offset] * 16777216 + (this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3]);\n };\n\n Buffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE(offset) {\n offset = offset >>> 0;\n validateNumber(offset, \"offset\");\n const first = this[offset];\n const last = this[offset + 7];\n\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8);\n }\n\n const lo = first + this[++offset] * 2 ** 8 + this[++offset] * 2 ** 16 + this[++offset] * 2 ** 24;\n const hi = this[++offset] + this[++offset] * 2 ** 8 + this[++offset] * 2 ** 16 + last * 2 ** 24;\n return BigInt(lo) + (BigInt(hi) << BigInt(32));\n });\n Buffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE(offset) {\n offset = offset >>> 0;\n validateNumber(offset, \"offset\");\n const first = this[offset];\n const last = this[offset + 7];\n\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8);\n }\n\n const hi = first * 2 ** 24 + this[++offset] * 2 ** 16 + this[++offset] * 2 ** 8 + this[++offset];\n const lo = this[++offset] * 2 ** 24 + this[++offset] * 2 ** 16 + this[++offset] * 2 ** 8 + last;\n return (BigInt(hi) << BigInt(32)) + BigInt(lo);\n });\n\n Buffer.prototype.readIntLE = function readIntLE(offset, byteLength, noAssert) {\n offset = offset >>> 0;\n byteLength = byteLength >>> 0;\n if (!noAssert) checkOffset(offset, byteLength, this.length);\n let val = this[offset];\n let mul = 1;\n let i = 0;\n\n while (++i < byteLength && (mul *= 256)) {\n val += this[offset + i] * mul;\n }\n\n mul *= 128;\n if (val >= mul) val -= Math.pow(2, 8 * byteLength);\n return val;\n };\n\n Buffer.prototype.readIntBE = function readIntBE(offset, byteLength, noAssert) {\n offset = offset >>> 0;\n byteLength = byteLength >>> 0;\n if (!noAssert) checkOffset(offset, byteLength, this.length);\n let i = byteLength;\n let mul = 1;\n let val = this[offset + --i];\n\n while (i > 0 && (mul *= 256)) {\n val += this[offset + --i] * mul;\n }\n\n mul *= 128;\n if (val >= mul) val -= Math.pow(2, 8 * byteLength);\n return val;\n };\n\n Buffer.prototype.readInt8 = function readInt8(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 1, this.length);\n if (!(this[offset] & 128)) return this[offset];\n return (255 - this[offset] + 1) * -1;\n };\n\n Buffer.prototype.readInt16LE = function readInt16LE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 2, this.length);\n const val = this[offset] | this[offset + 1] << 8;\n return val & 32768 ? val | 4294901760 : val;\n };\n\n Buffer.prototype.readInt16BE = function readInt16BE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 2, this.length);\n const val = this[offset + 1] | this[offset] << 8;\n return val & 32768 ? val | 4294901760 : val;\n };\n\n Buffer.prototype.readInt32LE = function readInt32LE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 4, this.length);\n return this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16 | this[offset + 3] << 24;\n };\n\n Buffer.prototype.readInt32BE = function readInt32BE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 4, this.length);\n return this[offset] << 24 | this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3];\n };\n\n Buffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE(offset) {\n offset = offset >>> 0;\n validateNumber(offset, \"offset\");\n const first = this[offset];\n const last = this[offset + 7];\n\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8);\n }\n\n const val = this[offset + 4] + this[offset + 5] * 2 ** 8 + this[offset + 6] * 2 ** 16 + (last << 24); // Overflow\n\n return (BigInt(val) << BigInt(32)) + BigInt(first + this[++offset] * 2 ** 8 + this[++offset] * 2 ** 16 + this[++offset] * 2 ** 24);\n });\n Buffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE(offset) {\n offset = offset >>> 0;\n validateNumber(offset, \"offset\");\n const first = this[offset];\n const last = this[offset + 7];\n\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8);\n }\n\n const val = (first << 24) + // Overflow\n this[++offset] * 2 ** 16 + this[++offset] * 2 ** 8 + this[++offset];\n return (BigInt(val) << BigInt(32)) + BigInt(this[++offset] * 2 ** 24 + this[++offset] * 2 ** 16 + this[++offset] * 2 ** 8 + last);\n });\n\n Buffer.prototype.readFloatLE = function readFloatLE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 4, this.length);\n return ieee754.read(this, offset, true, 23, 4);\n };\n\n Buffer.prototype.readFloatBE = function readFloatBE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 4, this.length);\n return ieee754.read(this, offset, false, 23, 4);\n };\n\n Buffer.prototype.readDoubleLE = function readDoubleLE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 8, this.length);\n return ieee754.read(this, offset, true, 52, 8);\n };\n\n Buffer.prototype.readDoubleBE = function readDoubleBE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 8, this.length);\n return ieee754.read(this, offset, false, 52, 8);\n };\n\n function checkInt(buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError(\"\\\"buffer\\\" argument must be a Buffer instance\");\n if (value > max || value < min) throw new RangeError(\"\\\"value\\\" argument is out of bounds\");\n if (offset + ext > buf.length) throw new RangeError(\"Index out of range\");\n }\n\n Buffer.prototype.writeUintLE = Buffer.prototype.writeUIntLE = function writeUIntLE(value, offset, byteLength, noAssert) {\n value = +value;\n offset = offset >>> 0;\n byteLength = byteLength >>> 0;\n\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1;\n checkInt(this, value, offset, byteLength, maxBytes, 0);\n }\n\n let mul = 1;\n let i = 0;\n this[offset] = value & 255;\n\n while (++i < byteLength && (mul *= 256)) {\n this[offset + i] = value / mul & 255;\n }\n\n return offset + byteLength;\n };\n\n Buffer.prototype.writeUintBE = Buffer.prototype.writeUIntBE = function writeUIntBE(value, offset, byteLength, noAssert) {\n value = +value;\n offset = offset >>> 0;\n byteLength = byteLength >>> 0;\n\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1;\n checkInt(this, value, offset, byteLength, maxBytes, 0);\n }\n\n let i = byteLength - 1;\n let mul = 1;\n this[offset + i] = value & 255;\n\n while (--i >= 0 && (mul *= 256)) {\n this[offset + i] = value / mul & 255;\n }\n\n return offset + byteLength;\n };\n\n Buffer.prototype.writeUint8 = Buffer.prototype.writeUInt8 = function writeUInt8(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 1, 255, 0);\n this[offset] = value & 255;\n return offset + 1;\n };\n\n Buffer.prototype.writeUint16LE = Buffer.prototype.writeUInt16LE = function writeUInt16LE(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 2, 65535, 0);\n this[offset] = value & 255;\n this[offset + 1] = value >>> 8;\n return offset + 2;\n };\n\n Buffer.prototype.writeUint16BE = Buffer.prototype.writeUInt16BE = function writeUInt16BE(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 2, 65535, 0);\n this[offset] = value >>> 8;\n this[offset + 1] = value & 255;\n return offset + 2;\n };\n\n Buffer.prototype.writeUint32LE = Buffer.prototype.writeUInt32LE = function writeUInt32LE(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 4, 4294967295, 0);\n this[offset + 3] = value >>> 24;\n this[offset + 2] = value >>> 16;\n this[offset + 1] = value >>> 8;\n this[offset] = value & 255;\n return offset + 4;\n };\n\n Buffer.prototype.writeUint32BE = Buffer.prototype.writeUInt32BE = function writeUInt32BE(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 4, 4294967295, 0);\n this[offset] = value >>> 24;\n this[offset + 1] = value >>> 16;\n this[offset + 2] = value >>> 8;\n this[offset + 3] = value & 255;\n return offset + 4;\n };\n\n function wrtBigUInt64LE(buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7);\n let lo = Number(value & BigInt(4294967295));\n buf[offset++] = lo;\n lo = lo >> 8;\n buf[offset++] = lo;\n lo = lo >> 8;\n buf[offset++] = lo;\n lo = lo >> 8;\n buf[offset++] = lo;\n let hi = Number(value >> BigInt(32) & BigInt(4294967295));\n buf[offset++] = hi;\n hi = hi >> 8;\n buf[offset++] = hi;\n hi = hi >> 8;\n buf[offset++] = hi;\n hi = hi >> 8;\n buf[offset++] = hi;\n return offset;\n }\n\n function wrtBigUInt64BE(buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7);\n let lo = Number(value & BigInt(4294967295));\n buf[offset + 7] = lo;\n lo = lo >> 8;\n buf[offset + 6] = lo;\n lo = lo >> 8;\n buf[offset + 5] = lo;\n lo = lo >> 8;\n buf[offset + 4] = lo;\n let hi = Number(value >> BigInt(32) & BigInt(4294967295));\n buf[offset + 3] = hi;\n hi = hi >> 8;\n buf[offset + 2] = hi;\n hi = hi >> 8;\n buf[offset + 1] = hi;\n hi = hi >> 8;\n buf[offset] = hi;\n return offset + 8;\n }\n\n Buffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE(value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt(\"0xffffffffffffffff\"));\n });\n Buffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE(value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt(\"0xffffffffffffffff\"));\n });\n\n Buffer.prototype.writeIntLE = function writeIntLE(value, offset, byteLength, noAssert) {\n value = +value;\n offset = offset >>> 0;\n\n if (!noAssert) {\n const limit = Math.pow(2, 8 * byteLength - 1);\n checkInt(this, value, offset, byteLength, limit - 1, -limit);\n }\n\n let i = 0;\n let mul = 1;\n let sub = 0;\n this[offset] = value & 255;\n\n while (++i < byteLength && (mul *= 256)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1;\n }\n\n this[offset + i] = (value / mul >> 0) - sub & 255;\n }\n\n return offset + byteLength;\n };\n\n Buffer.prototype.writeIntBE = function writeIntBE(value, offset, byteLength, noAssert) {\n value = +value;\n offset = offset >>> 0;\n\n if (!noAssert) {\n const limit = Math.pow(2, 8 * byteLength - 1);\n checkInt(this, value, offset, byteLength, limit - 1, -limit);\n }\n\n let i = byteLength - 1;\n let mul = 1;\n let sub = 0;\n this[offset + i] = value & 255;\n\n while (--i >= 0 && (mul *= 256)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1;\n }\n\n this[offset + i] = (value / mul >> 0) - sub & 255;\n }\n\n return offset + byteLength;\n };\n\n Buffer.prototype.writeInt8 = function writeInt8(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 1, 127, -128);\n if (value < 0) value = 255 + value + 1;\n this[offset] = value & 255;\n return offset + 1;\n };\n\n Buffer.prototype.writeInt16LE = function writeInt16LE(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 2, 32767, -32768);\n this[offset] = value & 255;\n this[offset + 1] = value >>> 8;\n return offset + 2;\n };\n\n Buffer.prototype.writeInt16BE = function writeInt16BE(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 2, 32767, -32768);\n this[offset] = value >>> 8;\n this[offset + 1] = value & 255;\n return offset + 2;\n };\n\n Buffer.prototype.writeInt32LE = function writeInt32LE(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 4, 2147483647, -2147483648);\n this[offset] = value & 255;\n this[offset + 1] = value >>> 8;\n this[offset + 2] = value >>> 16;\n this[offset + 3] = value >>> 24;\n return offset + 4;\n };\n\n Buffer.prototype.writeInt32BE = function writeInt32BE(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 4, 2147483647, -2147483648);\n if (value < 0) value = 4294967295 + value + 1;\n this[offset] = value >>> 24;\n this[offset + 1] = value >>> 16;\n this[offset + 2] = value >>> 8;\n this[offset + 3] = value & 255;\n return offset + 4;\n };\n\n Buffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE(value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, -BigInt(\"0x8000000000000000\"), BigInt(\"0x7fffffffffffffff\"));\n });\n Buffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE(value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, -BigInt(\"0x8000000000000000\"), BigInt(\"0x7fffffffffffffff\"));\n });\n\n function checkIEEE754(buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError(\"Index out of range\");\n if (offset < 0) throw new RangeError(\"Index out of range\");\n }\n\n function writeFloat(buf, value, offset, littleEndian, noAssert) {\n value = +value;\n offset = offset >>> 0;\n\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4);\n }\n\n ieee754.write(buf, value, offset, littleEndian, 23, 4);\n return offset + 4;\n }\n\n Buffer.prototype.writeFloatLE = function writeFloatLE(value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert);\n };\n\n Buffer.prototype.writeFloatBE = function writeFloatBE(value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert);\n };\n\n function writeDouble(buf, value, offset, littleEndian, noAssert) {\n value = +value;\n offset = offset >>> 0;\n\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8);\n }\n\n ieee754.write(buf, value, offset, littleEndian, 52, 8);\n return offset + 8;\n }\n\n Buffer.prototype.writeDoubleLE = function writeDoubleLE(value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert);\n };\n\n Buffer.prototype.writeDoubleBE = function writeDoubleBE(value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert);\n }; // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\n\n\n Buffer.prototype.copy = function copy(target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError(\"argument should be a Buffer\");\n if (!start) start = 0;\n if (!end && end !== 0) end = this.length;\n if (targetStart >= target.length) targetStart = target.length;\n if (!targetStart) targetStart = 0;\n if (end > 0 && end < start) end = start; // Copy 0 bytes; we're done\n\n if (end === start) return 0;\n if (target.length === 0 || this.length === 0) return 0; // Fatal error conditions\n\n if (targetStart < 0) {\n throw new RangeError(\"targetStart out of bounds\");\n }\n\n if (start < 0 || start >= this.length) throw new RangeError(\"Index out of range\");\n if (end < 0) throw new RangeError(\"sourceEnd out of bounds\"); // Are we oob?\n\n if (end > this.length) end = this.length;\n\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start;\n }\n\n const len = end - start;\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === \"function\") {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end);\n } else {\n Uint8Array.prototype.set.call(target, this.subarray(start, end), targetStart);\n }\n\n return len;\n }; // Usage:\n // buffer.fill(number[, offset[, end]])\n // buffer.fill(buffer[, offset[, end]])\n // buffer.fill(string[, offset[, end]][, encoding])\n\n\n Buffer.prototype.fill = function fill(val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === \"string\") {\n if (typeof start === \"string\") {\n encoding = start;\n start = 0;\n end = this.length;\n } else if (typeof end === \"string\") {\n encoding = end;\n end = this.length;\n }\n\n if (encoding !== undefined && typeof encoding !== \"string\") {\n throw new TypeError(\"encoding must be a string\");\n }\n\n if (typeof encoding === \"string\" && !Buffer.isEncoding(encoding)) {\n throw new TypeError(\"Unknown encoding: \" + encoding);\n }\n\n if (val.length === 1) {\n const code = val.charCodeAt(0);\n\n if (encoding === \"utf8\" && code < 128 || encoding === \"latin1\") {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code;\n }\n }\n } else if (typeof val === \"number\") {\n val = val & 255;\n } else if (typeof val === \"boolean\") {\n val = Number(val);\n } // Invalid ranges are not set to a default, so can range check early.\n\n\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError(\"Out of range index\");\n }\n\n if (end <= start) {\n return this;\n }\n\n start = start >>> 0;\n end = end === undefined ? this.length : end >>> 0;\n if (!val) val = 0;\n let i;\n\n if (typeof val === \"number\") {\n for (i = start; i < end; ++i) {\n this[i] = val;\n }\n } else {\n const bytes = Buffer.isBuffer(val) ? val : Buffer.from(val, encoding);\n const len = bytes.length;\n\n if (len === 0) {\n throw new TypeError(\"The value \\\"\" + val + \"\\\" is invalid for argument \\\"value\\\"\");\n }\n\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len];\n }\n }\n\n return this;\n }; // CUSTOM ERRORS\n // =============\n // Simplified versions from Node, changed for Buffer-only usage\n\n\n const errors = {};\n\n function E(sym, getMessage, Base) {\n errors[sym] = class NodeError extends Base {\n constructor() {\n super();\n Object.defineProperty(this, \"message\", {\n value: getMessage.apply(this, arguments),\n writable: true,\n configurable: true\n }); // Add the error code to the name to include it in the stack trace.\n\n this.name = `${this.name} [${sym}]`; // Access the stack to generate the error message including the error code\n // from the name.\n\n this.stack; // eslint-disable-line no-unused-expressions\n // Reset the name to the actual name.\n\n delete this.name;\n }\n\n get code() {\n return sym;\n }\n\n set code(value) {\n Object.defineProperty(this, \"code\", {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n });\n }\n\n toString() {\n return `${this.name} [${sym}]: ${this.message}`;\n }\n\n };\n }\n\n E(\"ERR_BUFFER_OUT_OF_BOUNDS\", function (name) {\n if (name) {\n return `${name} is outside of buffer bounds`;\n }\n\n return \"Attempt to access memory outside buffer bounds\";\n }, RangeError);\n E(\"ERR_INVALID_ARG_TYPE\", function (name, actual) {\n return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`;\n }, TypeError);\n E(\"ERR_OUT_OF_RANGE\", function (str, range, input) {\n let msg = `The value of \"${str}\" is out of range.`;\n let received = input;\n\n if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n received = addNumericalSeparator(String(input));\n } else if (typeof input === \"bigint\") {\n received = String(input);\n\n if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n received = addNumericalSeparator(received);\n }\n\n received += \"n\";\n }\n\n msg += ` It must be ${range}. Received ${received}`;\n return msg;\n }, RangeError);\n\n function addNumericalSeparator(val) {\n let res = \"\";\n let i = val.length;\n const start = val[0] === \"-\" ? 1 : 0;\n\n for (; i >= start + 4; i -= 3) {\n res = `_${val.slice(i - 3, i)}${res}`;\n }\n\n return `${val.slice(0, i)}${res}`;\n } // CHECK FUNCTIONS\n // ===============\n\n\n function checkBounds(buf, offset, byteLength) {\n validateNumber(offset, \"offset\");\n\n if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n boundsError(offset, buf.length - (byteLength + 1));\n }\n }\n\n function checkIntBI(value, min, max, buf, offset, byteLength) {\n if (value > max || value < min) {\n const n = typeof min === \"bigint\" ? \"n\" : \"\";\n let range;\n\n if (byteLength > 3) {\n if (min === 0 || min === BigInt(0)) {\n range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`;\n } else {\n range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` + `${(byteLength + 1) * 8 - 1}${n}`;\n }\n } else {\n range = `>= ${min}${n} and <= ${max}${n}`;\n }\n\n throw new errors.ERR_OUT_OF_RANGE(\"value\", range, value);\n }\n\n checkBounds(buf, offset, byteLength);\n }\n\n function validateNumber(value, name) {\n if (typeof value !== \"number\") {\n throw new errors.ERR_INVALID_ARG_TYPE(name, \"number\", value);\n }\n }\n\n function boundsError(value, length, type) {\n if (Math.floor(value) !== value) {\n validateNumber(value, type);\n throw new errors.ERR_OUT_OF_RANGE(type || \"offset\", \"an integer\", value);\n }\n\n if (length < 0) {\n throw new errors.ERR_BUFFER_OUT_OF_BOUNDS();\n }\n\n throw new errors.ERR_OUT_OF_RANGE(type || \"offset\", `>= ${type ? 1 : 0} and <= ${length}`, value);\n } // HELPER FUNCTIONS\n // ================\n\n\n const INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g;\n\n function base64clean(str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split(\"=\")[0]; // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n\n str = str.trim().replace(INVALID_BASE64_RE, \"\"); // Node converts strings with length < 2 to ''\n\n if (str.length < 2) return \"\"; // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n\n while (str.length % 4 !== 0) {\n str = str + \"=\";\n }\n\n return str;\n }\n\n function utf8ToBytes(string, units) {\n units = units || Infinity;\n let codePoint;\n const length = string.length;\n let leadSurrogate = null;\n const bytes = [];\n\n for (let i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i); // is surrogate component\n\n if (codePoint > 55295 && codePoint < 57344) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 56319) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(239, 191, 189);\n continue;\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(239, 191, 189);\n continue;\n } // valid lead\n\n\n leadSurrogate = codePoint;\n continue;\n } // 2 leads in a row\n\n\n if (codePoint < 56320) {\n if ((units -= 3) > -1) bytes.push(239, 191, 189);\n leadSurrogate = codePoint;\n continue;\n } // valid surrogate pair\n\n\n codePoint = (leadSurrogate - 55296 << 10 | codePoint - 56320) + 65536;\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(239, 191, 189);\n }\n\n leadSurrogate = null; // encode utf8\n\n if (codePoint < 128) {\n if ((units -= 1) < 0) break;\n bytes.push(codePoint);\n } else if (codePoint < 2048) {\n if ((units -= 2) < 0) break;\n bytes.push(codePoint >> 6 | 192, codePoint & 63 | 128);\n } else if (codePoint < 65536) {\n if ((units -= 3) < 0) break;\n bytes.push(codePoint >> 12 | 224, codePoint >> 6 & 63 | 128, codePoint & 63 | 128);\n } else if (codePoint < 1114112) {\n if ((units -= 4) < 0) break;\n bytes.push(codePoint >> 18 | 240, codePoint >> 12 & 63 | 128, codePoint >> 6 & 63 | 128, codePoint & 63 | 128);\n } else {\n throw new Error(\"Invalid code point\");\n }\n }\n\n return bytes;\n }\n\n function asciiToBytes(str) {\n const byteArray = [];\n\n for (let i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 255);\n }\n\n return byteArray;\n }\n\n function utf16leToBytes(str, units) {\n let c, hi, lo;\n const byteArray = [];\n\n for (let i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break;\n c = str.charCodeAt(i);\n hi = c >> 8;\n lo = c % 256;\n byteArray.push(lo);\n byteArray.push(hi);\n }\n\n return byteArray;\n }\n\n function base64ToBytes(str) {\n return base64.toByteArray(base64clean(str));\n }\n\n function blitBuffer(src, dst, offset, length) {\n let i;\n\n for (i = 0; i < length; ++i) {\n if (i + offset >= dst.length || i >= src.length) break;\n dst[i + offset] = src[i];\n }\n\n return i;\n } // ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n // the `instanceof` check but they should be treated as of that type.\n // See: https://github.com/feross/buffer/issues/166\n\n\n function isInstance(obj, type) {\n return obj instanceof type || obj != null && obj.constructor != null && obj.constructor.name != null && obj.constructor.name === type.name;\n }\n\n function numberIsNaN(obj) {\n // For IE11 support\n return obj !== obj; // eslint-disable-line no-self-compare\n } // Create lookup table for `toString('hex')`\n // See: https://github.com/feross/buffer/issues/219\n\n\n const hexSliceLookupTable = function () {\n const alphabet = \"0123456789abcdef\";\n const table = new Array(256);\n\n for (let i = 0; i < 16; ++i) {\n const i16 = i * 16;\n\n for (let j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j];\n }\n }\n\n return table;\n }(); // Return not function with Error if BigInt not supported\n\n\n function defineBigIntMethod(fn) {\n return typeof BigInt === \"undefined\" ? BufferBigIntNotDefined : fn;\n }\n\n function BufferBigIntNotDefined() {\n throw new Error(\"BigInt not supported\");\n }\n\n return exports$1;\n}\n\nconst exports = dew();\nexports['Buffer']; exports['SlowBuffer']; exports['INSPECT_MAX_BYTES']; exports['kMaxLength'];\n\nvar Buffer = exports.Buffer;\r\nvar INSPECT_MAX_BYTES = exports.INSPECT_MAX_BYTES;\r\nvar kMaxLength = exports.kMaxLength;\n\nexport { Buffer, INSPECT_MAX_BYTES, exports as default, kMaxLength };\n", "import { AllbridgeCoreSdkOptions, NodeRpcUrls, NodeUrlsConfig } from \"../index\";\n\nexport const mainnet: AllbridgeCoreSdkOptions = {\n coreApiUrl: \"https://core.api.allbridgecoreapi.net\",\n coreApiQueryParams: {},\n coreApiHeaders: {},\n jupiterUrl: \"https://quote-api.jup.ag/v6\",\n wormholeMessengerProgramId: \"worm2ZoG2kUd4vFXhvjh93UUH596ayRfgQ2MgjNMTth\",\n solanaLookUpTable: \"2JcBAEVnAwVo4u8d61iqgHPrzZuugur7cVTjWubsVLHj\",\n sorobanNetworkPassphrase: \"Public Global Stellar Network ; September 2015\",\n tronJsonRpc: \"https://api.trongrid.io/jsonrpc\",\n cctpParams: {\n cctpTransmitterProgramId: \"CCTPmbSD7gX1bxKPAmg77w8oFzNFpaQiQUWD43TKaecd\",\n cctpTokenMessengerMinter: \"CCTPiPYPc6AsJuwueEnWgSgucamXDZwBd53dQ11YiKX3\",\n cctpDomains: { ETH: 0, AVA: 1, OPT: 2, ARB: 3, SOL: 5, BAS: 6, POL: 7 },\n },\n cachePoolInfoChainSec: 20,\n};\n\n/**\n * This is default rpc urls for Solana and Tron,<p/> Override and use your own for proper and stable work\n * @Deprecated use {@link nodeRpcUrlsDefault}\n */\nexport const nodeUrlsDefault: NodeUrlsConfig = {\n solanaRpcUrl: \"https://api.mainnet-beta.solana.com\",\n tronRpcUrl: \"https://api.trongrid.io\",\n};\n\n/**\n * This is default rpc urls for Solana and Tron,<p/> Override and use your own for proper and stable work\n */\nexport const nodeRpcUrlsDefault: NodeRpcUrls = {\n SOL: \"https://api.mainnet-beta.solana.com\",\n TRX: \"https://api.trongrid.io\",\n SRB: \"https://rpc.stellar.org:443\",\n STLR: \"https://horizon.stellar.org\",\n};\n", "import { Big } from \"big.js\";\nimport { Chains } from \"../chains\";\nimport { ApiClientImpl } from \"../client/core-api/api-client\";\nimport { ApiClientCaching } from \"../client/core-api/api-client-caching\";\nimport {\n AddressStatus,\n CheckAddressResponse,\n GasBalanceResponse,\n Messenger,\n PendingInfoDTO,\n TransferStatusResponse,\n} from \"../client/core-api/core-api.model\";\nimport { AllbridgeCoreClientImpl } from \"../client/core-api/core-client-base\";\nimport { AllbridgeCoreClientFiltered, AllbridgeCoreClientFilteredImpl } from \"../client/core-api/core-client-filtered\";\nimport { AllbridgeCoreClientPoolInfoCaching } from \"../client/core-api/core-client-pool-info-caching\";\nimport { mainnet } from \"../configs\";\nimport { AllbridgeCoreSdkOptions, BasicChainProperties, NodeRpcUrls, SdkError } from \"../index\";\nimport {\n AmountFormat,\n AmountFormatted,\n AmountsAndGasFeeOptions,\n CCTPDoesNotSupportedError,\n ExtraGasMaxLimitResponse,\n GasFeeOptions,\n GetTokenBalanceParams,\n InsufficientPoolLiquidityError,\n NodeRpcUrlNotInitializedError,\n PendingStatusInfoResponse,\n Provider,\n SendAmountDetails,\n SwapAndBridgeCalculationData,\n} from \"../models\";\nimport { ChainDetailsMap, PoolInfo, PoolKeyObject, TokenWithChainDetails } from \"../tokens-info\";\nimport {\n aprInPercents,\n convertAmountPrecision,\n convertFloatAmountToInt,\n convertIntAmountToFloat,\n fromSystemPrecision,\n getFeePercent,\n getSwapFromVUsdPoolInfo,\n swapFromVUsd,\n swapFromVUsdReverse,\n swapToVUsd,\n swapToVUsdReverse,\n} from \"../utils/calculation\";\nimport { SYSTEM_PRECISION } from \"../utils/calculation/constants\";\nimport { getSendAmountDetails } from \"../utils/calculation/swap-and-bridge-details\";\nimport {\n swapAndBridgeFeeCalculation,\n swapAndBridgeFeeCalculationReverse,\n} from \"../utils/calculation/swap-and-bridge-fee-calc\";\nimport { getPoolInfoByToken, validateAmountDecimals, validateAmountGtZero } from \"../utils/utils\";\nimport { BridgeService, DefaultBridgeService } from \"./bridge\";\nimport { GetNativeTokenBalanceParams } from \"./bridge/models\";\nimport { getExtraGasMaxLimits, getGasFeeOptions } from \"./bridge/utils\";\nimport { DefaultLiquidityPoolService, LiquidityPoolService } from \"./liquidity-pool\";\nimport { DefaultTokenService, TokenService } from \"./token\";\n\nexport class NodeRpcUrlsConfig {\n constructor(private nodeRpcUrls: NodeRpcUrls) {}\n\n getNodeRpcUrl(chainSymbol: string): string {\n const nodeRpcUrl = this.nodeRpcUrls[chainSymbol];\n if (nodeRpcUrl !== undefined) {\n return nodeRpcUrl;\n } else {\n throw new NodeRpcUrlNotInitializedError(chainSymbol);\n }\n }\n}\n\nexport class AllbridgeCoreSdkService {\n private readonly api: AllbridgeCoreClientFiltered;\n\n private readonly tokenService: TokenService;\n\n readonly params: AllbridgeCoreSdkOptions;\n\n bridge: BridgeService;\n pool: LiquidityPoolService;\n\n constructor(nodeRpcUrlsConfig: NodeRpcUrlsConfig, params: AllbridgeCoreSdkOptions = mainnet) {\n Chains.addChainsProperties(params.additionalChainsProperties as Record<string, BasicChainProperties>);\n const apiClient = new ApiClientImpl(params);\n const apiClientCaching = new ApiClientCaching(apiClient);\n const coreClient = new AllbridgeCoreClientImpl(apiClientCaching);\n const coreClientPoolInfoCaching = new AllbridgeCoreClientPoolInfoCaching(coreClient);\n this.api = new AllbridgeCoreClientFilteredImpl(coreClientPoolInfoCaching, params);\n this.tokenService = new DefaultTokenService(this.api, nodeRpcUrlsConfig, params);\n this.bridge = new DefaultBridgeService(this.api, nodeRpcUrlsConfig, params, this.tokenService);\n this.pool = new DefaultLiquidityPoolService(this.api, nodeRpcUrlsConfig, params, this.tokenService);\n this.params = params;\n }\n\n async chainDetailsMap(type: \"swap\" | \"pool\"): Promise<ChainDetailsMap> {\n return this.api.getChainDetailsMap(type);\n }\n\n async tokens(type: \"swap\" | \"pool\"): Promise<TokenWithChainDetails[]> {\n return this.api.tokens(type);\n }\n\n async tokensByChain(chainSymbol: string, type: \"swap\" | \"pool\"): Promise<TokenWithChainDetails[]> {\n const map = await this.api.getChainDetailsMap(type);\n const chainDetails = map[chainSymbol];\n if (!chainDetails) {\n return [];\n }\n return chainDetails.tokens;\n }\n\n async getTransferStatus(chainSymbol: string, txId: string): Promise<TransferStatusResponse> {\n return this.api.getTransferStatus(chainSymbol, txId);\n }\n\n async getGasBalance(chainSymbol: string, address: string): Promise<GasBalanceResponse> {\n return this.api.getGasBalance(chainSymbol, address);\n }\n\n async checkAddress(): Promise<CheckAddressResponse> {\n return new Promise((resolve) => {\n resolve({\n status: AddressStatus.OK,\n gasBalance: null,\n });\n });\n }\n\n async getPendingStatusInfo(\n amount: string,\n amountFormat: AmountFormat,\n sourceToken: TokenWithChainDetails,\n destToken: TokenWithChainDetails\n ): Promise<PendingStatusInfoResponse> {\n validateAmountGtZero(amount);\n let amountInTokenPrecision;\n if (amountFormat == AmountFormat.FLOAT) {\n validateAmountDecimals(\"amount\", amount, sourceToken.decimals);\n amountInTokenPrecision = convertFloatAmountToInt(amount, sourceToken.decimals).toFixed();\n } else {\n amountInTokenPrecision = amount;\n }\n\n const vUsdAmountInt = swapToVUsd(\n amountInTokenPrecision,\n sourceToken,\n await getPoolInfoByToken(this.api, sourceToken)\n );\n const destPoolInfo = await getPoolInfoByToken(this.api, destToken);\n const amountResultIntFormatted: AmountFormatted = this.getAmountFromVUsdFormatted(\n vUsdAmountInt,\n destToken,\n destPoolInfo\n );\n\n let pendingInfoDTO: PendingInfoDTO | undefined;\n const pendingInfo = await this.api.getPendingInfo();\n for (const tokenAddress in pendingInfo[destToken.chainSymbol]) {\n const info = pendingInfo[destToken.chainSymbol];\n if (!info) {\n throw new SdkError(\"Cannot find pending info for \" + destToken.chainSymbol);\n }\n pendingInfoDTO = info[tokenAddress];\n }\n if (pendingInfoDTO) {\n const destPoolAfterPending = getSwapFromVUsdPoolInfo(pendingInfoDTO.totalSentAmount, destPoolInfo);\n const amountResultIntAfterPendingFormatted: AmountFormatted = this.getAmountFromVUsdFormatted(\n vUsdAmountInt,\n destToken,\n destPoolAfterPending\n );\n\n let estimatedAmount: { min: AmountFormatted; max: AmountFormatted };\n if (Big(amountResultIntAfterPendingFormatted.int).gt(amountResultIntFormatted.int)) {\n estimatedAmount = { min: amountResultIntFormatted, max: amountResultIntAfterPendingFormatted };\n } else {\n estimatedAmount = { min: amountResultIntAfterPendingFormatted, max: amountResultIntFormatted };\n }\n\n return {\n pendingTxs: pendingInfoDTO.pendingTxs,\n pendingAmount: {\n [AmountFormat.INT]: convertAmountPrecision(\n pendingInfoDTO.totalSentAmount,\n SYSTEM_PRECISION,\n destToken.decimals\n ).toFixed(0),\n [AmountFormat.FLOAT]: convertIntAmountToFloat(pendingInfoDTO.totalSentAmount, SYSTEM_PRECISION).toFixed(),\n },\n estimatedAmount,\n };\n }\n return {\n pendingTxs: 0,\n pendingAmount: {\n [AmountFormat.INT]: \"0\",\n [AmountFormat.FLOAT]: \"0\",\n },\n estimatedAmount: {\n min: amountResultIntFormatted,\n max: amountResultIntFormatted,\n },\n };\n }\n\n async getTokenBalance(params: GetTokenBalanceParams, provider?: Provider): Promise<string> {\n return this.tokenService.getTokenBalance(params, provider);\n }\n\n async getNativeTokenBalance(params: GetNativeTokenBalanceParams, provider?: Provider): Promise<AmountFormatted> {\n return this.tokenService.getNativeTokenBalance(params, provider);\n }\n\n async calculateFeePercentOnSourceChain(\n amountFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails\n ): Promise<number> {\n validateAmountGtZero(amountFloat);\n validateAmountDecimals(\"amountFloat\", amountFloat, sourceChainToken.decimals);\n const amountInt = convertFloatAmountToInt(amountFloat, sourceChainToken.decimals);\n if (amountInt.eq(0)) {\n return 0;\n }\n const vUsdInSystemPrecision = swapToVUsd(\n amountInt,\n sourceChainToken,\n await getPoolInfoByToken(this.api, sourceChainToken)\n );\n const vUsdInSourcePrecision = fromSystemPrecision(vUsdInSystemPrecision, sourceChainToken.decimals);\n return getFeePercent(amountInt, vUsdInSourcePrecision);\n }\n\n async calculateFeePercentOnDestinationChain(\n amountFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails\n ): Promise<number> {\n validateAmountGtZero(amountFloat);\n validateAmountDecimals(\"amountFloat\", amountFloat, sourceChainToken.decimals);\n const amountInt = convertFloatAmountToInt(amountFloat, sourceChainToken.decimals);\n if (amountInt.eq(0)) {\n return 0;\n }\n const vUsdInSystemPrecision = swapToVUsd(\n amountInt,\n sourceChainToken,\n await getPoolInfoByToken(this.api, sourceChainToken)\n );\n const usd = swapFromVUsd(\n vUsdInSystemPrecision,\n destinationChainToken,\n await getPoolInfoByToken(this.api, destinationChainToken)\n );\n const vUsdInDestinationPrecision = fromSystemPrecision(vUsdInSystemPrecision, destinationChainToken.decimals);\n return getFeePercent(vUsdInDestinationPrecision, usd);\n }\n\n async getAmountToBeReceivedAndGasFeeOptions(\n amountToSendFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger: Messenger\n ): Promise<AmountsAndGasFeeOptions> {\n validateAmountGtZero(amountToSendFloat);\n validateAmountDecimals(\"amountToSendFloat\", amountToSendFloat, sourceChainToken.decimals);\n return {\n amountToSendFloat: Big(amountToSendFloat).toFixed(),\n amountToBeReceivedFloat: await this.getAmountToBeReceived(\n amountToSendFloat,\n sourceChainToken,\n destinationChainToken,\n messenger\n ),\n gasFeeOptions: await this.getGasFeeOptions(sourceChainToken, destinationChainToken, messenger),\n };\n }\n\n async getAmountToSendAndGasFeeOptions(\n amountToBeReceivedFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger: Messenger\n ): Promise<AmountsAndGasFeeOptions> {\n validateAmountGtZero(amountToBeReceivedFloat);\n validateAmountDecimals(\"amountToBeReceivedFloat\", amountToBeReceivedFloat, destinationChainToken.decimals);\n return {\n amountToSendFloat: await this.getAmountToSend(\n amountToBeReceivedFloat,\n sourceChainToken,\n destinationChainToken,\n messenger\n ),\n amountToBeReceivedFloat: Big(amountToBeReceivedFloat).toFixed(),\n gasFeeOptions: await this.getGasFeeOptions(sourceChainToken, destinationChainToken, messenger),\n };\n }\n\n async getAmountToBeReceived(\n amountToSendFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger?: Messenger\n ): Promise<string> {\n const sourcePool: PoolInfo = await getPoolInfoByToken(this.api, sourceChainToken);\n const destPool: PoolInfo = await getPoolInfoByToken(this.api, destinationChainToken);\n return this.getAmountToBeReceivedFromPools(\n amountToSendFloat,\n sourceChainToken,\n destinationChainToken,\n sourcePool,\n destPool,\n messenger\n );\n }\n\n async getAmountToBeReceivedFromChain(\n amountToSendFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger?: Messenger,\n sourceProvider?: Provider,\n destinationProvider?: Provider\n ): Promise<string> {\n const sourcePool: PoolInfo = await this.pool.getPoolInfoFromChain(sourceChainToken, sourceProvider);\n const destPool: PoolInfo = await this.pool.getPoolInfoFromChain(destinationChainToken, destinationProvider);\n return this.getAmountToBeReceivedFromPools(\n amountToSendFloat,\n sourceChainToken,\n destinationChainToken,\n sourcePool,\n destPool,\n messenger\n );\n }\n\n getAmountToBeReceivedFromPools(\n amountToSendFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n sourcePool: PoolInfo,\n destinationPool: PoolInfo,\n messenger?: Messenger\n ): string {\n validateAmountGtZero(amountToSendFloat);\n validateAmountDecimals(\"amountToSendFloat\", amountToSendFloat, sourceChainToken.decimals);\n const amountToSend = convertFloatAmountToInt(amountToSendFloat, sourceChainToken.decimals);\n\n if (messenger && messenger == Messenger.CCTP) {\n if (!sourceChainToken.cctpAddress || !destinationChainToken.cctpAddress || !sourceChainToken.cctpFeeShare) {\n throw new CCTPDoesNotSupportedError(\"Such route does not support CCTP protocol\");\n }\n const result = amountToSend.mul(Big(1).minus(sourceChainToken.cctpFeeShare)).round(0, Big.roundUp);\n const resultInDestPrecision = convertAmountPrecision(\n result,\n sourceChainToken.decimals,\n destinationChainToken.decimals\n ).round(0);\n return convertIntAmountToFloat(resultInDestPrecision, destinationChainToken.decimals).toFixed();\n }\n\n const vUsd = swapToVUsd(amountToSend, sourceChainToken, sourcePool);\n return this.getAmountFromVUsdFormatted(vUsd, destinationChainToken, destinationPool).float;\n }\n\n async getAmountToSend(\n amountToBeReceivedFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger?: Messenger\n ): Promise<string> {\n const sourcePool: PoolInfo = await getPoolInfoByToken(this.api, sourceChainToken);\n const destPool: PoolInfo = await getPoolInfoByToken(this.api, destinationChainToken);\n return this.getAmountToSendFromPools(\n amountToBeReceivedFloat,\n sourceChainToken,\n destinationChainToken,\n sourcePool,\n destPool,\n messenger\n );\n }\n\n async getAmountToSendFromChain(\n amountToBeReceivedFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger?: Messenger,\n sourceProvider?: Provider,\n destinationProvider?: Provider\n ): Promise<string> {\n const sourcePool: PoolInfo = await this.pool.getPoolInfoFromChain(sourceChainToken, sourceProvider);\n const destPool: PoolInfo = await this.pool.getPoolInfoFromChain(destinationChainToken, destinationProvider);\n return this.getAmountToSendFromPools(\n amountToBeReceivedFloat,\n sourceChainToken,\n destinationChainToken,\n sourcePool,\n destPool,\n messenger\n );\n }\n\n getAmountToSendFromPools(\n amountToBeReceivedFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n sourcePool: PoolInfo,\n destinationPool: PoolInfo,\n messenger?: Messenger\n ): string {\n validateAmountGtZero(amountToBeReceivedFloat);\n validateAmountDecimals(\"amountToBeReceivedFloat\", amountToBeReceivedFloat, destinationChainToken.decimals);\n const amountToBeReceived = convertFloatAmountToInt(amountToBeReceivedFloat, destinationChainToken.decimals);\n\n if (messenger && messenger == Messenger.CCTP) {\n if (!sourceChainToken.cctpAddress || !destinationChainToken.cctpAddress || !sourceChainToken.cctpFeeShare) {\n throw new CCTPDoesNotSupportedError(\"Such route does not support CCTP protocol\");\n }\n const result = amountToBeReceived.div(Big(1).minus(sourceChainToken.cctpFeeShare)).round(0, Big.roundDown);\n const resultInSourcePrecision = convertAmountPrecision(\n result,\n destinationChainToken.decimals,\n sourceChainToken.decimals\n ).round(0);\n return convertIntAmountToFloat(resultInSourcePrecision, sourceChainToken.decimals).toFixed();\n }\n\n const vUsd = swapFromVUsdReverse(amountToBeReceived, destinationChainToken, destinationPool);\n const resultInt = swapToVUsdReverse(vUsd, sourceChainToken, sourcePool);\n if (Big(resultInt).lte(0)) {\n throw new InsufficientPoolLiquidityError();\n }\n return convertIntAmountToFloat(resultInt, sourceChainToken.decimals).toFixed();\n }\n\n async getGasFeeOptions(\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger: Messenger\n ): Promise<GasFeeOptions> {\n return getGasFeeOptions(\n sourceChainToken.allbridgeChainId,\n sourceChainToken.chainType,\n destinationChainToken.allbridgeChainId,\n sourceChainToken.decimals,\n messenger,\n this.api\n );\n }\n\n getAverageTransferTime(\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger: Messenger\n ): number | null {\n return (\n /* eslint-disable-next-line @typescript-eslint/no-unnecessary-condition */\n sourceChainToken.transferTime?.[destinationChainToken.chainSymbol]?.[messenger] ?? null\n );\n }\n\n async getPoolInfoByToken(token: TokenWithChainDetails): Promise<PoolInfo> {\n return await this.api.getPoolInfoByKey({ chainSymbol: token.chainSymbol, poolAddress: token.poolAddress });\n }\n\n async refreshPoolInfo(tokens?: TokenWithChainDetails | TokenWithChainDetails[]): Promise<void> {\n if (tokens) {\n const tokensArray = tokens instanceof Array ? tokens : [tokens];\n const poolKeys: PoolKeyObject[] = tokensArray.map((t) => {\n return { chainSymbol: t.chainSymbol, poolAddress: t.poolAddress };\n });\n return this.api.refreshPoolInfo(poolKeys);\n }\n return this.api.refreshPoolInfo();\n }\n\n aprInPercents(apr: string): string {\n return aprInPercents(apr);\n }\n\n async getExtraGasMaxLimits(\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails\n ): Promise<ExtraGasMaxLimitResponse> {\n return await getExtraGasMaxLimits(sourceChainToken, destinationChainToken, this.api);\n }\n\n async getVUsdFromAmount(\n amount: string,\n amountFormat: AmountFormat,\n sourceToken: TokenWithChainDetails\n ): Promise<AmountFormatted> {\n validateAmountGtZero(amount);\n let amountInTokenPrecision;\n if (amountFormat == AmountFormat.FLOAT) {\n validateAmountDecimals(\"amount\", amount, sourceToken.decimals);\n amountInTokenPrecision = convertFloatAmountToInt(amount, sourceToken.decimals).toFixed();\n } else {\n amountInTokenPrecision = amount;\n }\n\n const vUsdAmount = swapToVUsd(amountInTokenPrecision, sourceToken, await getPoolInfoByToken(this.api, sourceToken));\n return {\n [AmountFormat.INT]: vUsdAmount,\n [AmountFormat.FLOAT]: convertIntAmountToFloat(vUsdAmount, SYSTEM_PRECISION).toFixed(),\n };\n }\n\n async getAmountFromVUsd(vUsdAmount: string, destToken: TokenWithChainDetails): Promise<AmountFormatted> {\n return this.getAmountFromVUsdFormatted(vUsdAmount, destToken, await getPoolInfoByToken(this.api, destToken));\n }\n\n private getAmountFromVUsdFormatted(\n vUsdAmountInt: string,\n destToken: TokenWithChainDetails,\n destPoolInfo: Pick<PoolInfo, \"vUsdBalance\" | \"aValue\" | \"dValue\" | \"tokenBalance\">\n ): AmountFormatted {\n validateAmountGtZero(vUsdAmountInt);\n const amountResultInt = swapFromVUsd(vUsdAmountInt, destToken, destPoolInfo);\n if (Big(amountResultInt).lt(0)) {\n throw new InsufficientPoolLiquidityError();\n }\n return {\n [AmountFormat.INT]: amountResultInt,\n [AmountFormat.FLOAT]: convertIntAmountToFloat(amountResultInt, destToken.decimals).toFixed(),\n };\n }\n\n async swapAndBridgeFeeCalculation(\n amountInTokenPrecision: string,\n sourceToken: TokenWithChainDetails,\n destToken: TokenWithChainDetails\n ): Promise<SwapAndBridgeCalculationData> {\n return swapAndBridgeFeeCalculation(\n amountInTokenPrecision,\n {\n decimals: sourceToken.decimals,\n feeShare: sourceToken.feeShare,\n poolInfo: await getPoolInfoByToken(this.api, sourceToken),\n },\n {\n decimals: destToken.decimals,\n feeShare: destToken.feeShare,\n poolInfo: await getPoolInfoByToken(this.api, destToken),\n }\n );\n }\n\n async swapAndBridgeFeeCalculationReverse(\n amountInTokenPrecision: string,\n sourceToken: TokenWithChainDetails,\n destToken: TokenWithChainDetails\n ): Promise<SwapAndBridgeCalculationData> {\n const result = swapAndBridgeFeeCalculationReverse(\n amountInTokenPrecision,\n {\n decimals: sourceToken.decimals,\n feeShare: sourceToken.feeShare,\n poolInfo: await getPoolInfoByToken(this.api, sourceToken),\n },\n {\n decimals: destToken.decimals,\n feeShare: destToken.feeShare,\n poolInfo: await getPoolInfoByToken(this.api, destToken),\n }\n );\n const newAmount = result.swapFromVUsdCalcResult.amountIncludingCommissionInTokenPrecision;\n if (Big(newAmount).lt(0)) {\n throw new InsufficientPoolLiquidityError();\n }\n return result;\n }\n\n async getSendAmountDetails(\n amount: string,\n amountFormat: AmountFormat,\n sourceToken: TokenWithChainDetails,\n destToken: TokenWithChainDetails\n ): Promise<SendAmountDetails> {\n validateAmountGtZero(amount);\n let amountInTokenPrecision;\n if (amountFormat == AmountFormat.FLOAT) {\n validateAmountDecimals(\"amount\", amount, sourceToken.decimals);\n amountInTokenPrecision = convertFloatAmountToInt(amount, sourceToken.decimals).toFixed();\n } else {\n amountInTokenPrecision = amount;\n }\n\n return getSendAmountDetails(\n amountInTokenPrecision,\n sourceToken,\n await getPoolInfoByToken(this.api, sourceToken),\n destToken,\n await getPoolInfoByToken(this.api, destToken)\n );\n }\n}\n", "export abstract class SdkRootError extends Error {\n public errorCode: ErrorCode;\n\n protected constructor(code: ErrorCode, message?: string) {\n super(message);\n this.errorCode = code;\n }\n}\n\nexport class SdkError extends SdkRootError {\n constructor(message?: string) {\n super(ErrorCode.SDK_ERROR, message);\n }\n}\n\nexport class InvalidAmountError extends SdkRootError {\n constructor(message?: string) {\n super(ErrorCode.INVALID_AMOUNT_ERROR, message);\n }\n}\n\nexport class AmountNotEnoughError extends SdkRootError {\n constructor(message?: string) {\n super(ErrorCode.AMOUNT_NOT_ENOUGH_ERROR, message);\n }\n}\n\nexport class InsufficientPoolLiquidityError extends SdkRootError {\n constructor(message?: string) {\n super(ErrorCode.INSUFFICIENT_POOL_LIQUIDITY_ERROR, message);\n }\n}\n\nexport class JupiterError extends SdkRootError {\n constructor(message?: string) {\n super(ErrorCode.JUPITER_ERROR, message);\n }\n}\n\nexport class InvalidGasFeePaymentOptionError extends SdkRootError {\n constructor(message?: string) {\n super(ErrorCode.INVALID_GAS_FEE_PAYMENT_OPTION_ERROR, message);\n }\n}\n\nexport class InvalidMessengerOptionError extends SdkRootError {\n constructor(message?: string) {\n super(ErrorCode.INVALID_MESSENGER_OPTION_ERROR, message);\n }\n}\n\nexport class MethodNotSupportedError extends SdkRootError {\n constructor(message?: string) {\n super(ErrorCode.METHOD_NOT_SUPPORTED_ERROR, message);\n }\n}\n\nexport class VerifyTxError extends SdkRootError {\n constructor(message?: string) {\n super(ErrorCode.VERIFY_TX_ERROR, message);\n }\n}\n\nexport class InvalidTxError extends SdkRootError {\n constructor(message?: string) {\n super(ErrorCode.INVALID_TX_ERROR, message);\n }\n}\n\nexport class ExtraGasMaxLimitExceededError extends SdkRootError {\n constructor(message?: string) {\n super(ErrorCode.EXTRA_GAS_MAX_LIMIT_EXCEEDED_ERROR, message);\n }\n}\n\nexport class ArgumentInvalidDecimalsError extends SdkRootError {\n constructor(argName: string, decimalsIs: number, decimalsRequired: number) {\n super(\n ErrorCode.ARGUMENT_INVALID_DECIMALS_ERROR,\n `Argument '${argName}' decimals '${decimalsIs}' cannot be greater than '${decimalsRequired}'`\n );\n }\n}\n\nexport class TimeoutError extends SdkRootError {\n constructor(message?: string) {\n super(ErrorCode.TIMEOUT_ERROR, message);\n }\n}\n\nexport class NodeRpcUrlNotInitializedError extends SdkRootError {\n constructor(chainSymbol: string) {\n super(ErrorCode.NODE_RPC_URL_NOT_INITIALIZED_ERROR, `For chain '${chainSymbol}' Node RPC URL not initialized`);\n }\n}\n\nexport class CCTPDoesNotSupportedError extends SdkRootError {\n constructor(message?: string) {\n super(ErrorCode.CCTP_DOES_NOT_SUPPORTED_ERROR, message);\n }\n}\n\nexport class TxTooLargeError extends SdkRootError {\n constructor() {\n super(\n ErrorCode.TX_TOO_LARGE,\n \"Transaction too large: try again later or switch to another messenger or pay relayer fee in native gas currency\"\n );\n }\n}\n\nexport enum ErrorCode {\n SDK_ERROR = \"SdkError\",\n INVALID_AMOUNT_ERROR = \"InvalidAmountError\",\n AMOUNT_NOT_ENOUGH_ERROR = \"AmountNotEnoughError\",\n INSUFFICIENT_POOL_LIQUIDITY_ERROR = \"InsufficientPoolLiquidityError\",\n JUPITER_ERROR = \"JupiterError\",\n INVALID_GAS_FEE_PAYMENT_OPTION_ERROR = \"InvalidGasFeePaymentOptionError\",\n INVALID_MESSENGER_OPTION_ERROR = \"InvalidMessengerOptionError\",\n METHOD_NOT_SUPPORTED_ERROR = \"MethodNotSupportedError\",\n VERIFY_TX_ERROR = \"VerifyTxError\",\n INVALID_TX_ERROR = \"InvalidTxError\",\n EXTRA_GAS_MAX_LIMIT_EXCEEDED_ERROR = \"ExtraGasMaxLimitExceededError\",\n ARGUMENT_INVALID_DECIMALS_ERROR = \"ArgumentInvalidDecimalsError\",\n TIMEOUT_ERROR = \"TimeoutError\",\n NODE_RPC_URL_NOT_INITIALIZED_ERROR = \"NodeRpcUrlNotInitializedError\",\n CCTP_DOES_NOT_SUPPORTED_ERROR = \"CCTPDoesNotSupportedError\",\n TX_TOO_LARGE = \"TxTooLargeError\",\n}\n", "export enum ChainSymbol {\n /**\n * The BNB Smart Chain main network.\n */\n BSC = \"BSC\",\n\n /**\n * The Ethereum main network.\n */\n ETH = \"ETH\",\n\n /**\n * The Base main network.\n */\n BAS = \"BAS\",\n\n /**\n * The Solana network.\n */\n SOL = \"SOL\",\n\n /**\n * The TRON network.\n */\n TRX = \"TRX\",\n\n /**\n * The Polygon network.\n */\n POL = \"POL\",\n\n /**\n * The Arbitrum network.\n */\n ARB = \"ARB\",\n\n /**\n * The Celo network.\n */\n CEL = \"CEL\",\n\n /**\n * The Avalanche main network.\n */\n AVA = \"AVA\",\n\n /**\n * The Soroban network.\n */\n SRB = \"SRB\",\n\n /**\n * The Stellar network.\n */\n STLR = \"STLR\",\n\n /**\n * The OP Mainnet network.\n */\n OPT = \"OPT\",\n}\n\nexport enum ChainType {\n EVM = \"EVM\",\n SOLANA = \"SOLANA\",\n TRX = \"TRX\",\n SRB = \"SRB\",\n}\n", "import { SdkError } from \"../exceptions\";\nimport { ChainSymbol, ChainType } from \"./chain.enums\";\nimport { BasicChainProperties } from \"./models\";\n\n/**\n * Native gas tokens decimals by ChainType\n */\nconst chainDecimalsByType: Record<ChainType, number> = {\n EVM: 18,\n SOLANA: 9,\n TRX: 6,\n SRB: 7,\n};\n\nconst defaultProperties: Record<string, BasicChainProperties> = {\n [ChainSymbol.BSC]: {\n chainSymbol: ChainSymbol.BSC,\n chainId: \"0x38\",\n name: \"BNB Chain\",\n chainType: ChainType.EVM,\n },\n [ChainSymbol.ETH]: {\n chainSymbol: ChainSymbol.ETH,\n chainId: \"0x1\",\n name: \"Ethereum\",\n chainType: ChainType.EVM,\n },\n [ChainSymbol.BAS]: {\n chainSymbol: ChainSymbol.BAS,\n chainId: \"0x2105\",\n name: \"Base\",\n chainType: ChainType.EVM,\n },\n [ChainSymbol.ARB]: {\n chainSymbol: ChainSymbol.ARB,\n chainId: \"0xa4b1\",\n name: \"Arbitrum\",\n chainType: ChainType.EVM,\n },\n [ChainSymbol.AVA]: {\n chainSymbol: ChainSymbol.AVA,\n chainId: \"0xa86a\",\n name: \"Avalanche\",\n chainType: ChainType.EVM,\n },\n [ChainSymbol.CEL]: {\n chainSymbol: ChainSymbol.CEL,\n chainId: \"0xa4ec\",\n name: \"Celo\",\n chainType: ChainType.EVM,\n },\n [ChainSymbol.POL]: {\n chainSymbol: ChainSymbol.POL,\n chainId: \"0x89\",\n name: \"Polygon\",\n chainType: ChainType.EVM,\n },\n [ChainSymbol.OPT]: {\n chainSymbol: ChainSymbol.OPT,\n chainId: \"0xa\",\n name: \"OP Mainnet\",\n chainType: ChainType.EVM,\n },\n [ChainSymbol.SOL]: {\n chainSymbol: ChainSymbol.SOL,\n name: \"Solana\",\n chainType: ChainType.SOLANA,\n },\n [ChainSymbol.TRX]: {\n chainSymbol: ChainSymbol.TRX,\n name: \"Tron\",\n chainType: ChainType.TRX,\n },\n [ChainSymbol.SRB]: {\n chainSymbol: ChainSymbol.SRB,\n name: \"Stellar\",\n chainType: ChainType.SRB,\n },\n [ChainSymbol.STLR]: {\n chainSymbol: ChainSymbol.STLR,\n name: \"Stellar\",\n chainType: ChainType.SRB,\n },\n};\n\nexport const Chains = (() => {\n let chainProperties: Record<string, BasicChainProperties> = { ...defaultProperties };\n\n return {\n addChainsProperties(additionalProperties?: Record<string, BasicChainProperties>) {\n chainProperties = { ...chainProperties, ...additionalProperties };\n },\n\n getChainProperty(chainSymbol: string): BasicChainProperties {\n const property = chainProperties[chainSymbol];\n if (!property) {\n throw new SdkError(`Cannot find chain properties for ${chainSymbol}`);\n }\n return property;\n },\n\n getChainsProperties(): Record<string, BasicChainProperties> {\n return chainProperties;\n },\n\n getChainDecimalsByType(chainType: ChainType): number {\n return chainDecimalsByType[chainType];\n },\n };\n})();\n", "import axios, { Axios } from \"axios\";\nimport { ChainDetailsMapWithFlags, PoolInfoMap, PoolKeyObject } from \"../../tokens-info\";\nimport { VERSION } from \"../../version\";\nimport {\n mapChainDetailsResponseToChainDetailsMap,\n mapChainDetailsResponseToPoolInfoMap,\n mapPoolInfoResponseToPoolInfoMap,\n} from \"./core-api-mapper\";\nimport {\n ChainDetailsResponse,\n GasBalanceResponse,\n PendingInfoResponse,\n PoolInfoResponse,\n ReceiveTransactionCostRequest,\n ReceiveTransactionCostResponse,\n TransferStatusResponse,\n} from \"./core-api.model\";\nimport { AllbridgeCoreClientParams } from \"./core-client-base\";\n\nexport interface TokenInfo {\n chainDetailsMap: ChainDetailsMapWithFlags;\n poolInfoMap: PoolInfoMap;\n}\n\nexport interface ApiClient {\n getTokenInfo(): Promise<TokenInfo>;\n\n getPendingInfo(): Promise<PendingInfoResponse>;\n\n getGasBalance(chainSymbol: string, address: string): Promise<GasBalanceResponse>;\n\n getTransferStatus(chainSymbol: string, txId: string): Promise<TransferStatusResponse>;\n\n getReceiveTransactionCost(args: ReceiveTransactionCostRequest): Promise<ReceiveTransactionCostResponse>;\n\n getPoolInfoMap(pools: PoolKeyObject[] | PoolKeyObject): Promise<PoolInfoMap>;\n}\n\nexport class ApiClientImpl implements ApiClient {\n private api: Axios;\n\n constructor(params: AllbridgeCoreClientParams) {\n this.api = axios.create({\n baseURL: params.coreApiUrl,\n headers: {\n Accept: \"application/json\",\n ...params.coreApiHeaders,\n \"x-Sdk-Agent\": \"AllbridgeCoreSDK/\" + VERSION,\n },\n params: params.coreApiQueryParams,\n });\n }\n\n async getTokenInfo(): Promise<TokenInfo> {\n const { data } = await this.api.get<ChainDetailsResponse>(\"/token-info\", { params: { filter: \"all\" } });\n return {\n chainDetailsMap: mapChainDetailsResponseToChainDetailsMap(data),\n poolInfoMap: mapChainDetailsResponseToPoolInfoMap(data),\n };\n }\n\n async getPendingInfo(): Promise<PendingInfoResponse> {\n const { data } = await this.api.get<PendingInfoResponse>(\"/pending-info\");\n return data;\n }\n\n async getGasBalance(chainSymbol: string, address: string): Promise<GasBalanceResponse> {\n const { data } = await this.api.get<GasBalanceResponse>(`/check/${chainSymbol}/${address}`);\n return data;\n }\n\n async getTransferStatus(chainSymbol: string, txId: string): Promise<TransferStatusResponse> {\n const { data } = await this.api.get<TransferStatusResponse>(`/chain/${chainSymbol}/${txId}`);\n return data;\n }\n\n async getReceiveTransactionCost(args: ReceiveTransactionCostRequest): Promise<ReceiveTransactionCostResponse> {\n const { data } = await this.api.post<ReceiveTransactionCostResponse>(\"/receive-fee\", args, {\n headers: {\n \"Content-Type\": \"application/json\",\n },\n });\n return {\n exchangeRate: data.exchangeRate,\n fee: data.fee,\n sourceNativeTokenPrice: data.sourceNativeTokenPrice,\n };\n }\n\n async getPoolInfoMap(pools: PoolKeyObject[] | PoolKeyObject): Promise<PoolInfoMap> {\n const poolKeys = pools instanceof Array ? pools : [pools];\n const { data } = await this.api.post<PoolInfoResponse>(\n \"/pool-info\",\n { pools: poolKeys },\n {\n headers: {\n \"Content-Type\": \"application/json\",\n },\n }\n );\n return mapPoolInfoResponseToPoolInfoMap(data);\n }\n}\n", "export const VERSION = \"3.19.1-alpha.1\";\n", "import { Big, BigSource } from \"big.js\";\nimport BN from \"bn.js\";\nimport { InsufficientPoolLiquidityError } from \"../../exceptions\";\nimport { PoolInfo, Token } from \"../../tokens-info\";\nimport { SYSTEM_PRECISION } from \"./constants\";\n\nexport function getFeePercent(input: BigSource, output: BigSource): number {\n return Big(100).minus(Big(100).times(output).div(input)).toNumber();\n}\n\nexport function toSystemPrecision(amount: BigSource, decimals: number): Big {\n return convertAmountPrecision(amount, decimals, SYSTEM_PRECISION).round(0, Big.roundDown);\n}\n\nexport function fromSystemPrecision(amount: BigSource, decimals: number): Big {\n return convertAmountPrecision(amount, SYSTEM_PRECISION, decimals);\n}\n\nexport function convertAmountPrecision(amount: BigSource, decimalsFrom: number, decimalsTo: number): Big {\n const dif = Big(decimalsTo).minus(decimalsFrom).toNumber();\n return Big(amount).times(toPowBase10(dif));\n}\n\nexport function toPowBase10(decimals: number): Big {\n return Big(10).pow(decimals);\n}\n\nexport function convertFloatAmountToInt(amountFloat: BigSource, decimals: number): Big {\n return Big(amountFloat).times(toPowBase10(decimals));\n}\n\nexport function convertIntAmountToFloat(amountInt: BigSource, decimals: number): Big {\n const amountValue = Big(amountInt);\n if (amountValue.eq(0)) {\n return Big(0);\n }\n return Big(amountValue).div(toPowBase10(decimals));\n}\n\nexport function calculatePoolInfoImbalance(poolInfo: Pick<PoolInfo, \"tokenBalance\" | \"vUsdBalance\">): string {\n return convertIntAmountToFloat(Big(poolInfo.tokenBalance).minus(poolInfo.vUsdBalance).toFixed(), SYSTEM_PRECISION)\n .div(2)\n .toFixed();\n}\n\nexport function swapToVUsd(\n amount: BigSource,\n { feeShare, decimals }: Pick<Token, \"feeShare\" | \"decimals\">,\n poolInfo: Omit<PoolInfo, \"p\" | \"imbalance\">\n): string {\n const amountValue = Big(amount);\n if (amountValue.lte(0)) {\n return \"0\";\n }\n const fee = amountValue.times(feeShare);\n const amountWithoutFee = amountValue.minus(fee);\n const inSystemPrecision = toSystemPrecision(amountWithoutFee, decimals);\n const tokenBalance = Big(poolInfo.tokenBalance).plus(inSystemPrecision);\n const vUsdNewAmount = getY(tokenBalance, poolInfo.aValue, poolInfo.dValue);\n return Big(poolInfo.vUsdBalance).minus(vUsdNewAmount).round(0, Big.roundDown).toFixed();\n}\n\nexport function swapFromVUsd(\n amount: BigSource,\n { feeShare, decimals }: Pick<Token, \"feeShare\" | \"decimals\">,\n poolInfo: Pick<PoolInfo, \"vUsdBalance\" | \"aValue\" | \"dValue\" | \"tokenBalance\">\n): string {\n const amountValue = Big(amount);\n if (amountValue.lte(0)) {\n return Big(0).toFixed();\n }\n const vUsdBalance = amountValue.plus(poolInfo.vUsdBalance);\n const newAmount = getY(vUsdBalance, poolInfo.aValue, poolInfo.dValue);\n const result = fromSystemPrecision(Big(poolInfo.tokenBalance).minus(newAmount), decimals);\n const fee = Big(result).times(feeShare);\n return Big(result).minus(fee).round(0, Big.roundDown).toFixed();\n}\n\nexport function getSwapFromVUsdPoolInfo(\n vUsdAmount: BigSource,\n poolInfo: Omit<PoolInfo, \"imbalance\">\n): Pick<PoolInfo, \"vUsdBalance\" | \"aValue\" | \"dValue\" | \"tokenBalance\"> {\n const amountValue = Big(vUsdAmount);\n if (amountValue.lte(0)) {\n return poolInfo;\n }\n const vUsdBalance = amountValue.plus(poolInfo.vUsdBalance);\n const newAmount = getY(vUsdBalance, poolInfo.aValue, poolInfo.dValue);\n return {\n aValue: poolInfo.aValue,\n dValue: poolInfo.dValue,\n tokenBalance: newAmount.toFixed(0),\n vUsdBalance: vUsdBalance.toFixed(0),\n };\n}\n\n/**\n * @param amount - vUsd amount should be received\n * @param feeShare\n * @param decimals\n * @param poolInfo\n */\nexport function swapToVUsdReverse(\n amount: BigSource,\n { feeShare, decimals }: Pick<Token, \"feeShare\" | \"decimals\">,\n poolInfo: Omit<PoolInfo, \"imbalance\">\n): Big {\n if (Big(amount).lte(0)) {\n return Big(0);\n }\n const vUsdNewAmount = Big(poolInfo.vUsdBalance).minus(amount);\n if (vUsdNewAmount.lte(0)) {\n throw new InsufficientPoolLiquidityError();\n }\n const tokenBalance = getY(vUsdNewAmount, poolInfo.aValue, poolInfo.dValue);\n const inSystemPrecision = Big(tokenBalance).minus(poolInfo.tokenBalance);\n const amountWithoutFee = fromSystemPrecision(inSystemPrecision, decimals);\n const reversedFeeShare = Big(feeShare).div(Big(1).minus(feeShare));\n const fee = Big(amountWithoutFee).times(reversedFeeShare).round(0, Big.roundUp);\n return Big(amountWithoutFee).plus(fee).round(0, Big.roundDown);\n}\n\n/**\n * @param amount - amount should be received\n * @param feeShare\n * @param decimals\n * @param poolInfo\n */\nexport function swapFromVUsdReverse(\n amount: BigSource,\n { feeShare, decimals }: Pick<Token, \"feeShare\" | \"decimals\">,\n poolInfo: Omit<PoolInfo, \"imbalance\">\n): Big {\n if (Big(amount).lte(0)) {\n return Big(0);\n }\n const reversedFeeShare = Big(feeShare).div(Big(1).minus(feeShare));\n const fee = Big(amount).times(reversedFeeShare).round(0, Big.roundUp);\n const amountWithFee = Big(amount).plus(fee);\n const inSystemPrecision = toSystemPrecision(amountWithFee, decimals);\n const tokenBalance = Big(poolInfo.tokenBalance).minus(inSystemPrecision);\n if (tokenBalance.lte(0)) {\n throw new InsufficientPoolLiquidityError();\n }\n const vUsdNewAmount = getY(tokenBalance, poolInfo.aValue, poolInfo.dValue);\n return Big(vUsdNewAmount).minus(poolInfo.vUsdBalance).round(0, Big.roundDown);\n}\n\n// y = (sqrt(x(4ad\u00B3 + x (4a(d - x) - d )\u00B2)) + x (4a(d - x) - d ))/8ax\n// commonPart = 4a(d - x) - d\n// sqrt = sqrt(x * (4ad\u00B3 + x * commonPart\u00B2)\n// y = (sqrt + x * commonPart) / divider\nexport function getY(x: BigSource, a: BigSource, d: BigSource): Big {\n const commonPartBig = Big(4).times(a).times(Big(d).minus(x)).minus(d);\n const dCubed = Big(d).pow(3);\n const commonPartSquared = commonPartBig.pow(2);\n const sqrtBig = Big(x)\n .times(Big(x).times(commonPartSquared).plus(Big(4).times(a).times(dCubed)))\n .sqrt()\n .round(0, Big.roundDown);\n const dividerBig = Big(8).times(a).times(x);\n const result = commonPartBig.times(x).plus(sqrtBig).div(dividerBig).round(0, Big.roundDown);\n if (result.eq(0)) {\n return Big(0);\n }\n return result.plus(1); // +1 to offset rounding errors\n}\n\nexport function getEarned(userLpAmount: string, userRewardDebt: string, accRewardPerShareP: string, p: number): string {\n const userLpAmountBN = new BN(userLpAmount);\n const accRewardPerSharePBN = new BN(accRewardPerShareP);\n const userRewardDebtBN = new BN(userRewardDebt);\n const rewards = userLpAmountBN.mul(accRewardPerSharePBN).shrn(p);\n return rewards.sub(userRewardDebtBN).toString();\n}\n\nexport function aprInPercents(apr: string): string {\n return Big(apr).gt(0) ? `${Number(Big(apr).times(100).toFixed(2)).toLocaleString()}%` : \"N/A\";\n}\n\n// a = 8Axy(x+y)\n// b = xy(16A - 4) / 3\n// c = sqrt(a\u00B2 + b\u00B3)\n// D = cbrt(a + c) + cbrt(a - c)\nexport function getD(aValue: string, x: string, y: string): string {\n const xy = Big(x).times(y);\n const xPlusY = Big(x).plus(y);\n const a = Big(8).times(aValue).times(xy).times(xPlusY);\n const b = xy.times(Big(16).times(aValue).minus(4)).div(3);\n const aSquared = a.times(a);\n const bCubed = b.times(b).times(b);\n const a2b3 = aSquared.plus(bCubed);\n const c = Big(a2b3).sqrt();\n const cbrtAPlusC = Big(Math.cbrt(+a.plus(c).toFixed()));\n const cbrtAMinusC = Big(Math.cbrt(+a.minus(c).toFixed()));\n return cbrtAPlusC.plus(cbrtAMinusC).toFixed();\n}\n", "import { ChainSymbol } from \"../../chains/chain.enums\";\nimport { PoolInfo } from \"../../tokens-info\";\n\nexport type ChainDetailsResponse = Record<string, ChainDetailsDTO>;\n\nexport interface ChainDetailsDTO {\n tokens: TokenDTO[];\n chainId: number;\n bridgeAddress: string;\n transferTime: TransferTimeDTO;\n txCostAmount: TxCostAmountDTO;\n confirmations: number;\n}\n\nexport enum AddressStatus {\n OK = \"OK\",\n INVALID = \"INVALID\",\n FORBIDDEN = \"FORBIDDEN\",\n UNINITIALIZED = \"UNINITIALIZED\",\n CONTRACT_ADDRESS = \"CONTRACT_ADDRESS\",\n WRONG_ASSOCIATED_ACCOUNT_OWNER = \"WRONG_ASSOCIATED_ACCOUNT_OWNER\",\n}\n\nexport interface TokenDTO {\n symbol: string;\n name: string;\n decimals: number;\n poolAddress: string;\n tokenAddress: string;\n poolInfo: PoolInfoDTO;\n feeShare: string;\n apr: string;\n apr7d: string;\n apr30d: string;\n lpRate: string;\n flags: {\n swap: boolean;\n pool: boolean;\n };\n}\n\nexport interface PoolInfoDTO {\n aValue: string;\n dValue: string;\n tokenBalance: string;\n vUsdBalance: string;\n totalLpAmount: string;\n accRewardPerShareP: string;\n p: number;\n}\n\nexport enum MessengerKeyDTO {\n ALLBRIDGE = \"allbridge\",\n WORMHOLE = \"wormhole\",\n CCTP = \"cctp\",\n}\n\nexport type TransferTimeDTO = Record<string, MessengerTransferTimeDTO>;\n\nexport interface TxCostAmountDTO {\n maxAmount: string;\n swap: string;\n transfer: string;\n}\n\nexport type MessengerTransferTimeDTO = {\n [messenger in MessengerKeyDTO]: number;\n};\n\nexport enum Messenger {\n ALLBRIDGE = 1,\n WORMHOLE = 2,\n CCTP = 3,\n}\n\nexport interface ReceiveTransactionCostRequest {\n sourceChainId: number;\n destinationChainId: number;\n messenger: Messenger;\n}\n\nexport interface ReceiveTransactionCostResponse {\n exchangeRate: string;\n fee: string;\n sourceNativeTokenPrice: string;\n}\n\nexport interface GasBalanceResponse {\n gasBalance: string | null;\n status: AddressStatus;\n}\n\nexport interface CheckAddressResponse {\n gasBalance: string | null;\n status: AddressStatus;\n}\n\nexport interface TransferStatusResponse {\n txId: string;\n\n sourceChainSymbol: ChainSymbol;\n destinationChainSymbol: ChainSymbol;\n\n sendAmount: string;\n sendAmountFormatted: number;\n\n stableFee: string;\n stableFeeFormatted: number;\n\n sourceTokenAddress: string;\n destinationTokenAddress: string;\n\n senderAddress: string;\n recipientAddress: string;\n\n signaturesCount: number;\n signaturesNeeded: number;\n\n send: BridgeTransaction;\n receive?: BridgeTransaction;\n\n responseTime?: number;\n}\n\nexport interface BridgeTransaction {\n txId: string;\n\n sourceChainId: number;\n destinationChainId: number;\n\n fee: string;\n feeFormatted: number;\n\n stableFee: string;\n stableFeeFormatted: number;\n\n amount: string;\n amountFormatted: number;\n virtualAmount: string;\n\n bridgeContract: string;\n sender: string;\n recipient: string;\n\n sourceTokenAddress: string;\n destinationTokenAddress: string;\n\n hash: string;\n\n messenger: Messenger;\n\n blockTime: number;\n blockId: string;\n\n confirmations: number;\n confirmationsNeeded: number;\n\n isClaimable?: boolean;\n}\n\nexport type PoolInfoResponse = Record<ChainSymbol, PoolInfo>;\nexport type PendingInfoResponse = Partial<Record<ChainSymbol, TokenPendingInfoDTO>>;\nexport type TokenPendingInfoDTO = Record<string, PendingInfoDTO>;\n\nexport interface PendingInfoDTO {\n pendingTxs: number;\n totalSentAmount: string;\n}\n", "import { Chains } from \"../../chains\";\nimport { ChainSymbol } from \"../../chains/chain.enums\";\nimport {\n ChainDetails,\n ChainDetailsMap,\n ChainDetailsMapWithFlags,\n ChainDetailsWithTokensWithFlags,\n MessengerTransferTime,\n PoolInfoMap,\n PoolKeyObject,\n TokenWithChainDetailsWithFlags,\n TransferTime,\n} from \"../../tokens-info\";\nimport { calculatePoolInfoImbalance } from \"../../utils/calculation\";\nimport {\n ChainDetailsDTO,\n ChainDetailsResponse,\n Messenger,\n MessengerKeyDTO,\n MessengerTransferTimeDTO,\n PoolInfoResponse,\n TokenDTO,\n TransferTimeDTO,\n} from \"./core-api.model\";\n\nexport function mapChainDetailsResponseToChainDetailsMap(response: ChainDetailsResponse): ChainDetailsMapWithFlags {\n return Object.entries(response).reduce<ChainDetailsMapWithFlags>((map, entry) => {\n const chainSymbol = entry[0];\n const chainDetailsDTO = entry[1];\n const chainDetails = mapChainDetailsFromDto(chainSymbol, chainDetailsDTO);\n if (chainDetails) {\n map[chainSymbol] = chainDetails;\n }\n return map;\n }, {});\n}\n\nexport function mapChainDetailsResponseToPoolInfoMap(response: ChainDetailsResponse): PoolInfoMap {\n const poolInfoMap: PoolInfoMap = {};\n for (const [chainSymbolValue, chainDetailsDTO] of Object.entries(response)) {\n const chainSymbol = chainSymbolValue;\n for (const token of chainDetailsDTO.tokens) {\n const poolKey = mapPoolKeyObjectToPoolKey({\n chainSymbol,\n poolAddress: token.poolAddress,\n });\n const imbalance = calculatePoolInfoImbalance(token.poolInfo);\n poolInfoMap[poolKey] = { ...token.poolInfo, imbalance };\n }\n }\n return poolInfoMap;\n}\n\nfunction mapTokenWithChainDetailsFromDto(chainDetails: ChainDetails, dto: TokenDTO): TokenWithChainDetailsWithFlags {\n const { name: chainName, ...chainDetailsWithoutName } = chainDetails;\n const { poolInfo: _poolInfo, ...dtoWithoutPoolInfo } = dto;\n return {\n ...dtoWithoutPoolInfo,\n ...chainDetailsWithoutName,\n chainName,\n };\n}\n\nfunction mapMessengerKeyDtoToMessenger(dto: MessengerKeyDTO): Messenger | null {\n switch (dto) {\n case MessengerKeyDTO.ALLBRIDGE:\n return Messenger.ALLBRIDGE;\n case MessengerKeyDTO.WORMHOLE:\n return Messenger.WORMHOLE;\n case MessengerKeyDTO.CCTP:\n return Messenger.CCTP;\n default:\n return null;\n }\n}\n\nfunction mapTransferTimeFromDto(dto: TransferTimeDTO): TransferTime {\n return Object.entries(dto).reduce<TransferTime>((result, [key, value]) => {\n result[key as ChainSymbol] = mapMessengerTransferTimeFromDto(value);\n return result;\n }, {});\n}\n\nfunction mapMessengerTransferTimeFromDto(dto: MessengerTransferTimeDTO): MessengerTransferTime {\n return Object.entries(dto).reduce<MessengerTransferTime>((messengerTransferTime, [key, value]) => {\n const messenger = mapMessengerKeyDtoToMessenger(key as MessengerKeyDTO);\n if (messenger) {\n messengerTransferTime[messenger] = value;\n }\n return messengerTransferTime;\n }, {});\n}\n\nfunction mapChainDetailsFromDto(chainSymbol: string, dto: ChainDetailsDTO): ChainDetailsWithTokensWithFlags | null {\n const basicChainProperties = Chains.getChainsProperties()[chainSymbol];\n /* eslint-disable-next-line @typescript-eslint/no-unnecessary-condition */\n if (!basicChainProperties) {\n return null;\n }\n const chainDetails: ChainDetails = {\n ...basicChainProperties,\n allbridgeChainId: dto.chainId,\n bridgeAddress: dto.bridgeAddress,\n transferTime: mapTransferTimeFromDto(dto.transferTime),\n txCostAmount: dto.txCostAmount,\n confirmations: dto.confirmations,\n };\n return {\n ...chainDetails,\n tokens: dto.tokens.map((tokenDto) => mapTokenWithChainDetailsFromDto(chainDetails, tokenDto)),\n };\n}\n\nexport function mapPoolKeyToPoolKeyObject(poolKey: string): PoolKeyObject {\n const dividerPosition = poolKey.indexOf(\"_\");\n return {\n chainSymbol: poolKey.substring(0, dividerPosition),\n poolAddress: poolKey.substring(dividerPosition + 1),\n };\n}\n\nexport function mapPoolKeyObjectToPoolKey(poolKeyObject: PoolKeyObject): string {\n return poolKeyObject.chainSymbol + \"_\" + poolKeyObject.poolAddress;\n}\n\nexport function mapChainDetailsMapToPoolKeyObjects(chainDetailsMap: ChainDetailsMap): PoolKeyObject[] {\n const result = [];\n for (const [chainSymbolValue, chainDetails] of Object.entries(chainDetailsMap)) {\n const chainSymbol = chainSymbolValue;\n for (const token of chainDetails.tokens) {\n result.push({\n chainSymbol,\n poolAddress: token.poolAddress,\n });\n }\n }\n return result;\n}\n\nexport function mapPoolInfoResponseToPoolInfoMap(responseBody: PoolInfoResponse): PoolInfoMap {\n const poolInfoMap: PoolInfoMap = {};\n for (const [chainSymbolValue, poolInfoByAddress] of Object.entries(responseBody)) {\n const chainSymbol = chainSymbolValue;\n for (const [poolAddress, poolInfo] of Object.entries(poolInfoByAddress)) {\n poolInfo.imbalance = calculatePoolInfoImbalance(poolInfo);\n poolInfoMap[mapPoolKeyObjectToPoolKey({ chainSymbol, poolAddress })] = poolInfo;\n }\n }\n return poolInfoMap;\n}\n", "import Cache from \"timed-cache\";\nimport { PoolInfoMap, PoolKeyObject } from \"../../tokens-info\";\nimport { ApiClient, TokenInfo } from \"./api-client\";\nimport {\n GasBalanceResponse,\n PendingInfoResponse,\n ReceiveTransactionCostRequest,\n ReceiveTransactionCostResponse,\n TransferStatusResponse,\n} from \"./core-api.model\";\n\nconst _20_SECONDS_TTL = 20 * 1000;\nconst _55_SECONDS_TTL = 55 * 1000;\n\nexport class ApiClientCaching implements ApiClient {\n private tokenInfoCache: Cache<Promise<TokenInfo>>;\n private pendingInfoCache: Cache<Promise<PendingInfoResponse>>;\n private gasBalanceCache: Cache<Promise<GasBalanceResponse>>;\n private receivedTransactionCache: Cache<ReceiveTransactionCostResponse>;\n\n constructor(private apiClient: ApiClient) {\n this.tokenInfoCache = new Cache({ defaultTtl: _55_SECONDS_TTL });\n this.receivedTransactionCache = new Cache({ defaultTtl: _20_SECONDS_TTL });\n this.pendingInfoCache = new Cache({ defaultTtl: _20_SECONDS_TTL });\n this.gasBalanceCache = new Cache({ defaultTtl: _20_SECONDS_TTL });\n }\n\n getTokenInfo(): Promise<TokenInfo> {\n const TOKEN_INFO_CACHE_KEY = \"TOKEN_INFO_CACHE_KEY\";\n const tokenInfo = this.tokenInfoCache.get(TOKEN_INFO_CACHE_KEY);\n if (tokenInfo) {\n return tokenInfo;\n }\n const tokenInfoPromise = this.apiClient.getTokenInfo();\n this.tokenInfoCache.put(TOKEN_INFO_CACHE_KEY, tokenInfoPromise);\n return tokenInfoPromise;\n }\n\n async getGasBalance(chainSymbol: string, address: string): Promise<GasBalanceResponse> {\n const GAS_BALANCE_CACHE_KEY = `GAS_BALANCE_${chainSymbol}_${address}`;\n const gasBalance = this.gasBalanceCache.get(GAS_BALANCE_CACHE_KEY);\n if (gasBalance) {\n return gasBalance;\n }\n const gasBalancePromise = this.apiClient.getGasBalance(chainSymbol, address);\n this.gasBalanceCache.put(GAS_BALANCE_CACHE_KEY, gasBalancePromise);\n return gasBalancePromise;\n }\n\n async getPendingInfo(): Promise<PendingInfoResponse> {\n const PENDING_INFO_CACHE_KEY = \"PENDING_INFO_CACHE_KEY\";\n const pendingInfo = this.pendingInfoCache.get(PENDING_INFO_CACHE_KEY);\n if (pendingInfo) {\n return pendingInfo;\n }\n const pendingInfoPromise = this.apiClient.getPendingInfo();\n this.pendingInfoCache.put(PENDING_INFO_CACHE_KEY, pendingInfoPromise);\n return pendingInfoPromise;\n }\n\n async getReceiveTransactionCost(args: ReceiveTransactionCostRequest): Promise<ReceiveTransactionCostResponse> {\n const RECEIVE_TX_COST_KEY = `RECEIVE_TX_COST_${args.sourceChainId}_${args.destinationChainId}_${args.messenger}`;\n const transactionCost = this.receivedTransactionCache.get(RECEIVE_TX_COST_KEY);\n if (transactionCost) {\n return transactionCost;\n }\n const fetchedTransactionCost = await this.apiClient.getReceiveTransactionCost(args);\n this.receivedTransactionCache.put(RECEIVE_TX_COST_KEY, fetchedTransactionCost);\n return fetchedTransactionCost;\n }\n\n async getTransferStatus(chainSymbol: string, txId: string): Promise<TransferStatusResponse> {\n return this.apiClient.getTransferStatus(chainSymbol, txId);\n }\n\n async getPoolInfoMap(pools: PoolKeyObject[] | PoolKeyObject): Promise<PoolInfoMap> {\n return this.apiClient.getPoolInfoMap(pools);\n }\n}\n", "import {\n ChainDetailsMapWithFlags,\n PoolInfoMap,\n PoolKeyObject,\n TokenWithChainDetailsWithFlags,\n} from \"../../tokens-info\";\nimport { ApiClient } from \"./api-client\";\nimport {\n GasBalanceResponse,\n PendingInfoResponse,\n ReceiveTransactionCostRequest,\n ReceiveTransactionCostResponse,\n TransferStatusResponse,\n} from \"./core-api.model\";\n\nexport interface AllbridgeCoreClientParams {\n coreApiUrl: string;\n coreApiHeaders?: Record<string, string>;\n coreApiQueryParams?: Record<string, string>;\n}\n\nexport interface AllbridgeCoreClient {\n getPendingInfo(): Promise<PendingInfoResponse>;\n\n getTransferStatus(chainSymbol: string, txId: string): Promise<TransferStatusResponse>;\n\n getReceiveTransactionCost(args: ReceiveTransactionCostRequest): Promise<ReceiveTransactionCostResponse>;\n\n getGasBalance(chainSymbol: string, address: string): Promise<GasBalanceResponse>;\n}\n\nexport interface AllbridgeCoreClientWithTokens extends AllbridgeCoreClient {\n getChainDetailsMap(): Promise<ChainDetailsMapWithFlags>;\n\n tokens(): Promise<TokenWithChainDetailsWithFlags[]>;\n}\n\nexport interface AllbridgeCoreClientWithPoolInfo extends AllbridgeCoreClientWithTokens {\n getChainDetailsMapAndPoolInfoMap(): Promise<{\n chainDetailsMap: ChainDetailsMapWithFlags;\n poolInfoMap: PoolInfoMap;\n }>;\n\n getPoolInfoMap(pools: PoolKeyObject[] | PoolKeyObject): Promise<PoolInfoMap>;\n}\n\nexport class AllbridgeCoreClientImpl implements AllbridgeCoreClientWithPoolInfo {\n constructor(private apiClient: ApiClient) {}\n\n async getChainDetailsMap(): Promise<ChainDetailsMapWithFlags> {\n return (await this.apiClient.getTokenInfo()).chainDetailsMap;\n }\n\n async tokens(): Promise<TokenWithChainDetailsWithFlags[]> {\n const map = await this.getChainDetailsMap();\n return Object.values(map).flatMap((chainDetails) => chainDetails.tokens);\n }\n\n async getPendingInfo(): Promise<PendingInfoResponse> {\n return this.apiClient.getPendingInfo();\n }\n\n async getGasBalance(chainSymbol: string, address: string): Promise<GasBalanceResponse> {\n return this.apiClient.getGasBalance(chainSymbol, address);\n }\n\n async getChainDetailsMapAndPoolInfoMap(): Promise<{\n chainDetailsMap: ChainDetailsMapWithFlags;\n poolInfoMap: PoolInfoMap;\n }> {\n return await this.apiClient.getTokenInfo();\n }\n\n async getTransferStatus(chainSymbol: string, txId: string): Promise<TransferStatusResponse> {\n return await this.apiClient.getTransferStatus(chainSymbol, txId);\n }\n\n async getReceiveTransactionCost(args: ReceiveTransactionCostRequest): Promise<ReceiveTransactionCostResponse> {\n return await this.apiClient.getReceiveTransactionCost(args);\n }\n\n async getPoolInfoMap(pools: PoolKeyObject[] | PoolKeyObject): Promise<PoolInfoMap> {\n return await this.apiClient.getPoolInfoMap(pools);\n }\n}\n", "import { AllbridgeCoreSdkOptions } from \"../../index\";\nimport {\n ChainDetailsMap,\n PoolInfo,\n PoolKeyObject,\n TokenWithChainDetails,\n TokenWithChainDetailsWithFlags,\n} from \"../../tokens-info\";\nimport {\n GasBalanceResponse,\n PendingInfoResponse,\n ReceiveTransactionCostRequest,\n ReceiveTransactionCostResponse,\n TransferStatusResponse,\n} from \"./core-api.model\";\nimport { AllbridgeCoreClient, AllbridgeCoreClientWithTokens } from \"./core-client-base\";\nimport { AllbridgeCoreClientPoolsExt } from \"./core-client-pool-info-caching\";\n\nexport interface AllbridgeCoreClientFiltered extends AllbridgeCoreClient, AllbridgeCoreClientPoolsExt {\n getChainDetailsMap(type: \"swap\" | \"pool\"): Promise<ChainDetailsMap>;\n\n tokens(type: \"swap\" | \"pool\"): Promise<TokenWithChainDetails[]>;\n}\n\nexport class AllbridgeCoreClientFilteredImpl implements AllbridgeCoreClientFiltered {\n private readonly isStaging: boolean;\n\n constructor(\n private client: AllbridgeCoreClientWithTokens & AllbridgeCoreClientPoolsExt,\n params: AllbridgeCoreSdkOptions\n ) {\n this.isStaging = params.coreApiQueryParams?.staging === \"true\";\n }\n\n async getChainDetailsMap(type: \"swap\" | \"pool\"): Promise<ChainDetailsMap> {\n const chainDetailsMapWithFlags = await this.client.getChainDetailsMap();\n const result: ChainDetailsMap = {};\n\n for (const key in chainDetailsMapWithFlags) {\n const chainDetailsWithTokensWithFlag = chainDetailsMapWithFlags[key];\n if (chainDetailsWithTokensWithFlag) {\n result[key] = {\n ...chainDetailsWithTokensWithFlag,\n tokens: filterAndConvertToTokenWithChainDetails(chainDetailsWithTokensWithFlag.tokens, type, this.isStaging),\n };\n }\n }\n return result;\n }\n\n async tokens(type: \"swap\" | \"pool\"): Promise<TokenWithChainDetails[]> {\n return filterAndConvertToTokenWithChainDetails(await this.client.tokens(), type, this.isStaging);\n }\n\n async getPendingInfo(): Promise<PendingInfoResponse> {\n return this.client.getPendingInfo();\n }\n\n async getGasBalance(chainSymbol: string, address: string): Promise<GasBalanceResponse> {\n return this.client.getGasBalance(chainSymbol, address);\n }\n\n async getTransferStatus(chainSymbol: string, txId: string): Promise<TransferStatusResponse> {\n return await this.client.getTransferStatus(chainSymbol, txId);\n }\n\n async getReceiveTransactionCost(args: ReceiveTransactionCostRequest): Promise<ReceiveTransactionCostResponse> {\n return await this.client.getReceiveTransactionCost(args);\n }\n\n cachePut(poolKeyObject: PoolKeyObject, poolInfo: PoolInfo): void {\n return this.client.cachePut(poolKeyObject, poolInfo);\n }\n\n getPoolInfoByKey(poolKeyObject: PoolKeyObject): Promise<PoolInfo> {\n return this.client.getPoolInfoByKey(poolKeyObject);\n }\n\n refreshPoolInfo(poolKeyObjects?: PoolKeyObject | PoolKeyObject[]): Promise<void> {\n return this.client.refreshPoolInfo(poolKeyObjects);\n }\n}\n\nfunction filterAndConvertToTokenWithChainDetails(\n tokens: TokenWithChainDetailsWithFlags[],\n type: \"swap\" | \"pool\",\n isStaging: boolean\n): TokenWithChainDetails[] {\n return tokens.filter((token) => (isStaging ? true : token.flags[type])).map(convertToTokenWithChainDetails);\n}\n\nfunction convertToTokenWithChainDetails(token: TokenWithChainDetailsWithFlags): TokenWithChainDetails {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { flags, ...rest } = token;\n return rest;\n}\n", "import Cache from \"timed-cache\";\nimport { SdkError } from \"../../exceptions\";\nimport {\n ChainDetailsMapWithFlags,\n PoolInfo,\n PoolInfoMap,\n PoolKeyObject,\n TokenWithChainDetailsWithFlags,\n} from \"../../tokens-info\";\nimport { mapChainDetailsMapToPoolKeyObjects, mapPoolKeyObjectToPoolKey } from \"./core-api-mapper\";\nimport {\n GasBalanceResponse,\n PendingInfoResponse,\n ReceiveTransactionCostRequest,\n ReceiveTransactionCostResponse,\n TransferStatusResponse,\n} from \"./core-api.model\";\nimport { AllbridgeCoreClientWithPoolInfo, AllbridgeCoreClientWithTokens } from \"./core-client-base\";\n\nconst _55_SECONDS_TTL = 55 * 1000;\n\nexport interface AllbridgeCoreClientPoolsExt {\n getPoolInfoByKey(poolKeyObject: PoolKeyObject): Promise<PoolInfo>;\n refreshPoolInfo(poolKeyObjects?: PoolKeyObject | PoolKeyObject[]): Promise<void>;\n cachePut(poolKeyObject: PoolKeyObject, poolInfo: PoolInfo): void;\n}\n\nexport class AllbridgeCoreClientPoolInfoCaching implements AllbridgeCoreClientWithTokens, AllbridgeCoreClientPoolsExt {\n private readonly poolInfoCache;\n\n constructor(private readonly client: AllbridgeCoreClientWithPoolInfo) {\n this.poolInfoCache = new PoolInfoCache();\n }\n\n async getChainDetailsMap(): Promise<ChainDetailsMapWithFlags> {\n const result = await this.client.getChainDetailsMapAndPoolInfoMap();\n return result.chainDetailsMap;\n }\n\n async tokens(): Promise<TokenWithChainDetailsWithFlags[]> {\n return await this.client.tokens();\n }\n\n getTransferStatus(chainSymbol: string, txId: string): Promise<TransferStatusResponse> {\n return this.client.getTransferStatus(chainSymbol, txId);\n }\n\n getReceiveTransactionCost(args: ReceiveTransactionCostRequest): Promise<ReceiveTransactionCostResponse> {\n return this.client.getReceiveTransactionCost(args);\n }\n\n getPendingInfo(): Promise<PendingInfoResponse> {\n return this.client.getPendingInfo();\n }\n\n getGasBalance(chainSymbol: string, address: string): Promise<GasBalanceResponse> {\n return this.client.getGasBalance(chainSymbol, address);\n }\n\n async getPoolInfoByKey(poolKeyObject: PoolKeyObject): Promise<PoolInfo> {\n this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap);\n const poolInfo = this.poolInfoCache.get(poolKeyObject);\n /* eslint-disable-next-line @typescript-eslint/no-unnecessary-condition */\n if (poolInfo) {\n return poolInfo;\n } else {\n const poolInfoMap = await this.client.getPoolInfoMap(poolKeyObject);\n this.poolInfoCache.putAll(poolInfoMap);\n const result = poolInfoMap[mapPoolKeyObjectToPoolKey(poolKeyObject)];\n if (result) {\n return result;\n }\n throw new SdkError(\n \"Cannot find pool info for \" + poolKeyObject.poolAddress + \" on chain \" + poolKeyObject.chainSymbol\n );\n }\n }\n\n async refreshPoolInfo(poolKeyObjects?: PoolKeyObject | PoolKeyObject[]): Promise<void> {\n let poolInfoMap;\n if (poolKeyObjects) {\n this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap);\n poolInfoMap = await this.client.getPoolInfoMap(poolKeyObjects);\n } else {\n const result = await this.client.getChainDetailsMapAndPoolInfoMap();\n poolInfoMap = await this.client.getPoolInfoMap(mapChainDetailsMapToPoolKeyObjects(result.chainDetailsMap));\n }\n this.poolInfoCache.putAll(poolInfoMap);\n }\n\n cachePut(poolKeyObject: PoolKeyObject, poolInfo: PoolInfo): void {\n this.poolInfoCache.put(mapPoolKeyObjectToPoolKey(poolKeyObject), poolInfo);\n }\n}\n\nclass PoolInfoCache {\n private cache;\n\n constructor() {\n this.cache = new Cache<PoolInfo>({ defaultTtl: _55_SECONDS_TTL });\n }\n\n putAll(poolInfoMap: PoolInfoMap) {\n for (const [key, value] of Object.entries(poolInfoMap)) {\n this.cache.put(key, value);\n }\n }\n\n putAllIfNotExists(poolInfoMap: PoolInfoMap) {\n for (const [key, value] of Object.entries(poolInfoMap)) {\n if (!this.cache.get(key)) {\n this.cache.put(key, value);\n }\n }\n }\n\n put(key: string, poolInfo: PoolInfo) {\n this.cache.put(key, poolInfo);\n }\n\n get(poolKeyObject: PoolKeyObject): PoolInfo | undefined {\n const key = mapPoolKeyObjectToPoolKey(poolKeyObject);\n return this.cache.get(key);\n }\n}\n", "// @ts-expect-error import tron\nimport TronWeb from \"tronweb\";\nimport Web3 from \"web3\";\nimport { NodeRpcUrlsConfig } from \"..\";\nimport { Chains } from \"../../chains\";\nimport { Messenger } from \"../../client/core-api/core-api.model\";\nimport { AllbridgeCoreClient } from \"../../client/core-api/core-client-base\";\nimport { CCTPDoesNotSupportedError } from \"../../exceptions\";\nimport { AllbridgeCoreSdkOptions, ChainSymbol, ChainType } from \"../../index\";\nimport { TokenWithChainDetails } from \"../../tokens-info\";\nimport { validateAmountDecimals, validateAmountGtZero } from \"../../utils/utils\";\nimport { Provider, TransactionResponse } from \"../models\";\nimport { TokenService } from \"../token\";\nimport { EvmBridgeService } from \"./evm\";\nimport { ApproveParams, CheckAllowanceParams, GetAllowanceParams, SendParams } from \"./models\";\nimport { ChainBridgeService } from \"./models/bridge\";\nimport { DefaultRawBridgeTransactionBuilder, RawBridgeTransactionBuilder } from \"./raw-bridge-transaction-builder\";\nimport { SolanaBridgeService } from \"./sol\";\nimport { SrbBridgeService } from \"./srb\";\nimport { TronBridgeService } from \"./trx\";\n\nexport interface BridgeService {\n rawTxBuilder: RawBridgeTransactionBuilder;\n\n /**\n * Get amount of tokens approved to be sent by the bridge\n * @param provider - will be used to access the network\n * @param params See {@link GetAllowanceParams}\n * @returns the amount of approved tokens\n */\n getAllowance(provider: Provider, params: GetAllowanceParams): Promise<string>;\n\n /**\n * Get amount of tokens approved to be sent by the bridge\n * @param params See {@link GetAllowanceParams}\n * @returns the amount of approved tokens\n */\n getAllowance(params: GetAllowanceParams): Promise<string>;\n\n /**\n * Check if the amount of approved tokens is enough to make a transfer\n * @param provider - will be used to access the network\n * @param params See {@link CheckAllowanceParams}\n * @returns true if the amount of approved tokens is enough to make a transfer\n */\n checkAllowance(provider: Provider, params: CheckAllowanceParams): Promise<boolean>;\n\n /**\n * Check if the amount of approved tokens is enough to make a transfer\n * @param params See {@link CheckAllowanceParams}\n * @returns true if the amount of approved tokens is enough to make a transfer\n */\n checkAllowance(params: CheckAllowanceParams): Promise<boolean>;\n\n /**\n * @Deprecated Use {@link rawTxBuilder}.{@link RawBridgeTransactionBuilder.approve}<p>\n * Approve tokens usage by another address on chains\n * <p>\n * For ETH/USDT: due to specificity of the USDT contract:<br/>\n * If the current allowance is not 0, this function will perform an additional transaction to set allowance to 0 before setting the new allowance value.\n * @param provider - will be used to access the network\n * @param approveData\n */\n approve(provider: Provider, approveData: ApproveParams): Promise<TransactionResponse>;\n\n /**\n * @Deprecated Use {@link rawTxBuilder}.{@link RawBridgeTransactionBuilder.send}<p>\n * Send tokens through the ChainBridgeService\n * @param provider - will be used to access the network\n * @param params\n */\n send(provider: Provider, params: SendParams): Promise<TransactionResponse>;\n}\n\nexport class DefaultBridgeService implements BridgeService {\n public rawTxBuilder: RawBridgeTransactionBuilder;\n\n constructor(\n private api: AllbridgeCoreClient,\n private nodeRpcUrlsConfig: NodeRpcUrlsConfig,\n private params: AllbridgeCoreSdkOptions,\n private tokenService: TokenService\n ) {\n this.rawTxBuilder = new DefaultRawBridgeTransactionBuilder(api, nodeRpcUrlsConfig, params, tokenService);\n }\n\n async getAllowance(a: Provider | GetAllowanceParams, b?: GetAllowanceParams): Promise<string> {\n let provider: Provider | undefined;\n let params: GetAllowanceParams;\n if (b) {\n provider = a as Provider;\n params = b;\n } else {\n params = a as GetAllowanceParams;\n }\n const spender = getSpender(params.token, params.messenger);\n return await this.tokenService.getAllowance({ ...params, spender }, provider);\n }\n\n async checkAllowance(a: Provider | CheckAllowanceParams, b?: CheckAllowanceParams): Promise<boolean> {\n let provider: Provider | undefined;\n let params: CheckAllowanceParams;\n if (b) {\n provider = a as Provider;\n params = b;\n } else {\n params = a as CheckAllowanceParams;\n }\n const spender = getSpender(params.token, params.messenger);\n return this.tokenService.checkAllowance({ ...params, spender }, provider);\n }\n\n async approve(provider: Provider, approveData: ApproveParams): Promise<TransactionResponse> {\n const spender = getSpender(approveData.token, approveData.messenger);\n return this.tokenService.approve(provider, { ...approveData, spender });\n }\n\n async send(provider: Provider, params: SendParams): Promise<TransactionResponse> {\n validateAmountGtZero(params.amount);\n validateAmountDecimals(\"amount\", params.amount, params.sourceToken.decimals);\n return getChainBridgeService(\n params.sourceToken.chainSymbol,\n this.api,\n this.nodeRpcUrlsConfig,\n this.params,\n provider\n ).send(params);\n }\n}\n\nexport function getSpender(token: TokenWithChainDetails, messenger?: Messenger): string {\n if (messenger && messenger == Messenger.CCTP) {\n if (token.cctpAddress) {\n return token.cctpAddress;\n } else {\n throw new CCTPDoesNotSupportedError(\"Such route does not support CCTP protocol\");\n }\n } else {\n return token.bridgeAddress;\n }\n}\n\nexport function getChainBridgeService(\n chainSymbol: string,\n api: AllbridgeCoreClient,\n nodeRpcUrlsConfig: NodeRpcUrlsConfig,\n params: AllbridgeCoreSdkOptions,\n provider?: Provider\n): ChainBridgeService {\n switch (Chains.getChainProperty(chainSymbol).chainType) {\n case ChainType.EVM: {\n if (provider) {\n return new EvmBridgeService(provider as unknown as Web3, api, nodeRpcUrlsConfig);\n } else {\n const nodeRpcUrl = nodeRpcUrlsConfig.getNodeRpcUrl(chainSymbol);\n return new EvmBridgeService(new Web3(nodeRpcUrl), api, nodeRpcUrlsConfig);\n }\n }\n case ChainType.TRX: {\n if (provider) {\n return new TronBridgeService(provider, api);\n } else {\n const nodeRpcUrl = nodeRpcUrlsConfig.getNodeRpcUrl(chainSymbol);\n return new TronBridgeService(new TronWeb({ fullHost: nodeRpcUrl }), api);\n }\n }\n case ChainType.SOLANA: {\n return new SolanaBridgeService(\n nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.SOL),\n {\n wormholeMessengerProgramId: params.wormholeMessengerProgramId,\n solanaLookUpTable: params.solanaLookUpTable,\n cctpParams: params.cctpParams,\n jupiterUrl: params.jupiterUrl,\n },\n api\n );\n }\n case ChainType.SRB: {\n return new SrbBridgeService(nodeRpcUrlsConfig, params, api);\n }\n }\n}\n", "import { Big, BigSource } from \"big.js\";\nimport { AllbridgeCoreClientPoolsExt } from \"../client/core-api/core-client-pool-info-caching\";\nimport { ArgumentInvalidDecimalsError, InvalidAmountError, TimeoutError } from \"../exceptions\";\nimport { PoolInfo, TokenWithChainDetails } from \"../tokens-info\";\n\nexport async function getPoolInfoByToken(\n api: AllbridgeCoreClientPoolsExt,\n sourceChainToken: TokenWithChainDetails\n): Promise<PoolInfo> {\n return await api.getPoolInfoByKey({\n chainSymbol: sourceChainToken.chainSymbol,\n poolAddress: sourceChainToken.poolAddress,\n });\n}\n\nexport function validateAmountGtZero(amount: BigSource) {\n if (Big(amount).lte(0)) {\n throw new InvalidAmountError(\"Amount must be greater than zero\");\n }\n}\n\nexport function validateAmountDecimals(argName: string, amountFloat: number | string | Big, decimalRequired: number) {\n const amount = Big(amountFloat).toFixed();\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const [integerPart, fractionalPart] = amount.split(\".\");\n\n if (fractionalPart && fractionalPart.length > decimalRequired) {\n throw new ArgumentInvalidDecimalsError(argName, fractionalPart.length, decimalRequired);\n }\n}\n\nexport async function promiseWithTimeout<T>(promise: Promise<T>, msg: string, timeoutMs: number): Promise<T> {\n return (await Promise.race([\n promise,\n new Promise((resolve, reject) => {\n setTimeout(() => reject(new TimeoutError(msg)), timeoutMs);\n }),\n ])) as any as T;\n}\n\nexport async function promiseWithTimeoutAndRetries<T>(\n toTry: () => Promise<T>,\n msg: string,\n maxRetries: number,\n timeoutMs: number\n): Promise<T> {\n if (maxRetries < 1)\n throw new Error(`Bad argument: 'maxRetries' must be greater than 0, but ${maxRetries} was received.`);\n let attemptCount = 0;\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition,no-constant-condition\n while (true) {\n try {\n return await promiseWithTimeout(toTry(), msg, timeoutMs);\n } catch (error) {\n if (++attemptCount >= maxRetries) throw new TimeoutError(msg);\n }\n }\n}\n\n/**\n * Keep calling a `fn` for `secondsToWait` seconds, if `keepWaitingIf` is true.\n * Returns an array of all attempts to call the function.\n */\nexport async function withExponentialBackoff<T>(\n fn: (previousFailure?: T) => Promise<T>,\n keepWaitingIf: (result: T) => boolean,\n secondsToWait: number,\n exponentialFactor = 1.5,\n verbose = false\n): Promise<T[]> {\n const attempts: T[] = [];\n\n let count = 0;\n const initialAttempt = await fn();\n attempts.push(initialAttempt);\n if (!keepWaitingIf(initialAttempt)) return attempts;\n\n const waitUntil = new Date(Date.now() + secondsToWait * 1000).valueOf();\n let waitTime = 1000;\n let totalWaitTime = waitTime;\n\n while (Date.now() < waitUntil) {\n const lastAttempt = attempts[attempts.length - 1];\n if (lastAttempt === undefined || !keepWaitingIf(lastAttempt)) break;\n\n count++;\n // Wait a beat\n if (verbose) {\n console.info(\n `Waiting ${waitTime}ms before trying again (bringing the total wait time to ${totalWaitTime}ms so far, of total ${\n secondsToWait * 1000\n }ms)`\n );\n }\n await new Promise((res) => setTimeout(res, waitTime));\n // Exponential backoff\n waitTime = waitTime * exponentialFactor;\n if (new Date(Date.now() + waitTime).valueOf() > waitUntil) {\n waitTime = waitUntil - Date.now();\n if (verbose) {\n console.info(`was gonna wait too long; new waitTime: ${waitTime}ms`);\n }\n }\n totalWaitTime = waitTime + totalWaitTime;\n // Try again\n const nextAttempt = await fn(lastAttempt);\n attempts.push(nextAttempt);\n if (verbose && keepWaitingIf(nextAttempt)) {\n console.info(\n `${count}. Called ${fn.name}; ${attempts.length} prev attempts. Most recent: ${JSON.stringify(\n attempts[attempts.length - 1],\n null,\n 2\n )}`\n );\n }\n }\n\n return attempts;\n}\n", "import * as anchor from \"@project-serum/anchor\";\nimport { PublicKey } from \"@solana/web3.js\";\nimport { Big } from \"big.js\";\nimport BN from \"bn.js\";\nimport Web3 from \"web3\";\nimport { TransactionConfig } from \"web3-core\";\nimport { AbiItem } from \"web3-utils\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport {\n ChainSymbol,\n ChainType,\n FeePaymentMethod,\n Messenger,\n SdkError,\n SwapParams,\n TransactionResponse,\n} from \"../../../models\";\nimport { NodeRpcUrlsConfig } from \"../../index\";\nimport { RawTransaction } from \"../../models\";\nimport bridgeAbi from \"../../models/abi/Bridge.json\";\nimport cctpBridgeAbi from \"../../models/abi/CctpBridge.json\";\nimport { Bridge as BridgeContract } from \"../../models/abi/types/Bridge\";\nimport { CctpBridge as CctpBridgeContract } from \"../../models/abi/types/CctpBridge\";\nimport { BaseContract, PayableTransactionObject } from \"../../models/abi/types/types\";\nimport { getAssociatedAccount } from \"../../utils/sol/accounts\";\nimport { buildAnchorProvider } from \"../../utils/sol/anchor-provider\";\nimport { SendParams, TxSendParams, TxSwapParams } from \"../models\";\nimport { ChainBridgeService } from \"../models/bridge\";\nimport { formatAddress, getNonce, prepareTxSendParams, prepareTxSwapParams } from \"../utils\";\n\nexport class EvmBridgeService extends ChainBridgeService {\n chainType: ChainType.EVM = ChainType.EVM;\n\n constructor(public web3: Web3, public api: AllbridgeCoreClient, private nodeRpcUrlsConfig: NodeRpcUrlsConfig) {\n super();\n }\n\n async send(params: SendParams): Promise<TransactionResponse> {\n const rawTransaction = await this.buildRawTransactionSend(params);\n return this.sendRawTransaction(rawTransaction);\n }\n\n async buildRawTransactionSwap(params: SwapParams): Promise<RawTransaction> {\n const txSwapParams = prepareTxSwapParams(this.chainType, params);\n return await this.buildRawTransactionSwapFromParams(txSwapParams);\n }\n\n async buildRawTransactionSwapFromParams(params: TxSwapParams): Promise<RawTransaction> {\n const {\n amount,\n contractAddress,\n fromAccountAddress,\n fromTokenAddress,\n toAccountAddress,\n toTokenAddress,\n minimumReceiveAmount,\n } = params;\n\n const bridgeContract = this.getBridgeContract(contractAddress);\n\n const swapMethod = bridgeContract.methods.swap(\n amount,\n fromTokenAddress,\n toTokenAddress,\n toAccountAddress,\n minimumReceiveAmount\n );\n\n return Promise.resolve({\n from: fromAccountAddress,\n to: contractAddress,\n data: swapMethod.encodeABI(),\n });\n }\n\n async buildRawTransactionSend(params: SendParams): Promise<RawTransaction> {\n const txSendParams = await prepareTxSendParams(this.chainType, params, this.api);\n const {\n amount,\n contractAddress,\n fromAccountAddress,\n fromTokenAddress,\n toChainId,\n toAccountAddress,\n toTokenAddress,\n messenger,\n fee,\n gasFeePaymentMethod,\n extraGas,\n } = txSendParams;\n\n const nonce = \"0x\" + getNonce().toString(\"hex\");\n let sendMethod: PayableTransactionObject<void>;\n let value: string;\n\n let totalFee = fee;\n if (extraGas) {\n totalFee = Big(totalFee).plus(extraGas).toFixed();\n }\n if (messenger === Messenger.CCTP) {\n const cctp = await this.buildRawTransactionCctpSend(params, txSendParams, totalFee);\n sendMethod = cctp.sendMethod;\n value = cctp.value;\n } else {\n const bridgeContract = this.getBridgeContract(contractAddress);\n if (gasFeePaymentMethod === FeePaymentMethod.WITH_STABLECOIN) {\n sendMethod = bridgeContract.methods.swapAndBridge(\n fromTokenAddress,\n amount,\n toAccountAddress,\n toChainId,\n toTokenAddress,\n nonce,\n messenger,\n totalFee\n );\n value = \"0\";\n } else {\n sendMethod = bridgeContract.methods.swapAndBridge(\n fromTokenAddress,\n amount,\n toAccountAddress,\n toChainId,\n toTokenAddress,\n nonce,\n messenger,\n 0\n );\n value = totalFee;\n }\n }\n\n return Promise.resolve({\n from: fromAccountAddress,\n to: contractAddress,\n value: value,\n data: sendMethod.encodeABI(),\n });\n }\n\n private async buildRawTransactionCctpSend(\n params: SendParams,\n txSendParams: TxSendParams,\n totalFee: string\n ): Promise<{\n sendMethod: PayableTransactionObject<void>;\n value: string;\n }> {\n const { amount, contractAddress, toChainId, toAccountAddress, gasFeePaymentMethod } = txSendParams;\n\n const cctpBridgeContract: CctpBridgeContract = this.getContract(cctpBridgeAbi as AbiItem[], contractAddress);\n let sendMethod: PayableTransactionObject<void>;\n let value: string;\n\n if (params.destinationToken.chainType === ChainType.SOLANA) {\n let recipientWalletAddress: string | number[];\n const receiverAccount = new PublicKey(params.toAccountAddress);\n const receiveMint = new PublicKey(params.destinationToken.tokenAddress);\n const receiveUserToken = await getAssociatedAccount(receiverAccount, receiveMint);\n const provider = buildAnchorProvider(\n this.nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.SOL),\n params.toAccountAddress\n );\n anchor.setProvider(provider);\n const accountData = await anchor.Spl.token(provider).account.token.fetchNullable(receiveUserToken);\n if (accountData?.authority.equals(receiverAccount)) {\n recipientWalletAddress = formatAddress(receiveUserToken.toBase58(), ChainType.SOLANA, this.chainType);\n } else {\n const tokenAccounts = await provider.connection.getTokenAccountsByOwner(receiverAccount, {\n mint: receiveMint,\n });\n if (tokenAccounts.value.length === 0 && !accountData) {\n recipientWalletAddress = formatAddress(receiveUserToken.toBase58(), ChainType.SOLANA, this.chainType);\n } else if (tokenAccounts.value.length > 0) {\n const firstTokenAccount = tokenAccounts.value[0];\n\n if (!firstTokenAccount?.pubkey) {\n throw new SdkError(\"First token account or its public key is undefined\");\n }\n recipientWalletAddress = formatAddress(firstTokenAccount.pubkey.toBase58(), ChainType.SOLANA, this.chainType);\n } else {\n throw new SdkError(\"Associated account has wrong owner\");\n }\n }\n\n if (gasFeePaymentMethod === FeePaymentMethod.WITH_STABLECOIN) {\n sendMethod = cctpBridgeContract.methods.bridgeWithWalletAddress(\n amount,\n recipientWalletAddress,\n toAccountAddress,\n toChainId,\n totalFee\n );\n value = \"0\";\n } else {\n sendMethod = cctpBridgeContract.methods.bridgeWithWalletAddress(\n amount,\n recipientWalletAddress,\n toAccountAddress,\n toChainId,\n 0\n );\n value = totalFee;\n }\n } else {\n if (gasFeePaymentMethod === FeePaymentMethod.WITH_STABLECOIN) {\n sendMethod = cctpBridgeContract.methods.bridge(amount, toAccountAddress, toChainId, totalFee);\n value = \"0\";\n } else {\n sendMethod = cctpBridgeContract.methods.bridge(amount, toAccountAddress, toChainId, 0);\n value = totalFee;\n }\n }\n return { sendMethod, value };\n }\n\n private async sendRawTransaction(rawTransaction: RawTransaction) {\n const estimateGas = await this.web3.eth.estimateGas(rawTransaction as TransactionConfig);\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error DISABLE SITE SUGGESTED GAS FEE IN METAMASK\n // prettier-ignore\n const feeOptions: { maxPriorityFeePerGas?: number | string | BN; maxFeePerGas?: number | string | BN } = { maxPriorityFeePerGas: null, maxFeePerGas: null };\n const { transactionHash } = await this.web3.eth.sendTransaction({\n ...(rawTransaction as Object),\n gas: estimateGas,\n ...feeOptions,\n });\n return { txId: transactionHash };\n }\n\n private getContract<T extends BaseContract>(abiItem: AbiItem[], contractAddress: string): T {\n return new this.web3.eth.Contract(abiItem, contractAddress) as any;\n }\n\n private getBridgeContract(contractAddress: string): BridgeContract {\n return this.getContract<BridgeContract>(bridgeAbi as AbiItem[], contractAddress);\n }\n}\n", "[\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_chainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"_chainPrecision\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"contract Messenger\",\n \"name\": \"_allbridgeMessenger\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"contract WormholeMessenger\",\n \"name\": \"_wormholeMessenger\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"contract IGasOracle\",\n \"name\": \"_gasOracle\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"gas\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"BridgingFeeFromTokens\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"previousOwner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"OwnershipTransferred\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"bridgeTransactionCost\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"messageTransactionCost\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"ReceiveFee\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Received\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"recipient\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"sendToken\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"receiveToken\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"sendAmount\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"receiveAmount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Swapped\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"recipient\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"nonce\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"enum MessengerProtocol\",\n \"name\": \"messenger\",\n \"type\": \"uint8\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"message\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"TokensReceived\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"recipient\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"destinationChainId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"receiveToken\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"nonce\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"enum MessengerProtocol\",\n \"name\": \"messenger\",\n \"type\": \"uint8\"\n }\n ],\n \"name\": \"TokensSent\",\n \"type\": \"event\"\n },\n {\n \"stateMutability\": \"payable\",\n \"type\": \"fallback\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_chainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"tokenAddress\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"addBridgeToken\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"contract Pool\",\n \"name\": \"pool\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"token\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"addPool\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"canSwap\",\n \"outputs\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"\",\n \"type\": \"uint8\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"chainId\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"gasUsage\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"destinationChainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"enum MessengerProtocol\",\n \"name\": \"messenger\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"tokenAddress\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"getBridgingCostInTokens\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"enum MessengerProtocol\",\n \"name\": \"protocol\",\n \"type\": \"uint8\"\n }\n ],\n \"name\": \"getMessageCost\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"enum MessengerProtocol\",\n \"name\": \"protocol\",\n \"type\": \"uint8\"\n }\n ],\n \"name\": \"getMessageGasUsage\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getTransactionCost\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"message\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"enum MessengerProtocol\",\n \"name\": \"protocol\",\n \"type\": \"uint8\"\n }\n ],\n \"name\": \"hasReceivedMessage\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"message\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"hasSentMessage\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"recipient\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"sourceChainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"destinationChainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"receiveToken\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"nonce\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"enum MessengerProtocol\",\n \"name\": \"messenger\",\n \"type\": \"uint8\"\n }\n ],\n \"name\": \"hashMessage\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"pure\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"tokenAddress\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"otherBridgeTokens\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"isSupported\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"otherBridges\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"bridgeAddress\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"owner\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"tokenId\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"pools\",\n \"outputs\": [\n {\n \"internalType\": \"contract Pool\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"messageHash\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"processedMessages\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"isProcessed\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"recipient\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"sourceChainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"receiveToken\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"nonce\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"enum MessengerProtocol\",\n \"name\": \"messenger\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"receiveAmountMin\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"receiveTokens\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_chainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"bridgeAddress\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"registerBridge\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_chainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"tokenAddress\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"removeBridgeToken\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"renounceOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"messageHash\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"sentMessages\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"isSent\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"contract Messenger\",\n \"name\": \"_allbridgeMessenger\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"setAllbridgeMessenger\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"contract IGasOracle\",\n \"name\": \"_gasOracle\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"setGasOracle\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"gasAmount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"setGasUsage\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_rebalancer\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"setRebalancer\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_stopAuthority\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"setStopAuthority\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"contract WormholeMessenger\",\n \"name\": \"_wormholeMessenger\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"setWormholeMessenger\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"startSwap\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"stopSwap\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"token\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"receiveToken\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"recipient\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"receiveAmountMin\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"swap\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"token\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"recipient\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"destinationChainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"receiveToken\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"nonce\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"enum MessengerProtocol\",\n \"name\": \"messenger\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"feeTokenAmount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"swapAndBridge\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"transferOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"contract IERC20\",\n \"name\": \"token\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"withdrawBridgingFeeInTokens\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"withdrawGasTokens\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"stateMutability\": \"payable\",\n \"type\": \"receive\"\n }\n]\n", "[\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId_\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainPrecision_\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"tokenAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"cctpMessenger_\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"cctpTransmitter_\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"contract IGasOracle\",\n \"name\": \"gasOracle_\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"previousOwner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"OwnershipTransferred\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"recipient\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"ReceivedExtraGas\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"ReceivedGas\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"nonce\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"newRecipient\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"RecipientReplaced\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"recipientWalletAddress\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"TokensSentExtras\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"recipient\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"destinationChainId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"nonce\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"receivedRelayerFeeFromGas\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"receivedRelayerFeeFromTokens\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"relayerFee\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"receivedRelayerFeeTokenAmount\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"adminFeeTokenAmount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"TokensSent\",\n \"type\": \"event\"\n },\n {\n \"stateMutability\": \"payable\",\n \"type\": \"fallback\"\n },\n {\n \"inputs\": [],\n \"name\": \"adminFeeShareBP\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"recipient\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"destinationChainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"relayerFeeTokenAmount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"bridge\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"recipient\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"recipientWalletAddress\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"destinationChainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"relayerFeeTokenAmount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"bridgeWithWalletAddress\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"chainId\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"originalMessage\",\n \"type\": \"bytes\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"originalAttestation\",\n \"type\": \"bytes\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"newRecipient\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"changeRecipient\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"gasUsage\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"destinationChainId\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getBridgingCostInTokens\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId_\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getDomainByChainId\",\n \"outputs\": [\n {\n \"internalType\": \"uint32\",\n \"name\": \"\",\n \"type\": \"uint32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getTransactionCost\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"sourceChainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"nonce\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"isMessageProcessed\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"owner\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"recipient\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"message\",\n \"type\": \"bytes\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"signature\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"receiveTokens\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId_\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"domain\",\n \"type\": \"uint32\"\n }\n ],\n \"name\": \"registerBridgeDestination\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"renounceOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"adminFeeShareBP_\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"setAdminFeeShare\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"contract IGasOracle\",\n \"name\": \"gasOracle_\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"setGasOracle\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"gasAmount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"setGasUsage\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"transferOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId_\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"unregisterBridgeDestination\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"withdrawFeeInTokens\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"withdrawGas\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"stateMutability\": \"payable\",\n \"type\": \"receive\"\n }\n]\n", "import * as anchor from \"@project-serum/anchor\";\nimport { PublicKey } from \"@solana/web3.js\";\n\nexport async function getAssociatedAccount(publicKey: PublicKey, mintAccount: PublicKey): Promise<PublicKey> {\n return anchor.utils.token.associatedAddress({\n mint: mintAccount,\n owner: publicKey,\n });\n}\n\nexport async function getConfigAccount(programId: PublicKey): Promise<PublicKey> {\n const [configPda] = await PublicKey.findProgramAddress([anchor.utils.bytes.utf8.encode(\"config\")], programId);\n return configPda;\n}\n\nexport async function getLockAccount(nonce: number[], bridgeProgramId: PublicKey): Promise<PublicKey> {\n const [lockPda] = await PublicKey.findProgramAddress(\n [anchor.utils.bytes.utf8.encode(\"lock\"), Uint8Array.from(nonce)],\n bridgeProgramId\n );\n return lockPda;\n}\n\nexport async function getPriceAccount(chainId: number, gasOracleProgramId: PublicKey): Promise<PublicKey> {\n const [pricePda] = await PublicKey.findProgramAddress(\n [anchor.utils.bytes.utf8.encode(\"price_v2\"), Uint8Array.from([chainId])],\n gasOracleProgramId\n );\n return pricePda;\n}\n\nexport async function getAuthorityAccount(bridgeProgramId: PublicKey): Promise<PublicKey> {\n const configAccount = await getConfigAccount(bridgeProgramId);\n const [poolAuthority] = await PublicKey.findProgramAddress([configAccount.toBuffer()], bridgeProgramId);\n return poolAuthority;\n}\n\nexport async function getCctpAuthorityAccount(\n cctpBridgeAccount: PublicKey,\n cctpBridgeProgramId: PublicKey\n): Promise<PublicKey> {\n const [poolAuthority] = await PublicKey.findProgramAddress([cctpBridgeAccount.toBuffer()], cctpBridgeProgramId);\n return poolAuthority;\n}\n\nexport async function getBridgeTokenAccount(mintAccount: PublicKey, bridgeProgramId: PublicKey): Promise<PublicKey> {\n const [poolPda] = await PublicKey.findProgramAddress(\n [anchor.utils.bytes.utf8.encode(\"token\"), mintAccount.toBytes()],\n bridgeProgramId\n );\n return poolPda;\n}\n\nexport async function getOtherChainTokenAccount(\n chainId: number,\n token: Buffer,\n bridgeProgramId: PublicKey\n): Promise<PublicKey> {\n const [otherChainTokenPda] = await PublicKey.findProgramAddress(\n [anchor.utils.bytes.utf8.encode(\"other_bridge_token\"), Buffer.from([chainId]), token],\n bridgeProgramId\n );\n return otherChainTokenPda;\n}\n\nexport async function getChainBridgeAccount(chainId: number, bridgeProgramId: PublicKey): Promise<PublicKey> {\n const [chainBridgePda] = await PublicKey.findProgramAddress(\n [anchor.utils.bytes.utf8.encode(\"chain_bridge\"), Uint8Array.from([chainId])],\n bridgeProgramId\n );\n return chainBridgePda;\n}\n\nexport async function getGasUsageAccount(chainId: number, messengerProgramId: PublicKey): Promise<PublicKey> {\n const [chainBridgePda] = await PublicKey.findProgramAddress(\n [anchor.utils.bytes.utf8.encode(\"gas_usage\"), Uint8Array.from([chainId])],\n messengerProgramId\n );\n return chainBridgePda;\n}\n\nexport async function getSendMessageAccount(\n messageWithSigner: Uint8Array,\n messengerProgramId: PublicKey\n): Promise<PublicKey> {\n const [sentMessagePda] = await PublicKey.findProgramAddress(\n [anchor.utils.bytes.utf8.encode(\"sent_message\"), messageWithSigner],\n messengerProgramId\n );\n return sentMessagePda;\n}\n\nexport async function getUserDepositAccount(\n userPublicKey: PublicKey,\n tokenMintAccount: PublicKey,\n bridgeProgramId: PublicKey\n): Promise<PublicKey> {\n const [userDepositPda] = await PublicKey.findProgramAddress(\n [anchor.utils.bytes.utf8.encode(\"user_deposit\"), tokenMintAccount.toBytes(), userPublicKey.toBytes()],\n bridgeProgramId\n );\n return userDepositPda;\n}\n\nexport async function getCctpBridgeAccount(mintAccount: PublicKey, cctpBridgeProgramId: PublicKey): Promise<PublicKey> {\n const [configPda] = await PublicKey.findProgramAddress(\n [anchor.utils.bytes.utf8.encode(\"cctp_bridge\"), mintAccount.toBytes()],\n cctpBridgeProgramId\n );\n return configPda;\n}\n\nexport async function getCctpBridgeTokenAccount(token: PublicKey, cctpBridgeProgramId: PublicKey): Promise<PublicKey> {\n const [poolPda] = await PublicKey.findProgramAddress(\n [anchor.utils.bytes.utf8.encode(\"token\"), token.toBytes()],\n cctpBridgeProgramId\n );\n return poolPda;\n}\n\nexport function getCctpLockAccount(cctpBridgeProgramId: PublicKey, messageSentEventDataAccount: PublicKey): PublicKey {\n const [tokenMessengerEventAuthority] = PublicKey.findProgramAddressSync(\n [anchor.utils.bytes.utf8.encode(\"lock\"), messageSentEventDataAccount.toBuffer()],\n cctpBridgeProgramId\n );\n return tokenMessengerEventAuthority;\n}\n\nexport function getCctpAccounts(\n domain: number,\n mintAccount: PublicKey,\n cctpTransmitterProgramId: PublicKey,\n cctpTokenMessengerMinter: PublicKey\n) {\n const messageTransmitterAccount = findProgramAddress(\"message_transmitter\", cctpTransmitterProgramId);\n const tokenMessenger = findProgramAddress(\"token_messenger\", cctpTokenMessengerMinter);\n const tokenMessengerEventAuthority = findProgramAddress(\"__event_authority\", cctpTokenMessengerMinter);\n const tokenMinter = findProgramAddress(\"token_minter\", cctpTokenMessengerMinter);\n const localToken = findProgramAddress(\"local_token\", cctpTokenMessengerMinter, [mintAccount]);\n const remoteTokenMessengerKey = findProgramAddress(\"remote_token_messenger\", cctpTokenMessengerMinter, [\n domain.toString(),\n ]);\n const authorityPda = findProgramAddress(\"sender_authority\", cctpTokenMessengerMinter);\n return {\n messageTransmitterAccount,\n tokenMessenger,\n tokenMessengerEventAuthority,\n tokenMinter,\n localToken,\n remoteTokenMessengerKey,\n authorityPda,\n };\n}\n\nfunction findProgramAddress(\n label: string,\n programId: PublicKey,\n extraSeeds: (string | number[] | Buffer | PublicKey)[] = []\n): PublicKey {\n const seeds = [Buffer.from(anchor.utils.bytes.utf8.encode(label))];\n for (const extraSeed of extraSeeds) {\n if (typeof extraSeed === \"string\") {\n seeds.push(Buffer.from(anchor.utils.bytes.utf8.encode(extraSeed)));\n } else if (Array.isArray(extraSeed)) {\n seeds.push(Buffer.from(extraSeed));\n } else if (Buffer.isBuffer(extraSeed)) {\n seeds.push(extraSeed);\n } else {\n seeds.push(extraSeed.toBuffer());\n }\n }\n const res = PublicKey.findProgramAddressSync(seeds, programId);\n return res[0];\n}\n", "import { AnchorProvider, Provider } from \"@project-serum/anchor\";\nimport { Connection, PublicKey } from \"@solana/web3.js\";\n\nexport function buildAnchorProvider(solanaRpcUrl: string, accountAddress: string): Provider {\n const connection = new Connection(solanaRpcUrl, \"confirmed\");\n\n const publicKey = new PublicKey(accountAddress);\n\n return new AnchorProvider(\n connection,\n // @ts-expect-error enough wallet for fetch actions\n { publicKey: publicKey },\n {\n preflightCommitment: \"confirmed\",\n commitment: \"confirmed\",\n }\n );\n}\n", "import { ChainType } from \"../../../chains/chain.enums\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { RawTransaction, TransactionResponse } from \"../../models\";\nimport { SendParams, SwapParams } from \"./bridge.model\";\n\nexport abstract class ChainBridgeService {\n abstract chainType: ChainType;\n abstract api: AllbridgeCoreClient;\n\n /**\n * @Deprecated Use {@link buildRawTransactionSend} or {@link buildRawTransactionSwap} instead<p>\n * Send tokens through the ChainBridgeService\n * @param params\n */\n abstract send(params: SendParams): Promise<TransactionResponse>;\n abstract buildRawTransactionSend(params: SendParams): Promise<RawTransaction>;\n abstract buildRawTransactionSwap(params: SwapParams): Promise<RawTransaction>;\n}\n", "import { PublicKey } from \"@solana/web3.js\";\nimport { Address } from \"@stellar/stellar-sdk\";\nimport { Big, BigSource } from \"big.js\";\nimport randomBytes from \"randombytes\";\n/* @ts-expect-error Could not find a declaration file for module \"tronweb\"*/\nimport * as TronWebLib from \"tronweb\";\nimport { Chains } from \"../../chains\";\nimport { Messenger } from \"../../client/core-api/core-api.model\";\nimport { AllbridgeCoreClient } from \"../../client/core-api/core-client-base\";\nimport {\n AmountNotEnoughError,\n CCTPDoesNotSupportedError,\n ExtraGasMaxLimitExceededError,\n InvalidGasFeePaymentOptionError,\n SdkError,\n} from \"../../exceptions\";\nimport {\n AmountFormat,\n ChainType,\n ExtraGasMaxLimitResponse,\n ExtraGasMaxLimits,\n FeePaymentMethod,\n GasFeeOptions,\n SwapParams,\n} from \"../../models\";\nimport { ChainDetailsMap, TokenWithChainDetails } from \"../../tokens-info\";\nimport { convertAmountPrecision, convertFloatAmountToInt, convertIntAmountToFloat } from \"../../utils/calculation\";\nimport { SendParams, TxSendParams, TxSwapParams } from \"./models\";\n\nexport function formatAddress(address: string, from: ChainType, to: ChainType): string | number[] {\n let buffer: Buffer;\n switch (from) {\n case ChainType.EVM: {\n buffer = evmAddressToBuffer32(address);\n break;\n }\n case ChainType.SOLANA: {\n buffer = new PublicKey(address).toBuffer();\n break;\n }\n case ChainType.TRX: {\n buffer = tronAddressToBuffer32(address);\n break;\n }\n case ChainType.SRB: {\n buffer = new Address(address).toBuffer();\n break;\n }\n }\n\n switch (to) {\n case ChainType.EVM: {\n return \"0x\" + buffer.toString(\"hex\");\n }\n case ChainType.SOLANA: {\n return Array.from(buffer);\n }\n case ChainType.TRX: {\n return buffer.toJSON().data;\n }\n case ChainType.SRB: {\n return buffer.toJSON().data;\n }\n }\n}\n\nexport function hexToBuffer(hex: string): Buffer {\n return Buffer.from(hex.replace(/^0x/i, \"\"), \"hex\");\n}\n\nexport function evmAddressToBuffer32(address: string): Buffer {\n const length = 32;\n const buff = hexToBuffer(address);\n return Buffer.concat([Buffer.alloc(length - buff.length, 0), buff], length);\n}\n\nfunction tronAddressToBuffer32(address: string): Buffer {\n const ethAddress = tronAddressToEthAddress(address);\n const buffer = hexToBuffer(ethAddress);\n return bufferToSize(buffer, 32);\n}\n\nexport function tronAddressToEthAddress(address: string): string {\n return Buffer.from(TronWebLib.utils.crypto.decodeBase58Address(address)).toString(\"hex\").replace(/^41/, \"0x\");\n}\n\nfunction bufferToSize(buffer: Buffer, size: number): Buffer {\n if (buffer.length >= size) {\n return buffer;\n }\n const result = Buffer.alloc(size, 0);\n buffer.copy(result, size - buffer.length);\n return result;\n}\n\nexport function getTokenByTokenAddress(\n chainDetailsMap: ChainDetailsMap,\n chainSymbol: string,\n tokenAddress: string\n): TokenWithChainDetails {\n const chainDetail = chainDetailsMap[chainSymbol];\n if (!chainDetail) {\n throw new SdkError(\"Cannot find chain detail for \" + chainSymbol);\n }\n const token = chainDetail.tokens.find((value) => value.tokenAddress.toUpperCase() === tokenAddress.toUpperCase());\n if (!token) {\n throw new SdkError(\"Cannot find token info about token \" + tokenAddress + \" on chain \" + chainSymbol);\n }\n return token;\n}\n\nexport function getNonce(): Buffer {\n return randomBytes(32);\n}\n\nexport function getNonceBigInt(): bigint {\n const bigint = randomBytes(32).readBigInt64BE();\n if (bigint < 0) {\n return bigint * -1n;\n }\n return bigint;\n}\n\nexport function prepareTxSwapParams(bridgeChainType: ChainType, params: SwapParams): TxSwapParams {\n const txSwapParams = {} as TxSwapParams;\n const sourceToken = params.sourceToken;\n txSwapParams.amount = convertFloatAmountToInt(params.amount, sourceToken.decimals).toFixed();\n txSwapParams.contractAddress = sourceToken.bridgeAddress;\n txSwapParams.fromAccountAddress = params.fromAccountAddress;\n txSwapParams.fromTokenAddress = formatAddress(sourceToken.tokenAddress, bridgeChainType, bridgeChainType);\n txSwapParams.toAccountAddress = params.toAccountAddress;\n txSwapParams.toTokenAddress = formatAddress(params.destinationToken.tokenAddress, bridgeChainType, bridgeChainType);\n txSwapParams.minimumReceiveAmount = params.minimumReceiveAmount\n ? convertFloatAmountToInt(params.minimumReceiveAmount, params.destinationToken.decimals).toFixed()\n : \"0\";\n return txSwapParams;\n}\n\nexport async function prepareTxSendParams(\n bridgeChainType: ChainType,\n params: SendParams,\n api: AllbridgeCoreClient\n): Promise<TxSendParams> {\n const txSendParams = {} as TxSendParams;\n\n txSendParams.fromChainId = params.sourceToken.allbridgeChainId;\n txSendParams.fromChainSymbol = params.sourceToken.chainSymbol;\n const toChainType = Chains.getChainProperty(params.destinationToken.chainSymbol).chainType;\n txSendParams.fromTokenAddress = params.sourceToken.tokenAddress;\n\n txSendParams.toChainId = params.destinationToken.allbridgeChainId;\n txSendParams.toTokenAddress = params.destinationToken.tokenAddress;\n\n if (params.gasFeePaymentMethod === FeePaymentMethod.WITH_STABLECOIN) {\n txSendParams.gasFeePaymentMethod = FeePaymentMethod.WITH_STABLECOIN;\n } else {\n // default FeePaymentMethod.WITH_NATIVE_CURRENCY\n txSendParams.gasFeePaymentMethod = FeePaymentMethod.WITH_NATIVE_CURRENCY;\n }\n const sourceToken = params.sourceToken;\n if (params.messenger === Messenger.CCTP) {\n if (!sourceToken.cctpAddress || !params.destinationToken.cctpAddress) {\n throw new CCTPDoesNotSupportedError(\"Such route does not support CCTP protocol\");\n }\n txSendParams.contractAddress = sourceToken.cctpAddress;\n } else {\n txSendParams.contractAddress = sourceToken.bridgeAddress;\n }\n txSendParams.messenger = params.messenger;\n txSendParams.fromAccountAddress = params.fromAccountAddress;\n txSendParams.amount = convertFloatAmountToInt(params.amount, sourceToken.decimals).toFixed();\n\n //Fee\n let { fee, feeFormat } = params;\n if (!fee) {\n const gasFeeOptions = await getGasFeeOptions(\n txSendParams.fromChainId,\n params.sourceToken.chainType,\n txSendParams.toChainId,\n sourceToken.decimals,\n txSendParams.messenger,\n api\n );\n\n const gasFeeOption = gasFeeOptions[txSendParams.gasFeePaymentMethod];\n if (!gasFeeOption) {\n throw new InvalidGasFeePaymentOptionError();\n }\n fee = gasFeeOption[AmountFormat.INT];\n feeFormat = AmountFormat.INT;\n }\n if (feeFormat == AmountFormat.FLOAT) {\n switch (txSendParams.gasFeePaymentMethod) {\n case FeePaymentMethod.WITH_NATIVE_CURRENCY:\n txSendParams.fee = convertFloatAmountToInt(fee, Chains.getChainDecimalsByType(sourceToken.chainType)).toFixed(\n 0\n );\n break;\n case FeePaymentMethod.WITH_STABLECOIN:\n txSendParams.fee = convertFloatAmountToInt(fee, sourceToken.decimals).toFixed(0);\n break;\n }\n } else {\n txSendParams.fee = fee;\n }\n\n //ExtraGas\n const { extraGas, extraGasFormat } = params;\n if (extraGas && +extraGas > 0) {\n if (extraGasFormat == AmountFormat.FLOAT) {\n switch (txSendParams.gasFeePaymentMethod) {\n case FeePaymentMethod.WITH_NATIVE_CURRENCY:\n txSendParams.extraGas = convertFloatAmountToInt(\n extraGas,\n Chains.getChainDecimalsByType(sourceToken.chainType)\n ).toFixed(0);\n break;\n case FeePaymentMethod.WITH_STABLECOIN:\n txSendParams.extraGas = convertFloatAmountToInt(extraGas, sourceToken.decimals).toFixed(0);\n break;\n }\n } else {\n txSendParams.extraGas = extraGas;\n }\n await validateExtraGasNotExceeded(\n txSendParams.extraGas,\n txSendParams.gasFeePaymentMethod,\n sourceToken,\n params.destinationToken,\n api\n );\n }\n\n txSendParams.fromTokenAddress = formatAddress(txSendParams.fromTokenAddress, bridgeChainType, bridgeChainType);\n txSendParams.toAccountAddress = formatAddress(params.toAccountAddress, toChainType, bridgeChainType);\n txSendParams.toTokenAddress = formatAddress(txSendParams.toTokenAddress, toChainType, bridgeChainType);\n if (txSendParams.gasFeePaymentMethod == FeePaymentMethod.WITH_STABLECOIN) {\n validateAmountEnough(txSendParams.amount, sourceToken.decimals, txSendParams.fee, txSendParams.extraGas);\n }\n return txSendParams;\n}\n\nfunction validateAmountEnough(\n amountInt: BigSource,\n decimals: number,\n feeInt: BigSource,\n extraGasInt: BigSource | undefined\n) {\n const amountTotal = Big(amountInt)\n .minus(feeInt)\n .minus(extraGasInt ?? 0);\n if (amountTotal.lte(0)) {\n throw new AmountNotEnoughError(\n `Amount not enough to pay fee, ${convertIntAmountToFloat(\n Big(amountTotal).minus(1).neg(),\n decimals\n ).toFixed()} stables is missing`\n );\n }\n}\n\nexport async function getGasFeeOptions(\n sourceAllbridgeChainId: number,\n sourceChainType: ChainType,\n destinationAllbridgeChainId: number,\n sourceChainTokenDecimals: number,\n messenger: Messenger,\n api: AllbridgeCoreClient\n): Promise<GasFeeOptions> {\n const transactionCostResponse = await api.getReceiveTransactionCost({\n sourceChainId: sourceAllbridgeChainId,\n destinationChainId: destinationAllbridgeChainId,\n messenger,\n });\n\n const gasFeeOptions: GasFeeOptions = {\n [FeePaymentMethod.WITH_NATIVE_CURRENCY]: {\n [AmountFormat.INT]: transactionCostResponse.fee,\n [AmountFormat.FLOAT]: convertIntAmountToFloat(\n transactionCostResponse.fee,\n Chains.getChainDecimalsByType(sourceChainType)\n ).toFixed(),\n },\n };\n if (transactionCostResponse.sourceNativeTokenPrice) {\n const gasFeeIntWithStables = convertAmountPrecision(\n new Big(transactionCostResponse.fee).mul(transactionCostResponse.sourceNativeTokenPrice),\n Chains.getChainDecimalsByType(sourceChainType),\n sourceChainTokenDecimals\n ).toFixed(0, Big.roundUp);\n gasFeeOptions[FeePaymentMethod.WITH_STABLECOIN] = {\n [AmountFormat.INT]: gasFeeIntWithStables,\n [AmountFormat.FLOAT]: convertIntAmountToFloat(gasFeeIntWithStables, sourceChainTokenDecimals).toFixed(),\n };\n }\n\n return gasFeeOptions;\n}\n\nasync function validateExtraGasNotExceeded(\n extraGasInt: string,\n gasFeePaymentMethod: FeePaymentMethod,\n sourceToken: TokenWithChainDetails,\n destinationToken: TokenWithChainDetails,\n api: AllbridgeCoreClient\n) {\n const extraGasLimits = await getExtraGasMaxLimits(sourceToken, destinationToken, api);\n const extraGasMaxLimit = extraGasLimits.extraGasMax[gasFeePaymentMethod];\n if (!extraGasMaxLimit) {\n throw new InvalidGasFeePaymentOptionError(`Impossible to pay extra gas by '${gasFeePaymentMethod}' payment method`);\n }\n const extraGasMaxIntLimit = extraGasMaxLimit[AmountFormat.INT];\n if (Big(extraGasInt).gt(extraGasMaxIntLimit)) {\n throw new ExtraGasMaxLimitExceededError(\n `Extra gas ${extraGasInt} in int format, exceeded limit ${extraGasMaxIntLimit} for '${gasFeePaymentMethod}' payment method`\n );\n }\n}\n\nexport async function getExtraGasMaxLimits(\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n api: AllbridgeCoreClient\n): Promise<ExtraGasMaxLimitResponse> {\n const extraGasMaxLimits: ExtraGasMaxLimits = {};\n const transactionCostResponse = await api.getReceiveTransactionCost({\n sourceChainId: sourceChainToken.allbridgeChainId,\n destinationChainId: destinationChainToken.allbridgeChainId,\n messenger: Messenger.ALLBRIDGE,\n });\n const maxAmount = destinationChainToken.txCostAmount.maxAmount;\n const maxAmountFloat = convertIntAmountToFloat(\n maxAmount,\n Chains.getChainDecimalsByType(destinationChainToken.chainType)\n ).toFixed();\n const maxAmountFloatInSourceNative = Big(maxAmountFloat)\n .div(transactionCostResponse.exchangeRate)\n .toFixed(Chains.getChainDecimalsByType(sourceChainToken.chainType), Big.roundDown);\n const maxAmountInSourceNative = convertFloatAmountToInt(\n maxAmountFloatInSourceNative,\n Chains.getChainDecimalsByType(sourceChainToken.chainType)\n ).toFixed(0);\n extraGasMaxLimits[FeePaymentMethod.WITH_NATIVE_CURRENCY] = {\n [AmountFormat.INT]: maxAmountInSourceNative,\n [AmountFormat.FLOAT]: maxAmountFloatInSourceNative,\n };\n if (transactionCostResponse.sourceNativeTokenPrice) {\n const maxAmountFloatInStable = Big(maxAmountFloatInSourceNative)\n .mul(transactionCostResponse.sourceNativeTokenPrice)\n .toFixed(sourceChainToken.decimals, Big.roundDown);\n extraGasMaxLimits[FeePaymentMethod.WITH_STABLECOIN] = {\n [AmountFormat.INT]: convertFloatAmountToInt(maxAmountFloatInStable, sourceChainToken.decimals).toFixed(0),\n [AmountFormat.FLOAT]: maxAmountFloatInStable,\n };\n }\n return {\n extraGasMax: extraGasMaxLimits,\n destinationChain: {\n gasAmountMax: {\n [AmountFormat.INT]: maxAmount,\n [AmountFormat.FLOAT]: maxAmountFloat,\n },\n swap: {\n [AmountFormat.INT]: destinationChainToken.txCostAmount.swap,\n [AmountFormat.FLOAT]: convertIntAmountToFloat(\n destinationChainToken.txCostAmount.swap,\n Chains.getChainDecimalsByType(destinationChainToken.chainType)\n ).toFixed(),\n },\n transfer: {\n [AmountFormat.INT]: destinationChainToken.txCostAmount.transfer,\n [AmountFormat.FLOAT]: convertIntAmountToFloat(\n destinationChainToken.txCostAmount.transfer,\n Chains.getChainDecimalsByType(destinationChainToken.chainType)\n ).toFixed(),\n },\n },\n exchangeRate: transactionCostResponse.exchangeRate,\n sourceNativeTokenPrice: transactionCostResponse.sourceNativeTokenPrice,\n };\n}\n\nexport function isSendParams(params: SwapParams | SendParams): params is SendParams {\n return params.sourceToken.chainSymbol !== params.destinationToken.chainSymbol;\n}\n", "import { NodeRpcUrlsConfig } from \"..\";\nimport { AllbridgeCoreClient } from \"../../client/core-api/core-client-base\";\nimport { AllbridgeCoreSdkOptions } from \"../../index\";\nimport { validateAmountDecimals, validateAmountGtZero } from \"../../utils/utils\";\nimport { Provider, RawTransaction } from \"../models\";\nimport { TokenService } from \"../token\";\nimport { ApproveParams, SendParams, SwapParams } from \"./models\";\nimport { isSendParams } from \"./utils\";\nimport { getChainBridgeService, getSpender } from \"./index\";\n\nexport interface RawBridgeTransactionBuilder {\n /**\n * Creates a Raw Transaction for approving tokens usage by the bridge\n * @param provider - will be used to access the network\n * @param approveData\n */\n approve(provider: Provider, approveData: ApproveParams): Promise<RawTransaction>;\n /**\n * Creates a Raw Transaction for approving tokens usage by the bridge\n * @param approveData\n */\n approve(approveData: ApproveParams): Promise<RawTransaction>;\n /**\n * Creates a Raw Transaction for initiating the transfer of tokens\n * @param params\n * @param provider - will be used to access the network\n */\n send(params: SwapParams | SendParams, provider?: Provider): Promise<RawTransaction>;\n}\n\nexport class DefaultRawBridgeTransactionBuilder implements RawBridgeTransactionBuilder {\n constructor(\n private api: AllbridgeCoreClient,\n private nodeRpcUrlsConfig: NodeRpcUrlsConfig,\n private params: AllbridgeCoreSdkOptions,\n private tokenService: TokenService\n ) {}\n\n async approve(a: Provider | ApproveParams, b?: ApproveParams): Promise<RawTransaction> {\n let provider: Provider | undefined;\n let approveData: ApproveParams;\n if (b) {\n provider = a as Provider;\n approveData = b;\n } else {\n approveData = a as ApproveParams;\n }\n const spender = getSpender(approveData.token, approveData.messenger);\n return this.tokenService.buildRawTransactionApprove(\n {\n ...approveData,\n spender,\n },\n provider\n );\n }\n\n async send(params: SwapParams | SendParams, provider?: Provider): Promise<RawTransaction> {\n validateAmountGtZero(params.amount);\n validateAmountDecimals(\"amount\", params.amount, params.sourceToken.decimals);\n if (isSendParams(params)) {\n return getChainBridgeService(\n params.sourceToken.chainSymbol,\n this.api,\n this.nodeRpcUrlsConfig,\n this.params,\n provider\n ).buildRawTransactionSend(params);\n }\n return getChainBridgeService(\n params.sourceToken.chainSymbol,\n this.api,\n this.nodeRpcUrlsConfig,\n this.params,\n provider\n ).buildRawTransactionSwap(params);\n }\n}\n", "/* eslint-disable @typescript-eslint/ban-ts-comment */\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { BN, Program, Spl, web3 } from \"@project-serum/anchor\";\nimport {\n Connection,\n Keypair,\n PublicKey,\n SystemProgram,\n Transaction,\n TransactionInstruction,\n TransactionMessageArgs,\n VersionedTransaction,\n} from \"@solana/web3.js\";\nimport { Big } from \"big.js\";\nimport { Chains } from \"../../../chains\";\nimport { Messenger } from \"../../../client/core-api/core-api.model\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport {\n AmountNotEnoughError,\n CCTPDoesNotSupportedError,\n JupiterError,\n MethodNotSupportedError,\n SdkError,\n SdkRootError,\n} from \"../../../exceptions\";\nimport { ChainType, FeePaymentMethod, SwapParams, TxFeeParams } from \"../../../models\";\nimport { convertIntAmountToFloat } from \"../../../utils/calculation\";\nimport { RawTransaction, TransactionResponse } from \"../../models\";\nimport { SwapAndBridgeSolData, SwapAndBridgeSolDataCctpData } from \"../../models/sol\";\nimport { Bridge as BridgeType, IDL as bridgeIdl } from \"../../models/sol/types/bridge\";\nimport { CctpBridge as CctpBridgeType, IDL as cctpBridgeIdl } from \"../../models/sol/types/cctp_bridge\";\nimport { getMessage, getTokenAccountData, getVUsdAmount } from \"../../utils/sol\";\nimport {\n getAssociatedAccount,\n getAuthorityAccount,\n getBridgeTokenAccount,\n getCctpAccounts,\n getCctpAuthorityAccount,\n getCctpBridgeAccount,\n getCctpBridgeTokenAccount,\n getCctpLockAccount,\n getChainBridgeAccount,\n getConfigAccount,\n getGasUsageAccount,\n getLockAccount,\n getOtherChainTokenAccount,\n getPriceAccount,\n getSendMessageAccount,\n} from \"../../utils/sol/accounts\";\nimport { buildAnchorProvider } from \"../../utils/sol/anchor-provider\";\nimport { addUnitLimitAndUnitPriceToTx, addUnitLimitAndUnitPriceToVersionedTx } from \"../../utils/sol/compute-budget\";\nimport { SendParams, TxSendParams, TxSwapParams } from \"../models\";\nimport { ChainBridgeService } from \"../models/bridge\";\nimport { getNonce, prepareTxSendParams, prepareTxSwapParams } from \"../utils\";\nimport { JupiterService } from \"./jupiter\";\n\nexport interface SolanaBridgeParams {\n wormholeMessengerProgramId: string;\n solanaLookUpTable: string;\n cctpParams: CctpParams;\n jupiterUrl: string;\n}\n\nexport interface CctpParams {\n cctpTransmitterProgramId: string;\n cctpTokenMessengerMinter: string;\n cctpDomains: CctpDomains;\n}\n\n/**\n * Type representing a map of CCTP domains to their corresponding numeric values.\n *\n * @typedef {Record<string, number>} CctpDomains\n * @property {string} chainSymbol - The symbol of the chain representing one of the supported blockchain networks (e.g., \"ETH\" for Ethereum). For more details, see: {@link ChainSymbol}.\n * @property {number} value - The numeric value associated with the specified chain.\n */\nexport type CctpDomains = Record<string, number>;\n\nconst COMPUTE_UNIT_LIMIT = 1000000;\n\nconst JUP_ADD_INDEX = 1.1;\n\nexport class SolanaBridgeService extends ChainBridgeService {\n chainType: ChainType.SOLANA = ChainType.SOLANA;\n jupiterService: JupiterService;\n\n constructor(public solanaRpcUrl: string, public params: SolanaBridgeParams, public api: AllbridgeCoreClient) {\n super();\n this.jupiterService = new JupiterService(solanaRpcUrl, params.jupiterUrl);\n }\n\n async buildRawTransactionSwap(params: SwapParams): Promise<RawTransaction> {\n const txSwapParams = prepareTxSwapParams(this.chainType, params);\n return await this.buildSwapTransaction(\n txSwapParams,\n params.sourceToken.poolAddress,\n params.destinationToken.poolAddress,\n params.txFeeParams\n );\n }\n\n private async buildSwapTransaction(\n params: TxSwapParams,\n poolAddress: string,\n toPoolAddress: string,\n txFeeParams?: TxFeeParams\n ): Promise<VersionedTransaction> {\n const {\n fromAccountAddress,\n amount,\n contractAddress,\n fromTokenAddress,\n toTokenAddress,\n toAccountAddress,\n minimumReceiveAmount,\n } = params;\n const account = fromAccountAddress;\n const bridgeAddress = contractAddress;\n const tokenAddress = fromTokenAddress;\n const receiveTokenAddress = toTokenAddress;\n const receivePoolAddress = toPoolAddress;\n const receiverOriginal = toAccountAddress;\n\n const userAccount = new PublicKey(account);\n const provider = buildAnchorProvider(this.solanaRpcUrl, userAccount.toString());\n const bridge = new Program<BridgeType>(bridgeIdl, bridgeAddress, provider);\n\n const bridgeAuthority = await getAuthorityAccount(bridge.programId);\n const configAccount = await getConfigAccount(bridge.programId);\n\n const sendMint = new PublicKey(tokenAddress);\n const sendBridgeToken = await getBridgeTokenAccount(sendMint, bridge.programId);\n const sendPool = new PublicKey(poolAddress);\n const sendUserToken = await getAssociatedAccount(userAccount, sendMint);\n\n const receiverAccount = new PublicKey(receiverOriginal);\n const receiveMint = new PublicKey(receiveTokenAddress);\n const receiveBridgeToken = await getBridgeTokenAccount(receiveMint, bridge.programId);\n const receivePool = new PublicKey(receivePoolAddress);\n const receiveUserToken = await getAssociatedAccount(receiverAccount, receiveMint);\n\n const preInstructions: TransactionInstruction[] = [\n web3.ComputeBudgetProgram.setComputeUnitLimit({\n units: COMPUTE_UNIT_LIMIT,\n }),\n ];\n\n try {\n await getTokenAccountData(receiveUserToken, provider);\n } catch (e) {\n const associatedProgram = Spl.associatedToken(provider);\n const createReceiveUserTokenInstruction: TransactionInstruction = await associatedProgram.methods\n .create()\n .accounts({\n mint: receiveMint,\n owner: receiverAccount,\n associatedAccount: receiveUserToken,\n })\n .instruction();\n preInstructions.push(createReceiveUserTokenInstruction);\n }\n const transaction = await bridge.methods\n .swap(new BN(amount), new BN(minimumReceiveAmount || 0))\n .accounts({\n payer: userAccount,\n config: configAccount,\n bridgeAuthority,\n user: userAccount,\n sendBridgeToken,\n sendMint,\n sendPool,\n sendUserToken,\n receiveBridgeToken,\n receiveMint,\n receivePool,\n receiveUserToken,\n })\n .preInstructions(preInstructions)\n .transaction();\n\n const connection = provider.connection;\n transaction.recentBlockhash = (await connection.getLatestBlockhash()).blockhash;\n transaction.feePayer = userAccount;\n await addUnitLimitAndUnitPriceToTx(transaction, txFeeParams, this.solanaRpcUrl);\n return await this.convertToVersionedTransaction(transaction, connection);\n }\n\n async buildRawTransactionSend(params: SendParams): Promise<RawTransaction> {\n const txSendParams = await prepareTxSendParams(this.chainType, params, this.api);\n let solTxSendParams = this.addPoolAddress(params, txSendParams);\n\n const isJupiterForStableCoin = solTxSendParams.gasFeePaymentMethod == FeePaymentMethod.WITH_STABLECOIN;\n\n let jupTx;\n if (isJupiterForStableCoin) {\n try {\n const { tx, solTxSendUpdatedParams } = await this.processJup(solTxSendParams, params, true);\n jupTx = tx;\n solTxSendParams = { ...solTxSendParams, ...solTxSendUpdatedParams };\n } catch (e) {\n try {\n const { tx, solTxSendUpdatedParams } = await this.processJup(solTxSendParams, params, false);\n jupTx = tx;\n solTxSendParams = { ...solTxSendParams, ...solTxSendUpdatedParams };\n } catch (e) {\n if (e instanceof SdkRootError) {\n throw e;\n }\n if (e instanceof Error && e.message) {\n throw new JupiterError(`Some error occurred during creation Jupiter swap transaction. ${e.message}`);\n }\n throw new JupiterError(\"Some error occurred during creation Jupiter swap transaction\");\n }\n }\n }\n\n let swapAndBridgeTx: VersionedTransaction;\n let requiredMessageSigner: Keypair | undefined = undefined;\n switch (txSendParams.messenger) {\n case Messenger.ALLBRIDGE: {\n const swapAndBridgeSolData = await this.prepareSwapAndBridgeData(solTxSendParams);\n swapAndBridgeTx = await this.buildSwapAndBridgeAllbridgeTransaction(swapAndBridgeSolData);\n break;\n }\n case Messenger.WORMHOLE: {\n const swapAndBridgeSolData = await this.prepareSwapAndBridgeData(solTxSendParams);\n const { transaction, messageAccount } = await this.buildSwapAndBridgeWormholeTransaction(swapAndBridgeSolData);\n swapAndBridgeTx = transaction;\n requiredMessageSigner = messageAccount;\n break;\n }\n case Messenger.CCTP: {\n const swapAndBridgeSolData = await this.prepareSwapAndBridgeCctpData(solTxSendParams);\n const { transaction, messageSentEventDataKeypair } = await this.buildSwapAndBridgeCctpTransaction(\n params.destinationToken.chainSymbol,\n swapAndBridgeSolData\n );\n swapAndBridgeTx = transaction;\n requiredMessageSigner = messageSentEventDataKeypair;\n break;\n }\n }\n\n if (isJupiterForStableCoin) {\n if (!jupTx) {\n throw new JupiterError(\"Swap tx is absent\");\n }\n swapAndBridgeTx = await this.jupiterService.amendJupiterWithSdkTx(jupTx, swapAndBridgeTx);\n }\n\n await addUnitLimitAndUnitPriceToVersionedTx(swapAndBridgeTx, params.txFeeParams, this.solanaRpcUrl);\n\n if (requiredMessageSigner) {\n swapAndBridgeTx.sign([requiredMessageSigner]);\n }\n return swapAndBridgeTx;\n }\n\n private async processJup(\n solTxSendParams: SolTxSendParams,\n params: SendParams,\n exactOut: boolean\n ): Promise<{\n tx: VersionedTransaction;\n solTxSendUpdatedParams: {\n amount: string;\n fee: string;\n extraGas?: string;\n gasFeePaymentMethod: FeePaymentMethod;\n };\n }> {\n const { fee, extraGas, gasFeePaymentMethod } = await this.convertStableCoinFeeAndExtraGasToNativeCurrency(\n params.sourceToken.decimals,\n solTxSendParams\n );\n\n let amountToProcess = exactOut ? Big(fee) : Big(solTxSendParams.fee);\n if (extraGas) {\n amountToProcess = amountToProcess.plus(extraGas);\n }\n if (!exactOut) {\n amountToProcess = amountToProcess.mul(JUP_ADD_INDEX);\n }\n\n const { tx, amountIn } = await this.jupiterService.getJupiterSwapTx(\n params.fromAccountAddress,\n params.sourceToken.tokenAddress,\n amountToProcess.toFixed(0),\n exactOut\n );\n\n let newAmount: string;\n if (exactOut) {\n if (!amountIn) {\n throw new JupiterError(\"Cannot get inAmount\");\n }\n newAmount = Big(solTxSendParams.amount).minus(Big(amountIn).mul(JUP_ADD_INDEX)).toFixed(0);\n } else {\n newAmount = Big(solTxSendParams.amount).minus(amountToProcess).toFixed(0);\n }\n if (Big(newAmount).lte(0)) {\n throw new AmountNotEnoughError(\n `Amount not enough to pay fee, ${convertIntAmountToFloat(\n Big(newAmount).minus(1).neg(),\n params.sourceToken.decimals\n ).toFixed()} stables is missing`\n );\n }\n return {\n tx: tx,\n solTxSendUpdatedParams: {\n amount: newAmount,\n fee: fee,\n extraGas: extraGas,\n gasFeePaymentMethod: gasFeePaymentMethod,\n },\n };\n }\n\n private addPoolAddress(params: SendParams, txSendParams: TxSendParams): SolTxSendParams {\n return {\n ...txSendParams,\n poolAddress: params.sourceToken.poolAddress,\n };\n }\n\n async convertStableCoinFeeAndExtraGasToNativeCurrency(\n tokenDecimals: number,\n solTxSendParams: SolTxSendParams\n ): Promise<{ fee: string; extraGas?: string; gasFeePaymentMethod: FeePaymentMethod }> {\n if (solTxSendParams.gasFeePaymentMethod == FeePaymentMethod.WITH_STABLECOIN) {\n const sourceNativeTokenPrice = (\n await this.api.getReceiveTransactionCost({\n sourceChainId: solTxSendParams.fromChainId,\n destinationChainId: solTxSendParams.toChainId,\n messenger: solTxSendParams.messenger,\n })\n ).sourceNativeTokenPrice;\n const fee = Big(solTxSendParams.fee)\n .div(sourceNativeTokenPrice)\n .mul(Big(10).pow(Chains.getChainDecimalsByType(ChainType.SOLANA) - tokenDecimals))\n .toFixed(0);\n let extraGas;\n if (solTxSendParams.extraGas) {\n extraGas = Big(solTxSendParams.extraGas)\n .div(sourceNativeTokenPrice)\n .mul(Big(10).pow(Chains.getChainDecimalsByType(ChainType.SOLANA) - tokenDecimals))\n .toFixed(0);\n }\n return { fee, extraGas, gasFeePaymentMethod: FeePaymentMethod.WITH_NATIVE_CURRENCY };\n }\n return {\n fee: solTxSendParams.fee,\n extraGas: solTxSendParams.extraGas,\n gasFeePaymentMethod: FeePaymentMethod.WITH_NATIVE_CURRENCY,\n };\n }\n\n private getExtraGasInstruction(\n extraGas: string,\n userAccount: PublicKey,\n configAccount: PublicKey\n ): TransactionInstruction | undefined {\n return web3.SystemProgram.transfer({\n fromPubkey: userAccount,\n toPubkey: configAccount,\n lamports: +extraGas,\n });\n }\n\n private async prepareSwapAndBridgeData(txSendParams: SolTxSendParams): Promise<SwapAndBridgeSolData> {\n const {\n amount,\n contractAddress,\n fromChainId,\n fromAccountAddress,\n fromTokenAddress,\n toChainId,\n toAccountAddress,\n toTokenAddress,\n poolAddress,\n extraGas,\n } = txSendParams;\n const tokenAddress = fromTokenAddress;\n const account = fromAccountAddress;\n const destinationChainId = toChainId;\n const receiveTokenAddress = toTokenAddress;\n const receiverInBuffer32 = toAccountAddress;\n const bridgeAddress = contractAddress;\n const sourceChainId = fromChainId;\n\n const provider = buildAnchorProvider(this.solanaRpcUrl, account);\n const bridge = new Program<BridgeType>(bridgeIdl, bridgeAddress, provider);\n const nonce = Array.from(getNonce());\n const poolAccount = new PublicKey(poolAddress);\n const vUsdAmount = await getVUsdAmount(amount, bridge, poolAccount);\n\n const lockAccount = await getLockAccount(nonce, bridge.programId);\n const bridgeAuthority = await getAuthorityAccount(bridge.programId);\n const userToken = await getAssociatedAccount(new PublicKey(account), new PublicKey(tokenAddress));\n const bridgeTokenAccount = await getBridgeTokenAccount(new PublicKey(tokenAddress), bridge.programId);\n const chainBridgeAccount = await getChainBridgeAccount(destinationChainId, bridge.programId);\n const otherBridgeTokenAccount = await getOtherChainTokenAccount(\n destinationChainId,\n Buffer.from(receiveTokenAddress),\n bridge.programId\n );\n\n const configAccount = await getConfigAccount(bridge.programId);\n const configAccountInfo = await bridge.account.config.fetch(configAccount);\n const priceAccount = await getPriceAccount(destinationChainId, configAccountInfo.gasOracleProgramId);\n const thisGasPriceAccount = await getPriceAccount(sourceChainId, configAccountInfo.gasOracleProgramId);\n\n const message = getMessage({\n amount: vUsdAmount,\n recipient: Buffer.from(receiverInBuffer32),\n nonce: Buffer.from(nonce),\n receiveToken: Buffer.from(receiveTokenAddress),\n destinationChainId,\n sourceChainId,\n chainBridge: (await getAuthorityAccount(bridge.programId)).toBuffer(),\n });\n\n const swapAndBridgeData = {} as SwapAndBridgeSolData;\n\n swapAndBridgeData.bridge = bridge;\n swapAndBridgeData.amount = new BN(amount);\n swapAndBridgeData.vusdAmount = new BN(vUsdAmount);\n swapAndBridgeData.nonce = nonce;\n // @ts-expect-error\n swapAndBridgeData.recipient = Array.from(receiverInBuffer32);\n // @ts-expect-error\n swapAndBridgeData.receiveToken = Array.from(receiveTokenAddress);\n swapAndBridgeData.poolAccount = poolAccount;\n swapAndBridgeData.lockAccount = lockAccount;\n swapAndBridgeData.bridgeAuthority = bridgeAuthority;\n swapAndBridgeData.userToken = userToken;\n swapAndBridgeData.bridgeTokenAccount = bridgeTokenAccount;\n swapAndBridgeData.chainBridgeAccount = chainBridgeAccount;\n swapAndBridgeData.otherBridgeTokenAccount = otherBridgeTokenAccount;\n swapAndBridgeData.userAccount = new PublicKey(account);\n swapAndBridgeData.destinationChainId = destinationChainId;\n // @ts-expect-error\n swapAndBridgeData.mint = new PublicKey(tokenAddress);\n swapAndBridgeData.config = configAccount;\n swapAndBridgeData.configAccountInfo = configAccountInfo;\n swapAndBridgeData.gasPrice = priceAccount;\n swapAndBridgeData.thisGasPrice = thisGasPriceAccount;\n swapAndBridgeData.message = message;\n\n if (extraGas) {\n swapAndBridgeData.extraGasInstruction = this.getExtraGasInstruction(\n extraGas,\n swapAndBridgeData.userAccount,\n configAccount\n );\n }\n return swapAndBridgeData;\n }\n\n private async buildSwapAndBridgeAllbridgeTransaction(\n swapAndBridgeData: SwapAndBridgeSolData\n ): Promise<VersionedTransaction> {\n const {\n bridge,\n vusdAmount,\n nonce,\n recipient,\n receiveToken,\n poolAccount,\n lockAccount,\n bridgeAuthority,\n userToken,\n bridgeTokenAccount,\n chainBridgeAccount,\n otherBridgeTokenAccount,\n userAccount,\n destinationChainId,\n mint,\n config,\n configAccountInfo,\n gasPrice,\n thisGasPrice,\n message,\n extraGasInstruction,\n } = swapAndBridgeData;\n const allbridgeMessengerProgramId = configAccountInfo.allbridgeMessengerProgramId;\n const messengerGasUsageAccount = await getGasUsageAccount(destinationChainId, allbridgeMessengerProgramId);\n const messengerConfig = await getConfigAccount(allbridgeMessengerProgramId);\n\n const sentMessageAccount = await getSendMessageAccount(message, allbridgeMessengerProgramId);\n\n const instructions: TransactionInstruction[] = [];\n if (extraGasInstruction) {\n instructions.push(extraGasInstruction);\n }\n\n const transaction = await bridge.methods\n .swapAndBridge({\n vusdAmount,\n nonce,\n destinationChainId,\n recipient,\n receiveToken,\n })\n .accounts({\n mint,\n user: userAccount,\n config,\n lock: lockAccount,\n pool: poolAccount,\n gasPrice,\n thisGasPrice,\n bridgeAuthority,\n userToken,\n bridgeToken: bridgeTokenAccount,\n chainBridge: chainBridgeAccount,\n messenger: allbridgeMessengerProgramId,\n messengerGasUsage: messengerGasUsageAccount,\n messengerConfig,\n sentMessageAccount,\n otherBridgeToken: otherBridgeTokenAccount,\n })\n .preInstructions([\n web3.ComputeBudgetProgram.setComputeUnitLimit({\n units: COMPUTE_UNIT_LIMIT,\n }),\n ])\n .postInstructions(instructions)\n .transaction();\n const connection = buildAnchorProvider(this.solanaRpcUrl, userAccount.toString()).connection;\n transaction.recentBlockhash = (await connection.getLatestBlockhash()).blockhash;\n transaction.feePayer = userAccount;\n return await this.convertToVersionedTransaction(transaction, connection);\n }\n\n private async convertToVersionedTransaction(tx: Transaction, connection: Connection): Promise<VersionedTransaction> {\n const allbridgeTableAccount = await connection\n .getAddressLookupTable(new PublicKey(this.params.solanaLookUpTable))\n .then((res) => res.value);\n if (!allbridgeTableAccount) {\n throw new SdkError(\"Cannot find allbridgeLookupTableAccount\");\n }\n const messageV0 = new web3.TransactionMessage({\n payerKey: tx.feePayer,\n recentBlockhash: tx.recentBlockhash,\n instructions: tx.instructions,\n } as TransactionMessageArgs).compileToV0Message([allbridgeTableAccount]);\n return new web3.VersionedTransaction(messageV0);\n }\n\n private async buildSwapAndBridgeWormholeTransaction(\n swapAndBridgeData: SwapAndBridgeSolData\n ): Promise<{ transaction: VersionedTransaction; messageAccount: Keypair }> {\n const {\n bridge,\n vusdAmount,\n nonce,\n recipient,\n receiveToken,\n poolAccount,\n lockAccount,\n bridgeAuthority,\n userToken,\n bridgeTokenAccount,\n chainBridgeAccount,\n otherBridgeTokenAccount,\n userAccount,\n destinationChainId,\n mint,\n config,\n configAccountInfo,\n gasPrice,\n thisGasPrice,\n message,\n extraGasInstruction,\n } = swapAndBridgeData;\n const wormholeProgramId = this.params.wormholeMessengerProgramId;\n\n const [whBridgeAccount] = PublicKey.findProgramAddressSync(\n [Buffer.from(\"Bridge\")],\n new PublicKey(wormholeProgramId)\n );\n const [whFeeCollectorAccount] = PublicKey.findProgramAddressSync(\n [Buffer.from(\"fee_collector\")],\n new PublicKey(wormholeProgramId)\n );\n const [whSequenceAccount] = PublicKey.findProgramAddressSync(\n [Buffer.from(\"Sequence\"), bridgeAuthority.toBuffer()],\n new PublicKey(wormholeProgramId)\n );\n\n const messengerGasUsageAccount = await getGasUsageAccount(\n destinationChainId,\n configAccountInfo.wormholeMessengerProgramId\n );\n const wormholeMessengerConfigAccount = await getConfigAccount(configAccountInfo.wormholeMessengerProgramId);\n const messageAccount = Keypair.generate();\n\n const provider = buildAnchorProvider(this.solanaRpcUrl, userAccount.toString());\n\n const bridgeAccountInfo = await provider.connection.getAccountInfo(whBridgeAccount);\n if (bridgeAccountInfo == null) {\n throw new SdkError(\"Cannot fetch wormhole bridge account info\");\n }\n const feeLamports = new BN(bridgeAccountInfo.data.slice(16, 24), \"le\").toString();\n\n const feeInstruction = SystemProgram.transfer({\n fromPubkey: userAccount,\n toPubkey: whFeeCollectorAccount,\n lamports: +feeLamports,\n });\n\n const instructions: TransactionInstruction[] = [];\n if (extraGasInstruction) {\n instructions.push(extraGasInstruction);\n }\n\n const accounts = {\n mint,\n user: userAccount,\n config,\n lock: lockAccount,\n pool: poolAccount,\n gasPrice,\n thisGasPrice,\n bridgeAuthority,\n userToken,\n bridgeToken: bridgeTokenAccount,\n chainBridge: chainBridgeAccount,\n otherBridgeToken: otherBridgeTokenAccount,\n messengerGasUsage: messengerGasUsageAccount,\n wormholeProgram: wormholeProgramId,\n bridge: whBridgeAccount,\n message: messageAccount.publicKey,\n wormholeMessenger: configAccountInfo.wormholeMessengerProgramId,\n sequence: whSequenceAccount,\n feeCollector: whFeeCollectorAccount,\n wormholeMessengerConfig: wormholeMessengerConfigAccount,\n clock: web3.SYSVAR_CLOCK_PUBKEY,\n };\n\n const transaction = await bridge.methods\n .swapAndBridgeWormhole({\n vusdAmount,\n nonce: nonce,\n destinationChainId,\n recipient,\n receiveToken,\n })\n .accounts(accounts)\n .preInstructions([\n web3.ComputeBudgetProgram.setComputeUnitLimit({\n units: COMPUTE_UNIT_LIMIT,\n }),\n feeInstruction,\n ])\n .postInstructions(instructions)\n .signers([messageAccount])\n .transaction();\n transaction.recentBlockhash = (await provider.connection.getLatestBlockhash()).blockhash;\n transaction.feePayer = userAccount;\n return { transaction: await this.convertToVersionedTransaction(transaction, provider.connection), messageAccount };\n }\n\n private async prepareSwapAndBridgeCctpData(txSendParams: SolTxSendParams): Promise<SwapAndBridgeSolDataCctpData> {\n const {\n contractAddress,\n amount,\n fromAccountAddress,\n fromTokenAddress,\n toChainId,\n toAccountAddress,\n toTokenAddress,\n extraGas,\n } = txSendParams;\n const cctpAddress = contractAddress;\n if (!cctpAddress) {\n throw new CCTPDoesNotSupportedError(\"Such route does not support CCTP protocol\");\n }\n const CHAIN_ID = 4;\n\n const account = fromAccountAddress;\n const receiveTokenAddress = toTokenAddress;\n const receiverInBuffer32 = toAccountAddress;\n\n const provider = buildAnchorProvider(this.solanaRpcUrl, account);\n const cctpBridge: Program<CctpBridgeType> = new Program<CctpBridgeType>(cctpBridgeIdl, cctpAddress, provider);\n const mint = new PublicKey(fromTokenAddress);\n const cctpBridgeAccount = await getCctpBridgeAccount(mint, cctpBridge.programId);\n const userAccount = new PublicKey(account);\n\n const configAccountInfo = await cctpBridge.account.cctpBridge.fetch(cctpBridgeAccount);\n\n const swapAndBridgeData = {} as SwapAndBridgeSolDataCctpData;\n\n swapAndBridgeData.cctpBridge = cctpBridge;\n swapAndBridgeData.cctpBridgeAccount = cctpBridgeAccount;\n swapAndBridgeData.cctpAddressAccount = new PublicKey(cctpAddress);\n swapAndBridgeData.amount = new BN(amount);\n // @ts-expect-error\n swapAndBridgeData.recipient = Array.from(receiverInBuffer32);\n // @ts-expect-error\n swapAndBridgeData.receiveToken = Array.from(receiveTokenAddress);\n swapAndBridgeData.userToken = await getAssociatedAccount(userAccount, mint);\n swapAndBridgeData.bridgeAuthority = await getCctpAuthorityAccount(cctpBridgeAccount, cctpBridge.programId);\n swapAndBridgeData.bridgeTokenAccount = await getCctpBridgeTokenAccount(mint, cctpBridge.programId);\n swapAndBridgeData.chainBridgeAccount = await getChainBridgeAccount(toChainId, cctpBridge.programId);\n swapAndBridgeData.userAccount = userAccount;\n swapAndBridgeData.destinationChainId = toChainId;\n swapAndBridgeData.mint = mint;\n swapAndBridgeData.gasPrice = await getPriceAccount(toChainId, configAccountInfo.gasOracleProgramId);\n swapAndBridgeData.thisGasPrice = await getPriceAccount(CHAIN_ID, configAccountInfo.gasOracleProgramId);\n swapAndBridgeData.provider = provider;\n\n if (extraGas) {\n swapAndBridgeData.extraGasInstruction = this.getExtraGasInstruction(\n extraGas,\n swapAndBridgeData.userAccount,\n cctpBridgeAccount\n );\n }\n return swapAndBridgeData;\n }\n\n async buildSwapAndBridgeCctpTransaction(\n destinationChainSymbol: string,\n swapAndBridgeData: SwapAndBridgeSolDataCctpData\n ): Promise<{ transaction: VersionedTransaction; messageSentEventDataKeypair: Keypair }> {\n const {\n cctpBridge,\n cctpBridgeAccount,\n amount,\n recipient,\n receiveToken,\n bridgeAuthority,\n userToken,\n bridgeTokenAccount,\n chainBridgeAccount,\n userAccount,\n destinationChainId,\n mint,\n gasPrice,\n thisGasPrice,\n extraGasInstruction,\n provider,\n } = swapAndBridgeData;\n const domain = this.params.cctpParams.cctpDomains[destinationChainSymbol];\n const cctpTransmitterProgramIdAddress = this.params.cctpParams.cctpTransmitterProgramId;\n const cctpTokenMessengerMinterAddress = this.params.cctpParams.cctpTokenMessengerMinter;\n if (domain == undefined || !cctpTransmitterProgramIdAddress || !cctpTokenMessengerMinterAddress) {\n throw new SdkError(\"CCTP is not configured\");\n }\n const cctpTransmitterProgramId = new PublicKey(cctpTransmitterProgramIdAddress);\n const cctpTokenMessengerMinter = new PublicKey(cctpTokenMessengerMinterAddress);\n const {\n messageTransmitterAccount,\n tokenMessenger,\n tokenMessengerEventAuthority,\n tokenMinter,\n localToken,\n remoteTokenMessengerKey,\n authorityPda,\n } = getCctpAccounts(domain, mint, cctpTransmitterProgramId, cctpTokenMessengerMinter);\n\n const instructions: TransactionInstruction[] = [];\n if (extraGasInstruction) {\n instructions.push(extraGasInstruction);\n }\n\n const messageSentEventDataKeypair = Keypair.generate();\n const lockAccount = getCctpLockAccount(cctpBridge.programId, messageSentEventDataKeypair.publicKey);\n\n const tx = await cctpBridge.methods\n .bridge({\n amount,\n destinationChainId,\n recipient,\n receiveToken,\n })\n .accounts({\n mint: mint,\n user: userAccount,\n cctpBridge: cctpBridgeAccount,\n\n messageSentEventData: messageSentEventDataKeypair.publicKey,\n lock: lockAccount,\n\n cctpMessenger: cctpTokenMessengerMinter,\n messageTransmitterProgram: cctpTransmitterProgramId,\n messageTransmitterAccount: messageTransmitterAccount,\n tokenMessenger: tokenMessenger,\n tokenMinter: tokenMinter,\n localToken: localToken,\n remoteTokenMessengerKey: remoteTokenMessengerKey,\n authorityPda: authorityPda,\n eventAuthority: tokenMessengerEventAuthority,\n\n bridgeToken: bridgeTokenAccount,\n gasPrice: gasPrice,\n thisGasPrice: thisGasPrice,\n chainBridge: chainBridgeAccount,\n userToken,\n bridgeAuthority: bridgeAuthority,\n })\n .preInstructions([\n web3.ComputeBudgetProgram.setComputeUnitLimit({\n units: 2000000,\n }),\n ])\n .postInstructions(instructions)\n .transaction();\n const connection = provider.connection;\n tx.recentBlockhash = (await connection.getLatestBlockhash()).blockhash;\n tx.feePayer = userAccount;\n return { transaction: await this.convertToVersionedTransaction(tx, connection), messageSentEventDataKeypair };\n }\n\n send(params: SendParams): Promise<TransactionResponse> {\n throw new MethodNotSupportedError();\n }\n}\n\ninterface SolTxSendParams extends TxSendParams {\n poolAddress: string;\n}\n", "export interface Bridge {\n version: \"0.1.0\";\n name: \"bridge\";\n instructions: [\n {\n name: \"initialize\";\n accounts: [\n {\n name: \"admin\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"args\";\n type: {\n defined: \"InitializeArgs\";\n };\n }\n ];\n },\n {\n name: \"initializePool\";\n accounts: [\n {\n name: \"payer\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"pool\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"token\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"tokenProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"rent\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"args\";\n type: {\n defined: \"InitializePoolArgs\";\n };\n }\n ];\n },\n {\n name: \"initDepositAccount\";\n accounts: [\n {\n name: \"user\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"payer\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"userDeposit\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [];\n },\n {\n name: \"deposit\";\n accounts: [\n {\n name: \"user\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"config\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"pool\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"userToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"userDeposit\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"tokenProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"amount\";\n type: \"u64\";\n }\n ];\n },\n {\n name: \"withdraw\";\n accounts: [\n {\n name: \"user\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"config\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"pool\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"userToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"userDeposit\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"tokenProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"amountLp\";\n type: \"u64\";\n }\n ];\n },\n {\n name: \"swapAndBridge\";\n accounts: [\n {\n name: \"user\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"payer\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"lock\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"config\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"otherBridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"messenger\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"messengerConfig\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"sentMessageAccount\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"messengerGasUsage\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"pool\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"gasPrice\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"thisGasPrice\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"chainBridge\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"userToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"tokenProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"args\";\n type: {\n defined: \"BridgeArgs\";\n };\n }\n ];\n },\n {\n name: \"swapAndBridgeWormhole\";\n accounts: [\n {\n name: \"user\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"payer\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"lock\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"config\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"otherBridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"pool\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"gasPrice\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"thisGasPrice\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"chainBridge\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"userToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"wormholeMessenger\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"wormholeMessengerConfig\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"wormholeProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"bridge\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"message\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"sequence\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"feeCollector\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"messengerGasUsage\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"clock\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"rent\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"tokenProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"args\";\n type: {\n defined: \"BridgeArgs\";\n };\n }\n ];\n },\n {\n name: \"swap\";\n accounts: [\n {\n name: \"user\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"payer\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"sendMint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"receiveMint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"config\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"sendPool\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"receivePool\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"sendBridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"receiveBridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"sendUserToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"receiveUserToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"tokenProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"amount\";\n type: \"u64\";\n },\n {\n name: \"receiveAmountMin\";\n type: \"u64\";\n }\n ];\n },\n {\n name: \"registerChainBridge\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"payer\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"chainBridge\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"args\";\n type: {\n defined: \"RegisterChainBridgeArgs\";\n };\n }\n ];\n },\n {\n name: \"updateChainBridge\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"chainBridge\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"args\";\n type: {\n defined: \"UpdateChainBridgeArgs\";\n };\n }\n ];\n },\n {\n name: \"receiveAndSwap\";\n accounts: [\n {\n name: \"user\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"payer\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"config\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"pool\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"receivedMessageAccount\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"unlock\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"chainBridge\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"userToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"tokenProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"messengerProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"args\";\n type: {\n defined: \"UnlockArgs\";\n };\n }\n ];\n },\n {\n name: \"receiveAndSwapWormhole\";\n accounts: [\n {\n name: \"user\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"payer\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"config\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"pool\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"receivedMessageAccount\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"unlock\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"chainBridge\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"userToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"tokenProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"messengerProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"args\";\n type: {\n defined: \"UnlockArgs\";\n };\n }\n ];\n },\n {\n name: \"withdrawGasToken\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"recipient\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"config\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"amount\";\n type: \"u64\";\n }\n ];\n },\n {\n name: \"claimRewards\";\n accounts: [\n {\n name: \"user\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"config\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"pool\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"userToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"userDeposit\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"tokenProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [];\n },\n {\n name: \"setAdmin\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"newAdmin\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"config\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [];\n },\n {\n name: \"startBridge\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"actionType\";\n type: {\n defined: \"ActionType\";\n };\n }\n ];\n },\n {\n name: \"stopBridge\";\n accounts: [\n {\n name: \"stopAuthority\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"actionType\";\n type: {\n defined: \"ActionType\";\n };\n }\n ];\n },\n {\n name: \"setRebalancer\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"rebalancer\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [];\n },\n {\n name: \"setStopAuthority\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"newAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"config\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [];\n },\n {\n name: \"setAllbridgeMessengerProgramId\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"newProgramId\";\n type: \"publicKey\";\n }\n ];\n },\n {\n name: \"setWormholeMessengerProgramId\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"newProgramId\";\n type: \"publicKey\";\n }\n ];\n },\n {\n name: \"setGasOracleProgramId\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"newProgramId\";\n type: \"publicKey\";\n }\n ];\n },\n {\n name: \"setPoolFeeShare\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"pool\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"feeShareBp\";\n type: \"u64\";\n }\n ];\n },\n {\n name: \"setBalanceRatioMin\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"pool\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"balanceRatioMinBp\";\n type: \"u16\";\n }\n ];\n },\n {\n name: \"setPoolAdminFeeShare\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"pool\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"feeShareBp\";\n type: \"u64\";\n }\n ];\n },\n {\n name: \"addOtherBridgeToken\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"payer\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"otherBridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"chainId\";\n type: \"u8\";\n },\n {\n name: \"tokenAddress\";\n type: {\n array: [\"u8\", 32];\n };\n }\n ];\n },\n {\n name: \"removeOtherBridgeToken\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"payer\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"otherBridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"chainId\";\n type: \"u8\";\n },\n {\n name: \"tokenAddress\";\n type: {\n array: [\"u8\", 32];\n };\n }\n ];\n },\n {\n name: \"withdrawAdminFee\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"config\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"pool\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"adminToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"tokenProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [];\n },\n {\n name: \"adjustTotalLpAmount\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"config\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"pool\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"userToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"userDeposit\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"tokenProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [];\n }\n ];\n accounts: [\n {\n name: \"chainBridge\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"address\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"chainId\";\n type: \"u8\";\n },\n {\n name: \"gasUsage\";\n type: \"u64\";\n }\n ];\n };\n },\n {\n name: \"config\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"admin\";\n type: \"publicKey\";\n },\n {\n name: \"allbridgeMessengerProgramId\";\n type: \"publicKey\";\n },\n {\n name: \"wormholeMessengerProgramId\";\n type: \"publicKey\";\n },\n {\n name: \"gasOracleProgramId\";\n type: \"publicKey\";\n },\n {\n name: \"rebalancer\";\n type: \"publicKey\";\n },\n {\n name: \"stopAuthority\";\n type: \"publicKey\";\n },\n {\n name: \"authorityBumpSeed\";\n type: \"u8\";\n },\n {\n name: \"canSwap\";\n type: \"bool\";\n },\n {\n name: \"canDeposit\";\n type: \"bool\";\n },\n {\n name: \"canWithdraw\";\n type: \"bool\";\n }\n ];\n };\n },\n {\n name: \"lock\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"sender\";\n type: \"publicKey\";\n },\n {\n name: \"sentTokenAddress\";\n type: \"publicKey\";\n },\n {\n name: \"amount\";\n type: \"u64\";\n },\n {\n name: \"vusdAmount\";\n type: \"u64\";\n },\n {\n name: \"recipient\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"destinationChainId\";\n type: \"u8\";\n },\n {\n name: \"receiveToken\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"nonce\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"messenger\";\n type: {\n defined: \"Messenger\";\n };\n },\n {\n name: \"slot\";\n type: \"u64\";\n },\n {\n name: \"fee\";\n type: \"u64\";\n }\n ];\n };\n },\n {\n name: \"otherBridgeToken\";\n type: {\n kind: \"struct\";\n fields: [];\n };\n },\n {\n name: \"pool\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"mint\";\n type: \"publicKey\";\n },\n {\n name: \"a\";\n type: \"u64\";\n },\n {\n name: \"d\";\n type: \"u64\";\n },\n {\n name: \"tokenBalance\";\n type: \"u64\";\n },\n {\n name: \"vUsdBalance\";\n type: \"u64\";\n },\n {\n name: \"reserves\";\n type: \"u64\";\n },\n {\n name: \"decimals\";\n type: \"u8\";\n },\n {\n name: \"totalLpAmount\";\n type: \"u64\";\n },\n {\n name: \"feeShareBp\";\n type: \"u64\";\n },\n {\n name: \"adminFeeShareBp\";\n type: \"u64\";\n },\n {\n name: \"accRewardPerShareP\";\n type: \"u128\";\n },\n {\n name: \"adminFeeAmount\";\n type: \"u64\";\n },\n {\n name: \"balanceRatioMinBp\";\n type: \"u16\";\n }\n ];\n };\n },\n {\n name: \"unlock\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"hash\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"amount\";\n type: \"u64\";\n },\n {\n name: \"fee\";\n type: \"u64\";\n },\n {\n name: \"vUsdAmount\";\n type: \"u64\";\n },\n {\n name: \"slot\";\n type: \"u64\";\n }\n ];\n };\n },\n {\n name: \"userDeposit\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"userAddress\";\n type: \"publicKey\";\n },\n {\n name: \"mint\";\n type: \"publicKey\";\n },\n {\n name: \"lpAmount\";\n type: \"u64\";\n },\n {\n name: \"rewardDebt\";\n type: \"u64\";\n }\n ];\n };\n }\n ];\n types: [\n {\n name: \"RegisterChainBridgeArgs\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"chainBridgeAddress\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"chainId\";\n type: \"u8\";\n },\n {\n name: \"gasUsage\";\n type: \"u64\";\n }\n ];\n };\n },\n {\n name: \"UpdateChainBridgeArgs\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"chainBridgeAddress\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"chainId\";\n type: \"u8\";\n },\n {\n name: \"gasUsage\";\n type: \"u64\";\n }\n ];\n };\n },\n {\n name: \"InitializeArgs\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"allbridgeMessengerProgramId\";\n type: \"publicKey\";\n },\n {\n name: \"wormholeMessengerProgramId\";\n type: \"publicKey\";\n },\n {\n name: \"gasOracleProgramId\";\n type: \"publicKey\";\n }\n ];\n };\n },\n {\n name: \"InitializePoolArgs\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"a\";\n type: \"u64\";\n },\n {\n name: \"feeShareBp\";\n type: \"u64\";\n },\n {\n name: \"adminFeeShareBp\";\n type: \"u64\";\n },\n {\n name: \"balanceRatioMinBp\";\n type: \"u16\";\n }\n ];\n };\n },\n {\n name: \"BridgeArgs\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"nonce\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"recipient\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"destinationChainId\";\n type: \"u8\";\n },\n {\n name: \"receiveToken\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"vusdAmount\";\n type: \"u64\";\n }\n ];\n };\n },\n {\n name: \"UnlockArgs\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"nonce\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"amount\";\n type: \"u64\";\n },\n {\n name: \"recipient\";\n type: \"publicKey\";\n },\n {\n name: \"sourceChainId\";\n type: \"u8\";\n },\n {\n name: \"receiveToken\";\n type: \"publicKey\";\n },\n {\n name: \"messenger\";\n type: {\n defined: \"Messenger\";\n };\n },\n {\n name: \"hash\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"receiveAmountMin\";\n type: \"u64\";\n }\n ];\n };\n },\n {\n name: \"RewardError\";\n type: {\n kind: \"enum\";\n variants: [\n {\n name: \"FeeTooHigh\";\n }\n ];\n };\n },\n {\n name: \"Messenger\";\n type: {\n kind: \"enum\";\n variants: [\n {\n name: \"None\";\n },\n {\n name: \"Allbridge\";\n },\n {\n name: \"Wormhole\";\n }\n ];\n };\n },\n {\n name: \"ActionType\";\n type: {\n kind: \"enum\";\n variants: [\n {\n name: \"Deposit\";\n },\n {\n name: \"Withdraw\";\n },\n {\n name: \"Swap\";\n }\n ];\n };\n }\n ];\n errors: [\n {\n code: 6000;\n name: \"AccountAlreadyInitialized\";\n msg: \"This account has already been initialized\";\n },\n {\n code: 6001;\n name: \"AdminAuthorityInvalid\";\n msg: \"This instruction requires admin authority\";\n },\n {\n code: 6002;\n name: \"InvalidSignature\";\n msg: \"Provided signature has wrong signer or message\";\n },\n {\n code: 6003;\n name: \"InvalidHash\";\n msg: \"Wrong unlock message hash\";\n },\n {\n code: 6004;\n name: \"PoolOverflow\";\n msg: \"PoolInfo overflow\";\n },\n {\n code: 6005;\n name: \"ReservesExhausted\";\n msg: \"Reserves exhausted\";\n },\n {\n code: 6006;\n name: \"ZeroAmount\";\n msg: \"Zero amount\";\n },\n {\n code: 6007;\n name: \"ZeroChanges\";\n msg: \"Zero changes\";\n },\n {\n code: 6008;\n name: \"HighVusdAmount\";\n msg: \"vUSD amount is too high\";\n },\n {\n code: 6009;\n name: \"BalanceRatioExceeded\";\n msg: \"Balance ratio exceeded\";\n },\n {\n code: 6010;\n name: \"InsufficientReceivedAmount\";\n msg: \"Received insufficient amount\";\n },\n {\n code: 6011;\n name: \"ForbiddenAction\";\n msg: \"ForbiddenAction\";\n },\n {\n code: 6012;\n name: \"ValueTooHigh\";\n msg: \"Value is too high\";\n }\n ];\n}\n\nexport const IDL: Bridge = {\n version: \"0.1.0\",\n name: \"bridge\",\n instructions: [\n {\n name: \"initialize\",\n accounts: [\n {\n name: \"admin\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"args\",\n type: {\n defined: \"InitializeArgs\",\n },\n },\n ],\n },\n {\n name: \"initializePool\",\n accounts: [\n {\n name: \"payer\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"pool\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"token\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"tokenProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"rent\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"args\",\n type: {\n defined: \"InitializePoolArgs\",\n },\n },\n ],\n },\n {\n name: \"initDepositAccount\",\n accounts: [\n {\n name: \"user\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"payer\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"userDeposit\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [],\n },\n {\n name: \"deposit\",\n accounts: [\n {\n name: \"user\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"config\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"pool\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"userToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"userDeposit\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"tokenProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"amount\",\n type: \"u64\",\n },\n ],\n },\n {\n name: \"withdraw\",\n accounts: [\n {\n name: \"user\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"config\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"pool\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"userToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"userDeposit\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"tokenProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"amountLp\",\n type: \"u64\",\n },\n ],\n },\n {\n name: \"swapAndBridge\",\n accounts: [\n {\n name: \"user\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"payer\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"lock\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"config\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"otherBridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"messenger\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"messengerConfig\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"sentMessageAccount\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"messengerGasUsage\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"pool\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"gasPrice\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"thisGasPrice\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"chainBridge\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"userToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"tokenProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"args\",\n type: {\n defined: \"BridgeArgs\",\n },\n },\n ],\n },\n {\n name: \"swapAndBridgeWormhole\",\n accounts: [\n {\n name: \"user\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"payer\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"lock\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"config\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"otherBridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"pool\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"gasPrice\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"thisGasPrice\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"chainBridge\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"userToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"wormholeMessenger\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"wormholeMessengerConfig\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"wormholeProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"bridge\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"message\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"sequence\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"feeCollector\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"messengerGasUsage\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"clock\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"rent\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"tokenProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"args\",\n type: {\n defined: \"BridgeArgs\",\n },\n },\n ],\n },\n {\n name: \"swap\",\n accounts: [\n {\n name: \"user\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"payer\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"sendMint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"receiveMint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"config\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"sendPool\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"receivePool\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"sendBridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"receiveBridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"sendUserToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"receiveUserToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"tokenProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"amount\",\n type: \"u64\",\n },\n {\n name: \"receiveAmountMin\",\n type: \"u64\",\n },\n ],\n },\n {\n name: \"registerChainBridge\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"payer\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"chainBridge\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"args\",\n type: {\n defined: \"RegisterChainBridgeArgs\",\n },\n },\n ],\n },\n {\n name: \"updateChainBridge\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"chainBridge\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"args\",\n type: {\n defined: \"UpdateChainBridgeArgs\",\n },\n },\n ],\n },\n {\n name: \"receiveAndSwap\",\n accounts: [\n {\n name: \"user\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"payer\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"config\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"pool\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"receivedMessageAccount\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"unlock\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"chainBridge\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"userToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"tokenProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"messengerProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"args\",\n type: {\n defined: \"UnlockArgs\",\n },\n },\n ],\n },\n {\n name: \"receiveAndSwapWormhole\",\n accounts: [\n {\n name: \"user\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"payer\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"config\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"pool\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"receivedMessageAccount\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"unlock\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"chainBridge\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"userToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"tokenProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"messengerProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"args\",\n type: {\n defined: \"UnlockArgs\",\n },\n },\n ],\n },\n {\n name: \"withdrawGasToken\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"recipient\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"config\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"amount\",\n type: \"u64\",\n },\n ],\n },\n {\n name: \"claimRewards\",\n accounts: [\n {\n name: \"user\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"config\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"pool\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"userToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"userDeposit\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"tokenProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [],\n },\n {\n name: \"setAdmin\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"newAdmin\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"config\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [],\n },\n {\n name: \"startBridge\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"actionType\",\n type: {\n defined: \"ActionType\",\n },\n },\n ],\n },\n {\n name: \"stopBridge\",\n accounts: [\n {\n name: \"stopAuthority\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"actionType\",\n type: {\n defined: \"ActionType\",\n },\n },\n ],\n },\n {\n name: \"setRebalancer\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"rebalancer\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [],\n },\n {\n name: \"setStopAuthority\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"newAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"config\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [],\n },\n {\n name: \"setAllbridgeMessengerProgramId\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"newProgramId\",\n type: \"publicKey\",\n },\n ],\n },\n {\n name: \"setWormholeMessengerProgramId\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"newProgramId\",\n type: \"publicKey\",\n },\n ],\n },\n {\n name: \"setGasOracleProgramId\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"newProgramId\",\n type: \"publicKey\",\n },\n ],\n },\n {\n name: \"setPoolFeeShare\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"pool\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"feeShareBp\",\n type: \"u64\",\n },\n ],\n },\n {\n name: \"setBalanceRatioMin\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"pool\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"balanceRatioMinBp\",\n type: \"u16\",\n },\n ],\n },\n {\n name: \"setPoolAdminFeeShare\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"pool\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"feeShareBp\",\n type: \"u64\",\n },\n ],\n },\n {\n name: \"addOtherBridgeToken\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"payer\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"otherBridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"chainId\",\n type: \"u8\",\n },\n {\n name: \"tokenAddress\",\n type: {\n array: [\"u8\", 32],\n },\n },\n ],\n },\n {\n name: \"removeOtherBridgeToken\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"payer\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"otherBridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"chainId\",\n type: \"u8\",\n },\n {\n name: \"tokenAddress\",\n type: {\n array: [\"u8\", 32],\n },\n },\n ],\n },\n {\n name: \"withdrawAdminFee\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"config\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"pool\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"adminToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"tokenProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [],\n },\n {\n name: \"adjustTotalLpAmount\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"config\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"pool\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"userToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"userDeposit\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"tokenProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [],\n },\n ],\n accounts: [\n {\n name: \"chainBridge\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"address\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"chainId\",\n type: \"u8\",\n },\n {\n name: \"gasUsage\",\n type: \"u64\",\n },\n ],\n },\n },\n {\n name: \"config\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"admin\",\n type: \"publicKey\",\n },\n {\n name: \"allbridgeMessengerProgramId\",\n type: \"publicKey\",\n },\n {\n name: \"wormholeMessengerProgramId\",\n type: \"publicKey\",\n },\n {\n name: \"gasOracleProgramId\",\n type: \"publicKey\",\n },\n {\n name: \"rebalancer\",\n type: \"publicKey\",\n },\n {\n name: \"stopAuthority\",\n type: \"publicKey\",\n },\n {\n name: \"authorityBumpSeed\",\n type: \"u8\",\n },\n {\n name: \"canSwap\",\n type: \"bool\",\n },\n {\n name: \"canDeposit\",\n type: \"bool\",\n },\n {\n name: \"canWithdraw\",\n type: \"bool\",\n },\n ],\n },\n },\n {\n name: \"lock\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"sender\",\n type: \"publicKey\",\n },\n {\n name: \"sentTokenAddress\",\n type: \"publicKey\",\n },\n {\n name: \"amount\",\n type: \"u64\",\n },\n {\n name: \"vusdAmount\",\n type: \"u64\",\n },\n {\n name: \"recipient\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"destinationChainId\",\n type: \"u8\",\n },\n {\n name: \"receiveToken\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"nonce\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"messenger\",\n type: {\n defined: \"Messenger\",\n },\n },\n {\n name: \"slot\",\n type: \"u64\",\n },\n {\n name: \"fee\",\n type: \"u64\",\n },\n ],\n },\n },\n {\n name: \"otherBridgeToken\",\n type: {\n kind: \"struct\",\n fields: [],\n },\n },\n {\n name: \"pool\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"mint\",\n type: \"publicKey\",\n },\n {\n name: \"a\",\n type: \"u64\",\n },\n {\n name: \"d\",\n type: \"u64\",\n },\n {\n name: \"tokenBalance\",\n type: \"u64\",\n },\n {\n name: \"vUsdBalance\",\n type: \"u64\",\n },\n {\n name: \"reserves\",\n type: \"u64\",\n },\n {\n name: \"decimals\",\n type: \"u8\",\n },\n {\n name: \"totalLpAmount\",\n type: \"u64\",\n },\n {\n name: \"feeShareBp\",\n type: \"u64\",\n },\n {\n name: \"adminFeeShareBp\",\n type: \"u64\",\n },\n {\n name: \"accRewardPerShareP\",\n type: \"u128\",\n },\n {\n name: \"adminFeeAmount\",\n type: \"u64\",\n },\n {\n name: \"balanceRatioMinBp\",\n type: \"u16\",\n },\n ],\n },\n },\n {\n name: \"unlock\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"hash\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"amount\",\n type: \"u64\",\n },\n {\n name: \"fee\",\n type: \"u64\",\n },\n {\n name: \"vUsdAmount\",\n type: \"u64\",\n },\n {\n name: \"slot\",\n type: \"u64\",\n },\n ],\n },\n },\n {\n name: \"userDeposit\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"userAddress\",\n type: \"publicKey\",\n },\n {\n name: \"mint\",\n type: \"publicKey\",\n },\n {\n name: \"lpAmount\",\n type: \"u64\",\n },\n {\n name: \"rewardDebt\",\n type: \"u64\",\n },\n ],\n },\n },\n ],\n types: [\n {\n name: \"RegisterChainBridgeArgs\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"chainBridgeAddress\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"chainId\",\n type: \"u8\",\n },\n {\n name: \"gasUsage\",\n type: \"u64\",\n },\n ],\n },\n },\n {\n name: \"UpdateChainBridgeArgs\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"chainBridgeAddress\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"chainId\",\n type: \"u8\",\n },\n {\n name: \"gasUsage\",\n type: \"u64\",\n },\n ],\n },\n },\n {\n name: \"InitializeArgs\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"allbridgeMessengerProgramId\",\n type: \"publicKey\",\n },\n {\n name: \"wormholeMessengerProgramId\",\n type: \"publicKey\",\n },\n {\n name: \"gasOracleProgramId\",\n type: \"publicKey\",\n },\n ],\n },\n },\n {\n name: \"InitializePoolArgs\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"a\",\n type: \"u64\",\n },\n {\n name: \"feeShareBp\",\n type: \"u64\",\n },\n {\n name: \"adminFeeShareBp\",\n type: \"u64\",\n },\n {\n name: \"balanceRatioMinBp\",\n type: \"u16\",\n },\n ],\n },\n },\n {\n name: \"BridgeArgs\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"nonce\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"recipient\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"destinationChainId\",\n type: \"u8\",\n },\n {\n name: \"receiveToken\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"vusdAmount\",\n type: \"u64\",\n },\n ],\n },\n },\n {\n name: \"UnlockArgs\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"nonce\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"amount\",\n type: \"u64\",\n },\n {\n name: \"recipient\",\n type: \"publicKey\",\n },\n {\n name: \"sourceChainId\",\n type: \"u8\",\n },\n {\n name: \"receiveToken\",\n type: \"publicKey\",\n },\n {\n name: \"messenger\",\n type: {\n defined: \"Messenger\",\n },\n },\n {\n name: \"hash\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"receiveAmountMin\",\n type: \"u64\",\n },\n ],\n },\n },\n {\n name: \"RewardError\",\n type: {\n kind: \"enum\",\n variants: [\n {\n name: \"FeeTooHigh\",\n },\n ],\n },\n },\n {\n name: \"Messenger\",\n type: {\n kind: \"enum\",\n variants: [\n {\n name: \"None\",\n },\n {\n name: \"Allbridge\",\n },\n {\n name: \"Wormhole\",\n },\n ],\n },\n },\n {\n name: \"ActionType\",\n type: {\n kind: \"enum\",\n variants: [\n {\n name: \"Deposit\",\n },\n {\n name: \"Withdraw\",\n },\n {\n name: \"Swap\",\n },\n ],\n },\n },\n ],\n errors: [\n {\n code: 6000,\n name: \"AccountAlreadyInitialized\",\n msg: \"This account has already been initialized\",\n },\n {\n code: 6001,\n name: \"AdminAuthorityInvalid\",\n msg: \"This instruction requires admin authority\",\n },\n {\n code: 6002,\n name: \"InvalidSignature\",\n msg: \"Provided signature has wrong signer or message\",\n },\n {\n code: 6003,\n name: \"InvalidHash\",\n msg: \"Wrong unlock message hash\",\n },\n {\n code: 6004,\n name: \"PoolOverflow\",\n msg: \"PoolInfo overflow\",\n },\n {\n code: 6005,\n name: \"ReservesExhausted\",\n msg: \"Reserves exhausted\",\n },\n {\n code: 6006,\n name: \"ZeroAmount\",\n msg: \"Zero amount\",\n },\n {\n code: 6007,\n name: \"ZeroChanges\",\n msg: \"Zero changes\",\n },\n {\n code: 6008,\n name: \"HighVusdAmount\",\n msg: \"vUSD amount is too high\",\n },\n {\n code: 6009,\n name: \"BalanceRatioExceeded\",\n msg: \"Balance ratio exceeded\",\n },\n {\n code: 6010,\n name: \"InsufficientReceivedAmount\",\n msg: \"Received insufficient amount\",\n },\n {\n code: 6011,\n name: \"ForbiddenAction\",\n msg: \"ForbiddenAction\",\n },\n {\n code: 6012,\n name: \"ValueTooHigh\",\n msg: \"Value is too high\",\n },\n ],\n};\n", "export interface CctpBridge {\n version: \"0.1.0\";\n name: \"cctp_bridge\";\n instructions: [\n {\n name: \"initialize\";\n accounts: [\n {\n name: \"payer\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"admin\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"cctpBridge\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"bridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"tokenProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"rent\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"args\";\n type: {\n defined: \"InitializeArgs\";\n };\n }\n ];\n },\n {\n name: \"bridge\";\n accounts: [\n {\n name: \"user\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"payer\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"messageSentEventData\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"lock\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"mint\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"cctpBridge\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"cctpMessenger\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"messageTransmitterProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"messageTransmitterAccount\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"tokenMessenger\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"tokenMinter\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"localToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"remoteTokenMessengerKey\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"authorityPda\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"eventAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"bridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"gasPrice\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"thisGasPrice\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"chainBridge\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"userToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"tokenProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"args\";\n type: {\n defined: \"BridgeArgs\";\n };\n }\n ];\n },\n {\n name: \"registerChainBridge\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"payer\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"cctpBridge\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"chainBridge\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"args\";\n type: {\n defined: \"RegisterChainBridgeArgs\";\n };\n }\n ];\n },\n {\n name: \"updateChainBridge\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"cctpBridge\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"chainBridge\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"args\";\n type: {\n defined: \"UpdateChainBridgeArgs\";\n };\n }\n ];\n },\n {\n name: \"setAdminFeeShare\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"cctpBridge\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"feeShareBp\";\n type: \"u64\";\n }\n ];\n },\n {\n name: \"setGasOracleProgramId\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"cctpBridge\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"newProgramId\";\n type: \"publicKey\";\n }\n ];\n },\n {\n name: \"withdrawGasToken\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"recipient\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"cctpBridge\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"amount\";\n type: \"u64\";\n }\n ];\n },\n {\n name: \"withdrawAdminFee\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"cctpBridge\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"bridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"adminToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"tokenProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [];\n },\n {\n name: \"setCctpTokenMessengerMinter\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"cctpBridge\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"newProgramId\";\n type: \"publicKey\";\n }\n ];\n }\n ];\n accounts: [\n {\n name: \"cctpBridge\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"mint\";\n type: \"publicKey\";\n },\n {\n name: \"admin\";\n type: \"publicKey\";\n },\n {\n name: \"cctpTokenMessengerMinter\";\n type: \"publicKey\";\n },\n {\n name: \"gasOracleProgramId\";\n type: \"publicKey\";\n },\n {\n name: \"authorityBumpSeed\";\n type: \"u8\";\n },\n {\n name: \"adminFeeShareBp\";\n type: \"u64\";\n },\n {\n name: \"adminFeeAmount\";\n type: \"u64\";\n }\n ];\n };\n },\n {\n name: \"chainBridge\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"chainId\";\n type: \"u8\";\n },\n {\n name: \"gasUsage\";\n type: \"u64\";\n },\n {\n name: \"domain\";\n type: \"u32\";\n }\n ];\n };\n },\n {\n name: \"lock\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"sender\";\n type: \"publicKey\";\n },\n {\n name: \"amount\";\n type: \"u64\";\n },\n {\n name: \"adminFee\";\n type: \"u64\";\n },\n {\n name: \"relayerFee\";\n type: \"u64\";\n },\n {\n name: \"recipient\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"destinationChainId\";\n type: \"u8\";\n },\n {\n name: \"slot\";\n type: \"u64\";\n }\n ];\n };\n }\n ];\n types: [\n {\n name: \"RegisterChainBridgeArgs\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"chainId\";\n type: \"u8\";\n },\n {\n name: \"gasUsage\";\n type: \"u64\";\n },\n {\n name: \"domain\";\n type: \"u32\";\n },\n {\n name: \"mint\";\n type: \"publicKey\";\n }\n ];\n };\n },\n {\n name: \"UpdateChainBridgeArgs\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"chainId\";\n type: \"u8\";\n },\n {\n name: \"gasUsage\";\n type: \"u64\";\n },\n {\n name: \"domain\";\n type: \"u32\";\n },\n {\n name: \"mint\";\n type: \"publicKey\";\n }\n ];\n };\n },\n {\n name: \"BridgeArgs\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"recipient\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"destinationChainId\";\n type: \"u8\";\n },\n {\n name: \"receiveToken\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"amount\";\n type: \"u64\";\n }\n ];\n };\n },\n {\n name: \"InitializeArgs\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"gasOracleProgramId\";\n type: \"publicKey\";\n },\n {\n name: \"cctpTokenMessengerMinter\";\n type: \"publicKey\";\n }\n ];\n };\n }\n ];\n errors: [\n {\n code: 6000;\n name: \"ValueTooHigh\";\n msg: \"Value is too high\";\n }\n ];\n}\n\nexport const IDL: CctpBridge = {\n version: \"0.1.0\",\n name: \"cctp_bridge\",\n instructions: [\n {\n name: \"initialize\",\n accounts: [\n {\n name: \"payer\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"admin\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"cctpBridge\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"bridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"tokenProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"rent\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"args\",\n type: {\n defined: \"InitializeArgs\",\n },\n },\n ],\n },\n {\n name: \"bridge\",\n accounts: [\n {\n name: \"user\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"payer\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"messageSentEventData\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"lock\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"mint\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"cctpBridge\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"cctpMessenger\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"messageTransmitterProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"messageTransmitterAccount\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"tokenMessenger\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"tokenMinter\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"localToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"remoteTokenMessengerKey\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"authorityPda\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"eventAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"bridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"gasPrice\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"thisGasPrice\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"chainBridge\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"userToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"tokenProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"args\",\n type: {\n defined: \"BridgeArgs\",\n },\n },\n ],\n },\n {\n name: \"registerChainBridge\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"payer\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"cctpBridge\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"chainBridge\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"args\",\n type: {\n defined: \"RegisterChainBridgeArgs\",\n },\n },\n ],\n },\n {\n name: \"updateChainBridge\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"cctpBridge\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"chainBridge\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"args\",\n type: {\n defined: \"UpdateChainBridgeArgs\",\n },\n },\n ],\n },\n {\n name: \"setAdminFeeShare\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"cctpBridge\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"feeShareBp\",\n type: \"u64\",\n },\n ],\n },\n {\n name: \"setGasOracleProgramId\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"cctpBridge\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"newProgramId\",\n type: \"publicKey\",\n },\n ],\n },\n {\n name: \"withdrawGasToken\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"recipient\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"cctpBridge\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"amount\",\n type: \"u64\",\n },\n ],\n },\n {\n name: \"withdrawAdminFee\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"cctpBridge\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"bridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"adminToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"tokenProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [],\n },\n {\n name: \"setCctpTokenMessengerMinter\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"cctpBridge\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"newProgramId\",\n type: \"publicKey\",\n },\n ],\n },\n ],\n accounts: [\n {\n name: \"cctpBridge\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"mint\",\n type: \"publicKey\",\n },\n {\n name: \"admin\",\n type: \"publicKey\",\n },\n {\n name: \"cctpTokenMessengerMinter\",\n type: \"publicKey\",\n },\n {\n name: \"gasOracleProgramId\",\n type: \"publicKey\",\n },\n {\n name: \"authorityBumpSeed\",\n type: \"u8\",\n },\n {\n name: \"adminFeeShareBp\",\n type: \"u64\",\n },\n {\n name: \"adminFeeAmount\",\n type: \"u64\",\n },\n ],\n },\n },\n {\n name: \"chainBridge\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"chainId\",\n type: \"u8\",\n },\n {\n name: \"gasUsage\",\n type: \"u64\",\n },\n {\n name: \"domain\",\n type: \"u32\",\n },\n ],\n },\n },\n {\n name: \"lock\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"sender\",\n type: \"publicKey\",\n },\n {\n name: \"amount\",\n type: \"u64\",\n },\n {\n name: \"adminFee\",\n type: \"u64\",\n },\n {\n name: \"relayerFee\",\n type: \"u64\",\n },\n {\n name: \"recipient\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"destinationChainId\",\n type: \"u8\",\n },\n {\n name: \"slot\",\n type: \"u64\",\n },\n ],\n },\n },\n ],\n types: [\n {\n name: \"RegisterChainBridgeArgs\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"chainId\",\n type: \"u8\",\n },\n {\n name: \"gasUsage\",\n type: \"u64\",\n },\n {\n name: \"domain\",\n type: \"u32\",\n },\n {\n name: \"mint\",\n type: \"publicKey\",\n },\n ],\n },\n },\n {\n name: \"UpdateChainBridgeArgs\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"chainId\",\n type: \"u8\",\n },\n {\n name: \"gasUsage\",\n type: \"u64\",\n },\n {\n name: \"domain\",\n type: \"u32\",\n },\n {\n name: \"mint\",\n type: \"publicKey\",\n },\n ],\n },\n },\n {\n name: \"BridgeArgs\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"recipient\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"destinationChainId\",\n type: \"u8\",\n },\n {\n name: \"receiveToken\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"amount\",\n type: \"u64\",\n },\n ],\n },\n },\n {\n name: \"InitializeArgs\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"gasOracleProgramId\",\n type: \"publicKey\",\n },\n {\n name: \"cctpTokenMessengerMinter\",\n type: \"publicKey\",\n },\n ],\n },\n },\n ],\n errors: [\n {\n code: 6000,\n name: \"ValueTooHigh\",\n msg: \"Value is too high\",\n },\n ],\n};\n", "import { Program, Provider, Spl } from \"@project-serum/anchor\";\nimport { PublicKey } from \"@solana/web3.js\";\n/* eslint-disable-next-line import/no-named-as-default */\nimport Big from \"big.js\";\nimport Web3 from \"web3\";\nimport { InvalidTxError, SdkError } from \"../../../exceptions\";\nimport { PoolInfo } from \"../../../tokens-info\";\nimport { swapToVUsd } from \"../../../utils/calculation\";\nimport { TokenAccountData } from \"../../models/sol\";\nimport { Bridge as BridgeType } from \"../../models/sol/types/bridge\";\n\nexport async function getTokenAccountData(account: PublicKey, provider: Provider): Promise<TokenAccountData> {\n return await Spl.token(provider).account.token.fetch(account);\n}\n\nexport async function getVUsdAmount(\n amount: string,\n bridge: Program<BridgeType>,\n poolAccount: PublicKey\n): Promise<string> {\n const poolAccountInfo = await bridge.account.pool.fetch(poolAccount);\n const decimals = poolAccountInfo.decimals;\n const feeShare = Big(poolAccountInfo.feeShareBp.toString()).div(10000).toFixed();\n const poolInfo: Omit<PoolInfo, \"p\" | \"imbalance\"> = {\n aValue: poolAccountInfo.a.toString(),\n dValue: poolAccountInfo.d.toString(),\n totalLpAmount: poolAccountInfo.totalLpAmount.toString(),\n tokenBalance: poolAccountInfo.tokenBalance.toString(),\n vUsdBalance: poolAccountInfo.vUsdBalance.toString(),\n accRewardPerShareP: poolAccountInfo.accRewardPerShareP.toString(),\n };\n return swapToVUsd(amount, { decimals, feeShare }, poolInfo);\n}\n\nexport function getMessage(args: {\n amount: string;\n recipient: Buffer;\n sourceChainId: number;\n destinationChainId: number;\n receiveToken: Buffer;\n nonce: Buffer;\n chainBridge: Buffer;\n}): Buffer {\n const amount = args.amount;\n const recipient = \"0x\" + args.recipient.toString(\"hex\");\n const sourceChainId = args.sourceChainId;\n const destinationsChainId = args.destinationChainId;\n const receiveToken = \"0x\" + args.receiveToken.toString(\"hex\");\n const nonce = \"0x\" + args.nonce.toString(\"hex\");\n const messenger = 1;\n const chainBridge = \"0x\" + args.chainBridge.toString(\"hex\");\n\n const message = Web3.utils.encodePacked(\n { t: \"uint256\", v: amount },\n { t: \"bytes32\", v: recipient },\n { t: \"uint256\", v: sourceChainId },\n { t: \"bytes32\", v: receiveToken },\n { t: \"uint256\", v: nonce },\n { t: \"uint8\", v: messenger }\n );\n\n if (!message) {\n throw new SdkError(\"message cannot be undefined\");\n }\n const hash = Web3.utils.keccak256(Buffer.from(message.replace(\"0x\", \"\"), \"hex\") as any);\n\n const hashBuffer = Buffer.from(hash.replace(\"0x\", \"\"), \"hex\");\n hashBuffer[0] = sourceChainId;\n hashBuffer[1] = destinationsChainId;\n\n const messageWithSigner = Web3.utils.encodePacked(\n { t: \"bytes32\", v: \"0x\" + hashBuffer.toString(\"hex\") },\n { t: \"bytes32\", v: chainBridge }\n );\n\n if (!messageWithSigner) {\n throw new InvalidTxError(\"messageWithSigner cannot be undefined\");\n }\n\n const hashWithSigner = Web3.utils.keccak256(Buffer.from(messageWithSigner.replace(\"0x\", \"\"), \"hex\") as any);\n\n const hashWithSignerBuffer = Buffer.from(hashWithSigner.replace(\"0x\", \"\"), \"hex\");\n\n hashWithSignerBuffer[0] = hashBuffer[0];\n hashWithSignerBuffer[1] = hashBuffer[1];\n return hashWithSignerBuffer;\n}\n", "import {\n ComputeBudgetInstruction,\n ComputeBudgetProgram,\n Connection,\n Transaction,\n TransactionInstruction,\n TransactionMessage,\n VersionedTransaction,\n} from \"@solana/web3.js\";\nimport { Big } from \"big.js\";\nimport { TxTooLargeError } from \"../../../exceptions\";\nimport { toPowBase10 } from \"../../../utils/calculation\";\nimport { fetchAddressLookupTableAccountsFromTx } from \"../../../utils/sol/utils\";\nimport { SolanaAutoTxFee, TxFeeParams } from \"../../models\";\n\nexport async function addUnitLimitAndUnitPriceToTx(\n transaction: Transaction,\n txFeeParams: TxFeeParams | undefined,\n solanaRpcUrl: string\n) {\n const connection = new Connection(solanaRpcUrl, \"confirmed\");\n /* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */\n const simUnitsConsumed = (await connection.simulateTransaction(transaction)).value.unitsConsumed!;\n await addUnitLimitAndUnitPriceToInstructions(transaction.instructions, simUnitsConsumed, txFeeParams, connection);\n}\n\nexport async function addUnitLimitAndUnitPriceToVersionedTx(\n transaction: VersionedTransaction,\n txFeeParams: TxFeeParams | undefined,\n solanaRpcUrl: string\n) {\n const connection = new Connection(solanaRpcUrl, \"confirmed\");\n const addressLookupTableAccounts = await fetchAddressLookupTableAccountsFromTx(transaction, connection);\n const message = TransactionMessage.decompile(transaction.message, {\n addressLookupTableAccounts: addressLookupTableAccounts,\n });\n\n if (transaction.serialize().length > 1232) {\n throw new TxTooLargeError();\n }\n\n // const simUnitsConsumed = (await connection.simulateTransaction(transaction, { replaceRecentBlockhash: true })).value\n // .unitsConsumed!;\n const simUnitsConsumed = 769230; // 1000000/1.3\n\n await addUnitLimitAndUnitPriceToInstructions(message.instructions, simUnitsConsumed, txFeeParams, connection);\n\n transaction.message = message.compileToV0Message(addressLookupTableAccounts);\n}\n\nasync function addUnitLimitAndUnitPriceToInstructions(\n instructions: TransactionInstruction[],\n simUnitsConsumed: number,\n txFeeParams: TxFeeParams | undefined,\n connection: Connection\n) {\n if (simUnitsConsumed > 0) {\n const units = updateUnitLimit(simUnitsConsumed, instructions);\n if (txFeeParams?.solana) {\n const solanaTxFee = txFeeParams.solana;\n if (solanaTxFee === SolanaAutoTxFee) {\n await updateUnitPrice(instructions, connection);\n } else if (\"pricePerUnitInMicroLamports\" in solanaTxFee) {\n await updateUnitPrice(instructions, connection, solanaTxFee.pricePerUnitInMicroLamports);\n } else {\n const pricePerUnitInMicroLamports = Big(solanaTxFee.extraFeeInLamports)\n .div(units)\n .mul(toPowBase10(6))\n .toFixed(0);\n await updateUnitPrice(instructions, connection, pricePerUnitInMicroLamports);\n }\n }\n }\n}\n\nfunction updateUnitLimit(simUnitsConsumed: number, instructions: TransactionInstruction[]): string {\n const computeUnitLimitIndex = instructions.findIndex(\n (instruction) =>\n instruction.programId.equals(ComputeBudgetProgram.programId) &&\n ComputeBudgetInstruction.decodeInstructionType(instruction) === \"SetComputeUnitLimit\"\n );\n const units = Number((simUnitsConsumed * 1.3).toFixed(0));\n const computeUnitLimitInstruction = ComputeBudgetProgram.setComputeUnitLimit({\n units: units,\n });\n if (computeUnitLimitIndex >= 0) {\n instructions[computeUnitLimitIndex] = computeUnitLimitInstruction;\n } else {\n instructions.push(computeUnitLimitInstruction);\n }\n return units.toString();\n}\n\nasync function updateUnitPrice(\n instructions: TransactionInstruction[],\n connection: Connection,\n pricePerUnitInMicroLamports?: string\n): Promise<string> {\n const computeUnitPriceIndex = instructions.findIndex(\n (instruction) =>\n instruction.programId.equals(ComputeBudgetProgram.programId) &&\n ComputeBudgetInstruction.decodeInstructionType(instruction) === \"SetComputeUnitPrice\"\n );\n const unitPrice = pricePerUnitInMicroLamports\n ? BigInt(pricePerUnitInMicroLamports)\n : BigInt(await getAveragePrioritizationFee(connection));\n const computeUnitPriceInstruction = ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: unitPrice,\n });\n if (computeUnitPriceIndex >= 0) {\n instructions[computeUnitPriceIndex] = computeUnitPriceInstruction;\n } else {\n instructions.push(computeUnitPriceInstruction);\n }\n return unitPrice.toString();\n}\n\nasync function getAveragePrioritizationFee(connection: Connection) {\n const prioritizationFees = await connection.getRecentPrioritizationFees();\n let sum = 0;\n for (const prioritizationFee of prioritizationFees) {\n sum += prioritizationFee.prioritizationFee;\n }\n return (sum / prioritizationFees.length).toFixed(0);\n}\n", "import { AddressLookupTableAccount, Connection, VersionedTransaction } from \"@solana/web3.js\";\nimport { SdkError } from \"../../exceptions\";\n\nexport async function fetchAddressLookupTableAccountsFromTx(\n transaction: VersionedTransaction,\n connection: Connection\n): Promise<AddressLookupTableAccount[]> {\n return await Promise.all(\n transaction.message.addressTableLookups.map(async (lookup) => {\n return new AddressLookupTableAccount({\n key: lookup.accountKey,\n state: AddressLookupTableAccount.deserialize(\n await connection.getAccountInfo(lookup.accountKey).then((res) => {\n if (!res) {\n throw new SdkError(\"Cannot get AccountInfo\");\n }\n return res.data;\n })\n ),\n });\n })\n );\n}\n", "import { BN, Program, Provider } from \"@project-serum/anchor\";\nimport { PublicKey, TransactionInstruction } from \"@solana/web3.js\";\nimport { Bridge as BridgeType } from \"./types/bridge\";\nimport { CctpBridge as CctpBridgeType } from \"./types/cctp_bridge\";\n\nexport type SolanaTxFee = PricePerUnitInMicroLamports | ExtraFeeInLamports | typeof SolanaAutoTxFee;\n/**\n * Priority Fee will be calculated based on {@link @solana/web3.js:Connection.getRecentPrioritizationFees}\n */\nexport const SolanaAutoTxFee = \"AUTO\" as const;\n\n/**\n * Add Priority Fee as price per unit in micro-lamports\n */\nexport interface PricePerUnitInMicroLamports {\n pricePerUnitInMicroLamports: string;\n}\n\n/**\n * Total Priority Fee impact will be as extraFeeInLamports param\n */\nexport interface ExtraFeeInLamports {\n extraFeeInLamports: string;\n}\n\nexport interface SwapAndBridgeSolData {\n bridge: Program<BridgeType>;\n amount: BN;\n vusdAmount: BN;\n nonce: number[];\n recipient: number[];\n receiveToken: number[];\n poolAccount: PublicKey;\n lockAccount: PublicKey;\n bridgeAuthority: PublicKey;\n userToken: PublicKey;\n bridgeTokenAccount: PublicKey;\n chainBridgeAccount: PublicKey;\n otherBridgeTokenAccount: PublicKey;\n userAccount: PublicKey;\n destinationChainId: number;\n mint: string;\n config: PublicKey;\n configAccountInfo: ConfigAccountInfo;\n gasPrice: PublicKey;\n thisGasPrice: PublicKey;\n message: Buffer;\n extraGasInstruction?: TransactionInstruction;\n provider: Provider;\n}\n\nexport interface SwapAndBridgeSolDataCctpData {\n cctpBridge: Program<CctpBridgeType>;\n cctpBridgeAccount: PublicKey;\n cctpAddressAccount: PublicKey;\n amount: BN;\n recipient: number[];\n receiveToken: number[];\n userToken: PublicKey;\n bridgeAuthority: PublicKey;\n bridgeTokenAccount: PublicKey;\n chainBridgeAccount: PublicKey;\n userAccount: PublicKey;\n destinationChainId: number;\n mint: PublicKey;\n gasPrice: PublicKey;\n thisGasPrice: PublicKey;\n extraGasInstruction?: TransactionInstruction;\n provider: Provider;\n}\n\ninterface ConfigAccountInfo {\n allbridgeMessengerProgramId: PublicKey;\n wormholeMessengerProgramId: PublicKey;\n gasOracleProgramId: PublicKey;\n}\n\nexport interface TokenAccountData {\n amount: BN;\n authority: PublicKey;\n closeAuthority: unknown;\n delegate: unknown;\n delegatedAmount: BN;\n isNative: unknown;\n mint: PublicKey;\n state: unknown;\n}\n", "import { NATIVE_MINT } from \"@solana/spl-token\";\nimport { Connection, TransactionMessage, VersionedTransaction } from \"@solana/web3.js\";\nimport axios, { AxiosError } from \"axios\";\nimport { JupiterError, SdkError } from \"../../../exceptions\";\nimport { fetchAddressLookupTableAccountsFromTx } from \"../../../utils/sol/utils\";\n\nexport class JupiterService {\n connection: Connection;\n jupiterUrl: string;\n\n constructor(solanaRpcUrl: string, jupiterUrl: string) {\n this.connection = new Connection(solanaRpcUrl);\n this.jupiterUrl = jupiterUrl.replace(/\\/$/, \"\"); // trim last \"/\" if exist\n }\n\n async getJupiterSwapTx(\n userAddress: string,\n stableTokenAddress: string,\n amount: string,\n exactOut: boolean\n ): Promise<{ tx: VersionedTransaction; amountIn?: string }> {\n let quoteResponse: any;\n try {\n const swapMode = exactOut ? \"ExactOut\" : \"ExactIn\";\n quoteResponse = await axios.get(`${this.jupiterUrl}/quote?inputMint=${stableTokenAddress}\n&outputMint=${NATIVE_MINT.toString()}\n&amount=${amount}\n&swapMode=${swapMode}\n&slippageBps=100\n&onlyDirectRoutes=true`);\n } catch (err) {\n if (err instanceof AxiosError && err.response && err.response.data && err.response.data.error) {\n throw new JupiterError(err.response.data.error);\n }\n throw new JupiterError(\"Cannot get route\");\n }\n\n let inAmount;\n if (exactOut && quoteResponse?.data?.inAmount) {\n inAmount = quoteResponse.data.inAmount;\n } else if (exactOut) {\n throw new JupiterError(\"Cannot get inAmount\");\n }\n\n let transactionResponse: any;\n try {\n transactionResponse = await axios.post(`${this.jupiterUrl}/swap`, {\n quoteResponse: quoteResponse.data,\n userPublicKey: userAddress,\n wrapAndUnwrapSol: true,\n });\n } catch (err) {\n if (err instanceof AxiosError && err.response && err.response.data && err.response.data.error) {\n throw new JupiterError(err.response.data.error);\n }\n throw new JupiterError(\"Cannot get swap transaction\");\n }\n\n let swapTransaction;\n if (transactionResponse?.data?.swapTransaction) {\n swapTransaction = transactionResponse.data.swapTransaction;\n } else {\n throw new JupiterError(\"Cannot get swap transaction\");\n }\n\n const swapTransactionBuf = Buffer.from(swapTransaction, \"base64\");\n const tx = VersionedTransaction.deserialize(swapTransactionBuf);\n\n return exactOut ? { tx, amountIn: inAmount } : { tx };\n }\n\n async amendJupiterWithSdkTx(\n transaction: VersionedTransaction,\n sdkTx: VersionedTransaction\n ): Promise<VersionedTransaction> {\n try {\n const addressLookupTableAccounts = await fetchAddressLookupTableAccountsFromTx(transaction, this.connection);\n const sdkAddressLookupTableAccounts = await fetchAddressLookupTableAccountsFromTx(sdkTx, this.connection);\n\n const message = TransactionMessage.decompile(transaction.message, {\n addressLookupTableAccounts: addressLookupTableAccounts,\n });\n const sdkMessage = TransactionMessage.decompile(sdkTx.message, {\n addressLookupTableAccounts: sdkAddressLookupTableAccounts,\n });\n sdkMessage.instructions.shift();\n message.instructions.push(...sdkMessage.instructions);\n\n addressLookupTableAccounts.push(...sdkAddressLookupTableAccounts);\n\n transaction.message = message.compileToV0Message(addressLookupTableAccounts);\n\n if (sdkTx.message.header.numRequiredSignatures === 2 && transaction.signatures.length === 1) {\n const signature = sdkTx.signatures[0];\n if (!signature) {\n throw new SdkError(\"Signature is undefined\");\n }\n transaction.signatures.push(signature);\n }\n return transaction;\n } catch (e) {\n if (e instanceof Error && e.message) {\n throw new JupiterError(`Some error occurred during creation final swap and bridge transaction. ${e.message}`);\n }\n throw new JupiterError(\"Some error occurred during creation final swap and bridge transaction\");\n }\n }\n}\n", "import { Address, contract } from \"@stellar/stellar-sdk\";\nimport { Big } from \"big.js\";\nimport { ChainSymbol } from \"../../../chains/chain.enums\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { MethodNotSupportedError } from \"../../../exceptions\";\nimport { AllbridgeCoreSdkOptions, ChainType } from \"../../../index\";\nimport { FeePaymentMethod } from \"../../../models\";\nimport { NodeRpcUrlsConfig } from \"../../index\";\nimport { RawTransaction, TransactionResponse } from \"../../models\";\nimport { BridgeContract } from \"../../models/srb/bridge-contract\";\nimport { ChainBridgeService, SendParams, SwapParams, TxSendParams, TxSwapParams } from \"../models\";\nimport { getNonceBigInt, prepareTxSendParams, prepareTxSwapParams } from \"../utils\";\nimport ContractClientOptions = contract.ClientOptions;\n\nexport class SrbBridgeService extends ChainBridgeService {\n chainType: ChainType.SRB = ChainType.SRB;\n\n constructor(\n readonly nodeRpcUrlsConfig: NodeRpcUrlsConfig,\n readonly params: AllbridgeCoreSdkOptions,\n readonly api: AllbridgeCoreClient\n ) {\n super();\n }\n\n async buildRawTransactionSend(params: SendParams): Promise<RawTransaction> {\n const txSendParams = await prepareTxSendParams(this.chainType, params, this.api);\n return await this.buildRawTransactionSendFromParams(txSendParams);\n }\n\n async buildRawTransactionSendFromParams(params: TxSendParams): Promise<RawTransaction> {\n const {\n amount,\n contractAddress,\n fromAccountAddress,\n fromTokenAddress,\n toChainId,\n toAccountAddress,\n toTokenAddress,\n fee,\n gasFeePaymentMethod,\n extraGas,\n } = params;\n\n let totalFee = fee;\n if (extraGas) {\n totalFee = Big(totalFee).plus(extraGas).toFixed();\n }\n const contract = this.getContract(BridgeContract, contractAddress, fromAccountAddress);\n let tx;\n if (gasFeePaymentMethod === FeePaymentMethod.WITH_STABLECOIN) {\n tx = await contract.swap_and_bridge({\n sender: fromAccountAddress,\n token: Address.contract(Buffer.from(fromTokenAddress)).toString(),\n amount: BigInt(amount),\n recipient: Buffer.from(toAccountAddress),\n destination_chain_id: +toChainId,\n receive_token: Buffer.from(toTokenAddress),\n nonce: getNonceBigInt(),\n gas_amount: BigInt(0),\n fee_token_amount: BigInt(totalFee),\n });\n } else {\n tx = await contract.swap_and_bridge({\n sender: fromAccountAddress,\n token: Address.contract(Buffer.from(fromTokenAddress)).toString(),\n amount: BigInt(amount),\n recipient: Buffer.from(toAccountAddress),\n destination_chain_id: +toChainId,\n receive_token: Buffer.from(toTokenAddress),\n nonce: getNonceBigInt(),\n gas_amount: BigInt(totalFee),\n fee_token_amount: BigInt(0),\n });\n }\n return tx.toXDR();\n }\n\n async buildRawTransactionSwap(params: SwapParams): Promise<RawTransaction> {\n const txSwapParams = prepareTxSwapParams(this.chainType, params);\n return await this.buildRawTransactionSwapFromParams(txSwapParams);\n }\n\n async buildRawTransactionSwapFromParams(params: TxSwapParams): Promise<RawTransaction> {\n const {\n amount,\n contractAddress,\n fromAccountAddress,\n fromTokenAddress,\n toAccountAddress,\n toTokenAddress,\n minimumReceiveAmount,\n } = params;\n const contract = this.getContract(BridgeContract, contractAddress, fromAccountAddress);\n return (\n await contract.swap({\n sender: fromAccountAddress,\n amount: BigInt(amount),\n token: Address.contract(Buffer.from(fromTokenAddress)).toBuffer(),\n receive_token: Buffer.from(toTokenAddress),\n recipient: toAccountAddress as string,\n receive_amount_min: BigInt(minimumReceiveAmount),\n })\n ).toXDR();\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n send(params: SendParams): Promise<TransactionResponse> {\n throw new MethodNotSupportedError();\n }\n\n private getContract<T>(contract: new (args: ContractClientOptions) => T, address: string, sender?: string): T {\n const config: ContractClientOptions = {\n publicKey: sender,\n contractId: address,\n networkPassphrase: this.params.sorobanNetworkPassphrase,\n rpcUrl: this.nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.SRB),\n };\n return new contract(config);\n }\n}\n", "import { contract } from \"@stellar/stellar-sdk\";\nimport u128 = contract.u128;\nimport u32 = contract.u32;\nimport u256 = contract.u256;\nimport AssembledTransaction = contract.AssembledTransaction;\nimport Result = contract.Result;\nimport Option = contract.Option;\nimport ContractSpec = contract.Spec;\nimport ContractClient = contract.Client;\nimport ContractClientOptions = contract.ClientOptions;\n\nexport interface Swapped {\n receive_amount: u128;\n receive_token: Buffer;\n recipient: string;\n send_amount: u128;\n send_token: Buffer;\n sender: string;\n}\n\nexport interface TokensSent {\n amount: u128;\n destination_chain_id: u32;\n nonce: u256;\n receive_token: Buffer;\n recipient: Buffer;\n}\n\nexport interface TokensReceived {\n amount: u128;\n message: Buffer;\n nonce: u256;\n recipient: Buffer;\n}\n\nexport interface ReceiveFee {\n bridge_transaction_cost: u128;\n extra_gas: u128;\n message_transaction_cost: u128;\n}\n\nexport interface BridgingFeeFromTokens {\n fee_token_amount: u128;\n gas: u128;\n}\n\nexport interface AnotherBridge {\n address: Buffer;\n tokens: Map<Buffer, boolean>;\n}\n\nexport interface Bridge {\n /**\n * precomputed values of the scaling factor required for paying the bridging fee with stable tokens\n */\n bridging_fee_conversion_factor: Map<string, u128>;\n can_swap: boolean;\n /**\n * precomputed values to divide by to change the precision from the Gas Oracle precision to the token precision\n */\n from_gas_oracle_factor: Map<string, u128>;\n messenger: string;\n pools: Map<Buffer, string>;\n rebalancer: string;\n}\n\nexport type DataKey =\n | { tag: \"OtherBridge\"; values: readonly [u32] }\n | { tag: \"SentMessage\"; values: readonly [Buffer] }\n | { tag: \"ReceivedMessage\"; values: readonly [Buffer] };\n\nexport type Admin = readonly [string];\nexport type GasOracleAddress = readonly [string];\nexport type GasUsage = readonly [Map<u32, u128>];\nexport type NativeToken = readonly [string];\nexport type StopAuthority = readonly [string];\nexport const Errors = {\n 0: { message: \"\" },\n 1: { message: \"\" },\n 2: { message: \"\" },\n 3: { message: \"\" },\n 4: { message: \"\" },\n 5: { message: \"\" },\n 6: { message: \"\" },\n 7: { message: \"\" },\n 8: { message: \"\" },\n 9: { message: \"\" },\n 10: { message: \"\" },\n 11: { message: \"\" },\n 12: { message: \"\" },\n 103: { message: \"\" },\n 104: { message: \"\" },\n 105: { message: \"\" },\n 106: { message: \"\" },\n 107: { message: \"\" },\n 108: { message: \"\" },\n 109: { message: \"\" },\n 203: { message: \"\" },\n 204: { message: \"\" },\n 205: { message: \"\" },\n 206: { message: \"\" },\n 207: { message: \"\" },\n 208: { message: \"\" },\n 209: { message: \"\" },\n 210: { message: \"\" },\n 211: { message: \"\" },\n 212: { message: \"\" },\n 214: { message: \"\" },\n 215: { message: \"\" },\n 216: { message: \"\" },\n 217: { message: \"\" },\n 218: { message: \"\" },\n 300: { message: \"\" },\n 301: { message: \"\" },\n 302: { message: \"\" },\n 303: { message: \"\" },\n 400: { message: \"\" },\n};\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\nexport interface BridgeContract {\n /**\n * Construct and simulate a initialize transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n initialize: (\n {\n admin,\n messenger,\n gas_oracle,\n native_token,\n }: {\n admin: string;\n messenger: string;\n gas_oracle: string;\n native_token: string;\n },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a swap_and_bridge transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n swap_and_bridge: (\n {\n sender,\n token,\n amount,\n recipient,\n destination_chain_id,\n receive_token,\n nonce,\n gas_amount,\n fee_token_amount,\n }: {\n sender: string;\n token: string;\n amount: u128;\n recipient: Buffer;\n destination_chain_id: u32;\n receive_token: Buffer;\n nonce: u256;\n gas_amount: u128;\n fee_token_amount: u128;\n },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a receive_tokens transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n receive_tokens: (\n {\n sender,\n amount,\n recipient,\n source_chain_id,\n receive_token,\n nonce,\n receive_amount_min,\n extra_gas,\n }: {\n sender: string;\n amount: u128;\n recipient: string;\n source_chain_id: u32;\n receive_token: Buffer;\n nonce: u256;\n receive_amount_min: u128;\n extra_gas: Option<u128>;\n },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a swap transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n swap: (\n {\n sender,\n amount,\n token,\n receive_token,\n recipient,\n receive_amount_min,\n }: {\n sender: string;\n amount: u128;\n token: Buffer;\n receive_token: Buffer;\n recipient: string;\n receive_amount_min: u128;\n },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a stop_swap transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n stop_swap: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a start_swap transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n start_swap: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a set_gas_oracle transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n set_gas_oracle: (\n { new_address }: { new_address: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a set_stop_authority transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n set_stop_authority: (\n { stop_authority }: { stop_authority: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a set_rebalancer transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n set_rebalancer: (\n { rebalancer }: { rebalancer: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a set_messenger transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n set_messenger: (\n { messenger }: { messenger: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a set_gas_usage transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n set_gas_usage: (\n { chain_id, gas_usage }: { chain_id: u32; gas_usage: u128 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a register_bridge transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n register_bridge: (\n { chain_id, bridge_address }: { chain_id: u32; bridge_address: Buffer },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a add_bridge_token transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n add_bridge_token: (\n { chain_id, token_address }: { chain_id: u32; token_address: Buffer },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a remove_bridge_token transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n remove_bridge_token: (\n { chain_id, token_address }: { chain_id: u32; token_address: Buffer },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a add_pool transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n add_pool: (\n { pool, token }: { pool: string; token: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a withdraw_gas_tokens transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n withdraw_gas_tokens: (\n { sender, amount }: { sender: string; amount: u128 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a withdraw_bridging_fee_in_tokens transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n withdraw_bridging_fee_in_tokens: (\n { sender, token_address }: { sender: string; token_address: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a has_processed_message transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n has_processed_message: (\n { message }: { message: Buffer },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<boolean>>>;\n\n /**\n * Construct and simulate a has_received_message transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n has_received_message: (\n { message }: { message: Buffer },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<boolean>>>;\n\n /**\n * Construct and simulate a get_pool_address transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n get_pool_address: (\n { token_address }: { token_address: Buffer },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<string>>>;\n\n /**\n * Construct and simulate a get_config transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n get_config: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<Bridge>>>;\n\n /**\n * Construct and simulate a get_stop_authority transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n get_stop_authority: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<string>>>;\n\n /**\n * Construct and simulate a get_transaction_cost transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n get_transaction_cost: (\n { chain_id }: { chain_id: u32 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<u128>>>;\n\n /**\n * Construct and simulate a get_gas_usage transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n get_gas_usage: (\n { chain_id }: { chain_id: u32 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<u128>>>;\n\n /**\n * Construct and simulate a get_admin transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n get_admin: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<string>>>;\n\n /**\n * Construct and simulate a get_gas_oracle transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n get_gas_oracle: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<string>>>;\n\n /**\n * Construct and simulate a get_another_bridge transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n get_another_bridge: (\n { chain_id }: { chain_id: u32 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<AnotherBridge>>>;\n\n /**\n * Construct and simulate a set_admin transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n set_admin: (\n { new_admin }: { new_admin: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a upgrade transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n upgrade: (\n { new_wasm_hash }: { new_wasm_hash: Buffer },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\nexport class BridgeContract extends ContractClient {\n constructor(public readonly options: ContractClientOptions) {\n super(\n new ContractSpec([\n \"AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABAAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAltZXNzZW5nZXIAAAAAAAATAAAAAAAAAApnYXNfb3JhY2xlAAAAAAATAAAAAAAAAAxuYXRpdmVfdG9rZW4AAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=\",\n \"AAAAAAAAAAAAAAAPc3dhcF9hbmRfYnJpZGdlAAAAAAkAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAFdG9rZW4AAAAAAAATAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACXJlY2lwaWVudAAAAAAAA+4AAAAgAAAAAAAAABRkZXN0aW5hdGlvbl9jaGFpbl9pZAAAAAQAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAFbm9uY2UAAAAAAAAMAAAAAAAAAApnYXNfYW1vdW50AAAAAAAKAAAAAAAAABBmZWVfdG9rZW5fYW1vdW50AAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAAOcmVjZWl2ZV90b2tlbnMAAAAAAAgAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAlyZWNpcGllbnQAAAAAAAATAAAAAAAAAA9zb3VyY2VfY2hhaW5faWQAAAAABAAAAAAAAAANcmVjZWl2ZV90b2tlbgAAAAAAA+4AAAAgAAAAAAAAAAVub25jZQAAAAAAAAwAAAAAAAAAEnJlY2VpdmVfYW1vdW50X21pbgAAAAAACgAAAAAAAAAJZXh0cmFfZ2FzAAAAAAAD6AAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==\",\n \"AAAAAAAAAAAAAAAEc3dhcAAAAAYAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAV0b2tlbgAAAAAAA+4AAAAgAAAAAAAAAA1yZWNlaXZlX3Rva2VuAAAAAAAD7gAAACAAAAAAAAAACXJlY2lwaWVudAAAAAAAABMAAAAAAAAAEnJlY2VpdmVfYW1vdW50X21pbgAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAAJc3RvcF9zd2FwAAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAAKc3RhcnRfc3dhcAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAAOc2V0X2dhc19vcmFjbGUAAAAAAAEAAAAAAAAAC25ld19hZGRyZXNzAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==\",\n \"AAAAAAAAAAAAAAASc2V0X3N0b3BfYXV0aG9yaXR5AAAAAAABAAAAAAAAAA5zdG9wX2F1dGhvcml0eQAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAAOc2V0X3JlYmFsYW5jZXIAAAAAAAEAAAAAAAAACnJlYmFsYW5jZXIAAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==\",\n \"AAAAAAAAAAAAAAANc2V0X21lc3NlbmdlcgAAAAAAAAEAAAAAAAAACW1lc3NlbmdlcgAAAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==\",\n \"AAAAAAAAAAAAAAANc2V0X2dhc191c2FnZQAAAAAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAAJZ2FzX3VzYWdlAAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAAPcmVnaXN0ZXJfYnJpZGdlAAAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAAOYnJpZGdlX2FkZHJlc3MAAAAAA+4AAAAgAAAAAQAAA+kAAAPtAAAAAAAAAAM=\",\n \"AAAAAAAAAAAAAAAQYWRkX2JyaWRnZV90b2tlbgAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAANdG9rZW5fYWRkcmVzcwAAAAAAA+4AAAAgAAAAAQAAA+kAAAPtAAAAAAAAAAM=\",\n \"AAAAAAAAAAAAAAATcmVtb3ZlX2JyaWRnZV90b2tlbgAAAAACAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAPuAAAAIAAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAAIYWRkX3Bvb2wAAAACAAAAAAAAAARwb29sAAAAEwAAAAAAAAAFdG9rZW4AAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=\",\n \"AAAAAAAAAAAAAAATd2l0aGRyYXdfZ2FzX3Rva2VucwAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAAfd2l0aGRyYXdfYnJpZGdpbmdfZmVlX2luX3Rva2VucwAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=\",\n \"AAAAAAAAAAAAAAAVaGFzX3Byb2Nlc3NlZF9tZXNzYWdlAAAAAAAAAQAAAAAAAAAHbWVzc2FnZQAAAAPuAAAAIAAAAAEAAAPpAAAAAQAAAAM=\",\n \"AAAAAAAAAAAAAAAUaGFzX3JlY2VpdmVkX21lc3NhZ2UAAAABAAAAAAAAAAdtZXNzYWdlAAAAA+4AAAAgAAAAAQAAA+kAAAABAAAAAw==\",\n \"AAAAAAAAAAAAAAAQZ2V0X3Bvb2xfYWRkcmVzcwAAAAEAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAPuAAAAIAAAAAEAAAPpAAAAEwAAAAM=\",\n \"AAAAAAAAAAAAAAAKZ2V0X2NvbmZpZwAAAAAAAAAAAAEAAAPpAAAH0AAAAAZCcmlkZ2UAAAAAAAM=\",\n \"AAAAAAAAAAAAAAASZ2V0X3N0b3BfYXV0aG9yaXR5AAAAAAAAAAAAAQAAA+kAAAATAAAAAw==\",\n \"AAAAAAAAAAAAAAAUZ2V0X3RyYW5zYWN0aW9uX2Nvc3QAAAABAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAABAAAD6QAAAAoAAAAD\",\n \"AAAAAAAAAAAAAAANZ2V0X2dhc191c2FnZQAAAAAAAAEAAAAAAAAACGNoYWluX2lkAAAABAAAAAEAAAPpAAAACgAAAAM=\",\n \"AAAAAAAAAAAAAAAJZ2V0X2FkbWluAAAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=\",\n \"AAAAAAAAAAAAAAAOZ2V0X2dhc19vcmFjbGUAAAAAAAAAAAABAAAD6QAAABMAAAAD\",\n \"AAAAAAAAAAAAAAASZ2V0X2Fub3RoZXJfYnJpZGdlAAAAAAABAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAABAAAD6QAAB9AAAAANQW5vdGhlckJyaWRnZQAAAAAAAAM=\",\n \"AAAAAAAAAAAAAAAJc2V0X2FkbWluAAAAAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAAHdXBncmFkZQAAAAABAAAAAAAAAA1uZXdfd2FzbV9oYXNoAAAAAAAD7gAAACAAAAABAAAD6QAAA+0AAAAAAAAAAw==\",\n \"AAAAAQAAAAAAAAAAAAAAB1N3YXBwZWQAAAAABgAAAAAAAAAOcmVjZWl2ZV9hbW91bnQAAAAAAAoAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAAEwAAAAAAAAALc2VuZF9hbW91bnQAAAAACgAAAAAAAAAKc2VuZF90b2tlbgAAAAAD7gAAACAAAAAAAAAABnNlbmRlcgAAAAAAEw==\",\n \"AAAAAQAAAAAAAAAAAAAAClRva2Vuc1NlbnQAAAAAAAUAAAAAAAAABmFtb3VudAAAAAAACgAAAAAAAAAUZGVzdGluYXRpb25fY2hhaW5faWQAAAAEAAAAAAAAAAVub25jZQAAAAAAAAwAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACA=\",\n \"AAAAAQAAAAAAAAAAAAAADlRva2Vuc1JlY2VpdmVkAAAAAAAEAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAB21lc3NhZ2UAAAAD7gAAACAAAAAAAAAABW5vbmNlAAAAAAAADAAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACA=\",\n \"AAAAAQAAAAAAAAAAAAAAClJlY2VpdmVGZWUAAAAAAAMAAAAAAAAAF2JyaWRnZV90cmFuc2FjdGlvbl9jb3N0AAAAAAoAAAAAAAAACWV4dHJhX2dhcwAAAAAAAAoAAAAAAAAAGG1lc3NhZ2VfdHJhbnNhY3Rpb25fY29zdAAAAAo=\",\n \"AAAAAQAAAAAAAAAAAAAAFUJyaWRnaW5nRmVlRnJvbVRva2VucwAAAAAAAAIAAAAAAAAAEGZlZV90b2tlbl9hbW91bnQAAAAKAAAAAAAAAANnYXMAAAAACg==\",\n \"AAAAAQAAAAAAAAAAAAAADUFub3RoZXJCcmlkZ2UAAAAAAAACAAAAAAAAAAdhZGRyZXNzAAAAA+4AAAAgAAAAAAAAAAZ0b2tlbnMAAAAAA+wAAAPuAAAAIAAAAAE=\",\n \"AAAAAQAAAAAAAAAAAAAABkJyaWRnZQAAAAAABgAAAGBwcmVjb21wdXRlZCB2YWx1ZXMgb2YgdGhlIHNjYWxpbmcgZmFjdG9yIHJlcXVpcmVkIGZvciBwYXlpbmcgdGhlIGJyaWRnaW5nIGZlZSB3aXRoIHN0YWJsZSB0b2tlbnMAAAAeYnJpZGdpbmdfZmVlX2NvbnZlcnNpb25fZmFjdG9yAAAAAAPsAAAAEwAAAAoAAAAAAAAACGNhbl9zd2FwAAAAAQAAAGxwcmVjb21wdXRlZCB2YWx1ZXMgdG8gZGl2aWRlIGJ5IHRvIGNoYW5nZSB0aGUgcHJlY2lzaW9uIGZyb20gdGhlIEdhcyBPcmFjbGUgcHJlY2lzaW9uIHRvIHRoZSB0b2tlbiBwcmVjaXNpb24AAAAWZnJvbV9nYXNfb3JhY2xlX2ZhY3RvcgAAAAAD7AAAABMAAAAKAAAAAAAAAAltZXNzZW5nZXIAAAAAAAATAAAAAAAAAAVwb29scwAAAAAAA+wAAAPuAAAAIAAAABMAAAAAAAAACnJlYmFsYW5jZXIAAAAAABM=\",\n \"AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAwAAAAEAAAAAAAAAC090aGVyQnJpZGdlAAAAAAEAAAAEAAAAAQAAAAAAAAALU2VudE1lc3NhZ2UAAAAAAQAAA+4AAAAgAAAAAQAAAAAAAAAPUmVjZWl2ZWRNZXNzYWdlAAAAAAEAAAPuAAAAIA==\",\n \"AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=\",\n \"AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==\",\n \"AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==\",\n \"AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT\",\n \"AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==\",\n \"AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAKAAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAYVG9rZW5JbnN1ZmZpY2llbnRCYWxhbmNlAAAACgAAAAAAAAAKQ2FzdEZhaWxlZAAAAAAACwAAAAAAAAAMVTI1Nk92ZXJmbG93AAAADAAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ\",\n ]),\n options\n );\n }\n\n public readonly fromJSON = {\n initialize: this.txFromJSON<Result<void>>,\n swap_and_bridge: this.txFromJSON<Result<void>>,\n receive_tokens: this.txFromJSON<Result<void>>,\n swap: this.txFromJSON<Result<void>>,\n stop_swap: this.txFromJSON<Result<void>>,\n start_swap: this.txFromJSON<Result<void>>,\n set_gas_oracle: this.txFromJSON<Result<void>>,\n set_stop_authority: this.txFromJSON<Result<void>>,\n set_rebalancer: this.txFromJSON<Result<void>>,\n set_messenger: this.txFromJSON<Result<void>>,\n set_gas_usage: this.txFromJSON<Result<void>>,\n register_bridge: this.txFromJSON<Result<void>>,\n add_bridge_token: this.txFromJSON<Result<void>>,\n remove_bridge_token: this.txFromJSON<Result<void>>,\n add_pool: this.txFromJSON<Result<void>>,\n withdraw_gas_tokens: this.txFromJSON<Result<void>>,\n withdraw_bridging_fee_in_tokens: this.txFromJSON<Result<void>>,\n has_processed_message: this.txFromJSON<Result<boolean>>,\n has_received_message: this.txFromJSON<Result<boolean>>,\n get_pool_address: this.txFromJSON<Result<string>>,\n get_config: this.txFromJSON<Result<Bridge>>,\n get_stop_authority: this.txFromJSON<Result<string>>,\n get_transaction_cost: this.txFromJSON<Result<u128>>,\n get_gas_usage: this.txFromJSON<Result<u128>>,\n get_admin: this.txFromJSON<Result<string>>,\n get_gas_oracle: this.txFromJSON<Result<string>>,\n get_another_bridge: this.txFromJSON<Result<AnotherBridge>>,\n set_admin: this.txFromJSON<Result<void>>,\n upgrade: this.txFromJSON<Result<void>>,\n };\n}\n", "import { Big } from \"big.js\";\n// @ts-expect-error import tron\nimport TronWeb from \"tronweb\";\nimport { ChainType } from \"../../../chains/chain.enums\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { SdkError } from \"../../../exceptions\";\nimport { FeePaymentMethod, Messenger, SwapParams, TransactionResponse } from \"../../../models\";\nimport { RawTransaction, SmartContractMethodParameter } from \"../../models\";\nimport { sendRawTransaction } from \"../../utils/trx\";\nimport { SendParams, TxSendParams, TxSwapParams } from \"../models\";\nimport { ChainBridgeService } from \"../models/bridge\";\nimport { getNonce, prepareTxSendParams, prepareTxSwapParams } from \"../utils\";\n\nexport class TronBridgeService extends ChainBridgeService {\n chainType: ChainType.TRX = ChainType.TRX;\n\n constructor(public tronWeb: typeof TronWeb, public api: AllbridgeCoreClient) {\n super();\n }\n\n async send(params: SendParams): Promise<TransactionResponse> {\n const txSendParams = await prepareTxSendParams(this.chainType, params, this.api);\n const rawTransaction = await this.buildRawTransactionSendFromParams(txSendParams);\n return await sendRawTransaction(this.tronWeb, rawTransaction);\n }\n\n async buildRawTransactionSwap(params: SwapParams): Promise<RawTransaction> {\n const txSwapParams = prepareTxSwapParams(this.chainType, params);\n return await this.buildRawTransactionSwapFromParams(txSwapParams);\n }\n\n async buildRawTransactionSwapFromParams(params: TxSwapParams): Promise<RawTransaction> {\n const {\n amount,\n contractAddress,\n fromAccountAddress,\n fromTokenAddress,\n toAccountAddress,\n toTokenAddress,\n minimumReceiveAmount,\n } = params;\n\n const parameters = [\n { type: \"uint256\", value: amount },\n { type: \"bytes32\", value: fromTokenAddress },\n { type: \"bytes32\", value: toTokenAddress },\n { type: \"address\", value: toAccountAddress },\n { type: \"uint256\", value: minimumReceiveAmount },\n ];\n const methodSignature = \"swap(uint256,bytes32,bytes32,address,uint256)\";\n return this.buildRawTransaction(contractAddress, methodSignature, parameters, \"0\", fromAccountAddress);\n }\n\n async buildRawTransactionSend(params: SendParams): Promise<RawTransaction> {\n const txSendParams = await prepareTxSendParams(this.chainType, params, this.api);\n return this.buildRawTransactionSendFromParams(txSendParams);\n }\n\n async buildRawTransactionSendFromParams(params: TxSendParams): Promise<RawTransaction> {\n const {\n amount,\n contractAddress,\n fromAccountAddress,\n fromTokenAddress,\n toChainId,\n toAccountAddress,\n toTokenAddress,\n messenger,\n fee,\n gasFeePaymentMethod,\n extraGas,\n } = params;\n\n let totalFee = fee;\n if (extraGas) {\n totalFee = Big(totalFee).plus(extraGas).toFixed();\n }\n\n const nonce = getNonce().toJSON().data;\n let parameters;\n let value: string;\n let methodSignature: string;\n if (messenger == Messenger.CCTP) {\n if (gasFeePaymentMethod === FeePaymentMethod.WITH_STABLECOIN) {\n parameters = [\n { type: \"uint256\", value: amount },\n { type: \"bytes32\", value: toAccountAddress },\n { type: \"uint256\", value: toChainId },\n { type: \"uint256\", value: totalFee },\n ];\n value = \"0\";\n } else {\n parameters = [\n { type: \"uint256\", value: amount },\n { type: \"bytes32\", value: toAccountAddress },\n { type: \"uint256\", value: toChainId },\n { type: \"uint256\", value: 0 },\n ];\n value = totalFee;\n }\n methodSignature = \"bridge(uint256,bytes32,uint256,uint256)\";\n } else {\n if (gasFeePaymentMethod === FeePaymentMethod.WITH_STABLECOIN) {\n parameters = [\n { type: \"bytes32\", value: fromTokenAddress },\n { type: \"uint256\", value: amount },\n { type: \"bytes32\", value: toAccountAddress },\n { type: \"uint256\", value: toChainId },\n { type: \"bytes32\", value: toTokenAddress },\n { type: \"uint256\", value: nonce },\n { type: \"uint8\", value: messenger },\n { type: \"uint256\", value: totalFee },\n ];\n value = \"0\";\n } else {\n parameters = [\n { type: \"bytes32\", value: fromTokenAddress },\n { type: \"uint256\", value: amount },\n { type: \"bytes32\", value: toAccountAddress },\n { type: \"uint256\", value: toChainId },\n { type: \"bytes32\", value: toTokenAddress },\n { type: \"uint256\", value: nonce },\n { type: \"uint8\", value: messenger },\n { type: \"uint256\", value: 0 },\n ];\n value = totalFee;\n }\n methodSignature = \"swapAndBridge(bytes32,uint256,bytes32,uint256,bytes32,uint256,uint8,uint256)\";\n }\n return this.buildRawTransaction(contractAddress, methodSignature, parameters, value, fromAccountAddress);\n }\n\n private async buildRawTransaction(\n contractAddress: string,\n methodSignature: string,\n parameters: SmartContractMethodParameter[],\n value: string,\n fromAddress: string\n ): Promise<RawTransaction> {\n const transactionObject = await this.tronWeb.transactionBuilder.triggerSmartContract(\n contractAddress,\n methodSignature,\n {\n callValue: value,\n },\n parameters,\n fromAddress\n );\n if (!transactionObject?.result?.result) {\n throw new SdkError(\"Unknown error: \" + JSON.stringify(transactionObject, null, 2));\n }\n return transactionObject.transaction;\n }\n}\n", "import BN from \"bn.js\";\n\nexport function amountToHex(amount: string): string {\n return \"0x\" + new BN(amount).toString(\"hex\");\n}\n\nexport function sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(() => resolve(), ms));\n}\n\nexport const promisify =\n // prettier-ignore\n // eslint-disable-next-line @typescript-eslint/ban-types\n (func: Function) =>\n (...args: any[]) =>\n new Promise<any>(\n (resolve, reject) =>\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n func(...args, (err: Error, result: any) => (err ? reject(err) : resolve(result)))\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n );\n", "// @ts-expect-error import tron\nimport TronWeb from \"tronweb\";\nimport { InvalidTxError, VerifyTxError } from \"../../../exceptions\";\nimport { RawTransaction } from \"../../models\";\nimport { sleep } from \"../index\";\n\nexport async function sendRawTransaction(tronWeb: TronWeb, rawTransaction: RawTransaction): Promise<{ txId: string }> {\n const signedTx = await tronWeb.trx.sign(rawTransaction);\n\n if (!signedTx.signature) {\n throw new InvalidTxError(\"Transaction was not signed properly\");\n }\n\n const receipt = await tronWeb.trx.sendRawTransaction(signedTx);\n const transactionHash = receipt.txid;\n await verifyTx(tronWeb, transactionHash);\n return { txId: transactionHash };\n}\n\nexport async function verifyTx(tronWeb: TronWeb, txId: string, timeout = 10000): Promise<any> {\n const start = Date.now();\n /* eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, no-constant-condition */\n while (true) {\n if (Date.now() - start > timeout) {\n throw new VerifyTxError(\"Transaction not found\");\n }\n const result = await tronWeb.trx.getUnconfirmedTransactionInfo(txId);\n if (!result?.receipt) {\n await sleep(2000);\n continue;\n }\n if (result.receipt.result === \"SUCCESS\") {\n return result;\n } else {\n /* eslint-disable-next-line @typescript-eslint/restrict-template-expressions */\n throw new VerifyTxError(`Transaction status is ${result.receipt.result}`);\n }\n }\n}\n", "import { Big } from \"big.js\";\nimport Cache from \"timed-cache\";\n// @ts-expect-error import tron\nimport TronWeb from \"tronweb\";\nimport Web3 from \"web3\";\nimport { NodeRpcUrlsConfig } from \"..\";\nimport { Chains } from \"../../chains\";\nimport { AllbridgeCoreClient } from \"../../client/core-api/core-client-base\";\nimport { AllbridgeCoreClientFiltered } from \"../../client/core-api/core-client-filtered\";\nimport { AllbridgeCoreSdkOptions, ChainType } from \"../../index\";\nimport { PoolInfo, PoolKeyObject, TokenWithChainDetails } from \"../../tokens-info\";\nimport { convertIntAmountToFloat, fromSystemPrecision } from \"../../utils/calculation\";\nimport { SYSTEM_PRECISION } from \"../../utils/calculation/constants\";\nimport { validateAmountDecimals, validateAmountGtZero } from \"../../utils/utils\";\nimport { Provider, TransactionResponse } from \"../models\";\nimport { TokenService } from \"../token\";\nimport { depositAmountToVUsd, vUsdToWithdrawalAmount } from \"../utils/calculation\";\nimport { EvmPoolService } from \"./evm\";\nimport { ApproveParams, ChainPoolService, CheckAllowanceParams, GetAllowanceParams, UserBalanceInfo } from \"./models\";\nimport { DefaultRawPoolTransactionBuilder, RawPoolTransactionBuilder } from \"./raw-pool-transaction-builder\";\nimport { SolanaPoolService } from \"./sol\";\nimport { SrbPoolService } from \"./srb\";\nimport { TronPoolService } from \"./trx\";\n\nexport interface LiquidityPoolService {\n rawTxBuilder: RawPoolTransactionBuilder;\n\n /**\n * Get amount of tokens approved for poolInfo\n * @param provider - will be used to access the network\n * @param params See {@link GetAllowanceParams}\n * @returns the amount of approved tokens\n */\n getAllowance(provider: Provider, params: GetAllowanceParams): Promise<string>;\n\n /**\n * Get amount of tokens approved for poolInfo\n * @param params See {@link GetAllowanceParams}\n * @returns the amount of approved tokens\n */\n getAllowance(params: GetAllowanceParams): Promise<string>;\n\n /**\n * Check if the amount of approved tokens is enough\n * @param provider - will be used to access the network\n * @param params See {@link CheckAllowanceParams}\n * @returns true if the amount of approved tokens is enough to make a transfer\n */\n checkAllowance(provider: Provider, params: CheckAllowanceParams): Promise<boolean>;\n\n /**\n * Check if the amount of approved tokens is enough\n * @param params See {@link CheckAllowanceParams}\n * @returns true if the amount of approved tokens is enough to make a transfer\n */\n checkAllowance(params: CheckAllowanceParams): Promise<boolean>;\n\n /**\n * @Deprecated Use {@link rawTxBuilder}.{@link RawPoolTransactionBuilder.approve}<p>\n * Approve tokens usage by another address on chains\n * <p>\n * For ETH/USDT: due to specificity of the USDT contract:<br/>\n * If the current allowance is not 0, this function will perform an additional transaction to set allowance to 0 before setting the new allowance value.\n * @param provider - will be used to access the network\n * @param approveData\n */\n approve(provider: Provider, approveData: ApproveParams): Promise<TransactionResponse>;\n\n /**\n * Calculates the amount of LP tokens that will be deposited\n * @param amount The float amount of tokens that will be sent\n * @param token\n * @param provider - will be used to access the network\n * @returns amount\n */\n getAmountToBeDeposited(amount: string, token: TokenWithChainDetails, provider?: Provider): Promise<string>;\n\n /**\n * Calculates the amount of tokens will be withdrawn\n * @param amount The float amount of tokens that will be sent\n * @param accountAddress\n * @param token\n * @param provider - will be used to access the network\n * @returns amount\n */\n getAmountToBeWithdrawn(\n amount: string,\n accountAddress: string,\n token: TokenWithChainDetails,\n provider?: Provider\n ): Promise<string>;\n\n /**\n * Get User Balance Info on Liquidity poolInfo\n * @param accountAddress\n * @param token\n * @param provider\n * @returns UserBalanceInfo\n */\n getUserBalanceInfo(\n accountAddress: string,\n token: TokenWithChainDetails,\n provider?: Provider\n ): Promise<UserBalanceInfo>;\n\n /**\n * Gets information about the poolInfo from chain\n * @param token\n * @param provider - will be used to access the network\n * @returns poolInfo\n */\n getPoolInfoFromChain(token: TokenWithChainDetails, provider?: Provider): Promise<Required<PoolInfo>>;\n}\n\nexport class DefaultLiquidityPoolService implements LiquidityPoolService {\n public rawTxBuilder: RawPoolTransactionBuilder;\n private cache: Cache<PoolInfo>;\n\n constructor(\n private api: AllbridgeCoreClientFiltered,\n private nodeRpcUrlsConfig: NodeRpcUrlsConfig,\n private params: AllbridgeCoreSdkOptions,\n private tokenService: TokenService\n ) {\n this.rawTxBuilder = new DefaultRawPoolTransactionBuilder(api, nodeRpcUrlsConfig, this.params, tokenService);\n const ttl = params.cachePoolInfoChainSec > 0 ? params.cachePoolInfoChainSec * 1000 : 20 * 1000;\n this.cache = new Cache<PoolInfo>({ defaultTtl: ttl });\n }\n\n async getAllowance(a: Provider | GetAllowanceParams, b?: GetAllowanceParams): Promise<string> {\n if (b) {\n const provider = a as Provider;\n const params = b;\n return await this.tokenService.getAllowance({ ...params, spender: params.token.poolAddress }, provider);\n } else {\n const params = a as GetAllowanceParams;\n return await this.tokenService.getAllowance({ ...params, spender: params.token.poolAddress });\n }\n }\n\n async checkAllowance(a: Provider | CheckAllowanceParams, b?: CheckAllowanceParams): Promise<boolean> {\n if (b) {\n const provider = a as Provider;\n const params = b;\n return this.tokenService.checkAllowance({ ...params, spender: params.token.poolAddress }, provider);\n } else {\n const params = a as CheckAllowanceParams;\n return this.tokenService.checkAllowance({ ...params, spender: params.token.poolAddress });\n }\n }\n\n async approve(provider: Provider, approveData: ApproveParams): Promise<TransactionResponse> {\n return this.tokenService.approve(provider, { ...approveData, spender: approveData.token.poolAddress });\n }\n\n async getAmountToBeDeposited(amount: string, token: TokenWithChainDetails, provider?: Provider): Promise<string> {\n validateAmountGtZero(amount);\n validateAmountDecimals(\"amount\", amount, token.decimals);\n const pool = await this.getPoolInfoFromChain(token, provider);\n const { vUsdBalance, tokenBalance, aValue, dValue } = pool;\n const vUsd = depositAmountToVUsd(amount, aValue, dValue, tokenBalance, vUsdBalance);\n return convertIntAmountToFloat(vUsd, SYSTEM_PRECISION).toFixed();\n }\n\n async getAmountToBeWithdrawn(\n amount: string,\n accountAddress: string,\n token: TokenWithChainDetails,\n provider?: Provider\n ): Promise<string> {\n validateAmountGtZero(amount);\n validateAmountDecimals(\"amount\", amount, token.decimals);\n const pool = await this.getPoolInfoFromChain(token, provider);\n const tokenAmountInSP = vUsdToWithdrawalAmount(amount);\n const tokenAmount = fromSystemPrecision(tokenAmountInSP, token.decimals);\n const userBalanceInfo = await this.getUserBalanceInfo(accountAddress, token, provider);\n const earned = userBalanceInfo.earned(pool) || \"0\";\n const commonAmount = Big(tokenAmount).plus(earned).toFixed();\n return convertIntAmountToFloat(commonAmount, token.decimals).toFixed();\n }\n\n async getUserBalanceInfo(\n accountAddress: string,\n token: TokenWithChainDetails,\n provider?: Provider\n ): Promise<UserBalanceInfo> {\n return getChainPoolService(\n token.chainSymbol,\n this.api,\n this.nodeRpcUrlsConfig,\n this.params,\n provider\n ).getUserBalanceInfo(accountAddress, token);\n }\n\n async getPoolInfoFromChain(token: TokenWithChainDetails, provider?: Provider): Promise<PoolInfo> {\n const poolKey: PoolKeyObject = { chainSymbol: token.chainSymbol, poolAddress: token.poolAddress };\n const fromCache = this.cache.get(poolKey);\n if (fromCache) {\n return fromCache;\n } else {\n const poolInfo = await getChainPoolService(\n token.chainSymbol,\n this.api,\n this.nodeRpcUrlsConfig,\n this.params,\n provider\n ).getPoolInfoFromChain(token);\n this.cache.put(poolKey, poolInfo);\n this.api.cachePut({ chainSymbol: token.chainSymbol, poolAddress: token.poolAddress }, poolInfo);\n return poolInfo;\n }\n }\n}\n\nexport function getChainPoolService(\n chainSymbol: string,\n api: AllbridgeCoreClient,\n nodeRpcUrlsConfig: NodeRpcUrlsConfig,\n params: AllbridgeCoreSdkOptions,\n provider?: Provider\n): ChainPoolService {\n switch (Chains.getChainProperty(chainSymbol).chainType) {\n case ChainType.EVM: {\n if (provider) {\n return new EvmPoolService(provider as unknown as Web3, api);\n } else {\n const nodeRpcUrl = nodeRpcUrlsConfig.getNodeRpcUrl(chainSymbol);\n return new EvmPoolService(new Web3(nodeRpcUrl), api);\n }\n }\n case ChainType.TRX: {\n const nodeRpcUrl = nodeRpcUrlsConfig.getNodeRpcUrl(chainSymbol);\n const tronJsonRpc = params.tronJsonRpc;\n if (provider) {\n return new TronPoolService(provider, api, tronJsonRpc);\n } else {\n const tronWeb = new TronWeb({ fullHost: nodeRpcUrl });\n return new TronPoolService(tronWeb, api, tronJsonRpc);\n }\n }\n case ChainType.SOLANA: {\n const nodeRpcUrl = nodeRpcUrlsConfig.getNodeRpcUrl(chainSymbol);\n return new SolanaPoolService(nodeRpcUrl, api);\n }\n case ChainType.SRB: {\n return new SrbPoolService(nodeRpcUrlsConfig, params, api);\n }\n }\n}\n", "import { Big } from \"big.js\";\nimport { convertFloatAmountToInt, getD } from \"../../../utils/calculation\";\nimport { SYSTEM_PRECISION } from \"../../../utils/calculation/constants\";\n\nexport function depositAmountToVUsd(\n amount: string,\n aValue: string,\n dValue: string,\n tokenBalance: string,\n vUsdBalance: string\n): string {\n const amountSP = convertFloatAmountToInt(amount, SYSTEM_PRECISION);\n const amountSPBig = Big(amountSP);\n\n const oldD = Big(dValue);\n const oldBalance = Big(tokenBalance).plus(vUsdBalance);\n\n let newTokenBalance;\n let newVUsdBalance;\n\n if (oldD.eq(0) || oldBalance.eq(0)) {\n const halfAmount = amountSPBig.div(2);\n newTokenBalance = Big(tokenBalance).plus(halfAmount);\n newVUsdBalance = Big(vUsdBalance).plus(halfAmount);\n } else {\n newTokenBalance = Big(tokenBalance).plus(amountSPBig.mul(tokenBalance).div(oldBalance));\n newVUsdBalance = Big(vUsdBalance).plus(amountSPBig.mul(vUsdBalance).div(oldBalance));\n }\n const newD = Big(getD(aValue, newTokenBalance.toFixed(), newVUsdBalance.toFixed()));\n return newD.minus(oldD).toFixed();\n}\n\nexport function vUsdToWithdrawalAmount(lpAmount: string): string {\n const lpAmountSP = convertFloatAmountToInt(lpAmount, SYSTEM_PRECISION);\n return Big(lpAmountSP).round().toFixed();\n}\n", "[\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_router\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"_a\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"contract ERC20\",\n \"name\": \"_token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint16\",\n \"name\": \"_feeShareBP\",\n \"type\": \"uint16\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"_balanceRatioMinBP\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"lpName\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"lpSymbol\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Approval\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"user\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Deposit\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"previousOwner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"OwnershipTransferred\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"user\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"RewardsClaimed\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"recipient\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"vUsdAmount\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"fee\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"SwappedFromVUsd\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"vUsdAmount\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"fee\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"SwappedToVUsd\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Transfer\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"user\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Withdraw\",\n \"type\": \"event\"\n },\n {\n \"stateMutability\": \"payable\",\n \"type\": \"fallback\"\n },\n {\n \"inputs\": [],\n \"name\": \"a\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"accRewardPerShareP\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"adjustTotalLpAmount\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"adminFeeAmount\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"adminFeeShareBP\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"allowance\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"approve\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"balanceOf\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"balanceRatioMinBP\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"canDeposit\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"canWithdraw\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"claimAdminFee\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"claimRewards\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"d\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"decimals\",\n \"outputs\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"\",\n \"type\": \"uint8\"\n }\n ],\n \"stateMutability\": \"pure\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"subtractedValue\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"decreaseAllowance\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"deposit\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"feeShareBP\",\n \"outputs\": [\n {\n \"internalType\": \"uint16\",\n \"name\": \"\",\n \"type\": \"uint16\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getPrice\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"x\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getY\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"addedValue\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"increaseAllowance\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"name\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"owner\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"user\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"pendingReward\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"renounceOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"reserves\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"router\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_adminFeeShareBP\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"setAdminFeeShare\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_balanceRatioMinBP\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"setBalanceRatioMinBP\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint16\",\n \"name\": \"_feeShareBP\",\n \"type\": \"uint16\"\n }\n ],\n \"name\": \"setFeeShare\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_router\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"setRouter\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_stopAuthority\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"setStopAuthority\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"startDeposit\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"startWithdraw\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"stopDeposit\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"stopWithdraw\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"user\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"receiveAmountMin\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bool\",\n \"name\": \"zeroFee\",\n \"type\": \"bool\"\n }\n ],\n \"name\": \"swapFromVUsd\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"user\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bool\",\n \"name\": \"zeroFee\",\n \"type\": \"bool\"\n }\n ],\n \"name\": \"swapToVUsd\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"symbol\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"token\",\n \"outputs\": [\n {\n \"internalType\": \"contract ERC20\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"tokenBalance\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"totalSupply\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transfer\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transferFrom\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"transferOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"user\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"userRewardDebt\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"vUsdBalance\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountLp\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"withdraw\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"stateMutability\": \"payable\",\n \"type\": \"receive\"\n }\n]\n", "import { Big } from \"big.js\";\nimport { FeePaymentMethod, TxFeeParams } from \"../../../models\";\nimport { PoolInfo, TokenWithChainDetails } from \"../../../tokens-info\";\nimport { convertIntAmountToFloat, getEarned } from \"../../../utils/calculation\";\nimport { SYSTEM_PRECISION } from \"../../../utils/calculation/constants\";\n\nexport interface ApproveParams {\n /**\n * The token info\n */\n token: TokenWithChainDetails;\n\n /**\n * The address of the token owner who is granting permission to use tokens\n */\n owner: string;\n\n /**\n * The integer amount of tokens to approve.\n * Optional.\n * The maximum amount by default.\n */\n amount?: string | number | Big;\n}\n\nexport interface GetAllowanceParams {\n token: TokenWithChainDetails;\n owner: string;\n gasFeePaymentMethod?: FeePaymentMethod;\n}\n\nexport type GetAllowanceParamsDto = GetAllowanceParams;\n\nexport interface CheckAllowanceParams extends GetAllowanceParams {\n /**\n * The float amount of tokens to check the allowance.\n */\n amount: string | number | Big;\n}\n\nexport interface LiquidityPoolsParams {\n /**\n * The account address to operate tokens with.\n */\n accountAddress: string;\n /**\n * {@link TokenWithChainDetails |The token info object} of operation token.\n */\n token: TokenWithChainDetails;\n\n txFeeParams?: TxFeeParams;\n}\n\nexport interface LiquidityPoolsParamsWithAmount extends LiquidityPoolsParams {\n /**\n * The float amount of tokens.\n */\n amount: string;\n}\n\nexport interface UserBalanceInfoDTO {\n lpAmount: string;\n rewardDebt: string;\n}\n\nexport interface UserBalanceInfo extends UserBalanceInfoDTO {\n userLiquidity: string;\n\n earned(poolInfo: PoolInfo, decimals?: number): string;\n}\n\nexport class UserBalance implements UserBalanceInfo {\n lpAmount: string;\n rewardDebt: string;\n\n constructor(userInfo: UserBalanceInfoDTO) {\n this.lpAmount = userInfo.lpAmount;\n this.rewardDebt = userInfo.rewardDebt;\n }\n\n get userLiquidity(): string {\n return convertIntAmountToFloat(this.lpAmount, SYSTEM_PRECISION).toFixed();\n }\n\n earned(poolInfo: PoolInfo, decimals?: number): string {\n const earned = getEarned(this.lpAmount, this.rewardDebt, poolInfo.accRewardPerShareP, poolInfo.p);\n if (decimals) {\n return convertIntAmountToFloat(earned, decimals).toFixed();\n }\n return earned;\n }\n}\n", "import { ChainType } from \"../../../chains/chain.enums\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { PoolInfo, TokenWithChainDetails } from \"../../../tokens-info\";\nimport { RawTransaction } from \"../../models\";\nimport { LiquidityPoolsParams, LiquidityPoolsParamsWithAmount, UserBalanceInfo } from \"./pool.model\";\n\nexport abstract class ChainPoolService {\n abstract chainType: ChainType;\n abstract api: AllbridgeCoreClient;\n\n abstract getUserBalanceInfo(accountAddress: string, token: TokenWithChainDetails): Promise<UserBalanceInfo>;\n\n abstract getPoolInfoFromChain(token: TokenWithChainDetails): Promise<PoolInfo>;\n\n abstract buildRawTransactionDeposit(params: LiquidityPoolsParamsWithAmount): Promise<RawTransaction>;\n\n abstract buildRawTransactionWithdraw(params: LiquidityPoolsParamsWithAmount): Promise<RawTransaction>;\n\n abstract buildRawTransactionClaimRewards(params: LiquidityPoolsParams): Promise<RawTransaction>;\n}\n", "import Web3 from \"web3\";\nimport { AbiItem } from \"web3-utils\";\nimport { ChainType } from \"../../../chains/chain.enums\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { PoolInfo, TokenWithChainDetails } from \"../../../tokens-info\";\nimport { calculatePoolInfoImbalance } from \"../../../utils/calculation\";\nimport { promiseWithTimeout, promiseWithTimeoutAndRetries } from \"../../../utils/utils\";\nimport { RawTransaction } from \"../../models\";\nimport PoolAbi from \"../../models/abi/Pool.json\";\nimport { Pool as PoolContract } from \"../../models/abi/types/Pool\";\nimport { BaseContract } from \"../../models/abi/types/types\";\nimport { promisify } from \"../../utils\";\nimport {\n ChainPoolService,\n LiquidityPoolsParams,\n LiquidityPoolsParamsWithAmount,\n UserBalance,\n UserBalanceInfo,\n} from \"../models\";\n\nexport class EvmPoolService extends ChainPoolService {\n chainType: ChainType.EVM = ChainType.EVM;\n private P = 52;\n\n constructor(public web3: Web3, public api: AllbridgeCoreClient) {\n super();\n }\n\n async getUserBalanceInfo(accountAddress: string, token: TokenWithChainDetails): Promise<UserBalanceInfo> {\n let userBalanceInfo;\n try {\n userBalanceInfo = await promiseWithTimeout(\n this.getUserBalanceInfoByBatch(accountAddress, token),\n `Cannot get UserBalanceInfo for ${token.name} on ${token.chainSymbol}`,\n 5000\n );\n } catch (err) {\n userBalanceInfo = await promiseWithTimeoutAndRetries(\n () => this.getUserBalanceInfoPerProperty(accountAddress, token),\n `Cannot get UserBalanceInfo for ${token.name} on ${token.chainSymbol}`,\n 5,\n 2000\n );\n }\n return userBalanceInfo;\n }\n\n private async getUserBalanceInfoByBatch(\n accountAddress: string,\n token: TokenWithChainDetails\n ): Promise<UserBalanceInfo> {\n const batch = new this.web3.BatchRequest();\n const contract = new this.web3.eth.Contract(PoolAbi as AbiItem[], token.poolAddress);\n const arr = [\"userRewardDebt\", \"balanceOf\"].map((methodName) =>\n promisify((cb: any) => batch.add(contract.methods[methodName](accountAddress).call.request({}, cb)))()\n );\n batch.execute();\n const [rewardDebt, lpAmount] = await Promise.all(arr);\n return new UserBalance({ lpAmount, rewardDebt });\n }\n\n private async getUserBalanceInfoPerProperty(\n accountAddress: string,\n token: TokenWithChainDetails\n ): Promise<UserBalanceInfo> {\n const rewardDebt = await this.getPoolContract(token.poolAddress).methods.userRewardDebt(accountAddress).call();\n const lpAmount = await this.getPoolContract(token.poolAddress).methods.balanceOf(accountAddress).call();\n return new UserBalance({ lpAmount, rewardDebt });\n }\n\n async getPoolInfoFromChain(token: TokenWithChainDetails): Promise<PoolInfo> {\n let poolInfo;\n try {\n poolInfo = await promiseWithTimeout(\n this.getPoolInfoByBatch(token),\n `Cannot get PoolInfo for ${token.name} on ${token.chainSymbol}`,\n 5000\n );\n } catch (err) {\n poolInfo = await promiseWithTimeoutAndRetries(\n () => this.getPoolInfoPerProperty(token),\n `Cannot get PoolInfo for ${token.name} on ${token.chainSymbol}`,\n 5,\n 2000\n );\n }\n return poolInfo;\n }\n\n private async getPoolInfoByBatch(token: TokenWithChainDetails): Promise<PoolInfo> {\n const batch = new this.web3.BatchRequest();\n const contract = new this.web3.eth.Contract(PoolAbi as AbiItem[], token.poolAddress);\n const arr = [\"a\", \"d\", \"tokenBalance\", \"vUsdBalance\", \"totalSupply\", \"accRewardPerShareP\"].map((methodName) =>\n promisify((cb: any) => batch.add(contract.methods[methodName]().call.request({}, cb)))()\n );\n batch.execute();\n\n const [aValue, dValue, tokenBalance, vUsdBalance, totalLpAmount, accRewardPerShareP] = await Promise.all(arr);\n const tokenBalanceStr = tokenBalance.toString();\n const vUsdBalanceStr = vUsdBalance.toString();\n const imbalance = calculatePoolInfoImbalance({ tokenBalance: tokenBalanceStr, vUsdBalance: vUsdBalanceStr });\n return {\n aValue: aValue.toString(),\n dValue: dValue.toString(),\n tokenBalance: tokenBalanceStr,\n vUsdBalance: vUsdBalanceStr,\n totalLpAmount: totalLpAmount.toString(),\n accRewardPerShareP: accRewardPerShareP.toString(),\n p: this.P,\n imbalance,\n };\n }\n\n private async getPoolInfoPerProperty(token: TokenWithChainDetails): Promise<PoolInfo> {\n const poolContract = this.getPoolContract(token.poolAddress);\n\n const aValue = await poolContract.methods.a().call();\n const dValue = await poolContract.methods.d().call();\n const tokenBalance = await poolContract.methods.tokenBalance().call();\n const vUsdBalance = await poolContract.methods.vUsdBalance().call();\n const totalLpAmount = await poolContract.methods.totalSupply().call();\n const accRewardPerShareP = await poolContract.methods.accRewardPerShareP().call();\n\n const imbalance = calculatePoolInfoImbalance({ tokenBalance, vUsdBalance });\n\n return {\n aValue,\n dValue,\n tokenBalance,\n vUsdBalance,\n totalLpAmount,\n accRewardPerShareP,\n p: this.P,\n imbalance,\n };\n }\n\n async buildRawTransactionDeposit(params: LiquidityPoolsParamsWithAmount): Promise<RawTransaction> {\n return Promise.resolve({\n ...this.buildTxParams(params),\n data: this.getPoolContract(params.token.poolAddress).methods.deposit(params.amount).encodeABI(),\n });\n }\n\n async buildRawTransactionWithdraw(params: LiquidityPoolsParamsWithAmount): Promise<RawTransaction> {\n return Promise.resolve({\n ...this.buildTxParams(params),\n data: this.getPoolContract(params.token.poolAddress).methods.withdraw(params.amount).encodeABI(),\n });\n }\n\n async buildRawTransactionClaimRewards(params: LiquidityPoolsParams): Promise<RawTransaction> {\n return Promise.resolve({\n ...this.buildTxParams(params),\n data: this.getPoolContract(params.token.poolAddress).methods.claimRewards().encodeABI(),\n });\n }\n\n buildTxParams(params: LiquidityPoolsParams) {\n return {\n from: params.accountAddress,\n to: params.token.poolAddress,\n value: \"0\",\n };\n }\n\n private getContract<T extends BaseContract>(abiItem: AbiItem[], contractAddress: string): T {\n return new this.web3.eth.Contract(abiItem, contractAddress) as any;\n }\n\n private getPoolContract(contractAddress: string): PoolContract {\n return this.getContract<PoolContract>(PoolAbi as AbiItem[], contractAddress);\n }\n}\n", "import { NodeRpcUrlsConfig } from \"..\";\nimport { AllbridgeCoreClient } from \"../../client/core-api/core-client-base\";\nimport { AllbridgeCoreSdkOptions } from \"../../index\";\nimport { convertFloatAmountToInt } from \"../../utils/calculation\";\nimport { SYSTEM_PRECISION } from \"../../utils/calculation/constants\";\nimport { validateAmountDecimals, validateAmountGtZero } from \"../../utils/utils\";\nimport { Provider, RawTransaction } from \"../models\";\nimport { TokenService } from \"../token\";\nimport { ApproveParams, LiquidityPoolsParams, LiquidityPoolsParamsWithAmount } from \"./models\";\nimport { getChainPoolService } from \"./index\";\n\nexport interface RawPoolTransactionBuilder {\n /**\n * Creates a Raw Transaction for approving tokens usage by the bridge\n * @param provider - will be used to access the network\n * @param approveData\n */\n approve(provider: Provider, approveData: ApproveParams): Promise<RawTransaction>;\n /**\n * Creates a Raw Transaction for approving tokens usage by the bridge\n * @param approveData\n */\n approve(approveData: ApproveParams): Promise<RawTransaction>;\n\n /**\n * Creates a Raw Transaction for depositing tokens to Liquidity pools\n * @param params\n * @param provider - will be used to access the network\n */\n deposit(params: LiquidityPoolsParamsWithAmount, provider?: Provider): Promise<RawTransaction>;\n\n /**\n * Creates a Raw Transaction for withdrawing tokens from Liquidity pools\n * @param params\n * @param provider - will be used to access the network\n */\n withdraw(params: LiquidityPoolsParamsWithAmount, provider?: Provider): Promise<RawTransaction>;\n\n /**\n * Creates a Raw Transaction for claiming rewards from Liquidity pools\n * @param params\n * @param provider - will be used to access the network\n */\n claimRewards(params: LiquidityPoolsParams, provider?: Provider): Promise<RawTransaction>;\n}\n\nexport class DefaultRawPoolTransactionBuilder implements RawPoolTransactionBuilder {\n constructor(\n private api: AllbridgeCoreClient,\n private nodeRpcUrlsConfig: NodeRpcUrlsConfig,\n private params: AllbridgeCoreSdkOptions,\n private tokenService: TokenService\n ) {}\n\n async approve(a: Provider | ApproveParams, b?: ApproveParams): Promise<RawTransaction> {\n if (b) {\n const provider = a as Provider;\n const approveData: ApproveParams = b;\n return this.tokenService.buildRawTransactionApprove(\n {\n ...approveData,\n spender: approveData.token.poolAddress,\n },\n provider\n );\n } else {\n const approveData: ApproveParams = a as ApproveParams;\n return this.tokenService.buildRawTransactionApprove({\n ...approveData,\n spender: approveData.token.poolAddress,\n });\n }\n }\n\n async deposit(params: LiquidityPoolsParamsWithAmount, provider?: Provider): Promise<RawTransaction> {\n validateAmountGtZero(params.amount);\n validateAmountDecimals(\"amount\", params.amount, params.token.decimals);\n params.amount = convertFloatAmountToInt(params.amount, params.token.decimals).toFixed();\n return getChainPoolService(\n params.token.chainSymbol,\n this.api,\n this.nodeRpcUrlsConfig,\n this.params,\n provider\n ).buildRawTransactionDeposit(params);\n }\n\n async withdraw(params: LiquidityPoolsParamsWithAmount, provider?: Provider): Promise<RawTransaction> {\n validateAmountGtZero(params.amount);\n validateAmountDecimals(\"amount\", params.amount, params.token.decimals);\n params.amount = convertFloatAmountToInt(params.amount, SYSTEM_PRECISION).toFixed();\n return getChainPoolService(\n params.token.chainSymbol,\n this.api,\n this.nodeRpcUrlsConfig,\n this.params,\n provider\n ).buildRawTransactionWithdraw(params);\n }\n\n async claimRewards(params: LiquidityPoolsParams, provider?: Provider): Promise<RawTransaction> {\n return getChainPoolService(\n params.token.chainSymbol,\n this.api,\n this.nodeRpcUrlsConfig,\n this.params,\n provider\n ).buildRawTransactionClaimRewards(params);\n }\n}\n", "import { AnchorProvider, BN, Program, Provider, Spl, web3 } from \"@project-serum/anchor\";\nimport { Connection, PublicKey, TransactionInstruction } from \"@solana/web3.js\";\nimport { ChainType } from \"../../../chains/chain.enums\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { PoolInfo, TokenWithChainDetails } from \"../../../tokens-info\";\nimport { calculatePoolInfoImbalance } from \"../../../utils/calculation\";\nimport { RawTransaction } from \"../../models\";\nimport { Bridge as BridgeType, IDL as bridgeIdl } from \"../../models/sol/types/bridge\";\nimport { getTokenAccountData } from \"../../utils/sol\";\nimport {\n getAssociatedAccount,\n getAuthorityAccount,\n getBridgeTokenAccount,\n getConfigAccount,\n getUserDepositAccount,\n} from \"../../utils/sol/accounts\";\nimport { addUnitLimitAndUnitPriceToTx } from \"../../utils/sol/compute-budget\";\nimport { LiquidityPoolsParams, LiquidityPoolsParamsWithAmount, UserBalance, UserBalanceInfo } from \"../models\";\nimport { ChainPoolService } from \"../models/pool\";\n\ninterface LPAccounts {\n mint: PublicKey;\n user: PublicKey;\n config: PublicKey;\n pool: PublicKey;\n bridgeAuthority: PublicKey;\n userDeposit: PublicKey;\n userToken: PublicKey;\n bridgeToken: PublicKey;\n}\n\ninterface LPTransactionData {\n accounts: LPAccounts;\n preInstructions: TransactionInstruction[];\n}\n\nexport class SolanaPoolService extends ChainPoolService {\n chainType: ChainType.SOLANA = ChainType.SOLANA;\n private P = 48;\n\n constructor(public solanaRpcUrl: string, public api: AllbridgeCoreClient) {\n super();\n }\n\n async getUserBalanceInfo(accountAddress: string, token: TokenWithChainDetails): Promise<UserBalanceInfo> {\n const provider = this.buildAnchorProvider(accountAddress);\n const bridge = this.getBridge(token.bridgeAddress, provider);\n const poolAccount = new PublicKey(token.poolAddress);\n const poolAccountInfo = await bridge.account.pool.fetch(poolAccount);\n try {\n const userDepositAccount = await getUserDepositAccount(\n new PublicKey(accountAddress),\n poolAccountInfo.mint,\n bridge.programId\n );\n const { lpAmount, rewardDebt } = await bridge.account.userDeposit.fetch(userDepositAccount);\n return new UserBalance({\n lpAmount: lpAmount.toString(),\n rewardDebt: rewardDebt.toString(),\n });\n } catch (e) {\n return new UserBalance({ lpAmount: \"0\", rewardDebt: \"0\" });\n }\n }\n\n async getPoolInfoFromChain(token: TokenWithChainDetails): Promise<PoolInfo> {\n const provider = this.buildAnchorProvider(token.bridgeAddress);\n const pool = await this.getBridge(token.bridgeAddress, provider).account.pool.fetch(token.poolAddress);\n const vUsdBalance = pool.vUsdBalance.toString();\n const tokenBalance = pool.tokenBalance.toString();\n const imbalance = calculatePoolInfoImbalance({ tokenBalance, vUsdBalance });\n return {\n dValue: pool.d.toString(),\n aValue: pool.a.toString(),\n totalLpAmount: pool.totalLpAmount.toString(),\n vUsdBalance,\n tokenBalance,\n accRewardPerShareP: pool.accRewardPerShareP.toString(),\n p: this.P,\n imbalance,\n };\n }\n\n async buildRawTransactionDeposit(params: LiquidityPoolsParamsWithAmount): Promise<RawTransaction> {\n const { bridge, accounts, preInstructions } = await this.prepareDataForTransaction(params);\n\n const tx = await bridge.methods\n .deposit(new BN(params.amount))\n .accounts(accounts)\n .preInstructions(preInstructions)\n .transaction();\n tx.recentBlockhash = (\n await this.buildAnchorProvider(params.accountAddress).connection.getLatestBlockhash()\n ).blockhash;\n tx.feePayer = new PublicKey(params.accountAddress);\n await addUnitLimitAndUnitPriceToTx(tx, params.txFeeParams, this.solanaRpcUrl);\n return tx;\n }\n\n async buildRawTransactionWithdraw(params: LiquidityPoolsParamsWithAmount): Promise<RawTransaction> {\n const { bridge, accounts, preInstructions } = await this.prepareDataForTransaction(params);\n\n const tx = await bridge.methods\n .withdraw(new BN(params.amount))\n .accounts(accounts)\n .preInstructions(preInstructions)\n .transaction();\n tx.recentBlockhash = (\n await this.buildAnchorProvider(params.accountAddress).connection.getLatestBlockhash()\n ).blockhash;\n tx.feePayer = new PublicKey(params.accountAddress);\n await addUnitLimitAndUnitPriceToTx(tx, params.txFeeParams, this.solanaRpcUrl);\n return tx;\n }\n\n async buildRawTransactionClaimRewards(params: LiquidityPoolsParams): Promise<RawTransaction> {\n const { bridge, accounts, preInstructions } = await this.prepareDataForTransaction(params);\n\n const tx = await bridge.methods.claimRewards().accounts(accounts).preInstructions(preInstructions).transaction();\n tx.recentBlockhash = (\n await this.buildAnchorProvider(params.accountAddress).connection.getLatestBlockhash()\n ).blockhash;\n tx.feePayer = new PublicKey(params.accountAddress);\n await addUnitLimitAndUnitPriceToTx(tx, params.txFeeParams, this.solanaRpcUrl);\n return tx;\n }\n\n private async prepareDataForTransaction(params: LiquidityPoolsParams) {\n const provider = this.buildAnchorProvider(params.accountAddress);\n const bridge = this.getBridge(params.token.bridgeAddress, provider);\n\n const { accounts, preInstructions } = await this._getLPTransactionData(\n bridge,\n params.token.poolAddress,\n params.accountAddress,\n provider\n );\n return { bridge, accounts, preInstructions };\n }\n\n private getBridge(bridgeAddress: string, provider: Provider): Program<BridgeType> {\n return new Program<BridgeType>(bridgeIdl, bridgeAddress, provider);\n }\n\n private buildAnchorProvider(accountAddress: string): Provider {\n const connection = new Connection(this.solanaRpcUrl, \"confirmed\");\n\n const publicKey = new PublicKey(accountAddress);\n\n return new AnchorProvider(\n connection,\n // @ts-expect-error enough wallet for fetch actions\n { publicKey: publicKey },\n {\n preflightCommitment: \"confirmed\",\n commitment: \"confirmed\",\n }\n );\n }\n\n private async _getLPTransactionData(\n bridge: Program<BridgeType>,\n poolAddress: string,\n account: string,\n provider: Provider\n ): Promise<LPTransactionData> {\n const user = new PublicKey(account);\n const configAccount = await getConfigAccount(bridge.programId);\n const bridgeAuthority = await getAuthorityAccount(bridge.programId);\n const poolAccount = new PublicKey(poolAddress);\n const poolAccountInfo = await bridge.account.pool.fetch(poolAccount);\n const tokenMintAccount = poolAccountInfo.mint;\n const userToken = await getAssociatedAccount(user, tokenMintAccount);\n const bridgeTokenAccount = await getBridgeTokenAccount(tokenMintAccount, bridge.programId);\n const userDepositAccount = await getUserDepositAccount(user, tokenMintAccount, bridge.programId);\n\n const preInstructions: TransactionInstruction[] = [\n web3.ComputeBudgetProgram.setComputeUnitLimit({\n units: 1000000,\n }),\n ];\n\n try {\n await getTokenAccountData(userToken, provider);\n } catch (e) {\n const associatedProgram = Spl.associatedToken(provider);\n const createUserTokenInstruction: TransactionInstruction = await associatedProgram.methods\n .create()\n .accounts({\n mint: tokenMintAccount,\n owner: user,\n associatedAccount: userToken,\n })\n .instruction();\n preInstructions.push(createUserTokenInstruction);\n }\n\n try {\n await bridge.account.userDeposit.fetch(userDepositAccount);\n } catch (error) {\n const instruction: TransactionInstruction = await bridge.methods\n .initDepositAccount()\n .accounts({\n mint: tokenMintAccount,\n user,\n userDeposit: userDepositAccount,\n })\n .instruction();\n preInstructions.push(instruction);\n }\n\n const accounts: LPAccounts = {\n mint: tokenMintAccount,\n user,\n config: configAccount,\n pool: poolAccount,\n bridgeAuthority: bridgeAuthority,\n userDeposit: userDepositAccount,\n userToken,\n bridgeToken: bridgeTokenAccount,\n };\n\n return { accounts, preInstructions };\n }\n}\n", "import { contract } from \"@stellar/stellar-sdk\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { AllbridgeCoreSdkOptions, ChainSymbol, ChainType } from \"../../../index\";\nimport {\n LiquidityPoolsParams,\n LiquidityPoolsParamsWithAmount,\n PoolInfo,\n SdkError,\n TokenWithChainDetails,\n UserBalanceInfo,\n} from \"../../../models\";\nimport { calculatePoolInfoImbalance } from \"../../../utils/calculation\";\nimport { NodeRpcUrlsConfig } from \"../../index\";\nimport { RawTransaction } from \"../../models\";\nimport { PoolContract } from \"../../models/srb/pool-contract\";\nimport { ChainPoolService, UserBalance } from \"../models\";\nimport ContractClientOptions = contract.ClientOptions;\n\nexport class SrbPoolService extends ChainPoolService {\n chainType: ChainType.SRB = ChainType.SRB;\n private P = 48;\n\n constructor(\n readonly nodeRpcUrlsConfig: NodeRpcUrlsConfig,\n readonly params: AllbridgeCoreSdkOptions,\n readonly api: AllbridgeCoreClient\n ) {\n super();\n }\n\n async getUserBalanceInfo(accountAddress: string, token: TokenWithChainDetails): Promise<UserBalanceInfo> {\n const poolContract = this.getContract(token.poolAddress);\n const result = (await poolContract.get_user_deposit({ user: accountAddress })).result;\n if (result.isErr()) {\n throw new SdkError();\n }\n const userDeposit = result.unwrap();\n return new UserBalance({\n lpAmount: userDeposit.lp_amount.toString(),\n rewardDebt: userDeposit.reward_debt.toString(),\n });\n }\n\n async getPoolInfoFromChain(token: TokenWithChainDetails): Promise<PoolInfo> {\n const poolContract = this.getContract(token.poolAddress);\n const result = (await poolContract.get_pool()).result;\n if (result.isErr()) {\n throw new SdkError();\n }\n const pool = result.unwrap();\n return {\n aValue: pool.a.toString(),\n accRewardPerShareP: pool.acc_reward_per_share_p.toString(),\n dValue: pool.d.toString(),\n tokenBalance: pool.token_balance.toString(),\n p: this.P,\n totalLpAmount: pool.total_lp_amount.toString(),\n vUsdBalance: pool.v_usd_balance.toString(),\n imbalance: calculatePoolInfoImbalance({\n tokenBalance: pool.token_balance.toString(),\n vUsdBalance: pool.v_usd_balance.toString(),\n }),\n };\n }\n\n async buildRawTransactionDeposit(params: LiquidityPoolsParamsWithAmount): Promise<RawTransaction> {\n const poolContract = this.getContract(params.token.poolAddress, params.accountAddress);\n return (\n await poolContract.deposit({\n sender: params.accountAddress,\n amount: BigInt(params.amount),\n })\n ).toXDR();\n }\n\n async buildRawTransactionWithdraw(params: LiquidityPoolsParamsWithAmount): Promise<RawTransaction> {\n const poolContract = this.getContract(params.token.poolAddress, params.accountAddress);\n return (\n await poolContract.withdraw({\n sender: params.accountAddress,\n amount_lp: BigInt(params.amount),\n })\n ).toXDR();\n }\n\n async buildRawTransactionClaimRewards(params: LiquidityPoolsParams): Promise<RawTransaction> {\n const poolContract = this.getContract(params.token.poolAddress, params.accountAddress);\n return (\n await poolContract.claim_rewards({\n sender: params.accountAddress,\n })\n ).toXDR();\n }\n\n private getContract(address: string, sender?: string): PoolContract {\n const config: ContractClientOptions = {\n publicKey: sender,\n contractId: address,\n networkPassphrase: this.params.sorobanNetworkPassphrase,\n rpcUrl: this.nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.SRB),\n };\n return new PoolContract(config);\n }\n}\n", "import { contract } from \"@stellar/stellar-sdk\";\nimport u128 = contract.u128;\nimport u32 = contract.u32;\nimport AssembledTransaction = contract.AssembledTransaction;\nimport Result = contract.Result;\nimport ContractSpec = contract.Spec;\nimport ContractClient = contract.Client;\nimport ContractClientOptions = contract.ClientOptions;\n\nexport interface SwappedFromVUsd {\n amount: u128;\n fee: u128;\n recipient: string;\n token: string;\n vusd_amount: u128;\n}\n\nexport interface SwappedToVUsd {\n amount: u128;\n fee: u128;\n sender: string;\n token: string;\n vusd_amount: u128;\n}\n\nexport interface Deposit {\n amount: u128;\n user: string;\n}\n\nexport interface Withdraw {\n amount: u128;\n user: string;\n}\n\nexport interface RewardsClaimed {\n amount: u128;\n user: string;\n}\n\nexport type Bridge = readonly [string];\nexport interface DataKey {\n tag: \"UserDeposit\";\n values: readonly [string];\n}\n\nexport interface Pool {\n a: u128;\n acc_reward_per_share_p: u128;\n admin_fee_amount: u128;\n admin_fee_share_bp: u128;\n balance_ratio_min_bp: u128;\n can_deposit: boolean;\n can_withdraw: boolean;\n d: u128;\n decimals: u32;\n fee_share_bp: u128;\n reserves: u128;\n token: string;\n token_balance: u128;\n total_lp_amount: u128;\n v_usd_balance: u128;\n}\n\nexport interface UserDeposit {\n lp_amount: u128;\n reward_debt: u128;\n}\n\nexport type Admin = readonly [string];\nexport type GasOracleAddress = readonly [string];\nexport type GasUsage = readonly [Map<u32, u128>];\nexport type NativeToken = readonly [string];\nexport type StopAuthority = readonly [string];\nexport const Errors = {\n 0: { message: \"\" },\n 1: { message: \"\" },\n 2: { message: \"\" },\n 3: { message: \"\" },\n 4: { message: \"\" },\n 5: { message: \"\" },\n 6: { message: \"\" },\n 7: { message: \"\" },\n 8: { message: \"\" },\n 9: { message: \"\" },\n 10: { message: \"\" },\n 11: { message: \"\" },\n 12: { message: \"\" },\n 103: { message: \"\" },\n 104: { message: \"\" },\n 105: { message: \"\" },\n 106: { message: \"\" },\n 107: { message: \"\" },\n 108: { message: \"\" },\n 109: { message: \"\" },\n 203: { message: \"\" },\n 204: { message: \"\" },\n 205: { message: \"\" },\n 206: { message: \"\" },\n 207: { message: \"\" },\n 208: { message: \"\" },\n 209: { message: \"\" },\n 210: { message: \"\" },\n 211: { message: \"\" },\n 212: { message: \"\" },\n 214: { message: \"\" },\n 215: { message: \"\" },\n 216: { message: \"\" },\n 217: { message: \"\" },\n 218: { message: \"\" },\n 300: { message: \"\" },\n 301: { message: \"\" },\n 302: { message: \"\" },\n 303: { message: \"\" },\n 400: { message: \"\" },\n};\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\nexport interface PoolContract {\n /**\n * Construct and simulate a initialize transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n initialize: (\n {\n admin,\n bridge,\n a,\n token,\n fee_share_bp,\n balance_ratio_min_bp,\n admin_fee_share_bp,\n }: {\n admin: string;\n bridge: string;\n a: u128;\n token: string;\n fee_share_bp: u128;\n balance_ratio_min_bp: u128;\n admin_fee_share_bp: u128;\n },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a deposit transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n deposit: (\n { sender, amount }: { sender: string; amount: u128 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a withdraw transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n withdraw: (\n { sender, amount_lp }: { sender: string; amount_lp: u128 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a swap_to_v_usd transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n swap_to_v_usd: (\n { user, amount, zero_fee }: { user: string; amount: u128; zero_fee: boolean },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<u128>>>;\n\n /**\n * Construct and simulate a swap_from_v_usd transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n swap_from_v_usd: (\n {\n user,\n vusd_amount,\n receive_amount_min,\n zero_fee,\n }: {\n user: string;\n vusd_amount: u128;\n receive_amount_min: u128;\n zero_fee: boolean;\n },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<u128>>>;\n\n /**\n * Construct and simulate a claim_rewards transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n claim_rewards: (\n { sender }: { sender: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a set_fee_share transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * `admin`\n */\n set_fee_share: (\n { fee_share_bp }: { fee_share_bp: u128 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a adjust_total_lp_amount transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n adjust_total_lp_amount: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a set_balance_ratio_min_bp transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n set_balance_ratio_min_bp: (\n { balance_ratio_min_bp }: { balance_ratio_min_bp: u128 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a stop_deposit transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n stop_deposit: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a start_deposit transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n start_deposit: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a stop_withdraw transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n stop_withdraw: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a start_withdraw transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n start_withdraw: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a set_stop_authority transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n set_stop_authority: (\n { stop_authority }: { stop_authority: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a set_bridge transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n set_bridge: (\n { bridge }: { bridge: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a set_admin transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n set_admin: (\n { new_admin }: { new_admin: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a set_admin_fee_share transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n set_admin_fee_share: (\n { admin_fee_share_bp }: { admin_fee_share_bp: u128 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a claim_admin_fee transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n claim_admin_fee: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a pending_reward transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * `view`\n */\n pending_reward: (\n { user }: { user: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<u128>>>;\n\n /**\n * Construct and simulate a get_pool transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n get_pool: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<Pool>>>;\n\n /**\n * Construct and simulate a get_admin transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n get_admin: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<string>>>;\n\n /**\n * Construct and simulate a get_stop_authority transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n get_stop_authority: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<string>>>;\n\n /**\n * Construct and simulate a get_bridge transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n get_bridge: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<string>>>;\n\n /**\n * Construct and simulate a get_user_deposit transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n get_user_deposit: (\n { user }: { user: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<UserDeposit>>>;\n\n /**\n * Construct and simulate a upgrade transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n upgrade: (\n { new_wasm_hash }: { new_wasm_hash: Buffer },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n}\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\nexport class PoolContract extends ContractClient {\n constructor(public readonly options: ContractClientOptions) {\n super(\n new ContractSpec([\n \"AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABwAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAZicmlkZ2UAAAAAABMAAAAAAAAAAWEAAAAAAAAKAAAAAAAAAAV0b2tlbgAAAAAAABMAAAAAAAAADGZlZV9zaGFyZV9icAAAAAoAAAAAAAAAFGJhbGFuY2VfcmF0aW9fbWluX2JwAAAACgAAAAAAAAASYWRtaW5fZmVlX3NoYXJlX2JwAAAAAAAKAAAAAQAAA+kAAAPtAAAAAAAAAAM=\",\n \"AAAAAAAAAAAAAAAHZGVwb3NpdAAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAAId2l0aGRyYXcAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAACWFtb3VudF9scAAAAAAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==\",\n \"AAAAAAAAAAAAAAANc3dhcF90b192X3VzZAAAAAAAAAMAAAAAAAAABHVzZXIAAAATAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACHplcm9fZmVlAAAAAQAAAAEAAAPpAAAACgAAAAM=\",\n \"AAAAAAAAAAAAAAAPc3dhcF9mcm9tX3ZfdXNkAAAAAAQAAAAAAAAABHVzZXIAAAATAAAAAAAAAAt2dXNkX2Ftb3VudAAAAAAKAAAAAAAAABJyZWNlaXZlX2Ftb3VudF9taW4AAAAAAAoAAAAAAAAACHplcm9fZmVlAAAAAQAAAAEAAAPpAAAACgAAAAM=\",\n \"AAAAAAAAAAAAAAANY2xhaW1fcmV3YXJkcwAAAAAAAAEAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAdgYWRtaW5gAAAAAA1zZXRfZmVlX3NoYXJlAAAAAAAAAQAAAAAAAAAMZmVlX3NoYXJlX2JwAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAAWYWRqdXN0X3RvdGFsX2xwX2Ftb3VudAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAAYc2V0X2JhbGFuY2VfcmF0aW9fbWluX2JwAAAAAQAAAAAAAAAUYmFsYW5jZV9yYXRpb19taW5fYnAAAAAKAAAAAQAAA+kAAAPtAAAAAAAAAAM=\",\n \"AAAAAAAAAAAAAAAMc3RvcF9kZXBvc2l0AAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAANc3RhcnRfZGVwb3NpdAAAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==\",\n \"AAAAAAAAAAAAAAANc3RvcF93aXRoZHJhdwAAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==\",\n \"AAAAAAAAAAAAAAAOc3RhcnRfd2l0aGRyYXcAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==\",\n \"AAAAAAAAAAAAAAASc2V0X3N0b3BfYXV0aG9yaXR5AAAAAAABAAAAAAAAAA5zdG9wX2F1dGhvcml0eQAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAAKc2V0X2JyaWRnZQAAAAAAAQAAAAAAAAAGYnJpZGdlAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=\",\n \"AAAAAAAAAAAAAAAJc2V0X2FkbWluAAAAAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAATc2V0X2FkbWluX2ZlZV9zaGFyZQAAAAABAAAAAAAAABJhZG1pbl9mZWVfc2hhcmVfYnAAAAAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==\",\n \"AAAAAAAAAAAAAAAPY2xhaW1fYWRtaW5fZmVlAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==\",\n \"AAAAAAAAAAZgdmlld2AAAAAAAA5wZW5kaW5nX3Jld2FyZAAAAAAAAQAAAAAAAAAEdXNlcgAAABMAAAABAAAD6QAAAAoAAAAD\",\n \"AAAAAAAAAAAAAAAIZ2V0X3Bvb2wAAAAAAAAAAQAAA+kAAAfQAAAABFBvb2wAAAAD\",\n \"AAAAAAAAAAAAAAAJZ2V0X2FkbWluAAAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=\",\n \"AAAAAAAAAAAAAAASZ2V0X3N0b3BfYXV0aG9yaXR5AAAAAAAAAAAAAQAAA+kAAAATAAAAAw==\",\n \"AAAAAAAAAAAAAAAKZ2V0X2JyaWRnZQAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=\",\n \"AAAAAAAAAAAAAAAQZ2V0X3VzZXJfZGVwb3NpdAAAAAEAAAAAAAAABHVzZXIAAAATAAAAAQAAA+kAAAfQAAAAC1VzZXJEZXBvc2l0AAAAAAM=\",\n \"AAAAAAAAAAAAAAAHdXBncmFkZQAAAAABAAAAAAAAAA1uZXdfd2FzbV9oYXNoAAAAAAAD7gAAACAAAAABAAAD6QAAA+0AAAAAAAAAAw==\",\n \"AAAAAQAAAAAAAAAAAAAAD1N3YXBwZWRGcm9tVlVzZAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAA2ZlZQAAAAAKAAAAAAAAAAlyZWNpcGllbnQAAAAAAAATAAAAAAAAAAV0b2tlbgAAAAAAABMAAAAAAAAAC3Z1c2RfYW1vdW50AAAAAAo=\",\n \"AAAAAQAAAAAAAAAAAAAADVN3YXBwZWRUb1ZVc2QAAAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAA2ZlZQAAAAAKAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABXRva2VuAAAAAAAAEwAAAAAAAAALdnVzZF9hbW91bnQAAAAACg==\",\n \"AAAAAQAAAAAAAAAAAAAAB0RlcG9zaXQAAAAAAgAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAR1c2VyAAAAEw==\",\n \"AAAAAQAAAAAAAAAAAAAACFdpdGhkcmF3AAAAAgAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAR1c2VyAAAAEw==\",\n \"AAAAAQAAAAAAAAAAAAAADlJld2FyZHNDbGFpbWVkAAAAAAACAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAABHVzZXIAAAAT\",\n \"AAAAAQAAAAAAAAAAAAAABkJyaWRnZQAAAAAAAQAAAAAAAAABMAAAAAAAABM=\",\n \"AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAQAAAAEAAAAAAAAAC1VzZXJEZXBvc2l0AAAAAAEAAAAT\",\n \"AAAAAQAAAAAAAAAAAAAABFBvb2wAAAAPAAAAAAAAAAFhAAAAAAAACgAAAAAAAAAWYWNjX3Jld2FyZF9wZXJfc2hhcmVfcAAAAAAACgAAAAAAAAAQYWRtaW5fZmVlX2Ftb3VudAAAAAoAAAAAAAAAEmFkbWluX2ZlZV9zaGFyZV9icAAAAAAACgAAAAAAAAAUYmFsYW5jZV9yYXRpb19taW5fYnAAAAAKAAAAAAAAAAtjYW5fZGVwb3NpdAAAAAABAAAAAAAAAAxjYW5fd2l0aGRyYXcAAAABAAAAAAAAAAFkAAAAAAAACgAAAAAAAAAIZGVjaW1hbHMAAAAEAAAAAAAAAAxmZWVfc2hhcmVfYnAAAAAKAAAAAAAAAAhyZXNlcnZlcwAAAAoAAAAAAAAABXRva2VuAAAAAAAAEwAAAAAAAAANdG9rZW5fYmFsYW5jZQAAAAAAAAoAAAAAAAAAD3RvdGFsX2xwX2Ftb3VudAAAAAAKAAAAAAAAAA12X3VzZF9iYWxhbmNlAAAAAAAACg==\",\n \"AAAAAQAAAAAAAAAAAAAAC1VzZXJEZXBvc2l0AAAAAAIAAAAAAAAACWxwX2Ftb3VudAAAAAAAAAoAAAAAAAAAC3Jld2FyZF9kZWJ0AAAAAAo=\",\n \"AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=\",\n \"AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==\",\n \"AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==\",\n \"AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT\",\n \"AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==\",\n \"AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAKAAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAYVG9rZW5JbnN1ZmZpY2llbnRCYWxhbmNlAAAACgAAAAAAAAAKQ2FzdEZhaWxlZAAAAAAACwAAAAAAAAAMVTI1Nk92ZXJmbG93AAAADAAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ\",\n ]),\n options\n );\n }\n public readonly fromJSON = {\n initialize: this.txFromJSON<Result<void>>,\n deposit: this.txFromJSON<Result<void>>,\n withdraw: this.txFromJSON<Result<void>>,\n swap_to_v_usd: this.txFromJSON<Result<u128>>,\n swap_from_v_usd: this.txFromJSON<Result<u128>>,\n claim_rewards: this.txFromJSON<Result<void>>,\n set_fee_share: this.txFromJSON<Result<void>>,\n adjust_total_lp_amount: this.txFromJSON<Result<void>>,\n set_balance_ratio_min_bp: this.txFromJSON<Result<void>>,\n stop_deposit: this.txFromJSON<Result<void>>,\n start_deposit: this.txFromJSON<Result<void>>,\n stop_withdraw: this.txFromJSON<Result<void>>,\n start_withdraw: this.txFromJSON<Result<void>>,\n set_stop_authority: this.txFromJSON<Result<void>>,\n set_bridge: this.txFromJSON<Result<void>>,\n set_admin: this.txFromJSON<Result<void>>,\n set_admin_fee_share: this.txFromJSON<Result<void>>,\n claim_admin_fee: this.txFromJSON<Result<void>>,\n pending_reward: this.txFromJSON<Result<u128>>,\n get_pool: this.txFromJSON<Result<Pool>>,\n get_admin: this.txFromJSON<Result<string>>,\n get_stop_authority: this.txFromJSON<Result<string>>,\n get_bridge: this.txFromJSON<Result<string>>,\n get_user_deposit: this.txFromJSON<Result<UserDeposit>>,\n upgrade: this.txFromJSON<Result<void>>,\n };\n}\n", "// @ts-expect-error import tron\nimport TronWeb from \"tronweb\";\nimport Web3 from \"web3\";\nimport { AbiItem } from \"web3-utils\";\nimport { ChainType } from \"../../../chains/chain.enums\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { SdkError } from \"../../../exceptions\";\nimport { PoolInfo, TokenWithChainDetails } from \"../../../tokens-info\";\nimport { calculatePoolInfoImbalance } from \"../../../utils/calculation\";\nimport { tronAddressToEthAddress } from \"../../bridge/utils\";\nimport { RawTransaction, SmartContractMethodParameter } from \"../../models\";\nimport PoolAbi from \"../../models/abi/Pool.json\";\nimport { promisify } from \"../../utils\";\nimport { LiquidityPoolsParams, LiquidityPoolsParamsWithAmount, UserBalance, UserBalanceInfo } from \"../models\";\nimport { ChainPoolService } from \"../models/pool\";\n\nexport class TronPoolService extends ChainPoolService {\n chainType: ChainType.TRX = ChainType.TRX;\n private P = 52;\n private web3: Web3 | undefined;\n\n constructor(public tronWeb: typeof TronWeb, public api: AllbridgeCoreClient, tronJsonRpc: string | undefined) {\n super();\n if (tronJsonRpc) {\n this.web3 = new Web3(tronJsonRpc);\n }\n }\n\n async getUserBalanceInfo(accountAddress: string, token: TokenWithChainDetails): Promise<UserBalanceInfo> {\n let userBalanceInfo;\n if (this.web3) {\n try {\n userBalanceInfo = await this.getUserBalanceInfoByBatch(this.web3, accountAddress, token);\n } catch (err) {\n userBalanceInfo = await this.getUserBalanceInfoPerProperty(accountAddress, token);\n }\n } else {\n userBalanceInfo = await this.getUserBalanceInfoPerProperty(accountAddress, token);\n }\n return userBalanceInfo;\n }\n\n private async getUserBalanceInfoByBatch(\n web3: Web3,\n accountAddress: string,\n token: TokenWithChainDetails\n ): Promise<UserBalanceInfo> {\n const batch = new web3.BatchRequest();\n const contract = new web3.eth.Contract(PoolAbi as AbiItem[], tronAddressToEthAddress(token.poolAddress));\n const userAccount = tronAddressToEthAddress(accountAddress);\n const arr = [\"userRewardDebt\", \"balanceOf\"].map((methodName) =>\n promisify((cb: any) => batch.add(contract.methods[methodName](userAccount).call.request({}, cb)))()\n );\n batch.execute();\n const [rewardDebt, lpAmount] = await Promise.all(arr);\n return new UserBalance({ lpAmount, rewardDebt });\n }\n\n private async getUserBalanceInfoPerProperty(\n accountAddress: string,\n token: TokenWithChainDetails\n ): Promise<UserBalanceInfo> {\n if (!this.tronWeb.defaultAddress.base58) {\n this.tronWeb.setAddress(accountAddress);\n }\n const contract = await this.getContract(token.poolAddress);\n const rewardDebt = (await contract.methods.userRewardDebt(accountAddress).call()).toString();\n const lpAmount = (await contract.methods.balanceOf(accountAddress).call()).toString();\n return new UserBalance({ lpAmount, rewardDebt });\n }\n\n async getPoolInfoFromChain(token: TokenWithChainDetails): Promise<PoolInfo> {\n let poolInfo;\n if (this.web3) {\n try {\n poolInfo = await this.getPoolInfoByBatch(this.web3, token);\n } catch (err) {\n poolInfo = await this.getPoolInfoPerProperty(token);\n }\n } else {\n poolInfo = await this.getPoolInfoPerProperty(token);\n }\n return poolInfo;\n }\n\n private async getPoolInfoByBatch(web3: Web3, token: TokenWithChainDetails): Promise<PoolInfo> {\n const batch = new web3.BatchRequest();\n const contract = new web3.eth.Contract(PoolAbi as AbiItem[], tronAddressToEthAddress(token.poolAddress));\n const arr = [\"a\", \"d\", \"tokenBalance\", \"vUsdBalance\", \"totalSupply\", \"accRewardPerShareP\"].map((methodName) =>\n promisify((cb: any) => batch.add(contract.methods[methodName]().call.request({}, cb)))()\n );\n batch.execute();\n\n const [aValue, dValue, tokenBalance, vUsdBalance, totalLpAmount, accRewardPerShareP] = await Promise.all(arr);\n const tokenBalanceStr = tokenBalance.toString();\n const vUsdBalanceStr = vUsdBalance.toString();\n const imbalance = calculatePoolInfoImbalance({ tokenBalance: tokenBalanceStr, vUsdBalance: vUsdBalanceStr });\n return {\n aValue: aValue.toString(),\n dValue: dValue.toString(),\n tokenBalance: tokenBalanceStr,\n vUsdBalance: vUsdBalanceStr,\n totalLpAmount: totalLpAmount.toString(),\n accRewardPerShareP: accRewardPerShareP.toString(),\n p: this.P,\n imbalance,\n };\n }\n\n private async getPoolInfoPerProperty(token: TokenWithChainDetails): Promise<PoolInfo> {\n if (!this.tronWeb.defaultAddress.base58) {\n this.tronWeb.setAddress(token.poolAddress);\n }\n const poolContract = await this.getContract(token.poolAddress);\n const [aValue, dValue, tokenBalance, vUsdBalance, totalLpAmount, accRewardPerShareP] = await Promise.all([\n poolContract.methods.a().call(),\n poolContract.methods.d().call(),\n poolContract.methods.tokenBalance().call(),\n poolContract.methods.vUsdBalance().call(),\n poolContract.methods.totalSupply().call(),\n poolContract.methods.accRewardPerShareP().call(),\n ]);\n const tokenBalanceStr = tokenBalance.toString();\n const vUsdBalanceStr = vUsdBalance.toString();\n const imbalance = calculatePoolInfoImbalance({ tokenBalance: tokenBalanceStr, vUsdBalance: vUsdBalanceStr });\n return {\n aValue: aValue.toString(),\n dValue: dValue.toString(),\n tokenBalance: tokenBalanceStr,\n vUsdBalance: vUsdBalanceStr,\n totalLpAmount: totalLpAmount.toString(),\n accRewardPerShareP: accRewardPerShareP.toString(),\n p: this.P,\n imbalance,\n };\n }\n\n buildRawTransactionDeposit(params: LiquidityPoolsParamsWithAmount): Promise<RawTransaction> {\n const { amount, accountAddress } = params;\n\n const parameter = [{ type: \"uint256\", value: amount }];\n const methodSignature = \"deposit(uint256)\";\n\n return this.buildRawTransaction(params.token.poolAddress, methodSignature, parameter, \"0\", accountAddress);\n }\n\n buildRawTransactionWithdraw(params: LiquidityPoolsParamsWithAmount): Promise<RawTransaction> {\n const { amount, accountAddress } = params;\n\n const parameter = [{ type: \"uint256\", value: amount }];\n const methodSignature = \"withdraw(uint256)\";\n\n return this.buildRawTransaction(params.token.poolAddress, methodSignature, parameter, \"0\", accountAddress);\n }\n\n buildRawTransactionClaimRewards(params: LiquidityPoolsParams): Promise<RawTransaction> {\n const { accountAddress } = params;\n\n const parameter: SmartContractMethodParameter[] = [];\n const methodSignature = \"claimRewards()\";\n\n return this.buildRawTransaction(params.token.poolAddress, methodSignature, parameter, \"0\", accountAddress);\n }\n\n private async buildRawTransaction(\n contractAddress: string,\n methodSignature: string,\n parameter: SmartContractMethodParameter[],\n value: string,\n fromAddress: string\n ): Promise<RawTransaction> {\n const transactionObject = await this.tronWeb.transactionBuilder.triggerSmartContract(\n contractAddress,\n methodSignature,\n {\n callValue: value,\n },\n parameter,\n fromAddress\n );\n if (!transactionObject?.result?.result) {\n throw new SdkError(\"Unknown error: \" + JSON.stringify(transactionObject, null, 2));\n }\n return transactionObject.transaction;\n }\n\n private async getContract(contractAddress: string): Promise<any> {\n return await this.tronWeb.contract(PoolAbi, contractAddress);\n }\n}\n", "import { Big, BigSource } from \"big.js\";\nimport { PoolInfo, Token } from \"../../tokens-info\";\nimport { fromSystemPrecision, getY, toSystemPrecision } from \"./index\";\n\nexport interface SwapPoolInfo {\n decimals: number;\n feeShare: string;\n poolInfo: PoolInfo;\n}\n\nexport interface SwapAndBridgeCalculationData {\n swapToVUsdCalcResult: SwapToVUsdCalcResult;\n swapFromVUsdCalcResult: SwapFromVUsdCalcResult;\n}\n\nexport interface SwapToVUsdCalcResult {\n bridgeFeeInTokenPrecision: string;\n amountIncludingCommissionInSystemPrecision: string;\n amountExcludingCommissionInSystemPrecision: string;\n}\nexport interface SwapFromVUsdCalcResult {\n bridgeFeeInTokenPrecision: string;\n amountIncludingCommissionInTokenPrecision: string;\n amountExcludingCommissionInTokenPrecision: string;\n}\n\nexport function swapAndBridgeFeeCalculation(\n amountInTokenPrecision: string,\n sourcePoolInfo: SwapPoolInfo,\n destinationPoolInfo: SwapPoolInfo\n): SwapAndBridgeCalculationData {\n const swapToVUsdCalcResult = swapToVUsd(\n amountInTokenPrecision,\n { decimals: sourcePoolInfo.decimals, feeShare: sourcePoolInfo.feeShare },\n sourcePoolInfo.poolInfo\n );\n const swapFromVUsdCalcResult = swapFromVUsd(\n swapToVUsdCalcResult.amountIncludingCommissionInSystemPrecision,\n { decimals: destinationPoolInfo.decimals, feeShare: destinationPoolInfo.feeShare },\n destinationPoolInfo.poolInfo\n );\n return { swapToVUsdCalcResult, swapFromVUsdCalcResult };\n}\n\nexport function swapAndBridgeFeeCalculationReverse(\n amountInTokenPrecision: string,\n sourcePoolInfo: SwapPoolInfo,\n destinationPoolInfo: SwapPoolInfo\n): SwapAndBridgeCalculationData {\n const swapToVUsdCalcResult = swapToVUsdReverse(\n amountInTokenPrecision,\n { decimals: destinationPoolInfo.decimals, feeShare: destinationPoolInfo.feeShare },\n destinationPoolInfo.poolInfo\n );\n const swapFromVUsdCalcResult = swapFromVUsdReverse(\n swapToVUsdCalcResult.amountIncludingCommissionInSystemPrecision,\n { decimals: sourcePoolInfo.decimals, feeShare: sourcePoolInfo.feeShare },\n sourcePoolInfo.poolInfo\n );\n return {\n swapToVUsdCalcResult,\n swapFromVUsdCalcResult,\n };\n}\n\nfunction swapToVUsd(\n amount: BigSource,\n { feeShare, decimals }: Pick<Token, \"feeShare\" | \"decimals\">,\n poolInfo: Omit<PoolInfo, \"p\" | \"imbalance\">\n): SwapToVUsdCalcResult {\n const amountValue = Big(amount);\n const fee = amountValue.times(feeShare);\n const amountWithoutFee = amountValue.minus(fee);\n return {\n bridgeFeeInTokenPrecision: fee.round().toFixed(),\n amountIncludingCommissionInSystemPrecision: calcSwapToVUsd(toSystemPrecision(amountWithoutFee, decimals), poolInfo),\n amountExcludingCommissionInSystemPrecision: calcSwapToVUsd(toSystemPrecision(amountValue, decimals), poolInfo),\n };\n}\n\nfunction calcSwapToVUsd(amountInSystemPrecision: Big, poolInfo: Omit<PoolInfo, \"p\" | \"imbalance\">): string {\n if (amountInSystemPrecision.eq(0)) {\n return \"0\";\n }\n const tokenBalance = Big(poolInfo.tokenBalance).plus(amountInSystemPrecision);\n const vUsdNewAmount = getY(tokenBalance.toFixed(), poolInfo.aValue, poolInfo.dValue);\n return Big(poolInfo.vUsdBalance).minus(vUsdNewAmount).round().toFixed();\n}\n\nfunction swapFromVUsd(\n amount: BigSource,\n { feeShare, decimals }: Pick<Token, \"feeShare\" | \"decimals\">,\n poolInfo: Omit<PoolInfo, \"imbalance\">\n): SwapFromVUsdCalcResult {\n if (Big(amount).eq(0)) {\n return {\n bridgeFeeInTokenPrecision: \"0\",\n amountIncludingCommissionInTokenPrecision: \"0\",\n amountExcludingCommissionInTokenPrecision: \"0\",\n };\n }\n const amountValue = Big(amount);\n const vUsdBalance = amountValue.plus(poolInfo.vUsdBalance);\n const newAmount = getY(vUsdBalance, poolInfo.aValue, poolInfo.dValue);\n const result = fromSystemPrecision(Big(poolInfo.tokenBalance).minus(newAmount), decimals);\n const fee = Big(result).times(feeShare);\n const resultWithoutFee = Big(result).minus(fee).round();\n return {\n bridgeFeeInTokenPrecision: fee.round().toFixed(),\n amountIncludingCommissionInTokenPrecision: resultWithoutFee.toFixed(),\n amountExcludingCommissionInTokenPrecision: result.toFixed(),\n };\n}\n\nfunction swapToVUsdReverse(\n amountInTokenPrecision: BigSource,\n { feeShare, decimals }: Pick<Token, \"feeShare\" | \"decimals\">,\n poolInfo: PoolInfo\n): SwapToVUsdCalcResult {\n const reversedFeeShare = Big(feeShare).div(Big(1).minus(feeShare));\n const fee = Big(amountInTokenPrecision).times(reversedFeeShare);\n const amountWithFee = Big(amountInTokenPrecision).plus(fee);\n return {\n bridgeFeeInTokenPrecision: fee.round().toFixed(),\n amountIncludingCommissionInSystemPrecision: calcSwapToVUsdReverse(\n toSystemPrecision(amountWithFee, decimals),\n poolInfo\n ),\n amountExcludingCommissionInSystemPrecision: calcSwapToVUsdReverse(\n toSystemPrecision(amountInTokenPrecision, decimals),\n poolInfo\n ),\n };\n}\n\nfunction calcSwapToVUsdReverse(amountInSystemPrecision: Big, poolInfo: PoolInfo): string {\n const tokenBalance = Big(poolInfo.tokenBalance).minus(amountInSystemPrecision);\n const vUsdNewAmount = getY(tokenBalance.toFixed(), poolInfo.aValue, poolInfo.dValue);\n return Big(vUsdNewAmount).minus(poolInfo.vUsdBalance).round().toFixed();\n}\n\nfunction swapFromVUsdReverse(\n amountInSystemPrecision: BigSource,\n { feeShare, decimals }: Pick<Token, \"feeShare\" | \"decimals\">,\n poolInfo: PoolInfo\n): SwapFromVUsdCalcResult {\n if (Big(amountInSystemPrecision).eq(0)) {\n return {\n bridgeFeeInTokenPrecision: \"0\",\n amountIncludingCommissionInTokenPrecision: \"0\",\n amountExcludingCommissionInTokenPrecision: \"0\",\n };\n }\n const vUsdNewAmount = Big(poolInfo.vUsdBalance).minus(amountInSystemPrecision);\n const tokenBalance = getY(vUsdNewAmount.toFixed(), poolInfo.aValue, poolInfo.dValue);\n const inSystemPrecision = Big(tokenBalance).minus(poolInfo.tokenBalance);\n const amountWithoutFee = fromSystemPrecision(inSystemPrecision.toFixed(), decimals);\n const reversedFeeShare = Big(feeShare).div(Big(1).minus(feeShare));\n const fee = Big(amountWithoutFee).times(reversedFeeShare);\n const amount = Big(amountWithoutFee).plus(fee);\n return {\n bridgeFeeInTokenPrecision: fee.round().toFixed(),\n amountIncludingCommissionInTokenPrecision: amount.round().toFixed(),\n amountExcludingCommissionInTokenPrecision: amountWithoutFee.toFixed(),\n };\n}\n", "import { Big } from \"big.js\";\nimport { PoolInfo, TokenWithChainDetails } from \"../../tokens-info\";\nimport { convertIntAmountToFloat, fromSystemPrecision, swapFromVUsd, swapToVUsd } from \"./index\";\n\nexport interface SendAmountDetails {\n sourceLPSwap: AmountImpact;\n destLPSwap: AmountImpact;\n}\n\nexport interface AmountImpact {\n fee: string;\n swap: string;\n}\n\nexport function getSendAmountDetails(\n amountInTokenPrecision: string,\n sourceToken: TokenWithChainDetails,\n sourcePool: PoolInfo,\n destToken: TokenWithChainDetails,\n destPool: PoolInfo\n): SendAmountDetails {\n const vUsd = swapToVUsd(amountInTokenPrecision, sourceToken, sourcePool);\n const vUsdInTokenPrecision = fromSystemPrecision(vUsd, sourceToken.decimals);\n const result = swapFromVUsd(vUsd, destToken, destPool);\n\n const swapToFeeInt = Big(amountInTokenPrecision).times(sourceToken.feeShare);\n const swapFromFeeInt = Big(result).div(Big(1).minus(destToken.feeShare)).minus(result);\n return {\n sourceLPSwap: {\n fee: convertIntAmountToFloat(swapToFeeInt, sourceToken.decimals)\n .neg()\n .round(sourceToken.decimals, Big.roundUp)\n .toFixed(),\n swap: convertIntAmountToFloat(\n Big(amountInTokenPrecision).minus(vUsdInTokenPrecision).minus(swapToFeeInt),\n sourceToken.decimals\n )\n .neg()\n .round(sourceToken.decimals, Big.roundUp)\n .toFixed(),\n },\n destLPSwap: {\n fee: convertIntAmountToFloat(swapFromFeeInt, destToken.decimals)\n .neg()\n .round(destToken.decimals, Big.roundUp)\n .toFixed(),\n swap: convertIntAmountToFloat(\n fromSystemPrecision(vUsd, destToken.decimals).minus(result).minus(swapFromFeeInt),\n destToken.decimals\n )\n .neg()\n .round(destToken.decimals, Big.roundUp)\n .toFixed(),\n },\n };\n}\n", "import { Connection, PublicKey, TransactionMessage, VersionedTransaction } from \"@solana/web3.js\";\nimport { ChainSymbol } from \"../../chains/chain.enums\";\nimport { AllbridgeCoreSdkOptions, SdkError } from \"../../index\";\nimport { NodeRpcUrlsConfig } from \"../../services\";\nimport { fetchAddressLookupTableAccountsFromTx } from \"./utils\";\n\n/**\n * Contains usefully Solana methods\n */\nexport interface SolUtils {\n /**\n * Add memo to solana's transaction\n * @param transaction transaction to add memo\n * @param memo memo to add (28 char max)\n */\n addMemoToTx(transaction: VersionedTransaction, memo: string): Promise<void>;\n}\n\nexport class DefaultSolUtils implements SolUtils {\n constructor(readonly nodeRpcUrlsConfig: NodeRpcUrlsConfig, readonly params: AllbridgeCoreSdkOptions) {}\n\n async addMemoToTx(transaction: VersionedTransaction, memo: string): Promise<void> {\n if (memo.length > 28) {\n throw new SdkError(\"InvalidArgumentException memo cannot be more than 28 characters\");\n }\n const connection = new Connection(this.nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.SOL), \"confirmed\");\n const addressLookupTableAccounts = await fetchAddressLookupTableAccountsFromTx(transaction, connection);\n const message = TransactionMessage.decompile(transaction.message, {\n addressLookupTableAccounts: addressLookupTableAccounts,\n });\n const lastInstruction = message.instructions[message.instructions.length - 1];\n if (!lastInstruction?.keys) {\n throw new SdkError(\"Last instruction or its keys are invalid.\");\n }\n\n lastInstruction.keys.push({\n pubkey: new PublicKey(Buffer.from(memo)),\n isSigner: false,\n isWritable: false,\n });\n transaction.message = message.compileToV0Message(addressLookupTableAccounts);\n }\n}\n", "import {\n Asset as StellarAsset,\n BASE_FEE,\n Horizon,\n Operation,\n Operation as StellarOperation,\n SorobanRpc,\n TimeoutInfinite,\n Transaction,\n TransactionBuilder,\n TransactionBuilder as StellarTransactionBuilder,\n contract,\n} from \"@stellar/stellar-sdk\";\nimport { ChainSymbol } from \"../../chains/chain.enums\";\nimport { AllbridgeCoreSdkOptions, SdkError } from \"../../index\";\nimport { NodeRpcUrlsConfig } from \"../../services\";\nimport { TokenContract } from \"../../services/models/srb/token-contract\";\nimport { withExponentialBackoff } from \"../utils\";\n\nimport ContractClientOptions = contract.ClientOptions;\nimport BalanceLineAsset = Horizon.HorizonApi.BalanceLineAsset;\n\n/**\n * Contains usefully Soroban methods\n */\nexport interface SrbUtils {\n /**\n * Build change Trust line Tx\n * @param params see {@link TrustLineParams}\n * @returns xdr Tx\n */\n buildChangeTrustLineXdrTx(params: TrustLineParams): Promise<string>;\n\n /**\n * Get Balance Line information if exists\n * @param sender\n * @param tokenAddress\n */\n getBalanceLine(sender: string, tokenAddress: string): Promise<Horizon.HorizonApi.BalanceLineAsset | undefined>;\n\n /**\n * Submit tx\n * @param xdrTx\n */\n submitTransactionStellar(xdrTx: string): Promise<Horizon.HorizonApi.SubmitTransactionResponse>;\n\n /**\n * Simulate and check if Restore needed\n * @param xdrTx - restore\n * @param sourceAccount\n * @returns xdrTx restore transaction if it required after check\n */\n simulateAndCheckRestoreTxRequiredSoroban(xdrTx: string, sourceAccount: string): Promise<string | undefined>;\n\n /**\n * Submit tx\n * @param xdrTx\n */\n sendTransactionSoroban(xdrTx: string): Promise<SorobanRpc.Api.SendTransactionResponse>;\n\n /**\n * Confirm tx\n */\n confirmTx(hash: string, secondsToWait?: number): Promise<SorobanRpc.Api.GetTransactionResponse>;\n}\n\nexport interface TrustLineParams {\n /**\n * Float amount of tokens, default is Number.MAX_SAFE_INTEGER\n */\n limit?: string;\n sender: string;\n tokenAddress: string;\n}\n\nconst FEE = 100;\nconst SEND_TRANSACTION_TIMEOUT = 180;\n\nexport class DefaultSrbUtils implements SrbUtils {\n constructor(readonly nodeRpcUrlsConfig: NodeRpcUrlsConfig, readonly params: AllbridgeCoreSdkOptions) {}\n\n async buildChangeTrustLineXdrTx(params: TrustLineParams): Promise<string> {\n const stellar = new Horizon.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.STLR));\n const stellarAccount = await stellar.loadAccount(params.sender);\n const tokenContract = this.getContract(TokenContract, params.tokenAddress);\n const tokenName = (await tokenContract.name()).result;\n const [symbol, srbTokenAddress] = tokenName.split(\":\");\n if (symbol === undefined || srbTokenAddress === undefined) {\n throw new SdkError(`Invalid token name format. Expected format 'symbol:srbTokenAddress'`);\n }\n const asset = new StellarAsset(symbol, srbTokenAddress);\n const changeTrust = StellarOperation.changeTrust({\n asset: asset,\n limit: params.limit,\n });\n\n return new StellarTransactionBuilder(stellarAccount, {\n fee: FEE.toString(10),\n networkPassphrase: this.params.sorobanNetworkPassphrase,\n })\n .addOperation(changeTrust)\n .setTimeout(SEND_TRANSACTION_TIMEOUT)\n .build()\n .toXDR();\n }\n\n async getBalanceLine(sender: string, tokenAddress: string): Promise<Horizon.HorizonApi.BalanceLineAsset | undefined> {\n const tokenContract = this.getContract(TokenContract, tokenAddress);\n const tokenName = (await tokenContract.name()).result;\n const [symbol, srbTokenAddress] = tokenName.split(\":\");\n const nodeRpcUrl = this.nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.STLR);\n const stellar = new Horizon.Server(nodeRpcUrl);\n const stellarAccount = await stellar.loadAccount(sender);\n const balanceInfo = stellarAccount.balances;\n\n return balanceInfo.find(\n (balance): balance is BalanceLineAsset =>\n (balance.asset_type === \"credit_alphanum4\" || balance.asset_type === \"credit_alphanum12\") &&\n balance.asset_code == symbol &&\n balance.asset_issuer == srbTokenAddress\n );\n }\n\n async submitTransactionStellar(xdrTx: string): Promise<Horizon.HorizonApi.SubmitTransactionResponse> {\n const stellar = new Horizon.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.STLR));\n const transaction = StellarTransactionBuilder.fromXDR(\n xdrTx,\n this.nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.STLR)\n );\n return await stellar.submitTransaction(transaction);\n }\n\n async simulateAndCheckRestoreTxRequiredSoroban(xdrTx: string, sourceAccount: string): Promise<string | undefined> {\n const server = new SorobanRpc.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.SRB));\n const account = await server.getAccount(sourceAccount);\n const transaction = TransactionBuilder.fromXDR(xdrTx, this.params.sorobanNetworkPassphrase) as Transaction;\n const simulation = await server.simulateTransaction(transaction);\n if (SorobanRpc.Api.isSimulationRestore(simulation)) {\n return new TransactionBuilder(account, {\n fee: (+BASE_FEE + +simulation.restorePreamble.minResourceFee).toString(),\n networkPassphrase: this.params.sorobanNetworkPassphrase,\n })\n .setSorobanData(simulation.restorePreamble.transactionData.build())\n .addOperation(Operation.restoreFootprint({}))\n .setTimeout(TimeoutInfinite)\n .build()\n .toXDR();\n }\n return undefined;\n }\n\n async sendTransactionSoroban(xdrTx: string): Promise<SorobanRpc.Api.SendTransactionResponse> {\n const server = new SorobanRpc.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.SRB));\n const transaction = TransactionBuilder.fromXDR(xdrTx, this.params.sorobanNetworkPassphrase) as Transaction;\n return server.sendTransaction(transaction);\n }\n\n async confirmTx(hash: string, secondsToWait = 15): Promise<SorobanRpc.Api.GetTransactionResponse> {\n const server = new SorobanRpc.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.SRB));\n const getTransactionResponseAll = await withExponentialBackoff(\n () => server.getTransaction(hash),\n (resp) => resp.status === SorobanRpc.Api.GetTransactionStatus.NOT_FOUND,\n secondsToWait\n );\n\n if (getTransactionResponseAll.length === 0) {\n throw new SdkError(\"No transaction responses found.\");\n }\n\n const lastResponse = getTransactionResponseAll[getTransactionResponseAll.length - 1];\n if (!lastResponse) {\n throw new SdkError(\"Unexpected error: last response is undefined.\");\n }\n\n return lastResponse;\n }\n\n private getContract<T>(contract: new (args: ContractClientOptions) => T, address: string): T {\n const config: ContractClientOptions = {\n contractId: address,\n networkPassphrase: this.params.sorobanNetworkPassphrase,\n rpcUrl: this.nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.SRB),\n };\n return new contract(config);\n }\n}\n", "import { contract } from \"@stellar/stellar-sdk\";\nimport u32 = contract.u32;\nimport i128 = contract.i128;\nimport AssembledTransaction = contract.AssembledTransaction;\nimport ContractSpec = contract.Spec;\nimport ContractClient = contract.Client;\nimport ContractClientOptions = contract.ClientOptions;\nexport const Errors = {};\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\nexport interface TokenContract {\n /**\n * Construct and simulate a allowance transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Returns the allowance for `spender` to transfer from `from`.\n *\n * The amount returned is the amount that spender is allowed to transfer\n * out of from's balance. When the spender transfers amounts, the allowance\n * will be reduced by the amount transfered.\n *\n * # Arguments\n *\n * * `from` - The address holding the balance of tokens to be drawn from.\n * * `spender` - The address spending the tokens held by `from`.\n */\n allowance: (\n { from, spender }: { from: string; spender: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<i128>>;\n\n /**\n * Construct and simulate a authorized transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Returns true if `id` is authorized to use its balance.\n *\n * # Arguments\n *\n * * `id` - The address for which token authorization is being checked.\n */\n authorized: (\n { id }: { id: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<boolean>>;\n\n /**\n * Construct and simulate a approve transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Set the allowance by `amount` for `spender` to transfer/burn from\n * `from`.\n *\n * The amount set is the amount that spender is approved to transfer out of\n * from's balance. The spender will be allowed to transfer amounts, and\n * when an amount is transferred the allowance will be reduced by the\n * amount transfered.\n *\n * # Arguments\n *\n * * `from` - The address holding the balance of tokens to be drawn from.\n * * `spender` - The address being authorized to spend the tokens held by\n * `from`.\n * * `amount` - The tokens to be made available to `spender`.\n * * `expiration_ledger` - The ledger number where this allowance expires. Cannot\n * be less than the current ledger number unless the amount is being set to 0.\n * An expired entry (where expiration_ledger < the current ledger number)\n * should be treated as a 0 amount allowance.\n *\n * # Events\n *\n * Emits an event with topics `[\"approve\", from: Address,\n * spender: Address], data = [amount: i128, expiration_ledger: u32]`\n */\n approve: (\n {\n from,\n spender,\n amount,\n expiration_ledger,\n }: {\n from: string;\n spender: string;\n amount: i128;\n expiration_ledger: u32;\n },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<null>>;\n\n /**\n * Construct and simulate a balance transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Returns the balance of `id`.\n *\n * # Arguments\n *\n * * `id` - The address for which a balance is being queried. If the\n * address has no existing balance, returns 0.\n */\n balance: (\n { id }: { id: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<i128>>;\n\n /**\n * Construct and simulate a burn transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Burn `amount` from `from`.\n *\n * Reduces from's balance by the amount, without transferring the balance\n * to another holder's balance.\n *\n * # Arguments\n *\n * * `from` - The address holding the balance of tokens which will be\n * burned from.\n * * `amount` - The amount of tokens to be burned.\n *\n * # Events\n *\n * Emits an event with topics `[\"burn\", from: Address], data = [amount:\n * i128]`\n */\n burn: (\n { from, amount }: { from: string; amount: i128 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<null>>;\n\n /**\n * Construct and simulate a burn_from transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Burn `amount` from `from`, consuming the allowance of `spender`.\n *\n * Reduces from's balance by the amount, without transferring the balance\n * to another holder's balance.\n *\n * The spender will be allowed to burn the amount from from's balance, if\n * the amount is less than or equal to the allowance that the spender has\n * on the from's balance. The spender's allowance on from's balance will be\n * reduced by the amount.\n *\n * # Arguments\n *\n * * `spender` - The address authorizing the burn, and having its allowance\n * consumed during the burn.\n * * `from` - The address holding the balance of tokens which will be\n * burned from.\n * * `amount` - The amount of tokens to be burned.\n *\n * # Events\n *\n * Emits an event with topics `[\"burn\", from: Address], data = [amount:\n * i128]`\n */\n burn_from: (\n { spender, from, amount }: { spender: string; from: string; amount: i128 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<null>>;\n\n /**\n * Construct and simulate a clawback transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Clawback `amount` from `from` account. `amount` is burned in the\n * clawback process.\n *\n * # Arguments\n *\n * * `from` - The address holding the balance from which the clawback will\n * take tokens.\n * * `amount` - The amount of tokens to be clawed back.\n *\n * # Events\n *\n * Emits an event with topics `[\"clawback\", admin: Address, to: Address],\n * data = [amount: i128]`\n */\n clawback: (\n { from, amount }: { from: string; amount: i128 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<null>>;\n\n /**\n * Construct and simulate a decimals transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Returns the number of decimals used to represent amounts of this token.\n *\n * # Panics\n *\n * If the contract has not yet been initialized.\n */\n decimals: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<u32>>;\n\n /**\n * Construct and simulate a mint transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Mints `amount` to `to`.\n *\n * # Arguments\n *\n * * `to` - The address which will receive the minted tokens.\n * * `amount` - The amount of tokens to be minted.\n *\n * # Events\n *\n * Emits an event with topics `[\"mint\", admin: Address, to: Address], data\n * = [amount: i128]`\n */\n mint: (\n { to, amount }: { to: string; amount: i128 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<null>>;\n\n /**\n * Construct and simulate a name transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Returns the name for this token.\n *\n * # Panics\n *\n * If the contract has not yet been initialized.\n */\n name: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<string>>;\n\n /**\n * Construct and simulate a set_admin transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Sets the administrator to the specified address `new_admin`.\n *\n * # Arguments\n *\n * * `new_admin` - The address which will henceforth be the administrator\n * of this token contract.\n *\n * # Events\n *\n * Emits an event with topics `[\"set_admin\", admin: Address], data =\n * [new_admin: Address]`\n */\n set_admin: (\n { new_admin }: { new_admin: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<null>>;\n\n /**\n * Construct and simulate a admin transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Returns the admin of the contract.\n *\n * # Panics\n *\n * If the admin is not set.\n */\n admin: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<string>>;\n\n /**\n * Construct and simulate a set_authorized transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Sets whether the account is authorized to use its balance. If\n * `authorized` is true, `id` should be able to use its balance.\n *\n * # Arguments\n *\n * * `id` - The address being (de-)authorized.\n * * `authorize` - Whether or not `id` can use its balance.\n *\n * # Events\n *\n * Emits an event with topics `[\"set_authorized\", id: Address], data =\n * [authorize: bool]`\n */\n set_authorized: (\n { id, authorize }: { id: string; authorize: boolean },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<null>>;\n\n /**\n * Construct and simulate a symbol transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Returns the symbol for this token.\n *\n * # Panics\n *\n * If the contract has not yet been initialized.\n */\n symbol: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<string>>;\n\n /**\n * Construct and simulate a transfer transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Transfer `amount` from `from` to `to`.\n *\n * # Arguments\n *\n * * `from` - The address holding the balance of tokens which will be\n * withdrawn from.\n * * `to` - The address which will receive the transferred tokens.\n * * `amount` - The amount of tokens to be transferred.\n *\n * # Events\n *\n * Emits an event with topics `[\"transfer\", from: Address, to: Address],\n * data = [amount: i128]`\n */\n transfer: (\n { from, to, amount }: { from: string; to: string; amount: i128 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<null>>;\n\n /**\n * Construct and simulate a transfer_from transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Transfer `amount` from `from` to `to`, consuming the allowance that\n * `spender` has on `from`'s balance. Authorized by spender\n * (`spender.require_auth()`).\n *\n * The spender will be allowed to transfer the amount from from's balance\n * if the amount is less than or equal to the allowance that the spender\n * has on the from's balance. The spender's allowance on from's balance\n * will be reduced by the amount.\n *\n * # Arguments\n *\n * * `spender` - The address authorizing the transfer, and having its\n * allowance consumed during the transfer.\n * * `from` - The address holding the balance of tokens which will be\n * withdrawn from.\n * * `to` - The address which will receive the transferred tokens.\n * * `amount` - The amount of tokens to be transferred.\n *\n * # Events\n *\n * Emits an event with topics `[\"transfer\", from: Address, to: Address],\n * data = [amount: i128]`\n */\n transfer_from: (\n { spender, from, to, amount }: { spender: string; from: string; to: string; amount: i128 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<null>>;\n}\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\nexport class TokenContract extends ContractClient {\n constructor(public readonly options: ContractClientOptions) {\n super(\n new ContractSpec([\n \"AAAAAAAAAYlSZXR1cm5zIHRoZSBhbGxvd2FuY2UgZm9yIGBzcGVuZGVyYCB0byB0cmFuc2ZlciBmcm9tIGBmcm9tYC4KClRoZSBhbW91bnQgcmV0dXJuZWQgaXMgdGhlIGFtb3VudCB0aGF0IHNwZW5kZXIgaXMgYWxsb3dlZCB0byB0cmFuc2ZlcgpvdXQgb2YgZnJvbSdzIGJhbGFuY2UuIFdoZW4gdGhlIHNwZW5kZXIgdHJhbnNmZXJzIGFtb3VudHMsIHRoZSBhbGxvd2FuY2UKd2lsbCBiZSByZWR1Y2VkIGJ5IHRoZSBhbW91bnQgdHJhbnNmZXJlZC4KCiMgQXJndW1lbnRzCgoqIGBmcm9tYCAtIFRoZSBhZGRyZXNzIGhvbGRpbmcgdGhlIGJhbGFuY2Ugb2YgdG9rZW5zIHRvIGJlIGRyYXduIGZyb20uCiogYHNwZW5kZXJgIC0gVGhlIGFkZHJlc3Mgc3BlbmRpbmcgdGhlIHRva2VucyBoZWxkIGJ5IGBmcm9tYC4AAAAAAAAJYWxsb3dhbmNlAAAAAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAEAAAAL\",\n \"AAAAAAAAAIlSZXR1cm5zIHRydWUgaWYgYGlkYCBpcyBhdXRob3JpemVkIHRvIHVzZSBpdHMgYmFsYW5jZS4KCiMgQXJndW1lbnRzCgoqIGBpZGAgLSBUaGUgYWRkcmVzcyBmb3Igd2hpY2ggdG9rZW4gYXV0aG9yaXphdGlvbiBpcyBiZWluZyBjaGVja2VkLgAAAAAAAAphdXRob3JpemVkAAAAAAABAAAAAAAAAAJpZAAAAAAAEwAAAAEAAAAB\",\n \"AAAAAAAAA55TZXQgdGhlIGFsbG93YW5jZSBieSBgYW1vdW50YCBmb3IgYHNwZW5kZXJgIHRvIHRyYW5zZmVyL2J1cm4gZnJvbQpgZnJvbWAuCgpUaGUgYW1vdW50IHNldCBpcyB0aGUgYW1vdW50IHRoYXQgc3BlbmRlciBpcyBhcHByb3ZlZCB0byB0cmFuc2ZlciBvdXQgb2YKZnJvbSdzIGJhbGFuY2UuIFRoZSBzcGVuZGVyIHdpbGwgYmUgYWxsb3dlZCB0byB0cmFuc2ZlciBhbW91bnRzLCBhbmQKd2hlbiBhbiBhbW91bnQgaXMgdHJhbnNmZXJyZWQgdGhlIGFsbG93YW5jZSB3aWxsIGJlIHJlZHVjZWQgYnkgdGhlCmFtb3VudCB0cmFuc2ZlcmVkLgoKIyBBcmd1bWVudHMKCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgdG8gYmUgZHJhd24gZnJvbS4KKiBgc3BlbmRlcmAgLSBUaGUgYWRkcmVzcyBiZWluZyBhdXRob3JpemVkIHRvIHNwZW5kIHRoZSB0b2tlbnMgaGVsZCBieQpgZnJvbWAuCiogYGFtb3VudGAgLSBUaGUgdG9rZW5zIHRvIGJlIG1hZGUgYXZhaWxhYmxlIHRvIGBzcGVuZGVyYC4KKiBgZXhwaXJhdGlvbl9sZWRnZXJgIC0gVGhlIGxlZGdlciBudW1iZXIgd2hlcmUgdGhpcyBhbGxvd2FuY2UgZXhwaXJlcy4gQ2Fubm90CmJlIGxlc3MgdGhhbiB0aGUgY3VycmVudCBsZWRnZXIgbnVtYmVyIHVubGVzcyB0aGUgYW1vdW50IGlzIGJlaW5nIHNldCB0byAwLgpBbiBleHBpcmVkIGVudHJ5ICh3aGVyZSBleHBpcmF0aW9uX2xlZGdlciA8IHRoZSBjdXJyZW50IGxlZGdlciBudW1iZXIpCnNob3VsZCBiZSB0cmVhdGVkIGFzIGEgMCBhbW91bnQgYWxsb3dhbmNlLgoKIyBFdmVudHMKCkVtaXRzIGFuIGV2ZW50IHdpdGggdG9waWNzIGBbImFwcHJvdmUiLCBmcm9tOiBBZGRyZXNzLApzcGVuZGVyOiBBZGRyZXNzXSwgZGF0YSA9IFthbW91bnQ6IGkxMjgsIGV4cGlyYXRpb25fbGVkZ2VyOiB1MzJdYAAAAAAAB2FwcHJvdmUAAAAABAAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAAAAABFleHBpcmF0aW9uX2xlZGdlcgAAAAAAAAQAAAAA\",\n \"AAAAAAAAAJhSZXR1cm5zIHRoZSBiYWxhbmNlIG9mIGBpZGAuCgojIEFyZ3VtZW50cwoKKiBgaWRgIC0gVGhlIGFkZHJlc3MgZm9yIHdoaWNoIGEgYmFsYW5jZSBpcyBiZWluZyBxdWVyaWVkLiBJZiB0aGUKYWRkcmVzcyBoYXMgbm8gZXhpc3RpbmcgYmFsYW5jZSwgcmV0dXJucyAwLgAAAAdiYWxhbmNlAAAAAAEAAAAAAAAAAmlkAAAAAAATAAAAAQAAAAs=\",\n \"AAAAAAAAAWRCdXJuIGBhbW91bnRgIGZyb20gYGZyb21gLgoKUmVkdWNlcyBmcm9tJ3MgYmFsYW5jZSBieSB0aGUgYW1vdW50LCB3aXRob3V0IHRyYW5zZmVycmluZyB0aGUgYmFsYW5jZQp0byBhbm90aGVyIGhvbGRlcidzIGJhbGFuY2UuCgojIEFyZ3VtZW50cwoKKiBgZnJvbWAgLSBUaGUgYWRkcmVzcyBob2xkaW5nIHRoZSBiYWxhbmNlIG9mIHRva2VucyB3aGljaCB3aWxsIGJlCmJ1cm5lZCBmcm9tLgoqIGBhbW91bnRgIC0gVGhlIGFtb3VudCBvZiB0b2tlbnMgdG8gYmUgYnVybmVkLgoKIyBFdmVudHMKCkVtaXRzIGFuIGV2ZW50IHdpdGggdG9waWNzIGBbImJ1cm4iLCBmcm9tOiBBZGRyZXNzXSwgZGF0YSA9IFthbW91bnQ6CmkxMjhdYAAAAARidXJuAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=\",\n \"AAAAAAAAAtxCdXJuIGBhbW91bnRgIGZyb20gYGZyb21gLCBjb25zdW1pbmcgdGhlIGFsbG93YW5jZSBvZiBgc3BlbmRlcmAuCgpSZWR1Y2VzIGZyb20ncyBiYWxhbmNlIGJ5IHRoZSBhbW91bnQsIHdpdGhvdXQgdHJhbnNmZXJyaW5nIHRoZSBiYWxhbmNlCnRvIGFub3RoZXIgaG9sZGVyJ3MgYmFsYW5jZS4KClRoZSBzcGVuZGVyIHdpbGwgYmUgYWxsb3dlZCB0byBidXJuIHRoZSBhbW91bnQgZnJvbSBmcm9tJ3MgYmFsYW5jZSwgaWYKdGhlIGFtb3VudCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGFsbG93YW5jZSB0aGF0IHRoZSBzcGVuZGVyIGhhcwpvbiB0aGUgZnJvbSdzIGJhbGFuY2UuIFRoZSBzcGVuZGVyJ3MgYWxsb3dhbmNlIG9uIGZyb20ncyBiYWxhbmNlIHdpbGwgYmUKcmVkdWNlZCBieSB0aGUgYW1vdW50LgoKIyBBcmd1bWVudHMKCiogYHNwZW5kZXJgIC0gVGhlIGFkZHJlc3MgYXV0aG9yaXppbmcgdGhlIGJ1cm4sIGFuZCBoYXZpbmcgaXRzIGFsbG93YW5jZQpjb25zdW1lZCBkdXJpbmcgdGhlIGJ1cm4uCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgd2hpY2ggd2lsbCBiZQpidXJuZWQgZnJvbS4KKiBgYW1vdW50YCAtIFRoZSBhbW91bnQgb2YgdG9rZW5zIHRvIGJlIGJ1cm5lZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJidXJuIiwgZnJvbTogQWRkcmVzc10sIGRhdGEgPSBbYW1vdW50OgppMTI4XWAAAAAJYnVybl9mcm9tAAAAAAAAAwAAAAAAAAAHc3BlbmRlcgAAAAATAAAAAAAAAARmcm9tAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==\",\n \"AAAAAAAAAVNDbGF3YmFjayBgYW1vdW50YCBmcm9tIGBmcm9tYCBhY2NvdW50LiBgYW1vdW50YCBpcyBidXJuZWQgaW4gdGhlCmNsYXdiYWNrIHByb2Nlc3MuCgojIEFyZ3VtZW50cwoKKiBgZnJvbWAgLSBUaGUgYWRkcmVzcyBob2xkaW5nIHRoZSBiYWxhbmNlIGZyb20gd2hpY2ggdGhlIGNsYXdiYWNrIHdpbGwKdGFrZSB0b2tlbnMuCiogYGFtb3VudGAgLSBUaGUgYW1vdW50IG9mIHRva2VucyB0byBiZSBjbGF3ZWQgYmFjay4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJjbGF3YmFjayIsIGFkbWluOiBBZGRyZXNzLCB0bzogQWRkcmVzc10sCmRhdGEgPSBbYW1vdW50OiBpMTI4XWAAAAAACGNsYXdiYWNrAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=\",\n \"AAAAAAAAAIBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGVjaW1hbHMgdXNlZCB0byByZXByZXNlbnQgYW1vdW50cyBvZiB0aGlzIHRva2VuLgoKIyBQYW5pY3MKCklmIHRoZSBjb250cmFjdCBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkLgAAAAhkZWNpbWFscwAAAAAAAAABAAAABA==\",\n \"AAAAAAAAAPVNaW50cyBgYW1vdW50YCB0byBgdG9gLgoKIyBBcmd1bWVudHMKCiogYHRvYCAtIFRoZSBhZGRyZXNzIHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUgbWludGVkIHRva2Vucy4KKiBgYW1vdW50YCAtIFRoZSBhbW91bnQgb2YgdG9rZW5zIHRvIGJlIG1pbnRlZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJtaW50IiwgYWRtaW46IEFkZHJlc3MsIHRvOiBBZGRyZXNzXSwgZGF0YQo9IFthbW91bnQ6IGkxMjhdYAAAAAAAAARtaW50AAAAAgAAAAAAAAACdG8AAAAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=\",\n \"AAAAAAAAAFlSZXR1cm5zIHRoZSBuYW1lIGZvciB0aGlzIHRva2VuLgoKIyBQYW5pY3MKCklmIHRoZSBjb250cmFjdCBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkLgAAAAAAAARuYW1lAAAAAAAAAAEAAAAQ\",\n \"AAAAAAAAAQxTZXRzIHRoZSBhZG1pbmlzdHJhdG9yIHRvIHRoZSBzcGVjaWZpZWQgYWRkcmVzcyBgbmV3X2FkbWluYC4KCiMgQXJndW1lbnRzCgoqIGBuZXdfYWRtaW5gIC0gVGhlIGFkZHJlc3Mgd2hpY2ggd2lsbCBoZW5jZWZvcnRoIGJlIHRoZSBhZG1pbmlzdHJhdG9yCm9mIHRoaXMgdG9rZW4gY29udHJhY3QuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsic2V0X2FkbWluIiwgYWRtaW46IEFkZHJlc3NdLCBkYXRhID0KW25ld19hZG1pbjogQWRkcmVzc11gAAAACXNldF9hZG1pbgAAAAAAAAEAAAAAAAAACW5ld19hZG1pbgAAAAAAABMAAAAA\",\n \"AAAAAAAAAEZSZXR1cm5zIHRoZSBhZG1pbiBvZiB0aGUgY29udHJhY3QuCgojIFBhbmljcwoKSWYgdGhlIGFkbWluIGlzIG5vdCBzZXQuAAAAAAAFYWRtaW4AAAAAAAAAAAAAAQAAABM=\",\n \"AAAAAAAAAVBTZXRzIHdoZXRoZXIgdGhlIGFjY291bnQgaXMgYXV0aG9yaXplZCB0byB1c2UgaXRzIGJhbGFuY2UuIElmCmBhdXRob3JpemVkYCBpcyB0cnVlLCBgaWRgIHNob3VsZCBiZSBhYmxlIHRvIHVzZSBpdHMgYmFsYW5jZS4KCiMgQXJndW1lbnRzCgoqIGBpZGAgLSBUaGUgYWRkcmVzcyBiZWluZyAoZGUtKWF1dGhvcml6ZWQuCiogYGF1dGhvcml6ZWAgLSBXaGV0aGVyIG9yIG5vdCBgaWRgIGNhbiB1c2UgaXRzIGJhbGFuY2UuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsic2V0X2F1dGhvcml6ZWQiLCBpZDogQWRkcmVzc10sIGRhdGEgPQpbYXV0aG9yaXplOiBib29sXWAAAAAOc2V0X2F1dGhvcml6ZWQAAAAAAAIAAAAAAAAAAmlkAAAAAAATAAAAAAAAAAlhdXRob3JpemUAAAAAAAABAAAAAA==\",\n \"AAAAAAAAAFtSZXR1cm5zIHRoZSBzeW1ib2wgZm9yIHRoaXMgdG9rZW4uCgojIFBhbmljcwoKSWYgdGhlIGNvbnRyYWN0IGhhcyBub3QgeWV0IGJlZW4gaW5pdGlhbGl6ZWQuAAAAAAZzeW1ib2wAAAAAAAAAAAABAAAAEA==\",\n \"AAAAAAAAAWRUcmFuc2ZlciBgYW1vdW50YCBmcm9tIGBmcm9tYCB0byBgdG9gLgoKIyBBcmd1bWVudHMKCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgd2hpY2ggd2lsbCBiZQp3aXRoZHJhd24gZnJvbS4KKiBgdG9gIC0gVGhlIGFkZHJlc3Mgd2hpY2ggd2lsbCByZWNlaXZlIHRoZSB0cmFuc2ZlcnJlZCB0b2tlbnMuCiogYGFtb3VudGAgLSBUaGUgYW1vdW50IG9mIHRva2VucyB0byBiZSB0cmFuc2ZlcnJlZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJ0cmFuc2ZlciIsIGZyb206IEFkZHJlc3MsIHRvOiBBZGRyZXNzXSwKZGF0YSA9IFthbW91bnQ6IGkxMjhdYAAAAAh0cmFuc2ZlcgAAAAMAAAAAAAAABGZyb20AAAATAAAAAAAAAAJ0bwAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==\",\n \"AAAAAAAAAzNUcmFuc2ZlciBgYW1vdW50YCBmcm9tIGBmcm9tYCB0byBgdG9gLCBjb25zdW1pbmcgdGhlIGFsbG93YW5jZSB0aGF0CmBzcGVuZGVyYCBoYXMgb24gYGZyb21gJ3MgYmFsYW5jZS4gQXV0aG9yaXplZCBieSBzcGVuZGVyCihgc3BlbmRlci5yZXF1aXJlX2F1dGgoKWApLgoKVGhlIHNwZW5kZXIgd2lsbCBiZSBhbGxvd2VkIHRvIHRyYW5zZmVyIHRoZSBhbW91bnQgZnJvbSBmcm9tJ3MgYmFsYW5jZQppZiB0aGUgYW1vdW50IGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgYWxsb3dhbmNlIHRoYXQgdGhlIHNwZW5kZXIKaGFzIG9uIHRoZSBmcm9tJ3MgYmFsYW5jZS4gVGhlIHNwZW5kZXIncyBhbGxvd2FuY2Ugb24gZnJvbSdzIGJhbGFuY2UKd2lsbCBiZSByZWR1Y2VkIGJ5IHRoZSBhbW91bnQuCgojIEFyZ3VtZW50cwoKKiBgc3BlbmRlcmAgLSBUaGUgYWRkcmVzcyBhdXRob3JpemluZyB0aGUgdHJhbnNmZXIsIGFuZCBoYXZpbmcgaXRzCmFsbG93YW5jZSBjb25zdW1lZCBkdXJpbmcgdGhlIHRyYW5zZmVyLgoqIGBmcm9tYCAtIFRoZSBhZGRyZXNzIGhvbGRpbmcgdGhlIGJhbGFuY2Ugb2YgdG9rZW5zIHdoaWNoIHdpbGwgYmUKd2l0aGRyYXduIGZyb20uCiogYHRvYCAtIFRoZSBhZGRyZXNzIHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUgdHJhbnNmZXJyZWQgdG9rZW5zLgoqIGBhbW91bnRgIC0gVGhlIGFtb3VudCBvZiB0b2tlbnMgdG8gYmUgdHJhbnNmZXJyZWQuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsidHJhbnNmZXIiLCBmcm9tOiBBZGRyZXNzLCB0bzogQWRkcmVzc10sCmRhdGEgPSBbYW1vdW50OiBpMTI4XWAAAAAADXRyYW5zZmVyX2Zyb20AAAAAAAAEAAAAAAAAAAdzcGVuZGVyAAAAABMAAAAAAAAABGZyb20AAAATAAAAAAAAAAJ0bwAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==\",\n ]),\n options\n );\n }\n public readonly fromJSON = {\n allowance: this.txFromJSON<i128>,\n authorized: this.txFromJSON<boolean>,\n approve: this.txFromJSON<null>,\n balance: this.txFromJSON<i128>,\n burn: this.txFromJSON<null>,\n burn_from: this.txFromJSON<null>,\n clawback: this.txFromJSON<null>,\n decimals: this.txFromJSON<u32>,\n mint: this.txFromJSON<null>,\n name: this.txFromJSON<string>,\n set_admin: this.txFromJSON<null>,\n admin: this.txFromJSON<string>,\n set_authorized: this.txFromJSON<null>,\n symbol: this.txFromJSON<string>,\n transfer: this.txFromJSON<null>,\n transfer_from: this.txFromJSON<null>,\n };\n}\n", "import { AllbridgeCoreSdkOptions } from \"../index\";\nimport { NodeRpcUrlsConfig } from \"../services\";\nimport { DefaultSolUtils, SolUtils } from \"./sol\";\nimport { DefaultSrbUtils, SrbUtils } from \"./srb\";\n\n/**\n * Contains usefully methods\n */\nexport interface Utils {\n srb: SrbUtils;\n sol: SolUtils;\n}\n\nexport class DefaultUtils implements Utils {\n srb: SrbUtils;\n sol: SolUtils;\n\n constructor(readonly nodeRpcUrlsConfig: NodeRpcUrlsConfig, params: AllbridgeCoreSdkOptions) {\n this.srb = new DefaultSrbUtils(nodeRpcUrlsConfig, params);\n this.sol = new DefaultSolUtils(nodeRpcUrlsConfig, params);\n }\n}\n", "export {\n ApproveParams as BridgeApproveParams,\n BaseSendParams,\n CheckAllowanceParams,\n GetAllowanceParams,\n GetTokenBalanceParams,\n SendParams,\n SwapParams,\n GetNativeTokenBalanceParams,\n} from \"../services/bridge/models/bridge.model\";\nexport { BridgeService } from \"../services/bridge/index\";\nexport { CctpParams, CctpDomains } from \"../services/bridge/sol\";\nexport { LiquidityPoolService } from \"../services/liquidity-pool/index\";\nexport {\n Messenger,\n TransferStatusResponse,\n BridgeTransaction,\n GasBalanceResponse,\n CheckAddressResponse,\n AddressStatus,\n} from \"../client/core-api/core-api.model\";\nexport { RawBridgeTransactionBuilder } from \"../services/bridge/raw-bridge-transaction-builder\";\nexport { RawPoolTransactionBuilder } from \"../services/liquidity-pool/raw-pool-transaction-builder\";\nexport {\n PoolInfo,\n TokenWithChainDetails,\n TransferTime,\n TxCostAmount,\n MessengerTransferTime,\n} from \"../tokens-info/tokens-info.model\";\nexport {\n UserBalanceInfo,\n UserBalanceInfoDTO,\n LiquidityPoolsParams,\n LiquidityPoolsParamsWithAmount,\n ApproveParams as LiquidityPoolsApproveParams,\n CheckAllowanceParams as LiquidityPoolsCheckAllowanceParams,\n GetAllowanceParams as LiquidityPoolsGetAllowanceParams,\n} from \"../services/liquidity-pool/models/pool.model\";\nexport * from \"../services/models/index\";\nexport {\n SwapAndBridgeCalculationData,\n SwapFromVUsdCalcResult,\n SwapToVUsdCalcResult,\n} from \"../utils/calculation/swap-and-bridge-fee-calc\";\nexport { SendAmountDetails, AmountImpact } from \"../utils/calculation/swap-and-bridge-details\";\nexport { ChainDetailsMap, ChainDetailsWithTokens } from \"../tokens-info\";\nexport { Utils } from \"../utils\";\nexport { SrbUtils, TrustLineParams } from \"../utils/srb\";\nexport { SolUtils } from \"../utils/sol\";\nexport * from \"../exceptions\";\nexport { ChainSymbol, ChainType } from \"../chains/chain.enums\";\nexport { AdditionalBasicChainProperties, BasicChainProperties } from \"../chains/models\";\n\nexport enum FeePaymentMethod {\n /**\n * The fee is paid in the native currency of the source chain.\n */\n WITH_NATIVE_CURRENCY = \"native\",\n\n /**\n * The fee is paid with the stablecoin token.\n */\n WITH_STABLECOIN = \"stablecoin\",\n}\n\nexport interface AmountsAndGasFeeOptions {\n /**\n * The floating point amount of tokens to be sent (not including gas fee).\n */\n amountToSendFloat: string;\n\n /**\n * The floating point amount of tokens to be received.\n */\n amountToBeReceivedFloat: string;\n\n /**\n * Available ways to pay the transfer gas fee and gas fee amount.\n */\n gasFeeOptions: GasFeeOptions;\n}\n\ntype GasFeeOptionsType = {\n [key in FeePaymentMethod]?: AmountFormatted;\n};\n\n/**\n * Describes available options of paying the gas fee and the amount to pay when using the corresponding method.\n *\n * For {@link FeePaymentMethod.WITH_NATIVE_CURRENCY} value contains the amount in the smallest denomination of the source chain currency\n *\n * For {@link FeePaymentMethod.WITH_STABLECOIN} value contains the amount in the smallest denomination of the source token\n */\nexport interface GasFeeOptions extends GasFeeOptionsType {\n [FeePaymentMethod.WITH_NATIVE_CURRENCY]: AmountFormatted;\n [FeePaymentMethod.WITH_STABLECOIN]?: AmountFormatted;\n}\n\n/**\n * Define the type of amount data<p/>\n * Example:<p/>\n * \"1500000\" USDC {@link AmountFormat.INT} = \"1.5\" USDC {@link AmountFormat.FLOAT}, if USDC.decimals = 6\n */\nexport enum AmountFormat {\n /**\n * denominated in the smallest unit of the source token\n */\n INT = \"int\",\n /**\n * denominated in the unit of the source token\n */\n FLOAT = \"float\",\n}\n\n/**\n * Describes the same amount in two variation formats.\n *\n * For {@link AmountFormat.INT} value contains the amount in the smallest denomination\n *\n * For {@link AmountFormat.FLOAT} value contains the amount in tokens denomination\n */\nexport type AmountFormatted = {\n [key in AmountFormat]: string;\n};\n\n/**\n * Describes MAX extra gas value can to be passed when using the corresponding method.\n *\n * For {@link FeePaymentMethod.WITH_NATIVE_CURRENCY} value contains {@link ExtraGasMaxLimit} the amount of the source chain currency\n *\n * For {@link FeePaymentMethod.WITH_STABLECOIN} value contains {@link ExtraGasMaxLimit} the amount of the source token\n */\nexport type ExtraGasMaxLimits = {\n [key in FeePaymentMethod]?: ExtraGasMaxLimit;\n};\n\n/**\n * Describes the same MAX extra gas amount.\n */\nexport type ExtraGasMaxLimit = AmountFormatted;\n\n/**\n * Provide extra gas information\n */\nexport interface ExtraGasMaxLimitResponse {\n /**\n * See {@link ExtraGasMaxLimits}\n */\n extraGasMax: ExtraGasMaxLimits;\n /**\n * Information due to destination chain\n */\n destinationChain: {\n /**\n * gasAmountMax maximum amount you can receive as extra gas on dest chain\n */\n gasAmountMax: ExtraGasMaxLimit;\n /**\n * cost of swap tx on chain\n */\n swap: AmountFormatted;\n /**\n * cost of send tx on chain\n */\n transfer: AmountFormatted;\n };\n /**\n * Exchange rate\n */\n exchangeRate: string;\n /**\n * Source native token price\n */\n sourceNativeTokenPrice: string;\n}\n\n/**\n * Provide pending status information\n */\nexport interface PendingStatusInfoResponse {\n /**\n * Number of pending transactions\n */\n pendingTxs: number;\n /**\n * Total amount of pending transactions\n */\n pendingAmount: AmountFormatted;\n /**\n * The amount of tokens can be received as a result of transfer considering pending transactions\n */\n estimatedAmount: { min: AmountFormatted; max: AmountFormatted };\n}\n", "import { Big } from \"big.js\";\n// @ts-expect-error import tron\nimport TronWeb from \"tronweb\";\nimport Web3 from \"web3\";\nimport { Chains } from \"../../chains\";\nimport { AllbridgeCoreClient } from \"../../client/core-api/core-client-base\";\nimport { AllbridgeCoreSdkOptions, ChainType } from \"../../index\";\nimport { AmountFormat, AmountFormatted } from \"../../models\";\nimport { convertFloatAmountToInt, convertIntAmountToFloat } from \"../../utils/calculation\";\nimport { validateAmountDecimals, validateAmountGtZero } from \"../../utils/utils\";\nimport { GetNativeTokenBalanceParams } from \"../bridge/models\";\nimport { NodeRpcUrlsConfig } from \"../index\";\nimport { Provider, RawTransaction, TransactionResponse } from \"../models\";\nimport { EvmTokenService } from \"./evm\";\nimport {\n ApproveParams,\n ApproveParamsDto,\n CheckAllowanceParams,\n CheckAllowanceParamsDto,\n GetAllowanceParams,\n GetTokenBalanceParams,\n} from \"./models\";\nimport { ChainTokenService } from \"./models/token\";\nimport { SolanaTokenService } from \"./sol\";\nimport { SrbTokenService } from \"./srb\";\nimport { TronTokenService } from \"./trx\";\n\nexport interface TokenService {\n getAllowance(params: GetAllowanceParams, provider?: Provider): Promise<string>;\n\n checkAllowance(params: CheckAllowanceParams, provider?: Provider): Promise<boolean>;\n\n approve(provider: Provider, approveData: ApproveParams): Promise<TransactionResponse>;\n\n buildRawTransactionApprove(approveData: ApproveParams, provider?: Provider): Promise<RawTransaction>;\n\n getTokenBalance(params: GetTokenBalanceParams, provider?: Provider): Promise<string>;\n\n getNativeTokenBalance(params: GetNativeTokenBalanceParams, provider?: Provider): Promise<AmountFormatted>;\n}\n\nexport class DefaultTokenService implements TokenService {\n constructor(\n readonly api: AllbridgeCoreClient,\n readonly nodeRpcUrlsConfig: NodeRpcUrlsConfig,\n readonly params: AllbridgeCoreSdkOptions\n ) {}\n\n async getAllowance(params: GetAllowanceParams, provider?: Provider): Promise<string> {\n const allowanceInt = await this.getChainTokenService(params.token.chainSymbol, params.owner, provider).getAllowance(\n params\n );\n return convertIntAmountToFloat(allowanceInt, params.token.decimals).toFixed();\n }\n\n async checkAllowance(params: CheckAllowanceParams, provider?: Provider): Promise<boolean> {\n validateAmountGtZero(params.amount);\n validateAmountDecimals(\"amount\", params.amount, params.token.decimals);\n return this.getChainTokenService(params.token.chainSymbol, params.owner, provider).checkAllowance(\n this.prepareCheckAllowanceParams(params)\n );\n }\n\n async approve(provider: Provider, approveData: ApproveParams): Promise<TransactionResponse> {\n if (approveData.amount) {\n validateAmountGtZero(approveData.amount);\n validateAmountDecimals(\"amount\", approveData.amount, approveData.token.decimals);\n }\n return this.getChainTokenService(approveData.token.chainSymbol, approveData.owner, provider).approve(\n this.prepareApproveParams(approveData)\n );\n }\n\n async buildRawTransactionApprove(approveData: ApproveParams, provider?: Provider): Promise<RawTransaction> {\n if (approveData.amount) {\n validateAmountGtZero(approveData.amount);\n validateAmountDecimals(\"amount\", approveData.amount, approveData.token.decimals);\n }\n return this.getChainTokenService(\n approveData.token.chainSymbol,\n approveData.owner,\n provider\n ).buildRawTransactionApprove(this.prepareApproveParams(approveData));\n }\n\n async getTokenBalance(params: GetTokenBalanceParams, provider?: Provider): Promise<string> {\n const tokenBalance = await this.getChainTokenService(\n params.token.chainSymbol,\n params.account,\n provider\n ).getTokenBalance(params);\n if (params.token.decimals) {\n return convertIntAmountToFloat(tokenBalance, params.token.decimals).toFixed();\n }\n return tokenBalance;\n }\n\n async getNativeTokenBalance(params: GetNativeTokenBalanceParams, provider?: Provider): Promise<AmountFormatted> {\n const tokenBalance = await this.getChainTokenService(\n params.chainSymbol,\n params.account,\n provider\n ).getNativeTokenBalance(params);\n return {\n [AmountFormat.INT]: tokenBalance,\n [AmountFormat.FLOAT]: convertIntAmountToFloat(\n tokenBalance,\n Chains.getChainDecimalsByType(Chains.getChainProperty(params.chainSymbol).chainType)\n ).toFixed(),\n };\n }\n\n private getChainTokenService(chainSymbol: string, ownerAddress: string, provider?: Provider): ChainTokenService {\n switch (Chains.getChainProperty(chainSymbol).chainType) {\n case ChainType.EVM: {\n if (provider) {\n return new EvmTokenService(provider as unknown as Web3, this.api);\n } else {\n const nodeRpcUrl = this.nodeRpcUrlsConfig.getNodeRpcUrl(chainSymbol);\n return new EvmTokenService(new Web3(nodeRpcUrl), this.api);\n }\n }\n case ChainType.TRX: {\n if (provider) {\n return new TronTokenService(provider, this.api);\n } else {\n const nodeRpcUrl = this.nodeRpcUrlsConfig.getNodeRpcUrl(chainSymbol);\n const tronWeb = new TronWeb({ fullHost: nodeRpcUrl });\n tronWeb.setAddress(ownerAddress);\n return new TronTokenService(tronWeb, this.api);\n }\n }\n case ChainType.SOLANA: {\n const nodeRpcUrl = this.nodeRpcUrlsConfig.getNodeRpcUrl(chainSymbol);\n return new SolanaTokenService(nodeRpcUrl, this.api);\n }\n case ChainType.SRB: {\n return new SrbTokenService(this.nodeRpcUrlsConfig, this.params, this.api);\n }\n }\n }\n\n prepareCheckAllowanceParams(params: CheckAllowanceParams): CheckAllowanceParamsDto {\n return {\n ...params,\n amount: convertFloatAmountToInt(params.amount, params.token.decimals),\n };\n }\n\n private prepareApproveParams(approveData: ApproveParams): ApproveParamsDto {\n return {\n tokenAddress: approveData.token.tokenAddress,\n owner: approveData.owner,\n spender: approveData.spender,\n chainSymbol: approveData.token.chainSymbol,\n amount: approveData.amount == undefined ? undefined : Big(approveData.amount).toFixed(),\n };\n }\n}\n", "import BN from \"bn.js\";\nimport erc20abi from \"erc-20-abi\";\nimport Web3 from \"web3\";\nimport { TransactionConfig } from \"web3-core\";\nimport { AbiItem } from \"web3-utils\";\nimport { ChainSymbol, ChainType } from \"../../../chains/chain.enums\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { GetTokenBalanceParams, TransactionResponse } from \"../../../models\";\nimport { GetNativeTokenBalanceParams } from \"../../bridge/models\";\nimport { RawTransaction } from \"../../models\";\nimport { BaseContract } from \"../../models/abi/types/types\";\nimport { amountToHex } from \"../../utils/index\";\nimport { ApproveParamsDto, GetAllowanceParamsDto } from \"../models\";\nimport { ChainTokenService } from \"../models/token\";\n\nexport const MAX_AMOUNT = \"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\";\n\nconst USDT_TOKEN_ADDRESS = \"0xdac17f958d2ee523a2206206994597c13d831ec7\";\nconst POLYGON_GAS_LIMIT = 100_000;\n\nexport class EvmTokenService extends ChainTokenService {\n chainType: ChainType.EVM = ChainType.EVM;\n\n constructor(public web3: Web3, public api: AllbridgeCoreClient) {\n super();\n }\n\n getAllowance(params: GetAllowanceParamsDto): Promise<string> {\n const tokenAddress = params.token.tokenAddress;\n const owner = params.owner;\n const spender = params.spender;\n return this.getAllowanceByTokenAddress(tokenAddress, owner, spender);\n }\n\n getAllowanceByTokenAddress(tokenAddress: string, owner: string, spender: string): Promise<string> {\n const tokenContract = this.getContract(erc20abi as AbiItem[], tokenAddress);\n return tokenContract.methods.allowance(owner, spender).call();\n }\n\n async getTokenBalance(params: GetTokenBalanceParams): Promise<string> {\n return await this.getContract(erc20abi as AbiItem[], params.token.tokenAddress)\n .methods.balanceOf(params.account)\n .call();\n }\n\n async getNativeTokenBalance(params: GetNativeTokenBalanceParams): Promise<string> {\n return await this.web3.eth.getBalance(params.account);\n }\n\n async approve(params: ApproveParamsDto): Promise<TransactionResponse> {\n if (this.isUsdt(params.tokenAddress)) {\n const allowance = await this.getAllowanceByTokenAddress(params.tokenAddress, params.owner, params.spender);\n if (allowance !== \"0\") {\n const rawTransaction = await this.buildRawTransactionApprove({\n ...params,\n amount: \"0\",\n });\n await this.sendRawTransaction(rawTransaction, params.chainSymbol);\n }\n }\n const rawTransaction = await this.buildRawTransactionApprove(params);\n return await this.sendRawTransaction(rawTransaction, params.chainSymbol);\n }\n\n isUsdt(tokenAddress: string): boolean {\n return tokenAddress.toLowerCase() === USDT_TOKEN_ADDRESS;\n }\n\n async buildRawTransactionApprove(params: ApproveParamsDto): Promise<RawTransaction> {\n const { tokenAddress, spender, owner, amount } = params;\n const tokenContract = this.getContract(erc20abi as AbiItem[], tokenAddress);\n\n const approveMethod = await tokenContract.methods.approve(\n spender,\n amount == undefined ? MAX_AMOUNT : amountToHex(amount)\n );\n\n return {\n from: owner,\n to: tokenAddress,\n value: \"0\",\n data: approveMethod.encodeABI(),\n };\n }\n\n private async sendRawTransaction(rawTransaction: RawTransaction, chainSymbol: string) {\n const transactionConfig: TransactionConfig = rawTransaction as TransactionConfig;\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error DISABLE SITE SUGGESTED GAS FEE IN METAMASK\n // prettier-ignore\n const feeOptions: { maxPriorityFeePerGas?: number | string | BN; maxFeePerGas?: number | string | BN } = { maxPriorityFeePerGas: null, maxFeePerGas: null };\n if ((chainSymbol as ChainSymbol) === ChainSymbol.POL) {\n transactionConfig.gas = POLYGON_GAS_LIMIT;\n } else {\n transactionConfig.gas = await this.web3.eth.estimateGas(rawTransaction as TransactionConfig);\n }\n const { transactionHash } = await this.web3.eth.sendTransaction({ ...transactionConfig, ...feeOptions });\n return { txId: transactionHash };\n }\n\n private getContract<T extends BaseContract>(abiItem: AbiItem[], contractAddress: string): T {\n return new this.web3.eth.Contract(abiItem, contractAddress) as any;\n }\n}\n", "import { Big } from \"big.js\";\nimport { ChainType } from \"../../../chains/chain.enums\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { GetNativeTokenBalanceParams } from \"../../bridge/models\";\nimport { RawTransaction, TransactionResponse } from \"../../models\";\nimport { ApproveParamsDto, CheckAllowanceParamsDto, GetAllowanceParamsDto, GetTokenBalanceParams } from \"./token.model\";\n\nexport abstract class ChainTokenService {\n abstract chainType: ChainType;\n abstract api: AllbridgeCoreClient;\n\n abstract getTokenBalance(params: GetTokenBalanceParams): Promise<string>;\n\n abstract getNativeTokenBalance(params: GetNativeTokenBalanceParams): Promise<string>;\n\n abstract getAllowance(params: GetAllowanceParamsDto): Promise<string>;\n\n async checkAllowance(params: CheckAllowanceParamsDto): Promise<boolean> {\n const allowance = await this.getAllowance(params);\n return Big(allowance).gte(Big(params.amount));\n }\n\n abstract approve(params: ApproveParamsDto): Promise<TransactionResponse>;\n\n abstract buildRawTransactionApprove(params: ApproveParamsDto): Promise<RawTransaction>;\n}\n", "/* eslint-disable @typescript-eslint/ban-ts-comment */\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { AnchorProvider, Provider } from \"@project-serum/anchor\";\nimport { Connection, PublicKey } from \"@solana/web3.js\";\nimport { ChainType } from \"../../../chains/chain.enums\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { MethodNotSupportedError } from \"../../../exceptions\";\nimport { GetNativeTokenBalanceParams } from \"../../bridge/models\";\nimport { RawTransaction, TransactionResponse } from \"../../models\";\nimport { getTokenAccountData } from \"../../utils/sol\";\nimport { getAssociatedAccount } from \"../../utils/sol/accounts\";\nimport { ApproveParamsDto, GetAllowanceParamsDto, GetTokenBalanceParams } from \"../models\";\nimport { ChainTokenService } from \"../models/token\";\n\nexport class SolanaTokenService extends ChainTokenService {\n chainType: ChainType.SOLANA = ChainType.SOLANA;\n\n constructor(public solanaRpcUrl: string, public api: AllbridgeCoreClient) {\n super();\n }\n\n approve(params: ApproveParamsDto): Promise<TransactionResponse> {\n throw new MethodNotSupportedError();\n }\n\n buildRawTransactionApprove(params: ApproveParamsDto): Promise<RawTransaction> {\n throw new MethodNotSupportedError();\n }\n\n private buildAnchorProvider(accountAddress: string): Provider {\n const connection = new Connection(this.solanaRpcUrl, \"confirmed\");\n\n const publicKey = new PublicKey(accountAddress);\n\n return new AnchorProvider(\n connection,\n // @ts-expect-error enough wallet for fetch actions\n { publicKey: publicKey },\n {\n preflightCommitment: \"confirmed\",\n commitment: \"confirmed\",\n }\n );\n }\n\n getAllowance(params: GetAllowanceParamsDto): Promise<string> {\n throw new MethodNotSupportedError();\n }\n\n async getTokenBalance(params: GetTokenBalanceParams): Promise<string> {\n const { account, token } = params;\n try {\n const associatedAccount = await getAssociatedAccount(new PublicKey(account), new PublicKey(token.tokenAddress));\n const accountData = await getTokenAccountData(associatedAccount, this.buildAnchorProvider(account));\n return accountData.amount.toString();\n } catch (e) {\n if (e instanceof Error) {\n e.message.startsWith(\"Account does not exist\");\n return \"0\";\n }\n throw e;\n }\n }\n\n async getNativeTokenBalance(params: GetNativeTokenBalanceParams): Promise<string> {\n return (\n await this.buildAnchorProvider(params.account).connection.getBalance(new PublicKey(params.account))\n ).toString();\n }\n}\n", "import { Horizon, NotFoundError } from \"@stellar/stellar-sdk\";\nimport { Chains } from \"../../../chains\";\nimport { ChainSymbol } from \"../../../chains/chain.enums\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { AllbridgeCoreSdkOptions, ChainType, SdkError } from \"../../../index\";\nimport { GetTokenBalanceParams, MethodNotSupportedError, TransactionResponse } from \"../../../models\";\nimport { convertFloatAmountToInt } from \"../../../utils/calculation\";\nimport { GetNativeTokenBalanceParams } from \"../../bridge/models\";\nimport { NodeRpcUrlsConfig } from \"../../index\";\nimport { RawTransaction } from \"../../models\";\nimport { ChainTokenService } from \"../models\";\n\nimport BalanceLineAsset = Horizon.HorizonApi.BalanceLineAsset;\nimport BalanceLineNative = Horizon.HorizonApi.BalanceLineNative;\n\nexport class SrbTokenService extends ChainTokenService {\n chainType: ChainType.SRB = ChainType.SRB;\n\n constructor(\n readonly nodeRpcUrlsConfig: NodeRpcUrlsConfig,\n readonly params: AllbridgeCoreSdkOptions,\n readonly api: AllbridgeCoreClient\n ) {\n super();\n }\n\n getAllowance(): Promise<string> {\n throw new MethodNotSupportedError();\n }\n\n async getTokenBalance(params: GetTokenBalanceParams): Promise<string> {\n if (!params.token.originTokenAddress) {\n throw new SdkError(\"OriginTokenAddress missing\");\n }\n const [symbol, srbTokenAddress] = params.token.originTokenAddress.split(\":\");\n\n const stellar = new Horizon.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.STLR));\n let stellarAccount;\n try {\n stellarAccount = await stellar.loadAccount(params.account);\n } catch (err) {\n if (err instanceof NotFoundError) {\n return \"0\";\n }\n throw err;\n }\n const balances = stellarAccount.balances;\n\n const balanceInfo = balances.find(\n (balance): balance is BalanceLineAsset =>\n (balance.asset_type === \"credit_alphanum4\" || balance.asset_type === \"credit_alphanum12\") &&\n balance.asset_code == symbol &&\n balance.asset_issuer == srbTokenAddress\n );\n if (balanceInfo?.balance) {\n return convertFloatAmountToInt(\n balanceInfo.balance,\n Chains.getChainDecimalsByType(Chains.getChainProperty(params.token.chainSymbol).chainType)\n ).toFixed();\n }\n return \"0\";\n }\n\n async getNativeTokenBalance(params: GetNativeTokenBalanceParams): Promise<string> {\n const stellar = new Horizon.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.STLR));\n const stellarAccount = await stellar.loadAccount(params.account);\n const balances = stellarAccount.balances;\n\n const nativeBalance = balances.find((balance): balance is BalanceLineNative => balance.asset_type === \"native\");\n if (nativeBalance?.balance) {\n return convertFloatAmountToInt(\n nativeBalance.balance,\n Chains.getChainDecimalsByType(Chains.getChainProperty(params.chainSymbol).chainType)\n ).toFixed();\n }\n return \"0\";\n }\n\n approve(): Promise<TransactionResponse> {\n throw new MethodNotSupportedError();\n }\n\n buildRawTransactionApprove(): Promise<RawTransaction> {\n throw new MethodNotSupportedError();\n }\n}\n", "[\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"name_\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"symbol_\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Approval\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Transfer\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"allowance\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"approve\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"balanceOf\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"decimals\",\n \"outputs\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"\",\n \"type\": \"uint8\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"subtractedValue\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"decreaseAllowance\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"addedValue\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"increaseAllowance\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"name\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"symbol\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"totalSupply\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transfer\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transferFrom\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n]\n", "// @ts-expect-error import tron\nimport TronWeb from \"tronweb\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { SdkError } from \"../../../exceptions\";\nimport { ChainType, GetTokenBalanceParams, TransactionResponse } from \"../../../models\";\nimport { GetNativeTokenBalanceParams } from \"../../bridge/models\";\nimport { RawTransaction, SmartContractMethodParameter } from \"../../models\";\nimport ERC20Abi from \"../../models/abi/ERC20.json\";\nimport { amountToHex } from \"../../utils\";\nimport { sendRawTransaction } from \"../../utils/trx\";\nimport { ApproveParamsDto, GetAllowanceParamsDto } from \"../models\";\nimport { ChainTokenService } from \"../models/token\";\n\nexport const MAX_AMOUNT = \"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\";\n\nexport class TronTokenService extends ChainTokenService {\n chainType: ChainType.TRX = ChainType.TRX;\n\n constructor(public tronWeb: typeof TronWeb, public api: AllbridgeCoreClient) {\n super();\n }\n\n async getAllowance(params: GetAllowanceParamsDto): Promise<string> {\n const {\n token: { tokenAddress },\n owner,\n } = params;\n const tokenContract = await this.getContract(tokenAddress);\n const allowance = await tokenContract.methods.allowance(owner, params.spender).call();\n return allowance.toString();\n }\n\n async getTokenBalance(params: GetTokenBalanceParams): Promise<string> {\n const contract = await this.getContract(params.token.tokenAddress);\n const balance = await contract.balanceOf(params.account).call();\n return balance.toString();\n }\n\n async getNativeTokenBalance(params: GetNativeTokenBalanceParams): Promise<string> {\n return (await this.tronWeb.trx.getBalance(params.account)).toString();\n }\n\n async approve(params: ApproveParamsDto): Promise<TransactionResponse> {\n const rawTransaction = await this.buildRawTransactionApprove(params);\n return await sendRawTransaction(this.tronWeb, rawTransaction);\n }\n\n async buildRawTransactionApprove(params: ApproveParamsDto): Promise<RawTransaction> {\n const { tokenAddress, spender, owner, amount } = params;\n const amountHex = amount == undefined ? MAX_AMOUNT : amountToHex(amount);\n\n const parameter = [\n { type: \"address\", value: spender },\n { type: \"uint256\", value: amountHex },\n ];\n const value = \"0\";\n const methodSignature = \"approve(address,uint256)\";\n return this.buildRawTransaction(tokenAddress, methodSignature, parameter, value, owner);\n }\n\n private async getContract(contractAddress: string): Promise<any> {\n return await this.tronWeb.contract(ERC20Abi, contractAddress);\n }\n\n private async buildRawTransaction(\n contractAddress: string,\n methodSignature: string,\n parameters: SmartContractMethodParameter[],\n value: string,\n fromAddress: string\n ): Promise<RawTransaction> {\n const transactionObject = await this.tronWeb.transactionBuilder.triggerSmartContract(\n contractAddress,\n methodSignature,\n {\n callValue: value,\n },\n parameters,\n fromAddress\n );\n if (!transactionObject?.result?.result) {\n throw new SdkError(\"Unknown error: \" + JSON.stringify(transactionObject, null, 2));\n }\n return transactionObject.transaction;\n }\n}\n", "import { BigSource } from \"big.js\";\nimport { AdditionalBasicChainProperties } from \"./chains/models\";\nimport { mainnet } from \"./configs\";\nimport {\n AmountFormat,\n AmountFormatted,\n AmountsAndGasFeeOptions,\n BridgeService,\n ChainDetailsMap,\n CheckAddressResponse,\n ExtraGasMaxLimitResponse,\n GasBalanceResponse,\n GasFeeOptions,\n GetNativeTokenBalanceParams,\n GetTokenBalanceParams,\n LiquidityPoolService,\n Messenger,\n PendingStatusInfoResponse,\n PoolInfo,\n Provider,\n SendAmountDetails,\n SwapAndBridgeCalculationData,\n TokenWithChainDetails,\n TransferStatusResponse,\n} from \"./models\";\nimport { AllbridgeCoreSdkService, NodeRpcUrlsConfig } from \"./services\";\nimport { CctpParams } from \"./services/bridge/sol\";\nimport { DefaultUtils, Utils } from \"./utils\";\n\nexport * from \"./configs\";\nexport * from \"./models\";\n\nexport interface AllbridgeCoreSdkOptions {\n coreApiUrl: string;\n /**\n * A set of query parameters to be added to all requests to the Core API.\n */\n coreApiQueryParams?: Record<string, string>;\n /**\n * A set of headers to be added to all requests to the Core API.\n */\n coreApiHeaders?: Record<string, string>;\n /**\n * Jupiter v6 Swap Api\n */\n jupiterUrl: string;\n wormholeMessengerProgramId: string;\n solanaLookUpTable: string;\n sorobanNetworkPassphrase: string;\n /**\n * Optional. Will be used in methods</br>\n * {@link LiquidityPoolService.getPoolInfoFromChain} and {@link LiquidityPoolService.getAmountToBeWithdrawn}</br>\n * to fetch information from the blockchain with fewer HTTP requests using JSON-RPC API\n */\n tronJsonRpc?: string;\n cctpParams: CctpParams;\n /**\n * The number of seconds that pool information taken from the chain will be cached.\n *\n * @type {number}\n */\n cachePoolInfoChainSec: number;\n\n /**\n * @Internal\n * Optional additional properties to merge with the default properties.\n */\n additionalChainsProperties?: Record<string, AdditionalBasicChainProperties>;\n}\n\n/**\n * Type representing RPC node URLs for different blockchain chains.</br>\n * Provide node RPC URL for chain connection you intend to communicate with</br>\n * - required for SOL, TRX chains</br>\n * - optional for EVM chains -- you can interact by passing a {@link Provider} that will be used to communicate with the chain</br>\n * @typedef {Record<string, string>} NodeRpcUrls\n * @property {string} chainSymbol - The symbol of the chain representing one of the supported blockchain networks (e.g., \"ETH\" for Ethereum). For more details, see: {@link ChainSymbol}.\n * @property {string} rpcUrl - The RPC node URL for the specified chain.\n */\nexport type NodeRpcUrls = Record<string, string>;\n\n/**\n * @Deprecated Use {@link NodeRpcUrls}\n */\nexport interface NodeUrlsConfig {\n solanaRpcUrl: string;\n tronRpcUrl: string;\n}\n\n/**\n * @Deprecated Use {@link NodeRpcUrls}\n */\nfunction isNodeUrlsConfig(nodeUrls: NodeUrlsConfig | NodeRpcUrls): nodeUrls is NodeUrlsConfig {\n return \"solanaRpcUrl\" in nodeUrls;\n}\n\nexport class AllbridgeCoreSdk {\n readonly params: AllbridgeCoreSdkOptions;\n\n bridge: BridgeService;\n pool: LiquidityPoolService;\n utils: Utils;\n\n private service: AllbridgeCoreSdkService;\n\n /**\n * Initializes the SDK object.\n * @param nodeUrls node rpc urls for full functionality\n * @param params\n * Optional.\n * If not defined, the default {@link mainnet} parameters are used.\n */\n constructor(nodeUrls: NodeUrlsConfig | NodeRpcUrls, params: AllbridgeCoreSdkOptions = mainnet) {\n let nodeRpcUrlsConfig: NodeRpcUrlsConfig;\n if (isNodeUrlsConfig(nodeUrls)) {\n nodeRpcUrlsConfig = new NodeRpcUrlsConfig({ SOL: nodeUrls.solanaRpcUrl, TRX: nodeUrls.tronRpcUrl });\n } else {\n nodeRpcUrlsConfig = new NodeRpcUrlsConfig(nodeUrls);\n }\n this.service = new AllbridgeCoreSdkService(nodeRpcUrlsConfig, params);\n this.bridge = this.service.bridge;\n this.pool = this.service.pool;\n this.utils = new DefaultUtils(nodeRpcUrlsConfig, params);\n this.params = params;\n }\n\n /**\n * Returns {@link ChainDetailsMap} containing a list of supported tokens groped by chain.\n *\n * @param type - A string value which specifies ChainDetailsMap to retrieve.\n * Can be either 'swap' for send or 'pool' for liquidity pools setup.\n * Defaults to 'swap'.\n */\n async chainDetailsMap(type: \"swap\" | \"pool\" = \"swap\"): Promise<ChainDetailsMap> {\n return this.service.chainDetailsMap(type);\n }\n\n /**\n * Returns a list of supported {@link TokenWithChainDetails | tokens}.\n *\n * @param type - A string value which specifies a set of tokens to retrieve.\n * Can be either 'swap' for tokens to send or 'pool' for liquidity pools operations.\n * Defaults to 'swap'.\n * @returns A promise that resolves to an array of {@link TokenWithChainDetails}.\n */\n async tokens(type: \"swap\" | \"pool\" = \"swap\"): Promise<TokenWithChainDetails[]> {\n return this.service.tokens(type);\n }\n\n /**\n * Returns a list of supported {@link TokenWithChainDetails | tokens} on the selected chain.\n * @param chainSymbol - The symbol of the chain representing one of the supported blockchain networks (e.g., \"ETH\" for Ethereum). For more details, see: {@link ChainSymbol}.\n * @param type - A string value which specifies a set of tokens to retrieve.\n * Can be either 'swap' for tokens to send or 'pool' for liquidity pools operations.\n * Defaults to 'swap'.\n */\n async tokensByChain(chainSymbol: string, type: \"swap\" | \"pool\" = \"swap\"): Promise<TokenWithChainDetails[]> {\n return this.service.tokensByChain(chainSymbol, type);\n }\n\n /**\n * Fetches information about tokens transfer by chosen chainSymbol and transaction Id from the Allbridge Core API.\n * @param chainSymbol - The symbol of the chain representing one of the supported blockchain networks (e.g., \"ETH\" for Ethereum). For more details, see: {@link ChainSymbol}.\n * @param txId\n */\n async getTransferStatus(chainSymbol: string, txId: string): Promise<TransferStatusResponse> {\n return this.service.getTransferStatus(chainSymbol, txId);\n }\n\n /**\n * Get gas balance\n * @param chainSymbol - The symbol of the chain representing one of the supported blockchain networks (e.g., \"ETH\" for Ethereum). For more details, see: {@link ChainSymbol}.\n * @param address\n */\n async getGasBalance(chainSymbol: string, address: string): Promise<GasBalanceResponse> {\n return this.service.getGasBalance(chainSymbol, address);\n }\n\n /**\n * Check address and show gas balance\n * @Deprecated\n * @param chainSymbol - The symbol of the chain representing one of the supported blockchain networks (e.g., \"ETH\" for Ethereum). For more details, see: {@link ChainSymbol}.\n * @param recipientAddress\n * @param tokenAddress\n */\n async checkAddress(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n chainSymbol: string,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n recipientAddress: string,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n tokenAddress?: string\n ): Promise<CheckAddressResponse> {\n return await this.service.checkAddress();\n }\n\n /**\n * Returns information about pending transactions for the same destination chain and the amount of tokens can be received as a result of transfer considering pending transactions.\n * @param amount the amount of tokens that will be sent\n * @param amountFormat amount format\n * @param sourceToken selected token transfer from\n * @param destToken selected token transfer to\n * @returns range of possible amount based on already pending transactions\n */\n async getPendingStatusInfo(\n amount: string,\n amountFormat: AmountFormat,\n sourceToken: TokenWithChainDetails,\n destToken: TokenWithChainDetails\n ): Promise<PendingStatusInfoResponse> {\n return this.service.getPendingStatusInfo(amount, amountFormat, sourceToken, destToken);\n }\n\n /**\n * Get token balance\n * @param params\n * @param provider\n * @returns Token balance\n */\n async getTokenBalance(params: GetTokenBalanceParams, provider?: Provider): Promise<string> {\n return this.service.getTokenBalance(params, provider);\n }\n\n /**\n * Get native (gas) token balance\n * @param params\n * @param provider\n * @returns Token balance\n */\n async getNativeTokenBalance(params: GetNativeTokenBalanceParams, provider?: Provider): Promise<AmountFormatted> {\n return this.service.getNativeTokenBalance(params, provider);\n }\n\n /**\n * @Deprecated\n * Calculates the percentage of fee from the initial amount that is charged when swapping from the selected source chain.\n * (Does not include fee related to the destination chain. Does not include gas fee)\n * @param amountFloat initial amount of tokens to swap\n * @param sourceChainToken selected token on the source chain\n * @returns fee percent\n */\n async calculateFeePercentOnSourceChain(\n amountFloat: BigSource,\n sourceChainToken: TokenWithChainDetails\n ): Promise<number> {\n return this.service.calculateFeePercentOnSourceChain(amountFloat, sourceChainToken);\n }\n\n /**\n * @Deprecated\n * Calculates the percentage of fee that is charged when swapping to the selected destination chain. The destination chain fee percent applies to the amount after the source chain fee.\n * (Does not include fee related to the source chain. Does not include gas fee)\n * @see {@link calculateFeePercentOnSourceChain}\n * @param amountFloat initial amount of tokens to swap\n * @param sourceChainToken selected token on the source chain\n * @param destinationChainToken selected token on the destination chain\n * @returns fee percent\n */\n async calculateFeePercentOnDestinationChain(\n amountFloat: BigSource,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails\n ): Promise<number> {\n return this.service.calculateFeePercentOnDestinationChain(amountFloat, sourceChainToken, destinationChainToken);\n }\n\n /**\n * Calculates the amount of tokens to be received as a result of transfer\n * and fetches {@link GasFeeOptions} which contains available ways to pay the gas fee.\n * @param amountToSendFloat the amount of tokens that will be sent\n * @param sourceChainToken selected token on the source chain\n * @param destinationChainToken selected token on the destination chain\n * @param messenger\n */\n async getAmountToBeReceivedAndGasFeeOptions(\n amountToSendFloat: BigSource,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger: Messenger\n ): Promise<AmountsAndGasFeeOptions> {\n return this.service.getAmountToBeReceivedAndGasFeeOptions(\n amountToSendFloat,\n sourceChainToken,\n destinationChainToken,\n messenger\n );\n }\n\n /**\n * Calculates the amount of tokens to send based on requested tokens amount be received as a result of transfer.\n * and fetches {@link GasFeeOptions} which contains available ways to pay the gas fee.\n * @param amountToBeReceivedFloat the amount of tokens that should be received\n * @param sourceChainToken selected token on the source chain\n * @param destinationChainToken selected token on the destination chain\n * @param messenger\n */\n async getAmountToSendAndGasFeeOptions(\n amountToBeReceivedFloat: BigSource,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger: Messenger\n ): Promise<AmountsAndGasFeeOptions> {\n return this.service.getAmountToSendAndGasFeeOptions(\n amountToBeReceivedFloat,\n sourceChainToken,\n destinationChainToken,\n messenger\n );\n }\n\n /**\n * Calculates the amount of tokens to be received as a result of transfer.\n * @param amountToSendFloat the amount of tokens that will be sent\n * @param sourceChainToken selected token on the source chain\n * @param destinationChainToken selected token on the destination chain\n * @param messenger Optional. selected messenger\n */\n async getAmountToBeReceived(\n amountToSendFloat: BigSource,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n /**\n * The Messengers for different routes.\n * Optional.\n * The {@link Messenger.ALLBRIDGE}, {@link Messenger.WORMHOLE} by default.\n */\n messenger?: Messenger\n ): Promise<string> {\n return this.service.getAmountToBeReceived(amountToSendFloat, sourceChainToken, destinationChainToken, messenger);\n }\n\n /**\n * Calculates the amount of tokens to be received as a result of transfer based on actual blockchain pool state.\n * @param amountToSendFloat the amount of tokens that will be sent\n * @param sourceChainToken selected token on the source chain\n * @param destinationChainToken selected token on the destination chain\n * @param messenger Optional. selected messenger\n * @param sourceProvider Optional. source chain Provider\n * @param destinationProvider Optional. destination chain Provider\n */\n async getAmountToBeReceivedFromChain(\n amountToSendFloat: BigSource,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n /**\n * The Messengers for different routes.\n * Optional.\n * The {@link Messenger.ALLBRIDGE}, {@link Messenger.WORMHOLE} by default.\n */\n messenger?: Messenger,\n sourceProvider?: Provider,\n destinationProvider?: Provider\n ): Promise<string> {\n return this.service.getAmountToBeReceivedFromChain(\n amountToSendFloat,\n sourceChainToken,\n destinationChainToken,\n messenger,\n sourceProvider,\n destinationProvider\n );\n }\n\n /**\n * Calculates the amount of tokens to be received as a result of transfer based on passed pool state.\n * @param amountToSendFloat the amount of tokens that will be sent\n * @param sourceChainToken selected token on the source chain\n * @param destinationChainToken selected token on the destination chain\n * @param sourcePool source token pool state\n * @param destinationPool destination token pool state\n * @param messenger Optional. selected messenger\n */\n getAmountToBeReceivedFromPools(\n amountToSendFloat: BigSource,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n sourcePool: PoolInfo,\n destinationPool: PoolInfo,\n messenger?: Messenger\n ): string {\n return this.service.getAmountToBeReceivedFromPools(\n amountToSendFloat,\n sourceChainToken,\n destinationChainToken,\n sourcePool,\n destinationPool,\n messenger\n );\n }\n\n /**\n * Calculates the amount of tokens to send based on requested tokens amount be received as a result of transfer.\n * @param amountToBeReceivedFloat the amount of tokens that should be received\n * @param sourceChainToken selected token on the source chain\n * @param destinationChainToken selected token on the destination chain\n * @param messenger Optional. selected messenger\n */\n async getAmountToSend(\n amountToBeReceivedFloat: BigSource,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n /**\n * The Messengers for different routes.\n * Optional.\n * The {@link Messenger.ALLBRIDGE}, {@link Messenger.WORMHOLE} by default.\n */\n messenger?: Messenger\n ): Promise<string> {\n return this.service.getAmountToSend(amountToBeReceivedFloat, sourceChainToken, destinationChainToken, messenger);\n }\n\n /**\n * Calculates the amount of tokens to send based on requested tokens amount be received as a result of transfer based on actual blockchain pool state.\n * @param amountToBeReceivedFloat the amount of tokens that should be received\n * @param sourceChainToken selected token on the source chain\n * @param destinationChainToken selected token on the destination chain\n * @param messenger Optional. selected messenger\n * @param sourceProvider Optional. source chain Provider\n * @param destinationProvider Optional. destination chain Provider\n */\n async getAmountToSendFromChain(\n amountToBeReceivedFloat: BigSource,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n /**\n * The Messengers for different routes.\n * Optional.\n * The {@link Messenger.ALLBRIDGE}, {@link Messenger.WORMHOLE} by default.\n */\n messenger?: Messenger,\n sourceProvider?: Provider,\n destinationProvider?: Provider\n ): Promise<string> {\n return this.service.getAmountToSendFromChain(\n amountToBeReceivedFloat,\n sourceChainToken,\n destinationChainToken,\n messenger,\n sourceProvider,\n destinationProvider\n );\n }\n\n /**\n * Calculates the amount of tokens to send based on requested tokens amount be received as a result of transfer based on passed pool state.\n * @param amountToBeReceivedFloat the amount of tokens that should be received\n * @param sourceChainToken selected token on the source chain\n * @param destinationChainToken selected token on the destination chain\n * @param sourcePool source token pool state\n * @param destinationPool destination token pool state\n * @param messenger Optional. selected messenger\n */\n getAmountToSendFromPools(\n amountToBeReceivedFloat: BigSource,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n sourcePool: PoolInfo,\n destinationPool: PoolInfo,\n messenger?: Messenger\n ): string {\n return this.service.getAmountToSendFromPools(\n amountToBeReceivedFloat,\n sourceChainToken,\n destinationChainToken,\n sourcePool,\n destinationPool,\n messenger\n );\n }\n\n /**\n * Fetches possible ways to pay the transfer gas fee.\n * @param sourceChainToken selected token on the source chain\n * @param destinationChainToken selected token on the destination chain\n * @param messenger\n * @returns {@link GasFeeOptions}\n */\n async getGasFeeOptions(\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger: Messenger\n ): Promise<GasFeeOptions> {\n return this.service.getGasFeeOptions(sourceChainToken, destinationChainToken, messenger);\n }\n\n /**\n * Gets the average time in ms to complete a transfer for given tokens and messenger.\n * @param sourceChainToken selected token on the source chain.\n * @param destinationChainToken selected token on the destination chain.\n * @param messenger\n * @returns Average transfer time in milliseconds or null if a given combination of tokens and messenger is not supported.\n */\n getAverageTransferTime(\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger: Messenger\n ): number | null {\n return this.service.getAverageTransferTime(sourceChainToken, destinationChainToken, messenger);\n }\n\n /**\n * Gets information about the poolInfo by token\n * @param token\n * @returns poolInfo\n */\n async getPoolInfoByToken(token: TokenWithChainDetails): Promise<PoolInfo> {\n return this.service.getPoolInfoByToken(token);\n }\n\n /**\n * Forces refresh of cached information about the state of liquidity pools.\n * Outdated cache leads to calculated amounts being less accurate.\n * The cache is invalidated at regular intervals, but it can be forced to be refreshed by calling this method.+\n *\n * @param tokens if present, the corresponding liquidity pools will be updated\n */\n async refreshPoolInfo(tokens?: TokenWithChainDetails | TokenWithChainDetails[]): Promise<void> {\n return this.service.refreshPoolInfo(tokens);\n }\n\n /**\n * Convert APR to percentage view\n * @param apr\n * @returns aprPercentageView\n */\n aprInPercents(apr: string): string {\n return this.service.aprInPercents(apr);\n }\n\n /**\n * Get possible limit of extra gas amount.\n * @param sourceChainToken selected token on the source chain\n * @param destinationChainToken selected token on the destination chain\n * @returns {@link ExtraGasMaxLimitResponse}\n */\n async getExtraGasMaxLimits(\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails\n ): Promise<ExtraGasMaxLimitResponse> {\n return this.service.getExtraGasMaxLimits(sourceChainToken, destinationChainToken);\n }\n\n /**\n * @param amount - amount\n * @param amountFormat - AmountFormat\n * @param sourceToken - selected token on the source chain\n * @return virtual amount\n */\n async getVUsdFromAmount(\n amount: string,\n amountFormat: AmountFormat,\n sourceToken: TokenWithChainDetails\n ): Promise<AmountFormatted> {\n return this.service.getVUsdFromAmount(amount, amountFormat, sourceToken);\n }\n\n /**\n * @param vUsdAmount - amount of vUsd, int format\n * @param destToken selected token on the destination chain\n * @return amount of destToken\n */\n async getAmountFromVUsd(vUsdAmount: string, destToken: TokenWithChainDetails): Promise<AmountFormatted> {\n return this.service.getAmountFromVUsd(vUsdAmount, destToken);\n }\n\n /**\n * @Deprecated Use {@link getSendAmountDetails}\n * @param amountInTokenPrecision\n * @param sourceToken\n * @param destToken\n */\n async swapAndBridgeFeeCalculation(\n amountInTokenPrecision: string,\n sourceToken: TokenWithChainDetails,\n destToken: TokenWithChainDetails\n ): Promise<SwapAndBridgeCalculationData> {\n return this.service.swapAndBridgeFeeCalculation(amountInTokenPrecision, sourceToken, destToken);\n }\n\n /**\n * @Deprecated Use {@link getAmountToBeReceived} and then {@link getSendAmountDetails}\n * @param amountInTokenPrecision\n * @param sourceToken\n * @param destToken\n */\n async swapAndBridgeFeeCalculationReverse(\n amountInTokenPrecision: string,\n sourceToken: TokenWithChainDetails,\n destToken: TokenWithChainDetails\n ): Promise<SwapAndBridgeCalculationData> {\n return this.service.swapAndBridgeFeeCalculationReverse(amountInTokenPrecision, sourceToken, destToken);\n }\n\n /**\n * Show amount changes (fee and amount adjustment) during send through pools on source and destination chains\n */\n async getSendAmountDetails(\n amount: string,\n amountFormat: AmountFormat,\n sourceToken: TokenWithChainDetails,\n destToken: TokenWithChainDetails\n ): Promise<SendAmountDetails> {\n return this.service.getSendAmountDetails(amount, amountFormat, sourceToken, destToken);\n }\n}\n"],
|
|
5
|
+
"mappings": "AAAA,IAAIA,GAAY,CAAC,EACbC,GAAa,GACjB,SAASC,IAAQ,CACf,GAAID,GAAY,OAAOD,GACvBC,GAAa,GACbD,GAAU,WAAaG,EACvBH,GAAU,YAAcI,EACxBJ,GAAU,cAAgBK,EAM1B,QALIC,EAAS,CAAC,EACVC,EAAY,CAAC,EACbC,EAAM,OAAO,WAAe,IAAc,WAAa,MACvDC,EAAO,mEAEFC,EAAI,EAAGC,EAAMF,EAAK,OAAQC,EAAIC,EAAK,EAAED,EAC5CJ,EAAOI,CAAC,EAAID,EAAKC,CAAC,EAClBH,EAAUE,EAAK,WAAWC,CAAC,CAAC,EAAIA,EAKlCH,EAAU,EAAiB,EAAI,GAC/BA,EAAU,EAAiB,EAAI,GAE/B,SAASK,EAAQC,EAAK,CACpB,IAAIF,EAAME,EAAI,OAEd,GAAIF,EAAM,EAAI,EACZ,MAAM,IAAI,MAAM,gDAAgD,EAKlE,IAAIG,EAAWD,EAAI,QAAQ,GAAG,EAC1BC,IAAa,KAAIA,EAAWH,GAChC,IAAII,EAAkBD,IAAaH,EAAM,EAAI,EAAIG,EAAW,EAC5D,MAAO,CAACA,EAAUC,CAAe,CACnC,CAGA,SAASZ,EAAWU,EAAK,CACvB,IAAIG,EAAOJ,EAAQC,CAAG,EAClBC,EAAWE,EAAK,CAAC,EACjBD,EAAkBC,EAAK,CAAC,EAC5B,OAAQF,EAAWC,GAAmB,EAAI,EAAIA,CAChD,CAEA,SAASE,EAAYJ,EAAKC,EAAUC,EAAiB,CACnD,OAAQD,EAAWC,GAAmB,EAAI,EAAIA,CAChD,CAEA,SAASX,EAAYS,EAAK,CACxB,IAAIK,EACAF,EAAOJ,EAAQC,CAAG,EAClBC,EAAWE,EAAK,CAAC,EACjBD,EAAkBC,EAAK,CAAC,EACxBG,EAAM,IAAIX,EAAIS,EAAYJ,EAAKC,EAAUC,CAAe,CAAC,EACzDK,EAAU,EAEVT,EAAMI,EAAkB,EAAID,EAAW,EAAIA,EAC3CJ,EAEJ,IAAKA,EAAI,EAAGA,EAAIC,EAAKD,GAAK,EACxBQ,EAAMX,EAAUM,EAAI,WAAWH,CAAC,CAAC,GAAK,GAAKH,EAAUM,EAAI,WAAWH,EAAI,CAAC,CAAC,GAAK,GAAKH,EAAUM,EAAI,WAAWH,EAAI,CAAC,CAAC,GAAK,EAAIH,EAAUM,EAAI,WAAWH,EAAI,CAAC,CAAC,EAC3JS,EAAIC,GAAS,EAAIF,GAAO,GAAK,IAC7BC,EAAIC,GAAS,EAAIF,GAAO,EAAI,IAC5BC,EAAIC,GAAS,EAAIF,EAAM,IAGzB,OAAIH,IAAoB,IACtBG,EAAMX,EAAUM,EAAI,WAAWH,CAAC,CAAC,GAAK,EAAIH,EAAUM,EAAI,WAAWH,EAAI,CAAC,CAAC,GAAK,EAC9ES,EAAIC,GAAS,EAAIF,EAAM,KAGrBH,IAAoB,IACtBG,EAAMX,EAAUM,EAAI,WAAWH,CAAC,CAAC,GAAK,GAAKH,EAAUM,EAAI,WAAWH,EAAI,CAAC,CAAC,GAAK,EAAIH,EAAUM,EAAI,WAAWH,EAAI,CAAC,CAAC,GAAK,EACvHS,EAAIC,GAAS,EAAIF,GAAO,EAAI,IAC5BC,EAAIC,GAAS,EAAIF,EAAM,KAGlBC,CACT,CAEA,SAASE,EAAgBC,EAAK,CAC5B,OAAOhB,EAAOgB,GAAO,GAAK,EAAE,EAAIhB,EAAOgB,GAAO,GAAK,EAAE,EAAIhB,EAAOgB,GAAO,EAAI,EAAE,EAAIhB,EAAOgB,EAAM,EAAE,CAClG,CAEA,SAASC,EAAYC,EAAOC,EAAOC,EAAK,CAItC,QAHIR,EACAS,EAAS,CAAC,EAELjB,EAAIe,EAAOf,EAAIgB,EAAKhB,GAAK,EAChCQ,GAAOM,EAAMd,CAAC,GAAK,GAAK,WAAac,EAAMd,EAAI,CAAC,GAAK,EAAI,QAAUc,EAAMd,EAAI,CAAC,EAAI,KAClFiB,EAAO,KAAKN,EAAgBH,CAAG,CAAC,EAGlC,OAAOS,EAAO,KAAK,EAAE,CACvB,CAEA,SAAStB,EAAcmB,EAAO,CAS5B,QARIN,EACAP,EAAMa,EAAM,OACZI,EAAajB,EAAM,EAEnBkB,EAAQ,CAAC,EACTC,EAAiB,MAGZpB,EAAI,EAAGqB,EAAOpB,EAAMiB,EAAYlB,EAAIqB,EAAMrB,GAAKoB,EACtDD,EAAM,KAAKN,EAAYC,EAAOd,EAAGA,EAAIoB,EAAiBC,EAAOA,EAAOrB,EAAIoB,CAAc,CAAC,EAIzF,OAAIF,IAAe,GACjBV,EAAMM,EAAMb,EAAM,CAAC,EACnBkB,EAAM,KAAKvB,EAAOY,GAAO,CAAC,EAAIZ,EAAOY,GAAO,EAAI,EAAE,EAAI,IAAI,GACjDU,IAAe,IACxBV,GAAOM,EAAMb,EAAM,CAAC,GAAK,GAAKa,EAAMb,EAAM,CAAC,EAC3CkB,EAAM,KAAKvB,EAAOY,GAAO,EAAE,EAAIZ,EAAOY,GAAO,EAAI,EAAE,EAAIZ,EAAOY,GAAO,EAAI,EAAE,EAAI,GAAG,GAG7EW,EAAM,KAAK,EAAE,CACtB,CAEA,OAAO7B,EACT,CAEA,IAAIgC,GAAY,CAAC,EACbC,GAAa,GACjB,SAASC,IAAQ,CACf,GAAID,GAAY,OAAOD,GACvBC,GAAa,GAGb,OAAAD,GAAU,KAAO,SAAUG,EAAQC,EAAQC,EAAMC,EAAMC,EAAQ,CAC7D,IAAIC,EAAGC,EACHC,EAAOH,EAAS,EAAID,EAAO,EAC3BK,GAAQ,GAAKD,GAAQ,EACrBE,EAAQD,GAAQ,EAChBE,EAAQ,GACRnC,EAAI2B,EAAOE,EAAS,EAAI,EACxBO,EAAIT,EAAO,GAAK,EAChBU,EAAIZ,EAAOC,EAAS1B,CAAC,EAMzB,IALAA,GAAKoC,EACLN,EAAIO,GAAK,GAAK,CAACF,GAAS,EACxBE,IAAM,CAACF,EACPA,GAASH,EAEFG,EAAQ,EAAGL,EAAIA,EAAI,IAAML,EAAOC,EAAS1B,CAAC,EAAGA,GAAKoC,EAAGD,GAAS,EAAG,CAMxE,IAJAJ,EAAID,GAAK,GAAK,CAACK,GAAS,EACxBL,IAAM,CAACK,EACPA,GAASP,EAEFO,EAAQ,EAAGJ,EAAIA,EAAI,IAAMN,EAAOC,EAAS1B,CAAC,EAAGA,GAAKoC,EAAGD,GAAS,EAAG,CAExE,GAAIL,IAAM,EACRA,EAAI,EAAII,MACH,IAAIJ,IAAMG,EACf,OAAOF,EAAI,KAAOM,EAAI,GAAK,GAAK,MAEhCN,EAAIA,EAAI,KAAK,IAAI,EAAGH,CAAI,EACxBE,EAAIA,EAAII,EAGV,OAAQG,EAAI,GAAK,GAAKN,EAAI,KAAK,IAAI,EAAGD,EAAIF,CAAI,CAChD,EAEAN,GAAU,MAAQ,SAAUG,EAAQa,EAAOZ,EAAQC,EAAMC,EAAMC,EAAQ,CACrE,IAAIC,EAAGC,EAAGQ,EACNP,EAAOH,EAAS,EAAID,EAAO,EAC3BK,GAAQ,GAAKD,GAAQ,EACrBE,EAAQD,GAAQ,EAChBO,EAAKZ,IAAS,GAAK,KAAK,IAAI,EAAG,GAAG,EAAI,KAAK,IAAI,EAAG,GAAG,EAAI,EACzD5B,EAAI2B,EAAO,EAAIE,EAAS,EACxBO,EAAIT,EAAO,EAAI,GACfU,EAAIC,EAAQ,GAAKA,IAAU,GAAK,EAAIA,EAAQ,EAAI,EAAI,EAqCxD,IApCAA,EAAQ,KAAK,IAAIA,CAAK,EAElB,MAAMA,CAAK,GAAKA,IAAU,KAC5BP,EAAI,MAAMO,CAAK,EAAI,EAAI,EACvBR,EAAIG,IAEJH,EAAI,KAAK,MAAM,KAAK,IAAIQ,CAAK,EAAI,KAAK,GAAG,EAErCA,GAASC,EAAI,KAAK,IAAI,EAAG,CAACT,CAAC,GAAK,IAClCA,IACAS,GAAK,GAGHT,EAAII,GAAS,EACfI,GAASE,EAAKD,EAEdD,GAASE,EAAK,KAAK,IAAI,EAAG,EAAIN,CAAK,EAGjCI,EAAQC,GAAK,IACfT,IACAS,GAAK,GAGHT,EAAII,GAASD,GACfF,EAAI,EACJD,EAAIG,GACKH,EAAII,GAAS,GACtBH,GAAKO,EAAQC,EAAI,GAAK,KAAK,IAAI,EAAGX,CAAI,EACtCE,EAAIA,EAAII,IAERH,EAAIO,EAAQ,KAAK,IAAI,EAAGJ,EAAQ,CAAC,EAAI,KAAK,IAAI,EAAGN,CAAI,EACrDE,EAAI,IAIDF,GAAQ,EAAGH,EAAOC,EAAS1B,CAAC,EAAI+B,EAAI,IAAK/B,GAAKoC,EAAGL,GAAK,IAAKH,GAAQ,EAAG,CAK7E,IAHAE,EAAIA,GAAKF,EAAOG,EAChBC,GAAQJ,EAEDI,EAAO,EAAGP,EAAOC,EAAS1B,CAAC,EAAI8B,EAAI,IAAK9B,GAAKoC,EAAGN,GAAK,IAAKE,GAAQ,EAAG,CAE5EP,EAAOC,EAAS1B,EAAIoC,CAAC,GAAKC,EAAI,GAChC,EAEOf,EACT,CAEA,IAAImB,GAAY,CAAC,EACbC,GAAW,GACf,SAASC,IAAM,CACb,GAAID,GAAU,OAAOD,GACrBC,GAAW,GAEX,IAAME,EAASpD,GAAM,EAEfqD,EAAUrB,GAAM,EAEhBsB,EAAsB,OAAO,QAAW,YAAc,OAAO,OAAO,KAAW,WAAa,OAAO,IAAO,4BAA4B,EAC1I,KACFL,GAAU,OAASM,EACnBN,GAAU,WAAaO,EACvBP,GAAU,kBAAoB,GAC9B,IAAMQ,EAAe,WACrBR,GAAU,WAAaQ,EAgBvBF,EAAO,oBAAsBG,EAAkB,EAE3C,CAACH,EAAO,qBAAuB,OAAO,QAAY,KAAe,OAAO,QAAQ,OAAU,YAC5F,QAAQ,MAAM,+IAAoJ,EAGpK,SAASG,GAAoB,CAE3B,GAAI,CACF,IAAMzC,EAAM,IAAI,WAAW,CAAC,EACtB0C,EAAQ,CACZ,IAAK,UAAY,CACf,MAAO,GACT,CACF,EACA,cAAO,eAAeA,EAAO,WAAW,SAAS,EACjD,OAAO,eAAe1C,EAAK0C,CAAK,EACzB1C,EAAI,IAAI,IAAM,EACvB,MAAY,CACV,MAAO,EACT,CACF,CAEA,OAAO,eAAesC,EAAO,UAAW,SAAU,CAChD,WAAY,GACZ,IAAK,UAAY,CACf,GAAKA,EAAO,SAAS,IAAI,EACzB,OAAO,KAAK,MACd,CACF,CAAC,EACD,OAAO,eAAeA,EAAO,UAAW,SAAU,CAChD,WAAY,GACZ,IAAK,UAAY,CACf,GAAKA,EAAO,SAAS,IAAI,EACzB,OAAO,KAAK,UACd,CACF,CAAC,EAED,SAASK,EAAaC,EAAQ,CAC5B,GAAIA,EAASJ,EACX,MAAM,IAAI,WAAW,cAAiBI,EAAS,gCAAmC,EAIpF,IAAMC,EAAM,IAAI,WAAWD,CAAM,EACjC,cAAO,eAAeC,EAAKP,EAAO,SAAS,EACpCO,CACT,CAYA,SAASP,EAAOQ,EAAKC,EAAkBH,EAAQ,CAE7C,GAAI,OAAOE,GAAQ,SAAU,CAC3B,GAAI,OAAOC,GAAqB,SAC9B,MAAM,IAAI,UAAU,oEAAsE,EAG5F,OAAOC,EAAYF,CAAG,CACxB,CAEA,OAAOG,EAAKH,EAAKC,EAAkBH,CAAM,CAC3C,CAEAN,EAAO,SAAW,KAElB,SAASW,EAAKpB,EAAOkB,EAAkBH,EAAQ,CAC7C,GAAI,OAAOf,GAAU,SACnB,OAAOqB,EAAWrB,EAAOkB,CAAgB,EAG3C,GAAI,YAAY,OAAOlB,CAAK,EAC1B,OAAOsB,EAActB,CAAK,EAG5B,GAAIA,GAAS,KACX,MAAM,IAAI,UAAU,kHAAyH,OAAOA,CAAK,EAO3J,GAJIuB,GAAWvB,EAAO,WAAW,GAAKA,GAASuB,GAAWvB,EAAM,OAAQ,WAAW,GAI/E,OAAO,kBAAsB,MAAgBuB,GAAWvB,EAAO,iBAAiB,GAAKA,GAASuB,GAAWvB,EAAM,OAAQ,iBAAiB,GAC1I,OAAOwB,EAAgBxB,EAAOkB,EAAkBH,CAAM,EAGxD,GAAI,OAAOf,GAAU,SACnB,MAAM,IAAI,UAAU,uEAAyE,EAG/F,IAAMyB,EAAUzB,EAAM,SAAWA,EAAM,QAAQ,EAE/C,GAAIyB,GAAW,MAAQA,IAAYzB,EACjC,OAAOS,EAAO,KAAKgB,EAASP,EAAkBH,CAAM,EAGtD,IAAMW,EAAIC,EAAW3B,CAAK,EAC1B,GAAI0B,EAAG,OAAOA,EAEd,GAAI,OAAO,OAAW,KAAe,OAAO,aAAe,MAAQ,OAAO1B,EAAM,OAAO,WAAW,GAAM,WACtG,OAAOS,EAAO,KAAKT,EAAM,OAAO,WAAW,EAAE,QAAQ,EAAGkB,EAAkBH,CAAM,EAGlF,MAAM,IAAI,UAAU,kHAAyH,OAAOf,CAAK,CAC3J,CAWAS,EAAO,KAAO,SAAUT,EAAOkB,EAAkBH,EAAQ,CACvD,OAAOK,EAAKpB,EAAOkB,EAAkBH,CAAM,CAC7C,EAIA,OAAO,eAAeN,EAAO,UAAW,WAAW,SAAS,EAC5D,OAAO,eAAeA,EAAQ,UAAU,EAExC,SAASmB,EAAWC,EAAM,CACxB,GAAI,OAAOA,GAAS,SAClB,MAAM,IAAI,UAAU,wCAA0C,EACzD,GAAIA,EAAO,EAChB,MAAM,IAAI,WAAW,cAAiBA,EAAO,gCAAmC,CAEpF,CAEA,SAASC,EAAMD,EAAME,EAAMC,EAAU,CAGnC,OAFAJ,EAAWC,CAAI,EAEXA,GAAQ,EACHf,EAAae,CAAI,EAGtBE,IAAS,OAIJ,OAAOC,GAAa,SAAWlB,EAAae,CAAI,EAAE,KAAKE,EAAMC,CAAQ,EAAIlB,EAAae,CAAI,EAAE,KAAKE,CAAI,EAGvGjB,EAAae,CAAI,CAC1B,CAOApB,EAAO,MAAQ,SAAUoB,EAAME,EAAMC,EAAU,CAC7C,OAAOF,EAAMD,EAAME,EAAMC,CAAQ,CACnC,EAEA,SAASb,EAAYU,EAAM,CACzB,OAAAD,EAAWC,CAAI,EACRf,EAAae,EAAO,EAAI,EAAII,EAAQJ,CAAI,EAAI,CAAC,CACtD,CAMApB,EAAO,YAAc,SAAUoB,EAAM,CACnC,OAAOV,EAAYU,CAAI,CACzB,EAMApB,EAAO,gBAAkB,SAAUoB,EAAM,CACvC,OAAOV,EAAYU,CAAI,CACzB,EAEA,SAASR,EAAWa,EAAQF,EAAU,CAKpC,IAJI,OAAOA,GAAa,UAAYA,IAAa,MAC/CA,EAAW,QAGT,CAACvB,EAAO,WAAWuB,CAAQ,EAC7B,MAAM,IAAI,UAAU,qBAAuBA,CAAQ,EAGrD,IAAMjB,EAAS5D,EAAW+E,EAAQF,CAAQ,EAAI,EAC1ChB,EAAMF,EAAaC,CAAM,EACvBoB,EAASnB,EAAI,MAAMkB,EAAQF,CAAQ,EAEzC,OAAIG,IAAWpB,IAIbC,EAAMA,EAAI,MAAM,EAAGmB,CAAM,GAGpBnB,CACT,CAEA,SAASoB,EAAcC,EAAO,CAC5B,IAAMtB,EAASsB,EAAM,OAAS,EAAI,EAAIJ,EAAQI,EAAM,MAAM,EAAI,EACxDrB,EAAMF,EAAaC,CAAM,EAE/B,QAASrD,EAAI,EAAGA,EAAIqD,EAAQrD,GAAK,EAC/BsD,EAAItD,CAAC,EAAI2E,EAAM3E,CAAC,EAAI,IAGtB,OAAOsD,CACT,CAEA,SAASM,EAAcgB,EAAW,CAChC,GAAIf,GAAWe,EAAW,UAAU,EAAG,CACrC,IAAMC,EAAO,IAAI,WAAWD,CAAS,EACrC,OAAOd,EAAgBe,EAAK,OAAQA,EAAK,WAAYA,EAAK,UAAU,CACtE,CAEA,OAAOH,EAAcE,CAAS,CAChC,CAEA,SAASd,EAAgBa,EAAOG,EAAYzB,EAAQ,CAClD,GAAIyB,EAAa,GAAKH,EAAM,WAAaG,EACvC,MAAM,IAAI,WAAW,sCAAwC,EAG/D,GAAIH,EAAM,WAAaG,GAAczB,GAAU,GAC7C,MAAM,IAAI,WAAW,sCAAwC,EAG/D,IAAIC,EAEJ,OAAIwB,IAAe,QAAazB,IAAW,OACzCC,EAAM,IAAI,WAAWqB,CAAK,EACjBtB,IAAW,OACpBC,EAAM,IAAI,WAAWqB,EAAOG,CAAU,EAEtCxB,EAAM,IAAI,WAAWqB,EAAOG,EAAYzB,CAAM,EAIhD,OAAO,eAAeC,EAAKP,EAAO,SAAS,EACpCO,CACT,CAEA,SAASW,EAAWc,EAAK,CACvB,GAAIhC,EAAO,SAASgC,CAAG,EAAG,CACxB,IAAM9E,EAAMsE,EAAQQ,EAAI,MAAM,EAAI,EAC5BzB,EAAMF,EAAanD,CAAG,EAE5B,OAAIqD,EAAI,SAAW,GAInByB,EAAI,KAAKzB,EAAK,EAAG,EAAGrD,CAAG,EAChBqD,CACT,CAEA,GAAIyB,EAAI,SAAW,OACjB,OAAI,OAAOA,EAAI,QAAW,UAAYC,GAAYD,EAAI,MAAM,EACnD3B,EAAa,CAAC,EAGhBsB,EAAcK,CAAG,EAG1B,GAAIA,EAAI,OAAS,UAAY,MAAM,QAAQA,EAAI,IAAI,EACjD,OAAOL,EAAcK,EAAI,IAAI,CAEjC,CAEA,SAASR,EAAQlB,EAAQ,CAGvB,GAAIA,GAAUJ,EACZ,MAAM,IAAI,WAAW,0DAAiEA,EAAa,SAAS,EAAE,EAAI,QAAQ,EAG5H,OAAOI,EAAS,CAClB,CAEA,SAASL,EAAWK,EAAQ,CAC1B,MAAI,CAACA,GAAUA,IAEbA,EAAS,GAGJN,EAAO,MAAM,CAACM,CAAM,CAC7B,CAEAN,EAAO,SAAW,SAAkBiB,EAAG,CACrC,OAAOA,GAAK,MAAQA,EAAE,YAAc,IAAQA,IAAMjB,EAAO,SAC3D,EAEAA,EAAO,QAAU,SAAiBkC,EAAGjB,EAAG,CAItC,GAHIH,GAAWoB,EAAG,UAAU,IAAGA,EAAIlC,EAAO,KAAKkC,EAAGA,EAAE,OAAQA,EAAE,UAAU,GACpEpB,GAAWG,EAAG,UAAU,IAAGA,EAAIjB,EAAO,KAAKiB,EAAGA,EAAE,OAAQA,EAAE,UAAU,GAEpE,CAACjB,EAAO,SAASkC,CAAC,GAAK,CAAClC,EAAO,SAASiB,CAAC,EAC3C,MAAM,IAAI,UAAU,uEAA2E,EAGjG,GAAIiB,IAAMjB,EAAG,MAAO,GACpB,IAAIkB,EAAID,EAAE,OACNE,EAAInB,EAAE,OAEV,QAAShE,EAAI,EAAGC,EAAM,KAAK,IAAIiF,EAAGC,CAAC,EAAGnF,EAAIC,EAAK,EAAED,EAC/C,GAAIiF,EAAEjF,CAAC,IAAMgE,EAAEhE,CAAC,EAAG,CACjBkF,EAAID,EAAEjF,CAAC,EACPmF,EAAInB,EAAEhE,CAAC,EACP,KACF,CAGF,OAAIkF,EAAIC,EAAU,GACdA,EAAID,EAAU,EACX,CACT,EAEAnC,EAAO,WAAa,SAAoBuB,EAAU,CAChD,OAAQ,OAAOA,CAAQ,EAAE,YAAY,EAAG,CACtC,IAAK,MACL,IAAK,OACL,IAAK,QACL,IAAK,QACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,WACH,MAAO,GAET,QACE,MAAO,EACX,CACF,EAEAvB,EAAO,OAAS,SAAgBqC,EAAM/B,EAAQ,CAC5C,GAAI,CAAC,MAAM,QAAQ+B,CAAI,EACrB,MAAM,IAAI,UAAU,6CAA+C,EAGrE,GAAIA,EAAK,SAAW,EAClB,OAAOrC,EAAO,MAAM,CAAC,EAGvB,IAAI/C,EAEJ,GAAIqD,IAAW,OAGb,IAFAA,EAAS,EAEJrD,EAAI,EAAGA,EAAIoF,EAAK,OAAQ,EAAEpF,EAC7BqD,GAAU+B,EAAKpF,CAAC,EAAE,OAItB,IAAMyB,EAASsB,EAAO,YAAYM,CAAM,EACpCgC,EAAM,EAEV,IAAKrF,EAAI,EAAGA,EAAIoF,EAAK,OAAQ,EAAEpF,EAAG,CAChC,IAAIsD,EAAM8B,EAAKpF,CAAC,EAEhB,GAAI6D,GAAWP,EAAK,UAAU,EACxB+B,EAAM/B,EAAI,OAAS7B,EAAO,QACvBsB,EAAO,SAASO,CAAG,IAAGA,EAAMP,EAAO,KAAKO,CAAG,GAChDA,EAAI,KAAK7B,EAAQ4D,CAAG,GAEpB,WAAW,UAAU,IAAI,KAAK5D,EAAQ6B,EAAK+B,CAAG,UAEtCtC,EAAO,SAASO,CAAG,EAG7BA,EAAI,KAAK7B,EAAQ4D,CAAG,MAFpB,OAAM,IAAI,UAAU,6CAA+C,EAKrEA,GAAO/B,EAAI,MACb,CAEA,OAAO7B,CACT,EAEA,SAAShC,EAAW+E,EAAQF,EAAU,CACpC,GAAIvB,EAAO,SAASyB,CAAM,EACxB,OAAOA,EAAO,OAGhB,GAAI,YAAY,OAAOA,CAAM,GAAKX,GAAWW,EAAQ,WAAW,EAC9D,OAAOA,EAAO,WAGhB,GAAI,OAAOA,GAAW,SACpB,MAAM,IAAI,UAAU,2FAAoG,OAAOA,CAAM,EAGvI,IAAMvE,EAAMuE,EAAO,OACbc,EAAY,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,GAC3D,GAAI,CAACA,GAAarF,IAAQ,EAAG,MAAO,GAEpC,IAAIsF,EAAc,GAElB,OACE,OAAQjB,EAAU,CAChB,IAAK,QACL,IAAK,SACL,IAAK,SACH,OAAOrE,EAET,IAAK,OACL,IAAK,QACH,OAAOuF,GAAYhB,CAAM,EAAE,OAE7B,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,WACH,OAAOvE,EAAM,EAEf,IAAK,MACH,OAAOA,IAAQ,EAEjB,IAAK,SACH,OAAOwF,GAAcjB,CAAM,EAAE,OAE/B,QACE,GAAIe,EACF,OAAOD,EAAY,GAAKE,GAAYhB,CAAM,EAAE,OAG9CF,GAAY,GAAKA,GAAU,YAAY,EACvCiB,EAAc,EAClB,CAEJ,CAEAxC,EAAO,WAAatD,EAEpB,SAASiG,EAAapB,EAAUvD,EAAOC,EAAK,CAC1C,IAAIuE,EAAc,GA6BlB,IAtBIxE,IAAU,QAAaA,EAAQ,KACjCA,EAAQ,GAKNA,EAAQ,KAAK,UAIbC,IAAQ,QAAaA,EAAM,KAAK,UAClCA,EAAM,KAAK,QAGTA,GAAO,KAKXA,KAAS,EACTD,KAAW,EAEPC,GAAOD,GACT,MAAO,GAKT,IAFKuD,IAAUA,EAAW,UAGxB,OAAQA,EAAU,CAChB,IAAK,MACH,OAAOqB,GAAS,KAAM5E,EAAOC,CAAG,EAElC,IAAK,OACL,IAAK,QACH,OAAO4E,GAAU,KAAM7E,EAAOC,CAAG,EAEnC,IAAK,QACH,OAAO6E,GAAW,KAAM9E,EAAOC,CAAG,EAEpC,IAAK,SACL,IAAK,SACH,OAAO8E,GAAY,KAAM/E,EAAOC,CAAG,EAErC,IAAK,SACH,OAAO+E,GAAY,KAAMhF,EAAOC,CAAG,EAErC,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,WACH,OAAOgF,GAAa,KAAMjF,EAAOC,CAAG,EAEtC,QACE,GAAIuE,EAAa,MAAM,IAAI,UAAU,qBAAuBjB,CAAQ,EACpEA,GAAYA,EAAW,IAAI,YAAY,EACvCiB,EAAc,EAClB,CAEJ,CAQAxC,EAAO,UAAU,UAAY,GAE7B,SAASkD,EAAKjC,EAAGkC,EAAGnE,EAAG,CACrB,IAAM/B,EAAIgE,EAAEkC,CAAC,EACblC,EAAEkC,CAAC,EAAIlC,EAAEjC,CAAC,EACViC,EAAEjC,CAAC,EAAI/B,CACT,CAEA+C,EAAO,UAAU,OAAS,UAAkB,CAC1C,IAAM9C,EAAM,KAAK,OAEjB,GAAIA,EAAM,IAAM,EACd,MAAM,IAAI,WAAW,2CAA2C,EAGlE,QAASD,EAAI,EAAGA,EAAIC,EAAKD,GAAK,EAC5BiG,EAAK,KAAMjG,EAAGA,EAAI,CAAC,EAGrB,OAAO,IACT,EAEA+C,EAAO,UAAU,OAAS,UAAkB,CAC1C,IAAM9C,EAAM,KAAK,OAEjB,GAAIA,EAAM,IAAM,EACd,MAAM,IAAI,WAAW,2CAA2C,EAGlE,QAASD,EAAI,EAAGA,EAAIC,EAAKD,GAAK,EAC5BiG,EAAK,KAAMjG,EAAGA,EAAI,CAAC,EACnBiG,EAAK,KAAMjG,EAAI,EAAGA,EAAI,CAAC,EAGzB,OAAO,IACT,EAEA+C,EAAO,UAAU,OAAS,UAAkB,CAC1C,IAAM9C,EAAM,KAAK,OAEjB,GAAIA,EAAM,IAAM,EACd,MAAM,IAAI,WAAW,2CAA2C,EAGlE,QAASD,EAAI,EAAGA,EAAIC,EAAKD,GAAK,EAC5BiG,EAAK,KAAMjG,EAAGA,EAAI,CAAC,EACnBiG,EAAK,KAAMjG,EAAI,EAAGA,EAAI,CAAC,EACvBiG,EAAK,KAAMjG,EAAI,EAAGA,EAAI,CAAC,EACvBiG,EAAK,KAAMjG,EAAI,EAAGA,EAAI,CAAC,EAGzB,OAAO,IACT,EAEA+C,EAAO,UAAU,SAAW,UAAoB,CAC9C,IAAMM,EAAS,KAAK,OACpB,OAAIA,IAAW,EAAU,GACrB,UAAU,SAAW,EAAUuC,GAAU,KAAM,EAAGvC,CAAM,EACrDqC,EAAa,MAAM,KAAM,SAAS,CAC3C,EAEA3C,EAAO,UAAU,eAAiBA,EAAO,UAAU,SAEnDA,EAAO,UAAU,OAAS,SAAgBiB,EAAG,CAC3C,GAAI,CAACjB,EAAO,SAASiB,CAAC,EAAG,MAAM,IAAI,UAAU,2BAA2B,EACxE,OAAI,OAASA,EAAU,GAChBjB,EAAO,QAAQ,KAAMiB,CAAC,IAAM,CACrC,EAEAjB,EAAO,UAAU,QAAU,UAAmB,CAC5C,IAAIoD,EAAM,GACJC,EAAM3D,GAAU,kBACtB,OAAA0D,EAAM,KAAK,SAAS,MAAO,EAAGC,CAAG,EAAE,QAAQ,UAAW,KAAK,EAAE,KAAK,EAC9D,KAAK,OAASA,IAAKD,GAAO,SACvB,WAAaA,EAAM,GAC5B,EAEIrD,IACFC,EAAO,UAAUD,CAAmB,EAAIC,EAAO,UAAU,SAG3DA,EAAO,UAAU,QAAU,SAAiBsD,EAAQtF,EAAOC,EAAKsF,EAAWC,EAAS,CAKlF,GAJI1C,GAAWwC,EAAQ,UAAU,IAC/BA,EAAStD,EAAO,KAAKsD,EAAQA,EAAO,OAAQA,EAAO,UAAU,GAG3D,CAACtD,EAAO,SAASsD,CAAM,EACzB,MAAM,IAAI,UAAU,iFAA0F,OAAOA,CAAM,EAmB7H,GAhBItF,IAAU,SACZA,EAAQ,GAGNC,IAAQ,SACVA,EAAMqF,EAASA,EAAO,OAAS,GAG7BC,IAAc,SAChBA,EAAY,GAGVC,IAAY,SACdA,EAAU,KAAK,QAGbxF,EAAQ,GAAKC,EAAMqF,EAAO,QAAUC,EAAY,GAAKC,EAAU,KAAK,OACtE,MAAM,IAAI,WAAW,oBAAoB,EAG3C,GAAID,GAAaC,GAAWxF,GAASC,EACnC,MAAO,GAGT,GAAIsF,GAAaC,EACf,MAAO,GAGT,GAAIxF,GAASC,EACX,MAAO,GAOT,GAJAD,KAAW,EACXC,KAAS,EACTsF,KAAe,EACfC,KAAa,EACT,OAASF,EAAQ,MAAO,GAC5B,IAAInB,EAAIqB,EAAUD,EACdnB,EAAInE,EAAMD,EACRd,EAAM,KAAK,IAAIiF,EAAGC,CAAC,EACnBqB,EAAW,KAAK,MAAMF,EAAWC,CAAO,EACxCE,EAAaJ,EAAO,MAAMtF,EAAOC,CAAG,EAE1C,QAAShB,EAAI,EAAGA,EAAIC,EAAK,EAAED,EACzB,GAAIwG,EAASxG,CAAC,IAAMyG,EAAWzG,CAAC,EAAG,CACjCkF,EAAIsB,EAASxG,CAAC,EACdmF,EAAIsB,EAAWzG,CAAC,EAChB,KACF,CAGF,OAAIkF,EAAIC,EAAU,GACdA,EAAID,EAAU,EACX,CACT,EAWA,SAASwB,EAAqBjF,EAAQkF,EAAK7B,EAAYR,EAAUsC,EAAK,CAEpE,GAAInF,EAAO,SAAW,EAAG,MAAO,GAqBhC,GAnBI,OAAOqD,GAAe,UACxBR,EAAWQ,EACXA,EAAa,GACJA,EAAa,WACtBA,EAAa,WACJA,EAAa,cACtBA,EAAa,aAGfA,EAAa,CAACA,EAEVE,GAAYF,CAAU,IAExBA,EAAa8B,EAAM,EAAInF,EAAO,OAAS,GAIrCqD,EAAa,IAAGA,EAAarD,EAAO,OAASqD,GAE7CA,GAAcrD,EAAO,OAAQ,CAC/B,GAAImF,EAAK,MAAO,GAAQ9B,EAAarD,EAAO,OAAS,CACvD,SAAWqD,EAAa,EACtB,GAAI8B,EAAK9B,EAAa,MAAO,OAAO,GAStC,GALI,OAAO6B,GAAQ,WACjBA,EAAM5D,EAAO,KAAK4D,EAAKrC,CAAQ,GAI7BvB,EAAO,SAAS4D,CAAG,EAErB,OAAIA,EAAI,SAAW,EACV,GAGFE,EAAapF,EAAQkF,EAAK7B,EAAYR,EAAUsC,CAAG,EACrD,GAAI,OAAOD,GAAQ,SAGxB,OAFAA,EAAMA,EAAM,IAER,OAAO,WAAW,UAAU,SAAY,WACtCC,EACK,WAAW,UAAU,QAAQ,KAAKnF,EAAQkF,EAAK7B,CAAU,EAEzD,WAAW,UAAU,YAAY,KAAKrD,EAAQkF,EAAK7B,CAAU,EAIjE+B,EAAapF,EAAQ,CAACkF,CAAG,EAAG7B,EAAYR,EAAUsC,CAAG,EAG9D,MAAM,IAAI,UAAU,sCAAsC,CAC5D,CAEA,SAASC,EAAapG,EAAKkG,EAAK7B,EAAYR,EAAUsC,EAAK,CACzD,IAAIE,EAAY,EACZC,EAAYtG,EAAI,OAChBuG,EAAYL,EAAI,OAEpB,GAAIrC,IAAa,SACfA,EAAW,OAAOA,CAAQ,EAAE,YAAY,EAEpCA,IAAa,QAAUA,IAAa,SAAWA,IAAa,WAAaA,IAAa,YAAY,CACpG,GAAI7D,EAAI,OAAS,GAAKkG,EAAI,OAAS,EACjC,MAAO,GAGTG,EAAY,EACZC,GAAa,EACbC,GAAa,EACblC,GAAc,CAChB,CAGF,SAASmC,EAAK3D,EAAKtD,EAAG,CACpB,OAAI8G,IAAc,EACTxD,EAAItD,CAAC,EAELsD,EAAI,aAAatD,EAAI8G,CAAS,CAEzC,CAEA,IAAI9G,EAEJ,GAAI4G,EAAK,CACP,IAAIM,EAAa,GAEjB,IAAKlH,EAAI8E,EAAY9E,EAAI+G,EAAW/G,IAClC,GAAIiH,EAAKxG,EAAKT,CAAC,IAAMiH,EAAKN,EAAKO,IAAe,GAAK,EAAIlH,EAAIkH,CAAU,GAEnE,GADIA,IAAe,KAAIA,EAAalH,GAChCA,EAAIkH,EAAa,IAAMF,EAAW,OAAOE,EAAaJ,OAEtDI,IAAe,KAAIlH,GAAKA,EAAIkH,GAChCA,EAAa,EAGnB,KAGE,KAFIpC,EAAakC,EAAYD,IAAWjC,EAAaiC,EAAYC,GAE5DhH,EAAI8E,EAAY9E,GAAK,EAAGA,IAAK,CAChC,IAAImH,EAAQ,GAEZ,QAASC,EAAI,EAAGA,EAAIJ,EAAWI,IAC7B,GAAIH,EAAKxG,EAAKT,EAAIoH,CAAC,IAAMH,EAAKN,EAAKS,CAAC,EAAG,CACrCD,EAAQ,GACR,KACF,CAGF,GAAIA,EAAO,OAAOnH,CACpB,CAGF,MAAO,EACT,CAEA+C,EAAO,UAAU,SAAW,SAAkB4D,EAAK7B,EAAYR,EAAU,CACvE,OAAO,KAAK,QAAQqC,EAAK7B,EAAYR,CAAQ,IAAM,EACrD,EAEAvB,EAAO,UAAU,QAAU,SAAiB4D,EAAK7B,EAAYR,EAAU,CACrE,OAAOoC,EAAqB,KAAMC,EAAK7B,EAAYR,EAAU,EAAI,CACnE,EAEAvB,EAAO,UAAU,YAAc,SAAqB4D,EAAK7B,EAAYR,EAAU,CAC7E,OAAOoC,EAAqB,KAAMC,EAAK7B,EAAYR,EAAU,EAAK,CACpE,EAEA,SAAS+C,GAAS/D,EAAKkB,EAAQ9C,EAAQ2B,EAAQ,CAC7C3B,EAAS,OAAOA,CAAM,GAAK,EAC3B,IAAM4F,EAAYhE,EAAI,OAAS5B,EAE1B2B,GAGHA,EAAS,OAAOA,CAAM,EAElBA,EAASiE,IACXjE,EAASiE,IALXjE,EAASiE,EASX,IAAMC,EAAS/C,EAAO,OAElBnB,EAASkE,EAAS,IACpBlE,EAASkE,EAAS,GAGpB,IAAIvH,EAEJ,IAAKA,EAAI,EAAGA,EAAIqD,EAAQ,EAAErD,EAAG,CAC3B,IAAMwH,EAAS,SAAShD,EAAO,OAAOxE,EAAI,EAAG,CAAC,EAAG,EAAE,EACnD,GAAIgF,GAAYwC,CAAM,EAAG,OAAOxH,EAChCsD,EAAI5B,EAAS1B,CAAC,EAAIwH,CACpB,CAEA,OAAOxH,CACT,CAEA,SAASyH,EAAUnE,EAAKkB,EAAQ9C,EAAQ2B,EAAQ,CAC9C,OAAOqE,GAAWlC,GAAYhB,EAAQlB,EAAI,OAAS5B,CAAM,EAAG4B,EAAK5B,EAAQ2B,CAAM,CACjF,CAEA,SAASsE,GAAWrE,EAAKkB,EAAQ9C,EAAQ2B,EAAQ,CAC/C,OAAOqE,GAAWE,GAAapD,CAAM,EAAGlB,EAAK5B,EAAQ2B,CAAM,CAC7D,CAEA,SAASwE,GAAYvE,EAAKkB,EAAQ9C,EAAQ2B,EAAQ,CAChD,OAAOqE,GAAWjC,GAAcjB,CAAM,EAAGlB,EAAK5B,EAAQ2B,CAAM,CAC9D,CAEA,SAASyE,GAAUxE,EAAKkB,EAAQ9C,EAAQ2B,EAAQ,CAC9C,OAAOqE,GAAWK,GAAevD,EAAQlB,EAAI,OAAS5B,CAAM,EAAG4B,EAAK5B,EAAQ2B,CAAM,CACpF,CAEAN,EAAO,UAAU,MAAQ,SAAeyB,EAAQ9C,EAAQ2B,EAAQiB,EAAU,CAExE,GAAI5C,IAAW,OACb4C,EAAW,OACXjB,EAAS,KAAK,OACd3B,EAAS,UACA2B,IAAW,QAAa,OAAO3B,GAAW,SACnD4C,EAAW5C,EACX2B,EAAS,KAAK,OACd3B,EAAS,UACA,SAASA,CAAM,EACxBA,EAASA,IAAW,EAEhB,SAAS2B,CAAM,GACjBA,EAASA,IAAW,EAChBiB,IAAa,SAAWA,EAAW,UAEvCA,EAAWjB,EACXA,EAAS,YAGX,OAAM,IAAI,MAAM,yEAAyE,EAG3F,IAAMiE,EAAY,KAAK,OAAS5F,EAGhC,IAFI2B,IAAW,QAAaA,EAASiE,KAAWjE,EAASiE,GAErD9C,EAAO,OAAS,IAAMnB,EAAS,GAAK3B,EAAS,IAAMA,EAAS,KAAK,OACnE,MAAM,IAAI,WAAW,wCAAwC,EAG1D4C,IAAUA,EAAW,QAC1B,IAAIiB,EAAc,GAElB,OACE,OAAQjB,EAAU,CAChB,IAAK,MACH,OAAO+C,GAAS,KAAM7C,EAAQ9C,EAAQ2B,CAAM,EAE9C,IAAK,OACL,IAAK,QACH,OAAOoE,EAAU,KAAMjD,EAAQ9C,EAAQ2B,CAAM,EAE/C,IAAK,QACL,IAAK,SACL,IAAK,SACH,OAAOsE,GAAW,KAAMnD,EAAQ9C,EAAQ2B,CAAM,EAEhD,IAAK,SAEH,OAAOwE,GAAY,KAAMrD,EAAQ9C,EAAQ2B,CAAM,EAEjD,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,WACH,OAAOyE,GAAU,KAAMtD,EAAQ9C,EAAQ2B,CAAM,EAE/C,QACE,GAAIkC,EAAa,MAAM,IAAI,UAAU,qBAAuBjB,CAAQ,EACpEA,GAAY,GAAKA,GAAU,YAAY,EACvCiB,EAAc,EAClB,CAEJ,EAEAxC,EAAO,UAAU,OAAS,UAAkB,CAC1C,MAAO,CACL,KAAM,SACN,KAAM,MAAM,UAAU,MAAM,KAAK,KAAK,MAAQ,KAAM,CAAC,CACvD,CACF,EAEA,SAASgD,GAAYzC,EAAKvC,EAAOC,EAAK,CACpC,OAAID,IAAU,GAAKC,IAAQsC,EAAI,OACtBV,EAAO,cAAcU,CAAG,EAExBV,EAAO,cAAcU,EAAI,MAAMvC,EAAOC,CAAG,CAAC,CAErD,CAEA,SAAS4E,GAAUtC,EAAKvC,EAAOC,EAAK,CAClCA,EAAM,KAAK,IAAIsC,EAAI,OAAQtC,CAAG,EAC9B,IAAMgH,EAAM,CAAC,EACThI,EAAIe,EAER,KAAOf,EAAIgB,GAAK,CACd,IAAMiH,EAAY3E,EAAItD,CAAC,EACnBkI,EAAY,KACZC,EAAmBF,EAAY,IAAM,EAAIA,EAAY,IAAM,EAAIA,EAAY,IAAM,EAAI,EAEzF,GAAIjI,EAAImI,GAAoBnH,EAAK,CAC/B,IAAIoH,EAAYC,EAAWC,EAAYC,EAEvC,OAAQJ,EAAkB,CACxB,IAAK,GACCF,EAAY,MACdC,EAAYD,GAGd,MAEF,IAAK,GACHG,EAAa9E,EAAItD,EAAI,CAAC,GAEjBoI,EAAa,OAAS,MACzBG,GAAiBN,EAAY,KAAO,EAAIG,EAAa,GAEjDG,EAAgB,MAClBL,EAAYK,IAIhB,MAEF,IAAK,GACHH,EAAa9E,EAAItD,EAAI,CAAC,EACtBqI,EAAY/E,EAAItD,EAAI,CAAC,GAEhBoI,EAAa,OAAS,MAAQC,EAAY,OAAS,MACtDE,GAAiBN,EAAY,KAAO,IAAMG,EAAa,KAAO,EAAIC,EAAY,GAE1EE,EAAgB,OAASA,EAAgB,OAASA,EAAgB,SACpEL,EAAYK,IAIhB,MAEF,IAAK,GACHH,EAAa9E,EAAItD,EAAI,CAAC,EACtBqI,EAAY/E,EAAItD,EAAI,CAAC,EACrBsI,EAAahF,EAAItD,EAAI,CAAC,GAEjBoI,EAAa,OAAS,MAAQC,EAAY,OAAS,MAAQC,EAAa,OAAS,MACpFC,GAAiBN,EAAY,KAAO,IAAMG,EAAa,KAAO,IAAMC,EAAY,KAAO,EAAIC,EAAa,GAEpGC,EAAgB,OAASA,EAAgB,UAC3CL,EAAYK,GAIpB,CACF,CAEIL,IAAc,MAGhBA,EAAY,MACZC,EAAmB,GACVD,EAAY,QAErBA,GAAa,MACbF,EAAI,KAAKE,IAAc,GAAK,KAAO,KAAK,EACxCA,EAAY,MAAQA,EAAY,MAGlCF,EAAI,KAAKE,CAAS,EAClBlI,GAAKmI,CACP,CAEA,OAAOK,GAAsBR,CAAG,CAClC,CAKA,IAAMS,GAAuB,KAE7B,SAASD,GAAsBE,EAAY,CACzC,IAAMzI,EAAMyI,EAAW,OAEvB,GAAIzI,GAAOwI,GACT,OAAO,OAAO,aAAa,MAAM,OAAQC,CAAU,EAIrD,IAAIV,EAAM,GACNhI,EAAI,EAER,KAAOA,EAAIC,GACT+H,GAAO,OAAO,aAAa,MAAM,OAAQU,EAAW,MAAM1I,EAAGA,GAAKyI,EAAoB,CAAC,EAGzF,OAAOT,CACT,CAEA,SAASnC,GAAWvC,EAAKvC,EAAOC,EAAK,CACnC,IAAI2H,EAAM,GACV3H,EAAM,KAAK,IAAIsC,EAAI,OAAQtC,CAAG,EAE9B,QAAShB,EAAIe,EAAOf,EAAIgB,EAAK,EAAEhB,EAC7B2I,GAAO,OAAO,aAAarF,EAAItD,CAAC,EAAI,GAAG,EAGzC,OAAO2I,CACT,CAEA,SAAS7C,GAAYxC,EAAKvC,EAAOC,EAAK,CACpC,IAAI2H,EAAM,GACV3H,EAAM,KAAK,IAAIsC,EAAI,OAAQtC,CAAG,EAE9B,QAAShB,EAAIe,EAAOf,EAAIgB,EAAK,EAAEhB,EAC7B2I,GAAO,OAAO,aAAarF,EAAItD,CAAC,CAAC,EAGnC,OAAO2I,CACT,CAEA,SAAShD,GAASrC,EAAKvC,EAAOC,EAAK,CACjC,IAAMf,EAAMqD,EAAI,QACZ,CAACvC,GAASA,EAAQ,KAAGA,EAAQ,IAC7B,CAACC,GAAOA,EAAM,GAAKA,EAAMf,KAAKe,EAAMf,GACxC,IAAI2I,EAAM,GAEV,QAAS5I,EAAIe,EAAOf,EAAIgB,EAAK,EAAEhB,EAC7B4I,GAAOC,GAAoBvF,EAAItD,CAAC,CAAC,EAGnC,OAAO4I,CACT,CAEA,SAAS5C,GAAa1C,EAAKvC,EAAOC,EAAK,CACrC,IAAM8H,EAAQxF,EAAI,MAAMvC,EAAOC,CAAG,EAC9BgH,EAAM,GAEV,QAAShI,EAAI,EAAGA,EAAI8I,EAAM,OAAS,EAAG9I,GAAK,EACzCgI,GAAO,OAAO,aAAac,EAAM9I,CAAC,EAAI8I,EAAM9I,EAAI,CAAC,EAAI,GAAG,EAG1D,OAAOgI,CACT,CAEAjF,EAAO,UAAU,MAAQ,SAAehC,EAAOC,EAAK,CAClD,IAAMf,EAAM,KAAK,OACjBc,EAAQ,CAAC,CAACA,EACVC,EAAMA,IAAQ,OAAYf,EAAM,CAAC,CAACe,EAE9BD,EAAQ,GACVA,GAASd,EACLc,EAAQ,IAAGA,EAAQ,IACdA,EAAQd,IACjBc,EAAQd,GAGNe,EAAM,GACRA,GAAOf,EACHe,EAAM,IAAGA,EAAM,IACVA,EAAMf,IACfe,EAAMf,GAGJe,EAAMD,IAAOC,EAAMD,GACvB,IAAMgI,EAAS,KAAK,SAAShI,EAAOC,CAAG,EAEvC,cAAO,eAAe+H,EAAQhG,EAAO,SAAS,EACvCgG,CACT,EAMA,SAASC,EAAYtH,EAAQuH,EAAK5F,EAAQ,CACxC,GAAI3B,EAAS,IAAM,GAAKA,EAAS,EAAG,MAAM,IAAI,WAAW,oBAAoB,EAC7E,GAAIA,EAASuH,EAAM5F,EAAQ,MAAM,IAAI,WAAW,uCAAuC,CACzF,CAEAN,EAAO,UAAU,WAAaA,EAAO,UAAU,WAAa,SAAoBrB,EAAQjC,EAAYyJ,EAAU,CAC5GxH,EAASA,IAAW,EACpBjC,EAAaA,IAAe,EACvByJ,GAAUF,EAAYtH,EAAQjC,EAAY,KAAK,MAAM,EAC1D,IAAIkH,EAAM,KAAKjF,CAAM,EACjByH,EAAM,EACNnJ,EAAI,EAER,KAAO,EAAEA,EAAIP,IAAe0J,GAAO,MACjCxC,GAAO,KAAKjF,EAAS1B,CAAC,EAAImJ,EAG5B,OAAOxC,CACT,EAEA5D,EAAO,UAAU,WAAaA,EAAO,UAAU,WAAa,SAAoBrB,EAAQjC,EAAYyJ,EAAU,CAC5GxH,EAASA,IAAW,EACpBjC,EAAaA,IAAe,EAEvByJ,GACHF,EAAYtH,EAAQjC,EAAY,KAAK,MAAM,EAG7C,IAAIkH,EAAM,KAAKjF,EAAS,EAAEjC,CAAU,EAChC0J,EAAM,EAEV,KAAO1J,EAAa,IAAM0J,GAAO,MAC/BxC,GAAO,KAAKjF,EAAS,EAAEjC,CAAU,EAAI0J,EAGvC,OAAOxC,CACT,EAEA5D,EAAO,UAAU,UAAYA,EAAO,UAAU,UAAY,SAAmBrB,EAAQwH,EAAU,CAC7F,OAAAxH,EAASA,IAAW,EACfwH,GAAUF,EAAYtH,EAAQ,EAAG,KAAK,MAAM,EAC1C,KAAKA,CAAM,CACpB,EAEAqB,EAAO,UAAU,aAAeA,EAAO,UAAU,aAAe,SAAsBrB,EAAQwH,EAAU,CACtG,OAAAxH,EAASA,IAAW,EACfwH,GAAUF,EAAYtH,EAAQ,EAAG,KAAK,MAAM,EAC1C,KAAKA,CAAM,EAAI,KAAKA,EAAS,CAAC,GAAK,CAC5C,EAEAqB,EAAO,UAAU,aAAeA,EAAO,UAAU,aAAe,SAAsBrB,EAAQwH,EAAU,CACtG,OAAAxH,EAASA,IAAW,EACfwH,GAAUF,EAAYtH,EAAQ,EAAG,KAAK,MAAM,EAC1C,KAAKA,CAAM,GAAK,EAAI,KAAKA,EAAS,CAAC,CAC5C,EAEAqB,EAAO,UAAU,aAAeA,EAAO,UAAU,aAAe,SAAsBrB,EAAQwH,EAAU,CACtG,OAAAxH,EAASA,IAAW,EACfwH,GAAUF,EAAYtH,EAAQ,EAAG,KAAK,MAAM,GACzC,KAAKA,CAAM,EAAI,KAAKA,EAAS,CAAC,GAAK,EAAI,KAAKA,EAAS,CAAC,GAAK,IAAM,KAAKA,EAAS,CAAC,EAAI,QAC9F,EAEAqB,EAAO,UAAU,aAAeA,EAAO,UAAU,aAAe,SAAsBrB,EAAQwH,EAAU,CACtG,OAAAxH,EAASA,IAAW,EACfwH,GAAUF,EAAYtH,EAAQ,EAAG,KAAK,MAAM,EAC1C,KAAKA,CAAM,EAAI,UAAY,KAAKA,EAAS,CAAC,GAAK,GAAK,KAAKA,EAAS,CAAC,GAAK,EAAI,KAAKA,EAAS,CAAC,EACpG,EAEAqB,EAAO,UAAU,gBAAkBqG,GAAmB,SAAyB1H,EAAQ,CACrFA,EAASA,IAAW,EACpB2H,GAAe3H,EAAQ,QAAQ,EAC/B,IAAM4H,EAAQ,KAAK5H,CAAM,EACnB6H,EAAO,KAAK7H,EAAS,CAAC,GAExB4H,IAAU,QAAaC,IAAS,SAClCC,GAAY9H,EAAQ,KAAK,OAAS,CAAC,EAGrC,IAAM+H,EAAKH,EAAQ,KAAK,EAAE5H,CAAM,EAAI,GAAK,EAAI,KAAK,EAAEA,CAAM,EAAI,GAAK,GAAK,KAAK,EAAEA,CAAM,EAAI,GAAK,GACxFgI,EAAK,KAAK,EAAEhI,CAAM,EAAI,KAAK,EAAEA,CAAM,EAAI,GAAK,EAAI,KAAK,EAAEA,CAAM,EAAI,GAAK,GAAK6H,EAAO,GAAK,GAC7F,OAAO,OAAOE,CAAE,GAAK,OAAOC,CAAE,GAAK,OAAO,EAAE,EAC9C,CAAC,EACD3G,EAAO,UAAU,gBAAkBqG,GAAmB,SAAyB1H,EAAQ,CACrFA,EAASA,IAAW,EACpB2H,GAAe3H,EAAQ,QAAQ,EAC/B,IAAM4H,EAAQ,KAAK5H,CAAM,EACnB6H,EAAO,KAAK7H,EAAS,CAAC,GAExB4H,IAAU,QAAaC,IAAS,SAClCC,GAAY9H,EAAQ,KAAK,OAAS,CAAC,EAGrC,IAAMgI,EAAKJ,EAAQ,GAAK,GAAK,KAAK,EAAE5H,CAAM,EAAI,GAAK,GAAK,KAAK,EAAEA,CAAM,EAAI,GAAK,EAAI,KAAK,EAAEA,CAAM,EACzF+H,EAAK,KAAK,EAAE/H,CAAM,EAAI,GAAK,GAAK,KAAK,EAAEA,CAAM,EAAI,GAAK,GAAK,KAAK,EAAEA,CAAM,EAAI,GAAK,EAAI6H,EAC3F,OAAQ,OAAOG,CAAE,GAAK,OAAO,EAAE,GAAK,OAAOD,CAAE,CAC/C,CAAC,EAED1G,EAAO,UAAU,UAAY,SAAmBrB,EAAQjC,EAAYyJ,EAAU,CAC5ExH,EAASA,IAAW,EACpBjC,EAAaA,IAAe,EACvByJ,GAAUF,EAAYtH,EAAQjC,EAAY,KAAK,MAAM,EAC1D,IAAIkH,EAAM,KAAKjF,CAAM,EACjByH,EAAM,EACNnJ,EAAI,EAER,KAAO,EAAEA,EAAIP,IAAe0J,GAAO,MACjCxC,GAAO,KAAKjF,EAAS1B,CAAC,EAAImJ,EAG5B,OAAAA,GAAO,IACHxC,GAAOwC,IAAKxC,GAAO,KAAK,IAAI,EAAG,EAAIlH,CAAU,GAC1CkH,CACT,EAEA5D,EAAO,UAAU,UAAY,SAAmBrB,EAAQjC,EAAYyJ,EAAU,CAC5ExH,EAASA,IAAW,EACpBjC,EAAaA,IAAe,EACvByJ,GAAUF,EAAYtH,EAAQjC,EAAY,KAAK,MAAM,EAC1D,IAAIO,EAAIP,EACJ0J,EAAM,EACNxC,EAAM,KAAKjF,EAAS,EAAE1B,CAAC,EAE3B,KAAOA,EAAI,IAAMmJ,GAAO,MACtBxC,GAAO,KAAKjF,EAAS,EAAE1B,CAAC,EAAImJ,EAG9B,OAAAA,GAAO,IACHxC,GAAOwC,IAAKxC,GAAO,KAAK,IAAI,EAAG,EAAIlH,CAAU,GAC1CkH,CACT,EAEA5D,EAAO,UAAU,SAAW,SAAkBrB,EAAQwH,EAAU,CAG9D,OAFAxH,EAASA,IAAW,EACfwH,GAAUF,EAAYtH,EAAQ,EAAG,KAAK,MAAM,EAC3C,KAAKA,CAAM,EAAI,KACb,IAAM,KAAKA,CAAM,EAAI,GAAK,GADA,KAAKA,CAAM,CAE/C,EAEAqB,EAAO,UAAU,YAAc,SAAqBrB,EAAQwH,EAAU,CACpExH,EAASA,IAAW,EACfwH,GAAUF,EAAYtH,EAAQ,EAAG,KAAK,MAAM,EACjD,IAAMiF,EAAM,KAAKjF,CAAM,EAAI,KAAKA,EAAS,CAAC,GAAK,EAC/C,OAAOiF,EAAM,MAAQA,EAAM,WAAaA,CAC1C,EAEA5D,EAAO,UAAU,YAAc,SAAqBrB,EAAQwH,EAAU,CACpExH,EAASA,IAAW,EACfwH,GAAUF,EAAYtH,EAAQ,EAAG,KAAK,MAAM,EACjD,IAAMiF,EAAM,KAAKjF,EAAS,CAAC,EAAI,KAAKA,CAAM,GAAK,EAC/C,OAAOiF,EAAM,MAAQA,EAAM,WAAaA,CAC1C,EAEA5D,EAAO,UAAU,YAAc,SAAqBrB,EAAQwH,EAAU,CACpE,OAAAxH,EAASA,IAAW,EACfwH,GAAUF,EAAYtH,EAAQ,EAAG,KAAK,MAAM,EAC1C,KAAKA,CAAM,EAAI,KAAKA,EAAS,CAAC,GAAK,EAAI,KAAKA,EAAS,CAAC,GAAK,GAAK,KAAKA,EAAS,CAAC,GAAK,EAC7F,EAEAqB,EAAO,UAAU,YAAc,SAAqBrB,EAAQwH,EAAU,CACpE,OAAAxH,EAASA,IAAW,EACfwH,GAAUF,EAAYtH,EAAQ,EAAG,KAAK,MAAM,EAC1C,KAAKA,CAAM,GAAK,GAAK,KAAKA,EAAS,CAAC,GAAK,GAAK,KAAKA,EAAS,CAAC,GAAK,EAAI,KAAKA,EAAS,CAAC,CAC9F,EAEAqB,EAAO,UAAU,eAAiBqG,GAAmB,SAAwB1H,EAAQ,CACnFA,EAASA,IAAW,EACpB2H,GAAe3H,EAAQ,QAAQ,EAC/B,IAAM4H,EAAQ,KAAK5H,CAAM,EACnB6H,EAAO,KAAK7H,EAAS,CAAC,GAExB4H,IAAU,QAAaC,IAAS,SAClCC,GAAY9H,EAAQ,KAAK,OAAS,CAAC,EAGrC,IAAMiF,EAAM,KAAKjF,EAAS,CAAC,EAAI,KAAKA,EAAS,CAAC,EAAI,GAAK,EAAI,KAAKA,EAAS,CAAC,EAAI,GAAK,IAAM6H,GAAQ,IAEjG,OAAQ,OAAO5C,CAAG,GAAK,OAAO,EAAE,GAAK,OAAO2C,EAAQ,KAAK,EAAE5H,CAAM,EAAI,GAAK,EAAI,KAAK,EAAEA,CAAM,EAAI,GAAK,GAAK,KAAK,EAAEA,CAAM,EAAI,GAAK,EAAE,CACnI,CAAC,EACDqB,EAAO,UAAU,eAAiBqG,GAAmB,SAAwB1H,EAAQ,CACnFA,EAASA,IAAW,EACpB2H,GAAe3H,EAAQ,QAAQ,EAC/B,IAAM4H,EAAQ,KAAK5H,CAAM,EACnB6H,EAAO,KAAK7H,EAAS,CAAC,GAExB4H,IAAU,QAAaC,IAAS,SAClCC,GAAY9H,EAAQ,KAAK,OAAS,CAAC,EAGrC,IAAMiF,GAAO2C,GAAS,IACtB,KAAK,EAAE5H,CAAM,EAAI,GAAK,GAAK,KAAK,EAAEA,CAAM,EAAI,GAAK,EAAI,KAAK,EAAEA,CAAM,EAClE,OAAQ,OAAOiF,CAAG,GAAK,OAAO,EAAE,GAAK,OAAO,KAAK,EAAEjF,CAAM,EAAI,GAAK,GAAK,KAAK,EAAEA,CAAM,EAAI,GAAK,GAAK,KAAK,EAAEA,CAAM,EAAI,GAAK,EAAI6H,CAAI,CAClI,CAAC,EAEDxG,EAAO,UAAU,YAAc,SAAqBrB,EAAQwH,EAAU,CACpE,OAAAxH,EAASA,IAAW,EACfwH,GAAUF,EAAYtH,EAAQ,EAAG,KAAK,MAAM,EAC1CmB,EAAQ,KAAK,KAAMnB,EAAQ,GAAM,GAAI,CAAC,CAC/C,EAEAqB,EAAO,UAAU,YAAc,SAAqBrB,EAAQwH,EAAU,CACpE,OAAAxH,EAASA,IAAW,EACfwH,GAAUF,EAAYtH,EAAQ,EAAG,KAAK,MAAM,EAC1CmB,EAAQ,KAAK,KAAMnB,EAAQ,GAAO,GAAI,CAAC,CAChD,EAEAqB,EAAO,UAAU,aAAe,SAAsBrB,EAAQwH,EAAU,CACtE,OAAAxH,EAASA,IAAW,EACfwH,GAAUF,EAAYtH,EAAQ,EAAG,KAAK,MAAM,EAC1CmB,EAAQ,KAAK,KAAMnB,EAAQ,GAAM,GAAI,CAAC,CAC/C,EAEAqB,EAAO,UAAU,aAAe,SAAsBrB,EAAQwH,EAAU,CACtE,OAAAxH,EAASA,IAAW,EACfwH,GAAUF,EAAYtH,EAAQ,EAAG,KAAK,MAAM,EAC1CmB,EAAQ,KAAK,KAAMnB,EAAQ,GAAO,GAAI,CAAC,CAChD,EAEA,SAASiI,EAASrG,EAAKhB,EAAOZ,EAAQuH,EAAK7C,EAAKwD,EAAK,CACnD,GAAI,CAAC7G,EAAO,SAASO,CAAG,EAAG,MAAM,IAAI,UAAU,6CAA+C,EAC9F,GAAIhB,EAAQ8D,GAAO9D,EAAQsH,EAAK,MAAM,IAAI,WAAW,mCAAqC,EAC1F,GAAIlI,EAASuH,EAAM3F,EAAI,OAAQ,MAAM,IAAI,WAAW,oBAAoB,CAC1E,CAEAP,EAAO,UAAU,YAAcA,EAAO,UAAU,YAAc,SAAqBT,EAAOZ,EAAQjC,EAAYyJ,EAAU,CAKtH,GAJA5G,EAAQ,CAACA,EACTZ,EAASA,IAAW,EACpBjC,EAAaA,IAAe,EAExB,CAACyJ,EAAU,CACb,IAAMW,EAAW,KAAK,IAAI,EAAG,EAAIpK,CAAU,EAAI,EAC/CkK,EAAS,KAAMrH,EAAOZ,EAAQjC,EAAYoK,EAAU,CAAC,CACvD,CAEA,IAAIV,EAAM,EACNnJ,EAAI,EAGR,IAFA,KAAK0B,CAAM,EAAIY,EAAQ,IAEhB,EAAEtC,EAAIP,IAAe0J,GAAO,MACjC,KAAKzH,EAAS1B,CAAC,EAAIsC,EAAQ6G,EAAM,IAGnC,OAAOzH,EAASjC,CAClB,EAEAsD,EAAO,UAAU,YAAcA,EAAO,UAAU,YAAc,SAAqBT,EAAOZ,EAAQjC,EAAYyJ,EAAU,CAKtH,GAJA5G,EAAQ,CAACA,EACTZ,EAASA,IAAW,EACpBjC,EAAaA,IAAe,EAExB,CAACyJ,EAAU,CACb,IAAMW,EAAW,KAAK,IAAI,EAAG,EAAIpK,CAAU,EAAI,EAC/CkK,EAAS,KAAMrH,EAAOZ,EAAQjC,EAAYoK,EAAU,CAAC,CACvD,CAEA,IAAI7J,EAAIP,EAAa,EACjB0J,EAAM,EAGV,IAFA,KAAKzH,EAAS1B,CAAC,EAAIsC,EAAQ,IAEpB,EAAEtC,GAAK,IAAMmJ,GAAO,MACzB,KAAKzH,EAAS1B,CAAC,EAAIsC,EAAQ6G,EAAM,IAGnC,OAAOzH,EAASjC,CAClB,EAEAsD,EAAO,UAAU,WAAaA,EAAO,UAAU,WAAa,SAAoBT,EAAOZ,EAAQwH,EAAU,CACvG,OAAA5G,EAAQ,CAACA,EACTZ,EAASA,IAAW,EACfwH,GAAUS,EAAS,KAAMrH,EAAOZ,EAAQ,EAAG,IAAK,CAAC,EACtD,KAAKA,CAAM,EAAIY,EAAQ,IAChBZ,EAAS,CAClB,EAEAqB,EAAO,UAAU,cAAgBA,EAAO,UAAU,cAAgB,SAAuBT,EAAOZ,EAAQwH,EAAU,CAChH,OAAA5G,EAAQ,CAACA,EACTZ,EAASA,IAAW,EACfwH,GAAUS,EAAS,KAAMrH,EAAOZ,EAAQ,EAAG,MAAO,CAAC,EACxD,KAAKA,CAAM,EAAIY,EAAQ,IACvB,KAAKZ,EAAS,CAAC,EAAIY,IAAU,EACtBZ,EAAS,CAClB,EAEAqB,EAAO,UAAU,cAAgBA,EAAO,UAAU,cAAgB,SAAuBT,EAAOZ,EAAQwH,EAAU,CAChH,OAAA5G,EAAQ,CAACA,EACTZ,EAASA,IAAW,EACfwH,GAAUS,EAAS,KAAMrH,EAAOZ,EAAQ,EAAG,MAAO,CAAC,EACxD,KAAKA,CAAM,EAAIY,IAAU,EACzB,KAAKZ,EAAS,CAAC,EAAIY,EAAQ,IACpBZ,EAAS,CAClB,EAEAqB,EAAO,UAAU,cAAgBA,EAAO,UAAU,cAAgB,SAAuBT,EAAOZ,EAAQwH,EAAU,CAChH,OAAA5G,EAAQ,CAACA,EACTZ,EAASA,IAAW,EACfwH,GAAUS,EAAS,KAAMrH,EAAOZ,EAAQ,EAAG,WAAY,CAAC,EAC7D,KAAKA,EAAS,CAAC,EAAIY,IAAU,GAC7B,KAAKZ,EAAS,CAAC,EAAIY,IAAU,GAC7B,KAAKZ,EAAS,CAAC,EAAIY,IAAU,EAC7B,KAAKZ,CAAM,EAAIY,EAAQ,IAChBZ,EAAS,CAClB,EAEAqB,EAAO,UAAU,cAAgBA,EAAO,UAAU,cAAgB,SAAuBT,EAAOZ,EAAQwH,EAAU,CAChH,OAAA5G,EAAQ,CAACA,EACTZ,EAASA,IAAW,EACfwH,GAAUS,EAAS,KAAMrH,EAAOZ,EAAQ,EAAG,WAAY,CAAC,EAC7D,KAAKA,CAAM,EAAIY,IAAU,GACzB,KAAKZ,EAAS,CAAC,EAAIY,IAAU,GAC7B,KAAKZ,EAAS,CAAC,EAAIY,IAAU,EAC7B,KAAKZ,EAAS,CAAC,EAAIY,EAAQ,IACpBZ,EAAS,CAClB,EAEA,SAASoI,GAAexG,EAAKhB,EAAOZ,EAAQkI,EAAKxD,EAAK,CACpD2D,GAAWzH,EAAOsH,EAAKxD,EAAK9C,EAAK5B,EAAQ,CAAC,EAC1C,IAAI+H,EAAK,OAAOnH,EAAQ,OAAO,UAAU,CAAC,EAC1CgB,EAAI5B,GAAQ,EAAI+H,EAChBA,EAAKA,GAAM,EACXnG,EAAI5B,GAAQ,EAAI+H,EAChBA,EAAKA,GAAM,EACXnG,EAAI5B,GAAQ,EAAI+H,EAChBA,EAAKA,GAAM,EACXnG,EAAI5B,GAAQ,EAAI+H,EAChB,IAAIC,EAAK,OAAOpH,GAAS,OAAO,EAAE,EAAI,OAAO,UAAU,CAAC,EACxD,OAAAgB,EAAI5B,GAAQ,EAAIgI,EAChBA,EAAKA,GAAM,EACXpG,EAAI5B,GAAQ,EAAIgI,EAChBA,EAAKA,GAAM,EACXpG,EAAI5B,GAAQ,EAAIgI,EAChBA,EAAKA,GAAM,EACXpG,EAAI5B,GAAQ,EAAIgI,EACThI,CACT,CAEA,SAASsI,GAAe1G,EAAKhB,EAAOZ,EAAQkI,EAAKxD,EAAK,CACpD2D,GAAWzH,EAAOsH,EAAKxD,EAAK9C,EAAK5B,EAAQ,CAAC,EAC1C,IAAI+H,EAAK,OAAOnH,EAAQ,OAAO,UAAU,CAAC,EAC1CgB,EAAI5B,EAAS,CAAC,EAAI+H,EAClBA,EAAKA,GAAM,EACXnG,EAAI5B,EAAS,CAAC,EAAI+H,EAClBA,EAAKA,GAAM,EACXnG,EAAI5B,EAAS,CAAC,EAAI+H,EAClBA,EAAKA,GAAM,EACXnG,EAAI5B,EAAS,CAAC,EAAI+H,EAClB,IAAIC,EAAK,OAAOpH,GAAS,OAAO,EAAE,EAAI,OAAO,UAAU,CAAC,EACxD,OAAAgB,EAAI5B,EAAS,CAAC,EAAIgI,EAClBA,EAAKA,GAAM,EACXpG,EAAI5B,EAAS,CAAC,EAAIgI,EAClBA,EAAKA,GAAM,EACXpG,EAAI5B,EAAS,CAAC,EAAIgI,EAClBA,EAAKA,GAAM,EACXpG,EAAI5B,CAAM,EAAIgI,EACPhI,EAAS,CAClB,CAEAqB,EAAO,UAAU,iBAAmBqG,GAAmB,SAA0B9G,EAAOZ,EAAS,EAAG,CAClG,OAAOoI,GAAe,KAAMxH,EAAOZ,EAAQ,OAAO,CAAC,EAAG,OAAO,oBAAoB,CAAC,CACpF,CAAC,EACDqB,EAAO,UAAU,iBAAmBqG,GAAmB,SAA0B9G,EAAOZ,EAAS,EAAG,CAClG,OAAOsI,GAAe,KAAM1H,EAAOZ,EAAQ,OAAO,CAAC,EAAG,OAAO,oBAAoB,CAAC,CACpF,CAAC,EAEDqB,EAAO,UAAU,WAAa,SAAoBT,EAAOZ,EAAQjC,EAAYyJ,EAAU,CAIrF,GAHA5G,EAAQ,CAACA,EACTZ,EAASA,IAAW,EAEhB,CAACwH,EAAU,CACb,IAAMe,EAAQ,KAAK,IAAI,EAAG,EAAIxK,EAAa,CAAC,EAC5CkK,EAAS,KAAMrH,EAAOZ,EAAQjC,EAAYwK,EAAQ,EAAG,CAACA,CAAK,CAC7D,CAEA,IAAIjK,EAAI,EACJmJ,EAAM,EACNe,EAAM,EAGV,IAFA,KAAKxI,CAAM,EAAIY,EAAQ,IAEhB,EAAEtC,EAAIP,IAAe0J,GAAO,MAC7B7G,EAAQ,GAAK4H,IAAQ,GAAK,KAAKxI,EAAS1B,EAAI,CAAC,IAAM,IACrDkK,EAAM,GAGR,KAAKxI,EAAS1B,CAAC,GAAKsC,EAAQ6G,GAAO,GAAKe,EAAM,IAGhD,OAAOxI,EAASjC,CAClB,EAEAsD,EAAO,UAAU,WAAa,SAAoBT,EAAOZ,EAAQjC,EAAYyJ,EAAU,CAIrF,GAHA5G,EAAQ,CAACA,EACTZ,EAASA,IAAW,EAEhB,CAACwH,EAAU,CACb,IAAMe,EAAQ,KAAK,IAAI,EAAG,EAAIxK,EAAa,CAAC,EAC5CkK,EAAS,KAAMrH,EAAOZ,EAAQjC,EAAYwK,EAAQ,EAAG,CAACA,CAAK,CAC7D,CAEA,IAAIjK,EAAIP,EAAa,EACjB0J,EAAM,EACNe,EAAM,EAGV,IAFA,KAAKxI,EAAS1B,CAAC,EAAIsC,EAAQ,IAEpB,EAAEtC,GAAK,IAAMmJ,GAAO,MACrB7G,EAAQ,GAAK4H,IAAQ,GAAK,KAAKxI,EAAS1B,EAAI,CAAC,IAAM,IACrDkK,EAAM,GAGR,KAAKxI,EAAS1B,CAAC,GAAKsC,EAAQ6G,GAAO,GAAKe,EAAM,IAGhD,OAAOxI,EAASjC,CAClB,EAEAsD,EAAO,UAAU,UAAY,SAAmBT,EAAOZ,EAAQwH,EAAU,CACvE,OAAA5G,EAAQ,CAACA,EACTZ,EAASA,IAAW,EACfwH,GAAUS,EAAS,KAAMrH,EAAOZ,EAAQ,EAAG,IAAK,IAAI,EACrDY,EAAQ,IAAGA,EAAQ,IAAMA,EAAQ,GACrC,KAAKZ,CAAM,EAAIY,EAAQ,IAChBZ,EAAS,CAClB,EAEAqB,EAAO,UAAU,aAAe,SAAsBT,EAAOZ,EAAQwH,EAAU,CAC7E,OAAA5G,EAAQ,CAACA,EACTZ,EAASA,IAAW,EACfwH,GAAUS,EAAS,KAAMrH,EAAOZ,EAAQ,EAAG,MAAO,MAAM,EAC7D,KAAKA,CAAM,EAAIY,EAAQ,IACvB,KAAKZ,EAAS,CAAC,EAAIY,IAAU,EACtBZ,EAAS,CAClB,EAEAqB,EAAO,UAAU,aAAe,SAAsBT,EAAOZ,EAAQwH,EAAU,CAC7E,OAAA5G,EAAQ,CAACA,EACTZ,EAASA,IAAW,EACfwH,GAAUS,EAAS,KAAMrH,EAAOZ,EAAQ,EAAG,MAAO,MAAM,EAC7D,KAAKA,CAAM,EAAIY,IAAU,EACzB,KAAKZ,EAAS,CAAC,EAAIY,EAAQ,IACpBZ,EAAS,CAClB,EAEAqB,EAAO,UAAU,aAAe,SAAsBT,EAAOZ,EAAQwH,EAAU,CAC7E,OAAA5G,EAAQ,CAACA,EACTZ,EAASA,IAAW,EACfwH,GAAUS,EAAS,KAAMrH,EAAOZ,EAAQ,EAAG,WAAY,WAAW,EACvE,KAAKA,CAAM,EAAIY,EAAQ,IACvB,KAAKZ,EAAS,CAAC,EAAIY,IAAU,EAC7B,KAAKZ,EAAS,CAAC,EAAIY,IAAU,GAC7B,KAAKZ,EAAS,CAAC,EAAIY,IAAU,GACtBZ,EAAS,CAClB,EAEAqB,EAAO,UAAU,aAAe,SAAsBT,EAAOZ,EAAQwH,EAAU,CAC7E,OAAA5G,EAAQ,CAACA,EACTZ,EAASA,IAAW,EACfwH,GAAUS,EAAS,KAAMrH,EAAOZ,EAAQ,EAAG,WAAY,WAAW,EACnEY,EAAQ,IAAGA,EAAQ,WAAaA,EAAQ,GAC5C,KAAKZ,CAAM,EAAIY,IAAU,GACzB,KAAKZ,EAAS,CAAC,EAAIY,IAAU,GAC7B,KAAKZ,EAAS,CAAC,EAAIY,IAAU,EAC7B,KAAKZ,EAAS,CAAC,EAAIY,EAAQ,IACpBZ,EAAS,CAClB,EAEAqB,EAAO,UAAU,gBAAkBqG,GAAmB,SAAyB9G,EAAOZ,EAAS,EAAG,CAChG,OAAOoI,GAAe,KAAMxH,EAAOZ,EAAQ,CAAC,OAAO,oBAAoB,EAAG,OAAO,oBAAoB,CAAC,CACxG,CAAC,EACDqB,EAAO,UAAU,gBAAkBqG,GAAmB,SAAyB9G,EAAOZ,EAAS,EAAG,CAChG,OAAOsI,GAAe,KAAM1H,EAAOZ,EAAQ,CAAC,OAAO,oBAAoB,EAAG,OAAO,oBAAoB,CAAC,CACxG,CAAC,EAED,SAASyI,GAAa7G,EAAKhB,EAAOZ,EAAQuH,EAAK7C,EAAKwD,EAAK,CACvD,GAAIlI,EAASuH,EAAM3F,EAAI,OAAQ,MAAM,IAAI,WAAW,oBAAoB,EACxE,GAAI5B,EAAS,EAAG,MAAM,IAAI,WAAW,oBAAoB,CAC3D,CAEA,SAAS0I,GAAW9G,EAAKhB,EAAOZ,EAAQ2I,EAAcnB,EAAU,CAC9D,OAAA5G,EAAQ,CAACA,EACTZ,EAASA,IAAW,EAEfwH,GACHiB,GAAa7G,EAAKhB,EAAOZ,EAAQ,CAAC,EAGpCmB,EAAQ,MAAMS,EAAKhB,EAAOZ,EAAQ2I,EAAc,GAAI,CAAC,EAC9C3I,EAAS,CAClB,CAEAqB,EAAO,UAAU,aAAe,SAAsBT,EAAOZ,EAAQwH,EAAU,CAC7E,OAAOkB,GAAW,KAAM9H,EAAOZ,EAAQ,GAAMwH,CAAQ,CACvD,EAEAnG,EAAO,UAAU,aAAe,SAAsBT,EAAOZ,EAAQwH,EAAU,CAC7E,OAAOkB,GAAW,KAAM9H,EAAOZ,EAAQ,GAAOwH,CAAQ,CACxD,EAEA,SAASoB,GAAYhH,EAAKhB,EAAOZ,EAAQ2I,EAAcnB,EAAU,CAC/D,OAAA5G,EAAQ,CAACA,EACTZ,EAASA,IAAW,EAEfwH,GACHiB,GAAa7G,EAAKhB,EAAOZ,EAAQ,CAAC,EAGpCmB,EAAQ,MAAMS,EAAKhB,EAAOZ,EAAQ2I,EAAc,GAAI,CAAC,EAC9C3I,EAAS,CAClB,CAEAqB,EAAO,UAAU,cAAgB,SAAuBT,EAAOZ,EAAQwH,EAAU,CAC/E,OAAOoB,GAAY,KAAMhI,EAAOZ,EAAQ,GAAMwH,CAAQ,CACxD,EAEAnG,EAAO,UAAU,cAAgB,SAAuBT,EAAOZ,EAAQwH,EAAU,CAC/E,OAAOoB,GAAY,KAAMhI,EAAOZ,EAAQ,GAAOwH,CAAQ,CACzD,EAGAnG,EAAO,UAAU,KAAO,SAAcsD,EAAQkE,EAAaxJ,EAAOC,EAAK,CACrE,GAAI,CAAC+B,EAAO,SAASsD,CAAM,EAAG,MAAM,IAAI,UAAU,6BAA6B,EAQ/E,GAPKtF,IAAOA,EAAQ,GAChB,CAACC,GAAOA,IAAQ,IAAGA,EAAM,KAAK,QAC9BuJ,GAAelE,EAAO,SAAQkE,EAAclE,EAAO,QAClDkE,IAAaA,EAAc,GAC5BvJ,EAAM,GAAKA,EAAMD,IAAOC,EAAMD,GAE9BC,IAAQD,GACRsF,EAAO,SAAW,GAAK,KAAK,SAAW,EAAG,MAAO,GAErD,GAAIkE,EAAc,EAChB,MAAM,IAAI,WAAW,2BAA2B,EAGlD,GAAIxJ,EAAQ,GAAKA,GAAS,KAAK,OAAQ,MAAM,IAAI,WAAW,oBAAoB,EAChF,GAAIC,EAAM,EAAG,MAAM,IAAI,WAAW,yBAAyB,EAEvDA,EAAM,KAAK,SAAQA,EAAM,KAAK,QAE9BqF,EAAO,OAASkE,EAAcvJ,EAAMD,IACtCC,EAAMqF,EAAO,OAASkE,EAAcxJ,GAGtC,IAAMd,EAAMe,EAAMD,EAElB,OAAI,OAASsF,GAAU,OAAO,WAAW,UAAU,YAAe,WAEhE,KAAK,WAAWkE,EAAaxJ,EAAOC,CAAG,EAEvC,WAAW,UAAU,IAAI,KAAKqF,EAAQ,KAAK,SAAStF,EAAOC,CAAG,EAAGuJ,CAAW,EAGvEtK,CACT,EAMA8C,EAAO,UAAU,KAAO,SAAc4D,EAAK5F,EAAOC,EAAKsD,EAAU,CAE/D,GAAI,OAAOqC,GAAQ,SAAU,CAU3B,GATI,OAAO5F,GAAU,UACnBuD,EAAWvD,EACXA,EAAQ,EACRC,EAAM,KAAK,QACF,OAAOA,GAAQ,WACxBsD,EAAWtD,EACXA,EAAM,KAAK,QAGTsD,IAAa,QAAa,OAAOA,GAAa,SAChD,MAAM,IAAI,UAAU,2BAA2B,EAGjD,GAAI,OAAOA,GAAa,UAAY,CAACvB,EAAO,WAAWuB,CAAQ,EAC7D,MAAM,IAAI,UAAU,qBAAuBA,CAAQ,EAGrD,GAAIqC,EAAI,SAAW,EAAG,CACpB,IAAM5G,EAAO4G,EAAI,WAAW,CAAC,GAEzBrC,IAAa,QAAUvE,EAAO,KAAOuE,IAAa,YAEpDqC,EAAM5G,EAEV,CACF,MAAW,OAAO4G,GAAQ,SACxBA,EAAMA,EAAM,IACH,OAAOA,GAAQ,YACxBA,EAAM,OAAOA,CAAG,GAIlB,GAAI5F,EAAQ,GAAK,KAAK,OAASA,GAAS,KAAK,OAASC,EACpD,MAAM,IAAI,WAAW,oBAAoB,EAG3C,GAAIA,GAAOD,EACT,OAAO,KAGTA,EAAQA,IAAU,EAClBC,EAAMA,IAAQ,OAAY,KAAK,OAASA,IAAQ,EAC3C2F,IAAKA,EAAM,GAChB,IAAI3G,EAEJ,GAAI,OAAO2G,GAAQ,SACjB,IAAK3G,EAAIe,EAAOf,EAAIgB,EAAK,EAAEhB,EACzB,KAAKA,CAAC,EAAI2G,MAEP,CACL,IAAMmC,EAAQ/F,EAAO,SAAS4D,CAAG,EAAIA,EAAM5D,EAAO,KAAK4D,EAAKrC,CAAQ,EAC9DrE,EAAM6I,EAAM,OAElB,GAAI7I,IAAQ,EACV,MAAM,IAAI,UAAU,cAAiB0G,EAAM,mCAAsC,EAGnF,IAAK3G,EAAI,EAAGA,EAAIgB,EAAMD,EAAO,EAAEf,EAC7B,KAAKA,EAAIe,CAAK,EAAI+H,EAAM9I,EAAIC,CAAG,CAEnC,CAEA,OAAO,IACT,EAKA,IAAMuK,GAAS,CAAC,EAEhB,SAASC,GAAEC,EAAKC,EAAYC,EAAM,CAChCJ,GAAOE,CAAG,EAAI,cAAwBE,CAAK,CACzC,aAAc,CACZ,MAAM,EACN,OAAO,eAAe,KAAM,UAAW,CACrC,MAAOD,EAAW,MAAM,KAAM,SAAS,EACvC,SAAU,GACV,aAAc,EAChB,CAAC,EAED,KAAK,KAAO,GAAG,KAAK,IAAI,KAAKD,CAAG,IAGhC,KAAK,MAGL,OAAO,KAAK,IACd,CAEA,IAAI,MAAO,CACT,OAAOA,CACT,CAEA,IAAI,KAAKpI,EAAO,CACd,OAAO,eAAe,KAAM,OAAQ,CAClC,aAAc,GACd,WAAY,GACZ,MAAAA,EACA,SAAU,EACZ,CAAC,CACH,CAEA,UAAW,CACT,MAAO,GAAG,KAAK,IAAI,KAAKoI,CAAG,MAAM,KAAK,OAAO,EAC/C,CAEF,CACF,CAEAD,GAAE,2BAA4B,SAAUI,EAAM,CAC5C,OAAIA,EACK,GAAGA,CAAI,+BAGT,gDACT,EAAG,UAAU,EACbJ,GAAE,uBAAwB,SAAUI,EAAMpG,EAAQ,CAChD,MAAO,QAAQoG,CAAI,oDAAoD,OAAOpG,CAAM,EACtF,EAAG,SAAS,EACZgG,GAAE,mBAAoB,SAAUtE,EAAK2E,EAAOC,EAAO,CACjD,IAAIC,EAAM,iBAAiB7E,CAAG,qBAC1B8E,EAAWF,EAEf,OAAI,OAAO,UAAUA,CAAK,GAAK,KAAK,IAAIA,CAAK,EAAI,GAAK,GACpDE,EAAWC,GAAsB,OAAOH,CAAK,CAAC,EACrC,OAAOA,GAAU,WAC1BE,EAAW,OAAOF,CAAK,GAEnBA,EAAQ,OAAO,CAAC,GAAK,OAAO,EAAE,GAAKA,EAAQ,EAAE,OAAO,CAAC,GAAK,OAAO,EAAE,MACrEE,EAAWC,GAAsBD,CAAQ,GAG3CA,GAAY,KAGdD,GAAO,eAAeF,CAAK,cAAcG,CAAQ,GAC1CD,CACT,EAAG,UAAU,EAEb,SAASE,GAAsBvE,EAAK,CAClC,IAAIqB,EAAM,GACNhI,EAAI2G,EAAI,OACN5F,EAAQ4F,EAAI,CAAC,IAAM,IAAM,EAAI,EAEnC,KAAO3G,GAAKe,EAAQ,EAAGf,GAAK,EAC1BgI,EAAM,IAAIrB,EAAI,MAAM3G,EAAI,EAAGA,CAAC,CAAC,GAAGgI,CAAG,GAGrC,MAAO,GAAGrB,EAAI,MAAM,EAAG3G,CAAC,CAAC,GAAGgI,CAAG,EACjC,CAIA,SAASmD,GAAY7H,EAAK5B,EAAQjC,EAAY,CAC5C4J,GAAe3H,EAAQ,QAAQ,GAE3B4B,EAAI5B,CAAM,IAAM,QAAa4B,EAAI5B,EAASjC,CAAU,IAAM,SAC5D+J,GAAY9H,EAAQ4B,EAAI,QAAU7D,EAAa,EAAE,CAErD,CAEA,SAASsK,GAAWzH,EAAOsH,EAAKxD,EAAK9C,EAAK5B,EAAQjC,EAAY,CAC5D,GAAI6C,EAAQ8D,GAAO9D,EAAQsH,EAAK,CAC9B,IAAM1D,EAAI,OAAO0D,GAAQ,SAAW,IAAM,GACtCkB,EAEJ,MAAIrL,EAAa,EACXmK,IAAQ,GAAKA,IAAQ,OAAO,CAAC,EAC/BkB,EAAQ,OAAO5E,CAAC,WAAWA,CAAC,QAAQzG,EAAa,GAAK,CAAC,GAAGyG,CAAC,GAE3D4E,EAAQ,SAAS5E,CAAC,QAAQzG,EAAa,GAAK,EAAI,CAAC,GAAGyG,CAAC,iBAAsBzG,EAAa,GAAK,EAAI,CAAC,GAAGyG,CAAC,GAGxG4E,EAAQ,MAAMlB,CAAG,GAAG1D,CAAC,WAAWE,CAAG,GAAGF,CAAC,GAGnC,IAAIsE,GAAO,iBAAiB,QAASM,EAAOxI,CAAK,CACzD,CAEA6I,GAAY7H,EAAK5B,EAAQjC,CAAU,CACrC,CAEA,SAAS4J,GAAe/G,EAAOuI,EAAM,CACnC,GAAI,OAAOvI,GAAU,SACnB,MAAM,IAAIkI,GAAO,qBAAqBK,EAAM,SAAUvI,CAAK,CAE/D,CAEA,SAASkH,GAAYlH,EAAOe,EAAQ+H,EAAM,CACxC,MAAI,KAAK,MAAM9I,CAAK,IAAMA,GACxB+G,GAAe/G,EAAO8I,CAAI,EACpB,IAAIZ,GAAO,iBAAiBY,GAAQ,SAAU,aAAc9I,CAAK,GAGrEe,EAAS,EACL,IAAImH,GAAO,yBAGb,IAAIA,GAAO,iBAAiBY,GAAQ,SAAU,MAAMA,EAAO,EAAI,CAAC,WAAW/H,CAAM,GAAIf,CAAK,CAClG,CAIA,IAAM+I,GAAoB,oBAE1B,SAASC,GAAYnF,EAAK,CAMxB,GAJAA,EAAMA,EAAI,MAAM,GAAG,EAAE,CAAC,EAEtBA,EAAMA,EAAI,KAAK,EAAE,QAAQkF,GAAmB,EAAE,EAE1ClF,EAAI,OAAS,EAAG,MAAO,GAE3B,KAAOA,EAAI,OAAS,IAAM,GACxBA,EAAMA,EAAM,IAGd,OAAOA,CACT,CAEA,SAASX,GAAYhB,EAAQ+G,EAAO,CAClCA,EAAQA,GAAS,IACjB,IAAIrD,EACE7E,EAASmB,EAAO,OAClBgH,EAAgB,KACd1C,EAAQ,CAAC,EAEf,QAAS9I,EAAI,EAAGA,EAAIqD,EAAQ,EAAErD,EAAG,CAG/B,GAFAkI,EAAY1D,EAAO,WAAWxE,CAAC,EAE3BkI,EAAY,OAASA,EAAY,MAAO,CAE1C,GAAI,CAACsD,EAAe,CAElB,GAAItD,EAAY,MAAO,EAEhBqD,GAAS,GAAK,IAAIzC,EAAM,KAAK,IAAK,IAAK,GAAG,EAC/C,QACF,SAAW9I,EAAI,IAAMqD,EAAQ,EAEtBkI,GAAS,GAAK,IAAIzC,EAAM,KAAK,IAAK,IAAK,GAAG,EAC/C,QACF,CAGA0C,EAAgBtD,EAChB,QACF,CAGA,GAAIA,EAAY,MAAO,EAChBqD,GAAS,GAAK,IAAIzC,EAAM,KAAK,IAAK,IAAK,GAAG,EAC/C0C,EAAgBtD,EAChB,QACF,CAGAA,GAAasD,EAAgB,OAAS,GAAKtD,EAAY,OAAS,KAClE,MAAWsD,IAEJD,GAAS,GAAK,IAAIzC,EAAM,KAAK,IAAK,IAAK,GAAG,EAKjD,GAFA0C,EAAgB,KAEZtD,EAAY,IAAK,CACnB,IAAKqD,GAAS,GAAK,EAAG,MACtBzC,EAAM,KAAKZ,CAAS,CACtB,SAAWA,EAAY,KAAM,CAC3B,IAAKqD,GAAS,GAAK,EAAG,MACtBzC,EAAM,KAAKZ,GAAa,EAAI,IAAKA,EAAY,GAAK,GAAG,CACvD,SAAWA,EAAY,MAAO,CAC5B,IAAKqD,GAAS,GAAK,EAAG,MACtBzC,EAAM,KAAKZ,GAAa,GAAK,IAAKA,GAAa,EAAI,GAAK,IAAKA,EAAY,GAAK,GAAG,CACnF,SAAWA,EAAY,QAAS,CAC9B,IAAKqD,GAAS,GAAK,EAAG,MACtBzC,EAAM,KAAKZ,GAAa,GAAK,IAAKA,GAAa,GAAK,GAAK,IAAKA,GAAa,EAAI,GAAK,IAAKA,EAAY,GAAK,GAAG,CAC/G,KACE,OAAM,IAAI,MAAM,oBAAoB,CAExC,CAEA,OAAOY,CACT,CAEA,SAASlB,GAAazB,EAAK,CACzB,IAAMsF,EAAY,CAAC,EAEnB,QAASzL,EAAI,EAAGA,EAAImG,EAAI,OAAQ,EAAEnG,EAEhCyL,EAAU,KAAKtF,EAAI,WAAWnG,CAAC,EAAI,GAAG,EAGxC,OAAOyL,CACT,CAEA,SAAS1D,GAAe5B,EAAKoF,EAAO,CAClC,IAAIhJ,EAAGmH,EAAID,EACLgC,EAAY,CAAC,EAEnB,QAASzL,EAAI,EAAGA,EAAImG,EAAI,QACjB,GAAAoF,GAAS,GAAK,GADW,EAAEvL,EAEhCuC,EAAI4D,EAAI,WAAWnG,CAAC,EACpB0J,EAAKnH,GAAK,EACVkH,EAAKlH,EAAI,IACTkJ,EAAU,KAAKhC,CAAE,EACjBgC,EAAU,KAAK/B,CAAE,EAGnB,OAAO+B,CACT,CAEA,SAAShG,GAAcU,EAAK,CAC1B,OAAOvD,EAAO,YAAY0I,GAAYnF,CAAG,CAAC,CAC5C,CAEA,SAASuB,GAAWgE,EAAKC,EAAKjK,EAAQ2B,EAAQ,CAC5C,IAAIrD,EAEJ,IAAKA,EAAI,EAAGA,EAAIqD,GACV,EAAArD,EAAI0B,GAAUiK,EAAI,QAAU3L,GAAK0L,EAAI,QADnB,EAAE1L,EAExB2L,EAAI3L,EAAI0B,CAAM,EAAIgK,EAAI1L,CAAC,EAGzB,OAAOA,CACT,CAKA,SAAS6D,GAAWkB,EAAKqG,EAAM,CAC7B,OAAOrG,aAAeqG,GAAQrG,GAAO,MAAQA,EAAI,aAAe,MAAQA,EAAI,YAAY,MAAQ,MAAQA,EAAI,YAAY,OAASqG,EAAK,IACxI,CAEA,SAASpG,GAAYD,EAAK,CAExB,OAAOA,IAAQA,CACjB,CAIA,IAAM8D,GAAsB,UAAY,CACtC,IAAM+C,EAAW,mBACXC,EAAQ,IAAI,MAAM,GAAG,EAE3B,QAAS7L,EAAI,EAAGA,EAAI,GAAI,EAAEA,EAAG,CAC3B,IAAM8L,EAAM9L,EAAI,GAEhB,QAASoH,EAAI,EAAGA,EAAI,GAAI,EAAEA,EACxByE,EAAMC,EAAM1E,CAAC,EAAIwE,EAAS5L,CAAC,EAAI4L,EAASxE,CAAC,CAE7C,CAEA,OAAOyE,CACT,EAAE,EAGF,SAASzC,GAAmB2C,EAAI,CAC9B,OAAO,OAAO,OAAW,IAAcC,GAAyBD,CAClE,CAEA,SAASC,IAAyB,CAChC,MAAM,IAAI,MAAM,sBAAsB,CACxC,CAEA,OAAOvJ,EACT,CAEA,IAAMwJ,GAAUtJ,GAAI,EACpBsJ,GAAQ,OAAWA,GAAQ,WAAeA,GAAQ,kBAAsBA,GAAQ,WAEhF,IAAIlJ,EAASkJ,GAAQ,OACjBC,GAAoBD,GAAQ,kBAC5BE,GAAaF,GAAQ,WCnwElB,IAAMG,GAAmC,CAC9C,WAAY,wCACZ,mBAAoB,CAAC,EACrB,eAAgB,CAAC,EACjB,WAAY,8BACZ,2BAA4B,8CAC5B,kBAAmB,+CACnB,yBAA0B,iDAC1B,YAAa,kCACb,WAAY,CACV,yBAA0B,+CAC1B,yBAA0B,+CAC1B,YAAa,CAAE,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,CAAE,CACxE,EACA,sBAAuB,EACzB,EAMaC,GAAkC,CAC7C,aAAc,sCACd,WAAY,yBACd,EAKaC,GAAkC,CAC7C,IAAK,sCACL,IAAK,0BACL,IAAK,8BACL,KAAM,6BACR,ECpCA,OAAS,OAAAC,OAAW,SCAb,IAAeC,EAAf,cAAoC,KAAM,CAGrC,YAAYC,EAAiBC,EAAkB,CACvD,MAAMA,CAAO,EACb,KAAK,UAAYD,CACnB,CACF,EAEaE,EAAN,cAAuBH,CAAa,CACzC,YAAYE,EAAkB,CAC5B,MAAM,WAAqBA,CAAO,CACpC,CACF,EAEaE,GAAN,cAAiCJ,CAAa,CACnD,YAAYE,EAAkB,CAC5B,MAAM,qBAAgCA,CAAO,CAC/C,CACF,EAEaG,GAAN,cAAmCL,CAAa,CACrD,YAAYE,EAAkB,CAC5B,MAAM,uBAAmCA,CAAO,CAClD,CACF,EAEaI,GAAN,cAA6CN,CAAa,CAC/D,YAAYE,EAAkB,CAC5B,MAAM,iCAA6CA,CAAO,CAC5D,CACF,EAEaK,GAAN,cAA2BP,CAAa,CAC7C,YAAYE,EAAkB,CAC5B,MAAM,eAAyBA,CAAO,CACxC,CACF,EAEaM,GAAN,cAA8CR,CAAa,CAChE,YAAYE,EAAkB,CAC5B,MAAM,kCAAgDA,CAAO,CAC/D,CACF,EAEaO,GAAN,cAA0CT,CAAa,CAC5D,YAAYE,EAAkB,CAC5B,MAAM,8BAA0CA,CAAO,CACzD,CACF,EAEaQ,GAAN,cAAsCV,CAAa,CACxD,YAAYE,EAAkB,CAC5B,MAAM,0BAAsCA,CAAO,CACrD,CACF,EAEaS,GAAN,cAA4BX,CAAa,CAC9C,YAAYE,EAAkB,CAC5B,MAAM,gBAA2BA,CAAO,CAC1C,CACF,EAEaU,GAAN,cAA6BZ,CAAa,CAC/C,YAAYE,EAAkB,CAC5B,MAAM,iBAA4BA,CAAO,CAC3C,CACF,EAEaW,GAAN,cAA4Cb,CAAa,CAC9D,YAAYE,EAAkB,CAC5B,MAAM,gCAA8CA,CAAO,CAC7D,CACF,EAEaY,GAAN,cAA2Cd,CAAa,CAC7D,YAAYe,EAAiBC,EAAoBC,EAA0B,CACzE,MACE,+BACA,aAAaF,CAAO,eAAeC,CAAU,6BAA6BC,CAAgB,GAC5F,CACF,CACF,EAEaC,GAAN,cAA2BlB,CAAa,CAC7C,YAAYE,EAAkB,CAC5B,MAAM,eAAyBA,CAAO,CACxC,CACF,EAEaiB,GAAN,cAA4CnB,CAAa,CAC9D,YAAYoB,EAAqB,CAC/B,MAAM,gCAA8C,cAAcA,CAAW,gCAAgC,CAC/G,CACF,EAEaC,GAAN,cAAwCrB,CAAa,CAC1D,YAAYE,EAAkB,CAC5B,MAAM,4BAAyCA,CAAO,CACxD,CACF,EAEaoB,GAAN,cAA8BtB,CAAa,CAChD,aAAc,CACZ,MACE,kBACA,iHACF,CACF,CACF,EAEYuB,QACVA,EAAA,UAAY,WACZA,EAAA,qBAAuB,qBACvBA,EAAA,wBAA0B,uBAC1BA,EAAA,kCAAoC,iCACpCA,EAAA,cAAgB,eAChBA,EAAA,qCAAuC,kCACvCA,EAAA,+BAAiC,8BACjCA,EAAA,2BAA6B,0BAC7BA,EAAA,gBAAkB,gBAClBA,EAAA,iBAAmB,iBACnBA,EAAA,mCAAqC,gCACrCA,EAAA,gCAAkC,+BAClCA,EAAA,cAAgB,eAChBA,EAAA,mCAAqC,gCACrCA,EAAA,8BAAgC,4BAChCA,EAAA,aAAe,kBAhBLA,QAAA,IC/GL,IAAKC,QAIVA,EAAA,IAAM,MAKNA,EAAA,IAAM,MAKNA,EAAA,IAAM,MAKNA,EAAA,IAAM,MAKNA,EAAA,IAAM,MAKNA,EAAA,IAAM,MAKNA,EAAA,IAAM,MAKNA,EAAA,IAAM,MAKNA,EAAA,IAAM,MAKNA,EAAA,IAAM,MAKNA,EAAA,KAAO,OAKPA,EAAA,IAAM,MA3DIA,QAAA,IA8DAC,QACVA,EAAA,IAAM,MACNA,EAAA,OAAS,SACTA,EAAA,IAAM,MACNA,EAAA,IAAM,MAJIA,QAAA,ICvDZ,IAAMC,GAAiD,CACrD,IAAK,GACL,OAAQ,EACR,IAAK,EACL,IAAK,CACP,EAEMC,GAA0D,CAC7D,IAAkB,CACjB,kBACA,QAAS,OACT,KAAM,YACN,eACF,EACC,IAAkB,CACjB,kBACA,QAAS,MACT,KAAM,WACN,eACF,EACC,IAAkB,CACjB,kBACA,QAAS,SACT,KAAM,OACN,eACF,EACC,IAAkB,CACjB,kBACA,QAAS,SACT,KAAM,WACN,eACF,EACC,IAAkB,CACjB,kBACA,QAAS,SACT,KAAM,YACN,eACF,EACC,IAAkB,CACjB,kBACA,QAAS,SACT,KAAM,OACN,eACF,EACC,IAAkB,CACjB,kBACA,QAAS,OACT,KAAM,UACN,eACF,EACC,IAAkB,CACjB,kBACA,QAAS,MACT,KAAM,aACN,eACF,EACC,IAAkB,CACjB,kBACA,KAAM,SACN,kBACF,EACC,IAAkB,CACjB,kBACA,KAAM,OACN,eACF,EACC,IAAkB,CACjB,kBACA,KAAM,UACN,eACF,EACC,KAAmB,CAClB,mBACA,KAAM,UACN,eACF,CACF,EAEaC,GAAU,IAAM,CAC3B,IAAIC,EAAwD,CAAE,GAAGF,EAAkB,EAEnF,MAAO,CACL,oBAAoBG,EAA6D,CAC/ED,EAAkB,CAAE,GAAGA,EAAiB,GAAGC,CAAqB,CAClE,EAEA,iBAAiBC,EAA2C,CAC1D,IAAMC,EAAWH,EAAgBE,CAAW,EAC5C,GAAI,CAACC,EACH,MAAM,IAAIC,EAAS,oCAAoCF,CAAW,EAAE,EAEtE,OAAOC,CACT,EAEA,qBAA4D,CAC1D,OAAOH,CACT,EAEA,uBAAuBK,EAA8B,CACnD,OAAOR,GAAoBQ,CAAS,CACtC,CACF,CACF,GAAG,EC7GH,OAAOC,OAAsB,QCAtB,IAAMC,GAAU,iBCAvB,OAAS,OAAAC,MAAsB,SAC/B,OAAOC,OAAQ,QAKR,SAASC,GAAcC,EAAkBC,EAA2B,CACzE,OAAOC,EAAI,GAAG,EAAE,MAAMA,EAAI,GAAG,EAAE,MAAMD,CAAM,EAAE,IAAID,CAAK,CAAC,EAAE,SAAS,CACpE,CAEO,SAASG,GAAkBC,EAAmBC,EAAuB,CAC1E,OAAOC,GAAuBF,EAAQC,EAAU,CAAgB,EAAE,MAAM,EAAGH,EAAI,SAAS,CAC1F,CAEO,SAASK,GAAoBH,EAAmBC,EAAuB,CAC5E,OAAOC,GAAuBF,EAAQ,EAAkBC,CAAQ,CAClE,CAEO,SAASC,GAAuBF,EAAmBI,EAAsBC,EAAyB,CACvG,IAAMC,EAAMR,EAAIO,CAAU,EAAE,MAAMD,CAAY,EAAE,SAAS,EACzD,OAAON,EAAIE,CAAM,EAAE,MAAMO,GAAYD,CAAG,CAAC,CAC3C,CAEO,SAASC,GAAYN,EAAuB,CACjD,OAAOH,EAAI,EAAE,EAAE,IAAIG,CAAQ,CAC7B,CAEO,SAASO,EAAwBC,EAAwBR,EAAuB,CACrF,OAAOH,EAAIW,CAAW,EAAE,MAAMF,GAAYN,CAAQ,CAAC,CACrD,CAEO,SAASS,EAAwBC,EAAsBV,EAAuB,CACnF,IAAMW,EAAcd,EAAIa,CAAS,EACjC,OAAIC,EAAY,GAAG,CAAC,EACXd,EAAI,CAAC,EAEPA,EAAIc,CAAW,EAAE,IAAIL,GAAYN,CAAQ,CAAC,CACnD,CAEO,SAASY,GAA2BC,EAAkE,CAC3G,OAAOJ,EAAwBZ,EAAIgB,EAAS,YAAY,EAAE,MAAMA,EAAS,WAAW,EAAE,QAAQ,EAAG,CAAgB,EAC9G,IAAI,CAAC,EACL,QAAQ,CACb,CAEO,SAASC,GACdf,EACA,CAAE,SAAAgB,EAAU,SAAAf,CAAS,EACrBa,EACQ,CACR,IAAMF,EAAcd,EAAIE,CAAM,EAC9B,GAAIY,EAAY,IAAI,CAAC,EACnB,MAAO,IAET,IAAMK,EAAML,EAAY,MAAMI,CAAQ,EAChCE,EAAmBN,EAAY,MAAMK,CAAG,EACxCE,EAAoBpB,GAAkBmB,EAAkBjB,CAAQ,EAChEmB,EAAetB,EAAIgB,EAAS,YAAY,EAAE,KAAKK,CAAiB,EAChEE,EAAgBC,GAAKF,EAAcN,EAAS,OAAQA,EAAS,MAAM,EACzE,OAAOhB,EAAIgB,EAAS,WAAW,EAAE,MAAMO,CAAa,EAAE,MAAM,EAAGvB,EAAI,SAAS,EAAE,QAAQ,CACxF,CAEO,SAASyB,GACdvB,EACA,CAAE,SAAAgB,EAAU,SAAAf,CAAS,EACrBa,EACQ,CACR,IAAMF,EAAcd,EAAIE,CAAM,EAC9B,GAAIY,EAAY,IAAI,CAAC,EACnB,OAAOd,EAAI,CAAC,EAAE,QAAQ,EAExB,IAAM0B,EAAcZ,EAAY,KAAKE,EAAS,WAAW,EACnDW,EAAYH,GAAKE,EAAaV,EAAS,OAAQA,EAAS,MAAM,EAC9DY,EAASvB,GAAoBL,EAAIgB,EAAS,YAAY,EAAE,MAAMW,CAAS,EAAGxB,CAAQ,EAClFgB,EAAMnB,EAAI4B,CAAM,EAAE,MAAMV,CAAQ,EACtC,OAAOlB,EAAI4B,CAAM,EAAE,MAAMT,CAAG,EAAE,MAAM,EAAGnB,EAAI,SAAS,EAAE,QAAQ,CAChE,CAEO,SAAS6B,GACdC,EACAd,EACsE,CACtE,IAAMF,EAAcd,EAAI8B,CAAU,EAClC,GAAIhB,EAAY,IAAI,CAAC,EACnB,OAAOE,EAET,IAAMU,EAAcZ,EAAY,KAAKE,EAAS,WAAW,EACnDW,EAAYH,GAAKE,EAAaV,EAAS,OAAQA,EAAS,MAAM,EACpE,MAAO,CACL,OAAQA,EAAS,OACjB,OAAQA,EAAS,OACjB,aAAcW,EAAU,QAAQ,CAAC,EACjC,YAAaD,EAAY,QAAQ,CAAC,CACpC,CACF,CAQO,SAASK,GACd7B,EACA,CAAE,SAAAgB,EAAU,SAAAf,CAAS,EACrBa,EACK,CACL,GAAIhB,EAAIE,CAAM,EAAE,IAAI,CAAC,EACnB,OAAOF,EAAI,CAAC,EAEd,IAAMuB,EAAgBvB,EAAIgB,EAAS,WAAW,EAAE,MAAMd,CAAM,EAC5D,GAAIqB,EAAc,IAAI,CAAC,EACrB,MAAM,IAAIS,GAEZ,IAAMV,EAAeE,GAAKD,EAAeP,EAAS,OAAQA,EAAS,MAAM,EACnEK,EAAoBrB,EAAIsB,CAAY,EAAE,MAAMN,EAAS,YAAY,EACjEI,EAAmBf,GAAoBgB,EAAmBlB,CAAQ,EAClE8B,EAAmBjC,EAAIkB,CAAQ,EAAE,IAAIlB,EAAI,CAAC,EAAE,MAAMkB,CAAQ,CAAC,EAC3DC,EAAMnB,EAAIoB,CAAgB,EAAE,MAAMa,CAAgB,EAAE,MAAM,EAAGjC,EAAI,OAAO,EAC9E,OAAOA,EAAIoB,CAAgB,EAAE,KAAKD,CAAG,EAAE,MAAM,EAAGnB,EAAI,SAAS,CAC/D,CAQO,SAASkC,GACdhC,EACA,CAAE,SAAAgB,EAAU,SAAAf,CAAS,EACrBa,EACK,CACL,GAAIhB,EAAIE,CAAM,EAAE,IAAI,CAAC,EACnB,OAAOF,EAAI,CAAC,EAEd,IAAMiC,EAAmBjC,EAAIkB,CAAQ,EAAE,IAAIlB,EAAI,CAAC,EAAE,MAAMkB,CAAQ,CAAC,EAC3DC,EAAMnB,EAAIE,CAAM,EAAE,MAAM+B,CAAgB,EAAE,MAAM,EAAGjC,EAAI,OAAO,EAC9DmC,EAAgBnC,EAAIE,CAAM,EAAE,KAAKiB,CAAG,EACpCE,EAAoBpB,GAAkBkC,EAAehC,CAAQ,EAC7DmB,EAAetB,EAAIgB,EAAS,YAAY,EAAE,MAAMK,CAAiB,EACvE,GAAIC,EAAa,IAAI,CAAC,EACpB,MAAM,IAAIU,GAEZ,IAAMT,EAAgBC,GAAKF,EAAcN,EAAS,OAAQA,EAAS,MAAM,EACzE,OAAOhB,EAAIuB,CAAa,EAAE,MAAMP,EAAS,WAAW,EAAE,MAAM,EAAGhB,EAAI,SAAS,CAC9E,CAMO,SAASwB,GAAKY,EAAcC,EAAcC,EAAmB,CAClE,IAAMC,EAAgBvC,EAAI,CAAC,EAAE,MAAMqC,CAAC,EAAE,MAAMrC,EAAIsC,CAAC,EAAE,MAAMF,CAAC,CAAC,EAAE,MAAME,CAAC,EAC9DE,EAASxC,EAAIsC,CAAC,EAAE,IAAI,CAAC,EACrBG,EAAoBF,EAAc,IAAI,CAAC,EACvCG,EAAU1C,EAAIoC,CAAC,EAClB,MAAMpC,EAAIoC,CAAC,EAAE,MAAMK,CAAiB,EAAE,KAAKzC,EAAI,CAAC,EAAE,MAAMqC,CAAC,EAAE,MAAMG,CAAM,CAAC,CAAC,EACzE,KAAK,EACL,MAAM,EAAGxC,EAAI,SAAS,EACnB2C,EAAa3C,EAAI,CAAC,EAAE,MAAMqC,CAAC,EAAE,MAAMD,CAAC,EACpCR,EAASW,EAAc,MAAMH,CAAC,EAAE,KAAKM,CAAO,EAAE,IAAIC,CAAU,EAAE,MAAM,EAAG3C,EAAI,SAAS,EAC1F,OAAI4B,EAAO,GAAG,CAAC,EACN5B,EAAI,CAAC,EAEP4B,EAAO,KAAK,CAAC,CACtB,CAEO,SAASgB,GAAUC,EAAsBC,EAAwBC,EAA4BC,EAAmB,CACrH,IAAMC,EAAiB,IAAIC,GAAGL,CAAY,EACpCM,EAAuB,IAAID,GAAGH,CAAkB,EAChDK,EAAmB,IAAIF,GAAGJ,CAAc,EAE9C,OADgBG,EAAe,IAAIE,CAAoB,EAAE,KAAKH,CAAC,EAChD,IAAII,CAAgB,EAAE,SAAS,CAChD,CAEO,SAASC,GAAcC,EAAqB,CACjD,OAAOtD,EAAIsD,CAAG,EAAE,GAAG,CAAC,EAAI,GAAG,OAAOtD,EAAIsD,CAAG,EAAE,MAAM,GAAG,EAAE,QAAQ,CAAC,CAAC,EAAE,eAAe,CAAC,IAAM,KAC1F,CAMO,SAASC,GAAKC,EAAgBpB,EAAWqB,EAAmB,CACjE,IAAMC,EAAK1D,EAAIoC,CAAC,EAAE,MAAMqB,CAAC,EACnBE,EAAS3D,EAAIoC,CAAC,EAAE,KAAKqB,CAAC,EACtBpB,EAAIrC,EAAI,CAAC,EAAE,MAAMwD,CAAM,EAAE,MAAME,CAAE,EAAE,MAAMC,CAAM,EAC/CC,EAAIF,EAAG,MAAM1D,EAAI,EAAE,EAAE,MAAMwD,CAAM,EAAE,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,EAClDK,EAAWxB,EAAE,MAAMA,CAAC,EACpByB,EAASF,EAAE,MAAMA,CAAC,EAAE,MAAMA,CAAC,EAC3BG,EAAOF,EAAS,KAAKC,CAAM,EAC3BE,EAAIhE,EAAI+D,CAAI,EAAE,KAAK,EACnBE,EAAajE,EAAI,KAAK,KAAK,CAACqC,EAAE,KAAK2B,CAAC,EAAE,QAAQ,CAAC,CAAC,EAChDE,EAAclE,EAAI,KAAK,KAAK,CAACqC,EAAE,MAAM2B,CAAC,EAAE,QAAQ,CAAC,CAAC,EACxD,OAAOC,EAAW,KAAKC,CAAW,EAAE,QAAQ,CAC9C,CCtLO,IAAKC,QACVA,EAAA,GAAK,KACLA,EAAA,QAAU,UACVA,EAAA,UAAY,YACZA,EAAA,cAAgB,gBAChBA,EAAA,iBAAmB,mBACnBA,EAAA,+BAAiC,iCANvBA,QAAA,IAuDL,IAAKC,QACVA,IAAA,UAAY,GAAZ,YACAA,IAAA,SAAW,GAAX,WACAA,IAAA,KAAO,GAAP,OAHUA,QAAA,IC5CL,SAASC,GAAyCC,EAA0D,CACjH,OAAO,OAAO,QAAQA,CAAQ,EAAE,OAAiC,CAACC,EAAKC,IAAU,CAC/E,IAAMC,EAAcD,EAAM,CAAC,EACrBE,EAAkBF,EAAM,CAAC,EACzBG,EAAeC,GAAuBH,EAAaC,CAAe,EACxE,OAAIC,IACFJ,EAAIE,CAAW,EAAIE,GAEdJ,CACT,EAAG,CAAC,CAAC,CACP,CAEO,SAASM,GAAqCP,EAA6C,CAChG,IAAMQ,EAA2B,CAAC,EAClC,OAAW,CAACC,EAAkBL,CAAe,IAAK,OAAO,QAAQJ,CAAQ,EAAG,CAC1E,IAAMG,EAAcM,EACpB,QAAWC,KAASN,EAAgB,OAAQ,CAC1C,IAAMO,EAAUC,GAA0B,CACxC,YAAAT,EACA,YAAaO,EAAM,WACrB,CAAC,EACKG,EAAYC,GAA2BJ,EAAM,QAAQ,EAC3DF,EAAYG,CAAO,EAAI,CAAE,GAAGD,EAAM,SAAU,UAAAG,CAAU,CACxD,CACF,CACA,OAAOL,CACT,CAEA,SAASO,GAAgCV,EAA4BW,EAA+C,CAClH,GAAM,CAAE,KAAMC,EAAW,GAAGC,CAAwB,EAAIb,EAClD,CAAE,SAAUc,EAAW,GAAGC,CAAmB,EAAIJ,EACvD,MAAO,CACL,GAAGI,EACH,GAAGF,EACH,UAAAD,CACF,CACF,CAEA,SAASI,GAA8BL,EAAwC,CAC7E,OAAQA,EAAK,CACX,gBACE,SACF,eACE,SACF,WACE,SACF,QACE,OAAO,IACX,CACF,CAEA,SAASM,GAAuBN,EAAoC,CAClE,OAAO,OAAO,QAAQA,CAAG,EAAE,OAAqB,CAACO,EAAQ,CAACC,EAAKC,CAAK,KAClEF,EAAOC,CAAkB,EAAIE,GAAgCD,CAAK,EAC3DF,GACN,CAAC,CAAC,CACP,CAEA,SAASG,GAAgCV,EAAsD,CAC7F,OAAO,OAAO,QAAQA,CAAG,EAAE,OAA8B,CAACW,EAAuB,CAACH,EAAKC,CAAK,IAAM,CAChG,IAAMG,EAAYP,GAA8BG,CAAsB,EACtE,OAAII,IACFD,EAAsBC,CAAS,EAAIH,GAE9BE,CACT,EAAG,CAAC,CAAC,CACP,CAEA,SAASrB,GAAuBH,EAAqBa,EAA8D,CACjH,IAAMa,EAAuBC,EAAO,oBAAoB,EAAE3B,CAAW,EAErE,GAAI,CAAC0B,EACH,OAAO,KAET,IAAMxB,EAA6B,CACjC,GAAGwB,EACH,iBAAkBb,EAAI,QACtB,cAAeA,EAAI,cACnB,aAAcM,GAAuBN,EAAI,YAAY,EACrD,aAAcA,EAAI,aAClB,cAAeA,EAAI,aACrB,EACA,MAAO,CACL,GAAGX,EACH,OAAQW,EAAI,OAAO,IAAKe,GAAahB,GAAgCV,EAAc0B,CAAQ,CAAC,CAC9F,CACF,CAUO,SAASC,GAA0BC,EAAsC,CAC9E,OAAOA,EAAc,YAAc,IAAMA,EAAc,WACzD,CAEO,SAASC,GAAmCC,EAAmD,CACpG,IAAMC,EAAS,CAAC,EAChB,OAAW,CAACC,EAAkBC,CAAY,IAAK,OAAO,QAAQH,CAAe,EAAG,CAC9E,IAAMI,EAAcF,EACpB,QAAWG,KAASF,EAAa,OAC/BF,EAAO,KAAK,CACV,YAAAG,EACA,YAAaC,EAAM,WACrB,CAAC,CAEL,CACA,OAAOJ,CACT,CAEO,SAASK,GAAiCC,EAA6C,CAC5F,IAAMC,EAA2B,CAAC,EAClC,OAAW,CAACN,EAAkBO,CAAiB,IAAK,OAAO,QAAQF,CAAY,EAAG,CAChF,IAAMH,EAAcF,EACpB,OAAW,CAACQ,EAAaC,CAAQ,IAAK,OAAO,QAAQF,CAAiB,EACpEE,EAAS,UAAYC,GAA2BD,CAAQ,EACxDH,EAAYX,GAA0B,CAAE,YAAAO,EAAa,YAAAM,CAAY,CAAC,CAAC,EAAIC,CAE3E,CACA,OAAOH,CACT,CJ/GO,IAAMK,GAAN,KAAyC,CAG9C,YAAYC,EAAmC,CAC7C,KAAK,IAAMC,GAAM,OAAO,CACtB,QAASD,EAAO,WAChB,QAAS,CACP,OAAQ,mBACR,GAAGA,EAAO,eACV,cAAe,oBAAsBE,EACvC,EACA,OAAQF,EAAO,kBACjB,CAAC,CACH,CAEA,MAAM,cAAmC,CACvC,GAAM,CAAE,KAAAG,CAAK,EAAI,MAAM,KAAK,IAAI,IAA0B,cAAe,CAAE,OAAQ,CAAE,OAAQ,KAAM,CAAE,CAAC,EACtG,MAAO,CACL,gBAAiBC,GAAyCD,CAAI,EAC9D,YAAaE,GAAqCF,CAAI,CACxD,CACF,CAEA,MAAM,gBAA+C,CACnD,GAAM,CAAE,KAAAA,CAAK,EAAI,MAAM,KAAK,IAAI,IAAyB,eAAe,EACxE,OAAOA,CACT,CAEA,MAAM,cAAcG,EAAqBC,EAA8C,CACrF,GAAM,CAAE,KAAAJ,CAAK,EAAI,MAAM,KAAK,IAAI,IAAwB,UAAUG,CAAW,IAAIC,CAAO,EAAE,EAC1F,OAAOJ,CACT,CAEA,MAAM,kBAAkBG,EAAqBE,EAA+C,CAC1F,GAAM,CAAE,KAAAL,CAAK,EAAI,MAAM,KAAK,IAAI,IAA4B,UAAUG,CAAW,IAAIE,CAAI,EAAE,EAC3F,OAAOL,CACT,CAEA,MAAM,0BAA0BM,EAA8E,CAC5G,GAAM,CAAE,KAAAN,CAAK,EAAI,MAAM,KAAK,IAAI,KAAqC,eAAgBM,EAAM,CACzF,QAAS,CACP,eAAgB,kBAClB,CACF,CAAC,EACD,MAAO,CACL,aAAcN,EAAK,aACnB,IAAKA,EAAK,IACV,uBAAwBA,EAAK,sBAC/B,CACF,CAEA,MAAM,eAAeO,EAA8D,CACjF,IAAMC,EAAWD,aAAiB,MAAQA,EAAQ,CAACA,CAAK,EAClD,CAAE,KAAAP,CAAK,EAAI,MAAM,KAAK,IAAI,KAC9B,aACA,CAAE,MAAOQ,CAAS,EAClB,CACE,QAAS,CACP,eAAgB,kBAClB,CACF,CACF,EACA,OAAOC,GAAiCT,CAAI,CAC9C,CACF,EKtGA,OAAOU,OAAW,cAWlB,IAAMC,GAAkB,GAAK,IACvBC,GAAkB,GAAK,IAEhBC,GAAN,KAA4C,CAMjD,YAAoBC,EAAsB,CAAtB,eAAAA,EAClB,KAAK,eAAiB,IAAIJ,GAAM,CAAE,WAAYE,EAAgB,CAAC,EAC/D,KAAK,yBAA2B,IAAIF,GAAM,CAAE,WAAYC,EAAgB,CAAC,EACzE,KAAK,iBAAmB,IAAID,GAAM,CAAE,WAAYC,EAAgB,CAAC,EACjE,KAAK,gBAAkB,IAAID,GAAM,CAAE,WAAYC,EAAgB,CAAC,CAClE,CAEA,cAAmC,CACjC,IAAMI,EAAuB,uBACvBC,EAAY,KAAK,eAAe,IAAID,CAAoB,EAC9D,GAAIC,EACF,OAAOA,EAET,IAAMC,EAAmB,KAAK,UAAU,aAAa,EACrD,YAAK,eAAe,IAAIF,EAAsBE,CAAgB,EACvDA,CACT,CAEA,MAAM,cAAcC,EAAqBC,EAA8C,CACrF,IAAMC,EAAwB,eAAeF,CAAW,IAAIC,CAAO,GAC7DE,EAAa,KAAK,gBAAgB,IAAID,CAAqB,EACjE,GAAIC,EACF,OAAOA,EAET,IAAMC,EAAoB,KAAK,UAAU,cAAcJ,EAAaC,CAAO,EAC3E,YAAK,gBAAgB,IAAIC,EAAuBE,CAAiB,EAC1DA,CACT,CAEA,MAAM,gBAA+C,CACnD,IAAMC,EAAyB,yBACzBC,EAAc,KAAK,iBAAiB,IAAID,CAAsB,EACpE,GAAIC,EACF,OAAOA,EAET,IAAMC,EAAqB,KAAK,UAAU,eAAe,EACzD,YAAK,iBAAiB,IAAIF,EAAwBE,CAAkB,EAC7DA,CACT,CAEA,MAAM,0BAA0BC,EAA8E,CAC5G,IAAMC,EAAsB,mBAAmBD,EAAK,aAAa,IAAIA,EAAK,kBAAkB,IAAIA,EAAK,SAAS,GACxGE,EAAkB,KAAK,yBAAyB,IAAID,CAAmB,EAC7E,GAAIC,EACF,OAAOA,EAET,IAAMC,EAAyB,MAAM,KAAK,UAAU,0BAA0BH,CAAI,EAClF,YAAK,yBAAyB,IAAIC,EAAqBE,CAAsB,EACtEA,CACT,CAEA,MAAM,kBAAkBX,EAAqBY,EAA+C,CAC1F,OAAO,KAAK,UAAU,kBAAkBZ,EAAaY,CAAI,CAC3D,CAEA,MAAM,eAAeC,EAA8D,CACjF,OAAO,KAAK,UAAU,eAAeA,CAAK,CAC5C,CACF,EChCO,IAAMC,GAAN,KAAyE,CAC9E,YAAoBC,EAAsB,CAAtB,eAAAA,CAAuB,CAE3C,MAAM,oBAAwD,CAC5D,OAAQ,MAAM,KAAK,UAAU,aAAa,GAAG,eAC/C,CAEA,MAAM,QAAoD,CACxD,IAAMC,EAAM,MAAM,KAAK,mBAAmB,EAC1C,OAAO,OAAO,OAAOA,CAAG,EAAE,QAASC,GAAiBA,EAAa,MAAM,CACzE,CAEA,MAAM,gBAA+C,CACnD,OAAO,KAAK,UAAU,eAAe,CACvC,CAEA,MAAM,cAAcC,EAAqBC,EAA8C,CACrF,OAAO,KAAK,UAAU,cAAcD,EAAaC,CAAO,CAC1D,CAEA,MAAM,kCAGH,CACD,OAAO,MAAM,KAAK,UAAU,aAAa,CAC3C,CAEA,MAAM,kBAAkBD,EAAqBE,EAA+C,CAC1F,OAAO,MAAM,KAAK,UAAU,kBAAkBF,EAAaE,CAAI,CACjE,CAEA,MAAM,0BAA0BC,EAA8E,CAC5G,OAAO,MAAM,KAAK,UAAU,0BAA0BA,CAAI,CAC5D,CAEA,MAAM,eAAeC,EAA8D,CACjF,OAAO,MAAM,KAAK,UAAU,eAAeA,CAAK,CAClD,CACF,EC5DO,IAAMC,GAAN,KAA6E,CAGlF,YACUC,EACRC,EACA,CAFQ,YAAAD,EAGR,KAAK,UAAYC,EAAO,oBAAoB,UAAY,MAC1D,CAEA,MAAM,mBAAmBC,EAAiD,CACxE,IAAMC,EAA2B,MAAM,KAAK,OAAO,mBAAmB,EAChEC,EAA0B,CAAC,EAEjC,QAAWC,KAAOF,EAA0B,CAC1C,IAAMG,EAAiCH,EAAyBE,CAAG,EAC/DC,IACFF,EAAOC,CAAG,EAAI,CACZ,GAAGC,EACH,OAAQC,GAAwCD,EAA+B,OAAQJ,EAAM,KAAK,SAAS,CAC7G,EAEJ,CACA,OAAOE,CACT,CAEA,MAAM,OAAOF,EAAyD,CACpE,OAAOK,GAAwC,MAAM,KAAK,OAAO,OAAO,EAAGL,EAAM,KAAK,SAAS,CACjG,CAEA,MAAM,gBAA+C,CACnD,OAAO,KAAK,OAAO,eAAe,CACpC,CAEA,MAAM,cAAcM,EAAqBC,EAA8C,CACrF,OAAO,KAAK,OAAO,cAAcD,EAAaC,CAAO,CACvD,CAEA,MAAM,kBAAkBD,EAAqBE,EAA+C,CAC1F,OAAO,MAAM,KAAK,OAAO,kBAAkBF,EAAaE,CAAI,CAC9D,CAEA,MAAM,0BAA0BC,EAA8E,CAC5G,OAAO,MAAM,KAAK,OAAO,0BAA0BA,CAAI,CACzD,CAEA,SAASC,EAA8BC,EAA0B,CAC/D,OAAO,KAAK,OAAO,SAASD,EAAeC,CAAQ,CACrD,CAEA,iBAAiBD,EAAiD,CAChE,OAAO,KAAK,OAAO,iBAAiBA,CAAa,CACnD,CAEA,gBAAgBE,EAAiE,CAC/E,OAAO,KAAK,OAAO,gBAAgBA,CAAc,CACnD,CACF,EAEA,SAASP,GACPQ,EACAb,EACAc,EACyB,CACzB,OAAOD,EAAO,OAAQE,GAAWD,EAAY,GAAOC,EAAM,MAAMf,CAAI,CAAE,EAAE,IAAIgB,EAA8B,CAC5G,CAEA,SAASA,GAA+BD,EAA8D,CAEpG,GAAM,CAAE,MAAAE,EAAO,GAAGC,CAAK,EAAIH,EAC3B,OAAOG,CACT,CC/FA,OAAOC,OAAW,cAmBlB,IAAMC,GAAkB,GAAK,IAQhBC,GAAN,KAA+G,CAGpH,YAA6BC,EAAyC,CAAzC,YAAAA,EAC3B,KAAK,cAAgB,IAAIC,EAC3B,CAEA,MAAM,oBAAwD,CAE5D,OADe,MAAM,KAAK,OAAO,iCAAiC,GACpD,eAChB,CAEA,MAAM,QAAoD,CACxD,OAAO,MAAM,KAAK,OAAO,OAAO,CAClC,CAEA,kBAAkBC,EAAqBC,EAA+C,CACpF,OAAO,KAAK,OAAO,kBAAkBD,EAAaC,CAAI,CACxD,CAEA,0BAA0BC,EAA8E,CACtG,OAAO,KAAK,OAAO,0BAA0BA,CAAI,CACnD,CAEA,gBAA+C,CAC7C,OAAO,KAAK,OAAO,eAAe,CACpC,CAEA,cAAcF,EAAqBG,EAA8C,CAC/E,OAAO,KAAK,OAAO,cAAcH,EAAaG,CAAO,CACvD,CAEA,MAAM,iBAAiBC,EAAiD,CACtE,KAAK,cAAc,mBAAmB,MAAM,KAAK,OAAO,iCAAiC,GAAG,WAAW,EACvG,IAAMC,EAAW,KAAK,cAAc,IAAID,CAAa,EAErD,GAAIC,EACF,OAAOA,EACF,CACL,IAAMC,EAAc,MAAM,KAAK,OAAO,eAAeF,CAAa,EAClE,KAAK,cAAc,OAAOE,CAAW,EACrC,IAAMC,EAASD,EAAYE,GAA0BJ,CAAa,CAAC,EACnE,GAAIG,EACF,OAAOA,EAET,MAAM,IAAIE,EACR,6BAA+BL,EAAc,YAAc,aAAeA,EAAc,WAC1F,CACF,CACF,CAEA,MAAM,gBAAgBM,EAAiE,CACrF,IAAIJ,EACJ,GAAII,EACF,KAAK,cAAc,mBAAmB,MAAM,KAAK,OAAO,iCAAiC,GAAG,WAAW,EACvGJ,EAAc,MAAM,KAAK,OAAO,eAAeI,CAAc,MACxD,CACL,IAAMH,EAAS,MAAM,KAAK,OAAO,iCAAiC,EAClED,EAAc,MAAM,KAAK,OAAO,eAAeK,GAAmCJ,EAAO,eAAe,CAAC,CAC3G,CACA,KAAK,cAAc,OAAOD,CAAW,CACvC,CAEA,SAASF,EAA8BC,EAA0B,CAC/D,KAAK,cAAc,IAAIG,GAA0BJ,CAAa,EAAGC,CAAQ,CAC3E,CACF,EAEMN,GAAN,KAAoB,CAGlB,aAAc,CACZ,KAAK,MAAQ,IAAIa,GAAgB,CAAE,WAAYhB,EAAgB,CAAC,CAClE,CAEA,OAAOU,EAA0B,CAC/B,OAAW,CAACO,EAAKC,CAAK,IAAK,OAAO,QAAQR,CAAW,EACnD,KAAK,MAAM,IAAIO,EAAKC,CAAK,CAE7B,CAEA,kBAAkBR,EAA0B,CAC1C,OAAW,CAACO,EAAKC,CAAK,IAAK,OAAO,QAAQR,CAAW,EAC9C,KAAK,MAAM,IAAIO,CAAG,GACrB,KAAK,MAAM,IAAIA,EAAKC,CAAK,CAG/B,CAEA,IAAID,EAAaR,EAAoB,CACnC,KAAK,MAAM,IAAIQ,EAAKR,CAAQ,CAC9B,CAEA,IAAID,EAAoD,CACtD,IAAMS,EAAML,GAA0BJ,CAAa,EACnD,OAAO,KAAK,MAAM,IAAIS,CAAG,CAC3B,CACF,EC3HA,OAAOE,OAAa,UACpB,OAAOC,OAAU,OCFjB,OAAS,OAAAC,OAAsB,SAK/B,eAAsBC,GACpBC,EACAC,EACmB,CACnB,OAAO,MAAMD,EAAI,iBAAiB,CAChC,YAAaC,EAAiB,YAC9B,YAAaA,EAAiB,WAChC,CAAC,CACH,CAEO,SAASC,EAAqBC,EAAmB,CACtD,GAAIC,GAAID,CAAM,EAAE,IAAI,CAAC,EACnB,MAAM,IAAIE,GAAmB,kCAAkC,CAEnE,CAEO,SAASC,EAAuBC,EAAiBC,EAAoCC,EAAyB,CACnH,IAAMN,EAASC,GAAII,CAAW,EAAE,QAAQ,EAElC,CAACE,EAAaC,CAAc,EAAIR,EAAO,MAAM,GAAG,EAEtD,GAAIQ,GAAkBA,EAAe,OAASF,EAC5C,MAAM,IAAIG,GAA6BL,EAASI,EAAe,OAAQF,CAAe,CAE1F,CAEA,eAAsBI,GAAsBC,EAAqBC,EAAaC,EAA+B,CAC3G,OAAQ,MAAM,QAAQ,KAAK,CACzBF,EACA,IAAI,QAAQ,CAACG,EAASC,IAAW,CAC/B,WAAW,IAAMA,EAAO,IAAIC,GAAaJ,CAAG,CAAC,EAAGC,CAAS,CAC3D,CAAC,CACH,CAAC,CACH,CAEA,eAAsBI,GACpBC,EACAN,EACAO,EACAN,EACY,CACZ,GAAIM,EAAa,EACf,MAAM,IAAI,MAAM,0DAA0DA,CAAU,gBAAgB,EACtG,IAAIC,EAAe,EAEnB,OACE,GAAI,CACF,OAAO,MAAMV,GAAmBQ,EAAM,EAAGN,EAAKC,CAAS,CACzD,MAAgB,CACd,GAAI,EAAEO,GAAgBD,EAAY,MAAM,IAAIH,GAAaJ,CAAG,CAC9D,CAEJ,CAMA,eAAsBS,GACpBC,EACAC,EACAC,EACAC,EAAoB,IACpBC,EAAU,GACI,CACd,IAAMC,EAAgB,CAAC,EAEnBC,EAAQ,EACNC,EAAiB,MAAMP,EAAG,EAEhC,GADAK,EAAS,KAAKE,CAAc,EACxB,CAACN,EAAcM,CAAc,EAAG,OAAOF,EAE3C,IAAMG,EAAY,IAAI,KAAK,KAAK,IAAI,EAAIN,EAAgB,GAAI,EAAE,QAAQ,EAClEO,EAAW,IACXC,EAAgBD,EAEpB,KAAO,KAAK,IAAI,EAAID,GAAW,CAC7B,IAAMG,EAAcN,EAASA,EAAS,OAAS,CAAC,EAChD,GAAIM,IAAgB,QAAa,CAACV,EAAcU,CAAW,EAAG,MAE9DL,IAEIF,GACF,QAAQ,KACN,WAAWK,CAAQ,2DAA2DC,CAAa,uBACzFR,EAAgB,GAClB,KACF,EAEF,MAAM,IAAI,QAASU,GAAQ,WAAWA,EAAKH,CAAQ,CAAC,EAEpDA,EAAWA,EAAWN,EAClB,IAAI,KAAK,KAAK,IAAI,EAAIM,CAAQ,EAAE,QAAQ,EAAID,IAC9CC,EAAWD,EAAY,KAAK,IAAI,EAC5BJ,GACF,QAAQ,KAAK,0CAA0CK,CAAQ,IAAI,GAGvEC,EAAgBD,EAAWC,EAE3B,IAAMG,EAAc,MAAMb,EAAGW,CAAW,EACxCN,EAAS,KAAKQ,CAAW,EACrBT,GAAWH,EAAcY,CAAW,GACtC,QAAQ,KACN,GAAGP,CAAK,YAAYN,EAAG,IAAI,KAAKK,EAAS,MAAM,gCAAgC,KAAK,UAClFA,EAASA,EAAS,OAAS,CAAC,EAC5B,KACA,CACF,CAAC,EACH,CAEJ,CAEA,OAAOA,CACT,CCvHA,UAAYS,OAAY,wBACxB,OAAS,aAAAC,OAAiB,kBAC1B,OAAS,OAAAC,OAAW,SCFpB,IAAAC,GAAA,CACE,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,WACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,kBACR,KAAQ,SACV,EACA,CACE,aAAgB,qBAChB,KAAQ,sBACR,KAAQ,SACV,EACA,CACE,aAAgB,6BAChB,KAAQ,qBACR,KAAQ,SACV,EACA,CACE,aAAgB,sBAChB,KAAQ,aACR,KAAQ,SACV,CACF,EACA,gBAAmB,aACnB,KAAQ,aACV,EACA,CACE,UAAa,GACb,OAAU,CACR,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,MACR,KAAQ,SACV,CACF,EACA,KAAQ,wBACR,KAAQ,OACV,EACA,CACE,UAAa,GACb,OAAU,CACR,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,gBACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,WACR,KAAQ,SACV,CACF,EACA,KAAQ,uBACR,KAAQ,OACV,EACA,CACE,UAAa,GACb,OAAU,CACR,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,wBACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,yBACR,KAAQ,SACV,CACF,EACA,KAAQ,aACR,KAAQ,OACV,EACA,CACE,UAAa,GACb,OAAU,CACR,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,CACF,EACA,KAAQ,WACR,KAAQ,OACV,EACA,CACE,UAAa,GACb,OAAU,CACR,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,YACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,YACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,eACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,aACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,gBACR,KAAQ,SACV,CACF,EACA,KAAQ,UACR,KAAQ,OACV,EACA,CACE,UAAa,GACb,OAAU,CACR,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,YACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,QACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,yBAChB,KAAQ,YACR,KAAQ,OACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,UACR,KAAQ,SACV,CACF,EACA,KAAQ,iBACR,KAAQ,OACV,EACA,CACE,UAAa,GACb,OAAU,CACR,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,YACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,qBACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,eACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,QACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,yBAChB,KAAQ,YACR,KAAQ,OACV,CACF,EACA,KAAQ,aACR,KAAQ,OACV,EACA,CACE,gBAAmB,UACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,WACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,eACR,KAAQ,SACV,CACF,EACA,KAAQ,iBACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,gBAChB,KAAQ,OACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,QACR,KAAQ,SACV,CACF,EACA,KAAQ,UACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CAAC,EACX,KAAQ,UACR,QAAW,CACT,CACE,aAAgB,QAChB,KAAQ,GACR,KAAQ,OACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CAAC,EACX,KAAQ,UACR,QAAW,CACT,CACE,aAAgB,UAChB,KAAQ,GACR,KAAQ,SACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,UACR,KAAQ,SACV,CACF,EACA,KAAQ,WACR,QAAW,CACT,CACE,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,qBACR,KAAQ,SACV,EACA,CACE,aAAgB,yBAChB,KAAQ,YACR,KAAQ,OACV,EACA,CACE,aAAgB,UAChB,KAAQ,eACR,KAAQ,SACV,CACF,EACA,KAAQ,0BACR,QAAW,CACT,CACE,aAAgB,UAChB,KAAQ,GACR,KAAQ,SACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,UACR,KAAQ,SACV,EACA,CACE,aAAgB,yBAChB,KAAQ,WACR,KAAQ,OACV,CACF,EACA,KAAQ,iBACR,QAAW,CACT,CACE,aAAgB,UAChB,KAAQ,GACR,KAAQ,SACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,UACR,KAAQ,SACV,EACA,CACE,aAAgB,yBAChB,KAAQ,WACR,KAAQ,OACV,CACF,EACA,KAAQ,qBACR,QAAW,CACT,CACE,aAAgB,UAChB,KAAQ,GACR,KAAQ,SACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,UACR,KAAQ,SACV,CACF,EACA,KAAQ,qBACR,QAAW,CACT,CACE,aAAgB,UAChB,KAAQ,GACR,KAAQ,SACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,UACR,KAAQ,SACV,EACA,CACE,aAAgB,yBAChB,KAAQ,WACR,KAAQ,OACV,CACF,EACA,KAAQ,qBACR,QAAW,CACT,CACE,aAAgB,OAChB,KAAQ,GACR,KAAQ,MACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,UACR,KAAQ,SACV,CACF,EACA,KAAQ,iBACR,QAAW,CACT,CACE,aAAgB,OAChB,KAAQ,GACR,KAAQ,MACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,YACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,gBACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,qBACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,eACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,QACR,KAAQ,SACV,EACA,CACE,aAAgB,yBAChB,KAAQ,YACR,KAAQ,OACV,CACF,EACA,KAAQ,cACR,QAAW,CACT,CACE,aAAgB,UAChB,KAAQ,GACR,KAAQ,SACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,UACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,eACR,KAAQ,SACV,CACF,EACA,KAAQ,oBACR,QAAW,CACT,CACE,aAAgB,OAChB,KAAQ,cACR,KAAQ,MACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,UACR,KAAQ,SACV,CACF,EACA,KAAQ,eACR,QAAW,CACT,CACE,aAAgB,UAChB,KAAQ,gBACR,KAAQ,SACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CAAC,EACX,KAAQ,QACR,QAAW,CACT,CACE,aAAgB,UAChB,KAAQ,GACR,KAAQ,SACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,UACR,KAAQ,SACV,CACF,EACA,KAAQ,QACR,QAAW,CACT,CACE,aAAgB,gBAChB,KAAQ,GACR,KAAQ,SACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,cACR,KAAQ,SACV,CACF,EACA,KAAQ,oBACR,QAAW,CACT,CACE,aAAgB,UAChB,KAAQ,cACR,KAAQ,SACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,YACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,gBACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,eACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,QACR,KAAQ,SACV,EACA,CACE,aAAgB,yBAChB,KAAQ,YACR,KAAQ,OACV,EACA,CACE,aAAgB,UAChB,KAAQ,mBACR,KAAQ,SACV,CACF,EACA,KAAQ,gBACR,QAAW,CAAC,EACZ,gBAAmB,UACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,WACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,gBACR,KAAQ,SACV,CACF,EACA,KAAQ,iBACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,WACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,eACR,KAAQ,SACV,CACF,EACA,KAAQ,oBACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CAAC,EACX,KAAQ,oBACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,cACR,KAAQ,SACV,CACF,EACA,KAAQ,eACR,QAAW,CACT,CACE,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,qBAChB,KAAQ,sBACR,KAAQ,SACV,CACF,EACA,KAAQ,wBACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,sBAChB,KAAQ,aACR,KAAQ,SACV,CACF,EACA,KAAQ,eACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,UACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,YACR,KAAQ,SACV,CACF,EACA,KAAQ,cACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,cACR,KAAQ,SACV,CACF,EACA,KAAQ,gBACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,iBACR,KAAQ,SACV,CACF,EACA,KAAQ,mBACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,6BAChB,KAAQ,qBACR,KAAQ,SACV,CACF,EACA,KAAQ,uBACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CAAC,EACX,KAAQ,YACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CAAC,EACX,KAAQ,WACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,QACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,eACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,YACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,mBACR,KAAQ,SACV,CACF,EACA,KAAQ,OACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,QACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,YACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,qBACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,eACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,QACR,KAAQ,SACV,EACA,CACE,aAAgB,yBAChB,KAAQ,YACR,KAAQ,OACV,EACA,CACE,aAAgB,UAChB,KAAQ,iBACR,KAAQ,SACV,CACF,EACA,KAAQ,gBACR,QAAW,CAAC,EACZ,gBAAmB,UACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,WACR,KAAQ,SACV,CACF,EACA,KAAQ,oBACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,kBAChB,KAAQ,QACR,KAAQ,SACV,CACF,EACA,KAAQ,8BACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,CACF,EACA,KAAQ,oBACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,gBAAmB,UACnB,KAAQ,SACV,CACF,ECt5BA,IAAAC,GAAA,CACE,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,WACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,kBACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,eACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,iBACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,mBACR,KAAQ,SACV,EACA,CACE,aAAgB,sBAChB,KAAQ,aACR,KAAQ,SACV,CACF,EACA,gBAAmB,aACnB,KAAQ,aACV,EACA,CACE,UAAa,GACb,OAAU,CACR,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,gBACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,WACR,KAAQ,SACV,CACF,EACA,KAAQ,uBACR,KAAQ,OACV,EACA,CACE,UAAa,GACb,OAAU,CACR,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,YACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,CACF,EACA,KAAQ,mBACR,KAAQ,OACV,EACA,CACE,UAAa,GACb,OAAU,CACR,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,CACF,EACA,KAAQ,cACR,KAAQ,OACV,EACA,CACE,UAAa,GACb,OAAU,CACR,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,QACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,eACR,KAAQ,SACV,CACF,EACA,KAAQ,oBACR,KAAQ,OACV,EACA,CACE,UAAa,GACb,OAAU,CACR,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,yBACR,KAAQ,SACV,CACF,EACA,KAAQ,mBACR,KAAQ,OACV,EACA,CACE,UAAa,GACb,OAAU,CACR,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,YACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,qBACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,QACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,4BACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,+BACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,aACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,gCACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,sBACR,KAAQ,SACV,CACF,EACA,KAAQ,aACR,KAAQ,OACV,EACA,CACE,gBAAmB,UACnB,KAAQ,UACV,EACA,CACE,OAAU,CAAC,EACX,KAAQ,kBACR,QAAW,CACT,CACE,aAAgB,UAChB,KAAQ,GACR,KAAQ,SACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,YACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,qBACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,wBACR,KAAQ,SACV,CACF,EACA,KAAQ,SACR,QAAW,CAAC,EACZ,gBAAmB,UACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,YACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,yBACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,qBACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,wBACR,KAAQ,SACV,CACF,EACA,KAAQ,0BACR,QAAW,CAAC,EACZ,gBAAmB,UACnB,KAAQ,UACV,EACA,CACE,OAAU,CAAC,EACX,KAAQ,UACR,QAAW,CACT,CACE,aAAgB,UAChB,KAAQ,GACR,KAAQ,SACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,QAChB,KAAQ,kBACR,KAAQ,OACV,EACA,CACE,aAAgB,QAChB,KAAQ,sBACR,KAAQ,OACV,EACA,CACE,aAAgB,UAChB,KAAQ,eACR,KAAQ,SACV,CACF,EACA,KAAQ,kBACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,UACR,KAAQ,SACV,CACF,EACA,KAAQ,WACR,QAAW,CACT,CACE,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,qBACR,KAAQ,SACV,CACF,EACA,KAAQ,0BACR,QAAW,CACT,CACE,aAAgB,UAChB,KAAQ,GACR,KAAQ,SACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,WACR,KAAQ,SACV,CACF,EACA,KAAQ,qBACR,QAAW,CACT,CACE,aAAgB,SAChB,KAAQ,GACR,KAAQ,QACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,UACR,KAAQ,SACV,CACF,EACA,KAAQ,qBACR,QAAW,CACT,CACE,aAAgB,UAChB,KAAQ,GACR,KAAQ,SACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,gBACR,KAAQ,SACV,EACA,CACE,aAAgB,SAChB,KAAQ,QACR,KAAQ,QACV,CACF,EACA,KAAQ,qBACR,QAAW,CACT,CACE,aAAgB,OAChB,KAAQ,GACR,KAAQ,MACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CAAC,EACX,KAAQ,QACR,QAAW,CACT,CACE,aAAgB,UAChB,KAAQ,GACR,KAAQ,SACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,YACR,KAAQ,SACV,EACA,CACE,aAAgB,QAChB,KAAQ,UACR,KAAQ,OACV,EACA,CACE,aAAgB,QAChB,KAAQ,YACR,KAAQ,OACV,CACF,EACA,KAAQ,gBACR,QAAW,CAAC,EACZ,gBAAmB,UACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,WACR,KAAQ,SACV,EACA,CACE,aAAgB,SAChB,KAAQ,SACR,KAAQ,QACV,CACF,EACA,KAAQ,4BACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CAAC,EACX,KAAQ,oBACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,mBACR,KAAQ,SACV,CACF,EACA,KAAQ,mBACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,sBAChB,KAAQ,aACR,KAAQ,SACV,CACF,EACA,KAAQ,eACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,UACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,YACR,KAAQ,SACV,CACF,EACA,KAAQ,cACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,WACR,KAAQ,SACV,CACF,EACA,KAAQ,oBACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,WACR,KAAQ,SACV,CACF,EACA,KAAQ,8BACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CAAC,EACX,KAAQ,sBACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,CACF,EACA,KAAQ,cACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,gBAAmB,UACnB,KAAQ,SACV,CACF,ECxjBA,UAAYC,OAAY,wBACxB,OAAS,aAAAC,OAAiB,kBAE1B,eAAsBC,GAAqBC,EAAsBC,EAA4C,CAC3G,OAAc,SAAM,MAAM,kBAAkB,CAC1C,KAAMA,EACN,MAAOD,CACT,CAAC,CACH,CAEA,eAAsBE,GAAiBC,EAA0C,CAC/E,GAAM,CAACC,CAAS,EAAI,MAAMN,GAAU,mBAAmB,CAAQ,SAAM,MAAM,KAAK,OAAO,QAAQ,CAAC,EAAGK,CAAS,EAC5G,OAAOC,CACT,CAEA,eAAsBC,GAAeC,EAAiBC,EAAgD,CACpG,GAAM,CAACC,CAAO,EAAI,MAAMV,GAAU,mBAChC,CAAQ,SAAM,MAAM,KAAK,OAAO,MAAM,EAAG,WAAW,KAAKQ,CAAK,CAAC,EAC/DC,CACF,EACA,OAAOC,CACT,CAEA,eAAsBC,GAAgBC,EAAiBC,EAAmD,CACxG,GAAM,CAACC,CAAQ,EAAI,MAAMd,GAAU,mBACjC,CAAQ,SAAM,MAAM,KAAK,OAAO,UAAU,EAAG,WAAW,KAAK,CAACY,CAAO,CAAC,CAAC,EACvEC,CACF,EACA,OAAOC,CACT,CAEA,eAAsBC,GAAoBN,EAAgD,CACxF,IAAMO,EAAgB,MAAMZ,GAAiBK,CAAe,EACtD,CAACQ,CAAa,EAAI,MAAMjB,GAAU,mBAAmB,CAACgB,EAAc,SAAS,CAAC,EAAGP,CAAe,EACtG,OAAOQ,CACT,CAEA,eAAsBC,GACpBC,EACAC,EACoB,CACpB,GAAM,CAACH,CAAa,EAAI,MAAMjB,GAAU,mBAAmB,CAACmB,EAAkB,SAAS,CAAC,EAAGC,CAAmB,EAC9G,OAAOH,CACT,CAEA,eAAsBI,GAAsBlB,EAAwBM,EAAgD,CAClH,GAAM,CAACa,CAAO,EAAI,MAAMtB,GAAU,mBAChC,CAAQ,SAAM,MAAM,KAAK,OAAO,OAAO,EAAGG,EAAY,QAAQ,CAAC,EAC/DM,CACF,EACA,OAAOa,CACT,CAEA,eAAsBC,GACpBX,EACAY,EACAf,EACoB,CACpB,GAAM,CAACgB,CAAkB,EAAI,MAAMzB,GAAU,mBAC3C,CAAQ,SAAM,MAAM,KAAK,OAAO,oBAAoB,EAAG0B,EAAO,KAAK,CAACd,CAAO,CAAC,EAAGY,CAAK,EACpFf,CACF,EACA,OAAOgB,CACT,CAEA,eAAsBE,GAAsBf,EAAiBH,EAAgD,CAC3G,GAAM,CAACmB,CAAc,EAAI,MAAM5B,GAAU,mBACvC,CAAQ,SAAM,MAAM,KAAK,OAAO,cAAc,EAAG,WAAW,KAAK,CAACY,CAAO,CAAC,CAAC,EAC3EH,CACF,EACA,OAAOmB,CACT,CAEA,eAAsBC,GAAmBjB,EAAiBkB,EAAmD,CAC3G,GAAM,CAACF,CAAc,EAAI,MAAM5B,GAAU,mBACvC,CAAQ,SAAM,MAAM,KAAK,OAAO,WAAW,EAAG,WAAW,KAAK,CAACY,CAAO,CAAC,CAAC,EACxEkB,CACF,EACA,OAAOF,CACT,CAEA,eAAsBG,GACpBC,EACAF,EACoB,CACpB,GAAM,CAACG,CAAc,EAAI,MAAMjC,GAAU,mBACvC,CAAQ,SAAM,MAAM,KAAK,OAAO,cAAc,EAAGgC,CAAiB,EAClEF,CACF,EACA,OAAOG,CACT,CAEA,eAAsBC,GACpBC,EACAC,EACA3B,EACoB,CACpB,GAAM,CAAC4B,CAAc,EAAI,MAAMrC,GAAU,mBACvC,CAAQ,SAAM,MAAM,KAAK,OAAO,cAAc,EAAGoC,EAAiB,QAAQ,EAAGD,EAAc,QAAQ,CAAC,EACpG1B,CACF,EACA,OAAO4B,CACT,CAEA,eAAsBC,GAAqBnC,EAAwBiB,EAAoD,CACrH,GAAM,CAACd,CAAS,EAAI,MAAMN,GAAU,mBAClC,CAAQ,SAAM,MAAM,KAAK,OAAO,aAAa,EAAGG,EAAY,QAAQ,CAAC,EACrEiB,CACF,EACA,OAAOd,CACT,CAEA,eAAsBiC,GAA0Bf,EAAkBJ,EAAoD,CACpH,GAAM,CAACE,CAAO,EAAI,MAAMtB,GAAU,mBAChC,CAAQ,SAAM,MAAM,KAAK,OAAO,OAAO,EAAGwB,EAAM,QAAQ,CAAC,EACzDJ,CACF,EACA,OAAOE,CACT,CAEO,SAASkB,GAAmBpB,EAAgCqB,EAAmD,CACpH,GAAM,CAACC,CAA4B,EAAI1C,GAAU,uBAC/C,CAAQ,SAAM,MAAM,KAAK,OAAO,MAAM,EAAGyC,EAA4B,SAAS,CAAC,EAC/ErB,CACF,EACA,OAAOsB,CACT,CAEO,SAASC,GACdC,EACAzC,EACA0C,EACAC,EACA,CACA,IAAMC,EAA4BC,GAAmB,sBAAuBH,CAAwB,EAC9FI,EAAiBD,GAAmB,kBAAmBF,CAAwB,EAC/EJ,EAA+BM,GAAmB,oBAAqBF,CAAwB,EAC/FI,EAAcF,GAAmB,eAAgBF,CAAwB,EACzEK,EAAaH,GAAmB,cAAeF,EAA0B,CAAC3C,CAAW,CAAC,EACtFiD,EAA0BJ,GAAmB,yBAA0BF,EAA0B,CACrGF,EAAO,SAAS,CAClB,CAAC,EACKS,EAAeL,GAAmB,mBAAoBF,CAAwB,EACpF,MAAO,CACL,0BAAAC,EACA,eAAAE,EACA,6BAAAP,EACA,YAAAQ,EACA,WAAAC,EACA,wBAAAC,EACA,aAAAC,CACF,CACF,CAEA,SAASL,GACPM,EACAjD,EACAkD,EAAyD,CAAC,EAC/C,CACX,IAAMC,EAAQ,CAAC9B,EAAO,KAAY,SAAM,MAAM,KAAK,OAAO4B,CAAK,CAAC,CAAC,EACjE,QAAWG,KAAaF,EAClB,OAAOE,GAAc,SACvBD,EAAM,KAAK9B,EAAO,KAAY,SAAM,MAAM,KAAK,OAAO+B,CAAS,CAAC,CAAC,EACxD,MAAM,QAAQA,CAAS,EAChCD,EAAM,KAAK9B,EAAO,KAAK+B,CAAS,CAAC,EACxB/B,EAAO,SAAS+B,CAAS,EAClCD,EAAM,KAAKC,CAAS,EAEpBD,EAAM,KAAKC,EAAU,SAAS,CAAC,EAInC,OADYzD,GAAU,uBAAuBwD,EAAOnD,CAAS,EAClD,CAAC,CACd,CC7KA,OAAS,kBAAAqD,OAAgC,wBACzC,OAAS,cAAAC,GAAY,aAAAC,OAAiB,kBAE/B,SAASC,GAAoBC,EAAsBC,EAAkC,CAC1F,IAAMC,EAAa,IAAIL,GAAWG,EAAc,WAAW,EAErDG,EAAY,IAAIL,GAAUG,CAAc,EAE9C,OAAO,IAAIL,GACTM,EAEA,CAAE,UAAWC,CAAU,EACvB,CACE,oBAAqB,YACrB,WAAY,WACd,CACF,CACF,CCZO,IAAeC,GAAf,KAAkC,CAYzC,ECjBA,OAAS,aAAAC,OAAiB,kBAC1B,OAAS,WAAAC,OAAe,uBACxB,OAAS,OAAAC,OAAsB,SAC/B,OAAOC,OAAiB,cAExB,UAAYC,OAAgB,UAwBrB,SAASC,GAAcC,EAAiBC,EAAiBC,EAAkC,CAChG,IAAIC,EACJ,OAAQF,EAAM,CACZ,UAAoB,CAClBE,EAASC,GAAqBJ,CAAO,EACrC,KACF,CACA,aAAuB,CACrBG,EAAS,IAAIE,GAAUL,CAAO,EAAE,SAAS,EACzC,KACF,CACA,UAAoB,CAClBG,EAASG,GAAsBN,CAAO,EACtC,KACF,CACA,UAAoB,CAClBG,EAAS,IAAII,GAAQP,CAAO,EAAE,SAAS,EACvC,KACF,CACF,CAEA,OAAQE,EAAI,CACV,UACE,MAAO,KAAOC,EAAO,SAAS,KAAK,EAErC,aACE,OAAO,MAAM,KAAKA,CAAM,EAE1B,UACE,OAAOA,EAAO,OAAO,EAAE,KAEzB,UACE,OAAOA,EAAO,OAAO,EAAE,IAE3B,CACF,CAEO,SAASK,GAAYC,EAAqB,CAC/C,OAAOC,EAAO,KAAKD,EAAI,QAAQ,OAAQ,EAAE,EAAG,KAAK,CACnD,CAEO,SAASL,GAAqBJ,EAAyB,CAE5D,IAAMW,EAAOH,GAAYR,CAAO,EAChC,OAAOU,EAAO,OAAO,CAACA,EAAO,MAAM,GAASC,EAAK,OAAQ,CAAC,EAAGA,CAAI,EAAG,EAAM,CAC5E,CAEA,SAASL,GAAsBN,EAAyB,CACtD,IAAMY,EAAaC,GAAwBb,CAAO,EAC5CG,EAASK,GAAYI,CAAU,EACrC,OAAOE,GAAaX,EAAQ,EAAE,CAChC,CAEO,SAASU,GAAwBb,EAAyB,CAC/D,OAAOU,EAAO,KAAgB,SAAM,OAAO,oBAAoBV,CAAO,CAAC,EAAE,SAAS,KAAK,EAAE,QAAQ,MAAO,IAAI,CAC9G,CAEA,SAASc,GAAaX,EAAgBY,EAAsB,CAC1D,GAAIZ,EAAO,QAAUY,EACnB,OAAOZ,EAET,IAAMa,EAASN,EAAO,MAAMK,EAAM,CAAC,EACnC,OAAAZ,EAAO,KAAKa,EAAQD,EAAOZ,EAAO,MAAM,EACjCa,CACT,CAkBO,SAASC,IAAmB,CACjC,OAAOC,GAAY,EAAE,CACvB,CAEO,SAASC,IAAyB,CACvC,IAAMC,EAASF,GAAY,EAAE,EAAE,eAAe,EAC9C,OAAIE,EAAS,EACJA,EAAS,CAAC,GAEZA,CACT,CAEO,SAASC,GAAoBC,EAA4BC,EAAkC,CAChG,IAAMC,EAAe,CAAC,EAChBC,EAAcF,EAAO,YAC3B,OAAAC,EAAa,OAASE,EAAwBH,EAAO,OAAQE,EAAY,QAAQ,EAAE,QAAQ,EAC3FD,EAAa,gBAAkBC,EAAY,cAC3CD,EAAa,mBAAqBD,EAAO,mBACzCC,EAAa,iBAAmBG,GAAcF,EAAY,aAAcH,EAAiBA,CAAe,EACxGE,EAAa,iBAAmBD,EAAO,iBACvCC,EAAa,eAAiBG,GAAcJ,EAAO,iBAAiB,aAAcD,EAAiBA,CAAe,EAClHE,EAAa,qBAAuBD,EAAO,qBACvCG,EAAwBH,EAAO,qBAAsBA,EAAO,iBAAiB,QAAQ,EAAE,QAAQ,EAC/F,IACGC,CACT,CAEA,eAAsBI,GACpBN,EACAC,EACAM,EACuB,CACvB,IAAMC,EAAe,CAAC,EAEtBA,EAAa,YAAcP,EAAO,YAAY,iBAC9CO,EAAa,gBAAkBP,EAAO,YAAY,YAClD,IAAMQ,EAAcC,EAAO,iBAAiBT,EAAO,iBAAiB,WAAW,EAAE,UACjFO,EAAa,iBAAmBP,EAAO,YAAY,aAEnDO,EAAa,UAAYP,EAAO,iBAAiB,iBACjDO,EAAa,eAAiBP,EAAO,iBAAiB,aAElDA,EAAO,sBAAwB,aACjCO,EAAa,oBAAsB,aAGnCA,EAAa,oBAAsB,SAErC,IAAML,EAAcF,EAAO,YAC3B,GAAIA,EAAO,YAAc,EAAgB,CACvC,GAAI,CAACE,EAAY,aAAe,CAACF,EAAO,iBAAiB,YACvD,MAAM,IAAIU,GAA0B,2CAA2C,EAEjFH,EAAa,gBAAkBL,EAAY,WAC7C,MACEK,EAAa,gBAAkBL,EAAY,cAE7CK,EAAa,UAAYP,EAAO,UAChCO,EAAa,mBAAqBP,EAAO,mBACzCO,EAAa,OAASJ,EAAwBH,EAAO,OAAQE,EAAY,QAAQ,EAAE,QAAQ,EAG3F,GAAI,CAAE,IAAAS,EAAK,UAAAC,CAAU,EAAIZ,EACzB,GAAI,CAACW,EAAK,CAUR,IAAME,GATgB,MAAMC,GAC1BP,EAAa,YACbP,EAAO,YAAY,UACnBO,EAAa,UACbL,EAAY,SACZK,EAAa,UACbD,CACF,GAEmCC,EAAa,mBAAmB,EACnE,GAAI,CAACM,EACH,MAAM,IAAIE,GAEZJ,EAAME,EAAa,IACnBD,EAAY,KACd,CACA,GAAIA,GAAa,QACf,OAAQL,EAAa,oBAAqB,CACxC,aACEA,EAAa,IAAMJ,EAAwBQ,EAAKF,EAAO,uBAAuBP,EAAY,SAAS,CAAC,EAAE,QACpG,CACF,EACA,MACF,iBACEK,EAAa,IAAMJ,EAAwBQ,EAAKT,EAAY,QAAQ,EAAE,QAAQ,CAAC,EAC/E,KACJ,MAEAK,EAAa,IAAMI,EAIrB,GAAM,CAAE,SAAAK,EAAU,eAAAC,CAAe,EAAIjB,EACrC,GAAIgB,GAAY,CAACA,EAAW,EAAG,CAC7B,GAAIC,GAAkB,QACpB,OAAQV,EAAa,oBAAqB,CACxC,aACEA,EAAa,SAAWJ,EACtBa,EACAP,EAAO,uBAAuBP,EAAY,SAAS,CACrD,EAAE,QAAQ,CAAC,EACX,MACF,iBACEK,EAAa,SAAWJ,EAAwBa,EAAUd,EAAY,QAAQ,EAAE,QAAQ,CAAC,EACzF,KACJ,MAEAK,EAAa,SAAWS,EAE1B,MAAME,GACJX,EAAa,SACbA,EAAa,oBACbL,EACAF,EAAO,iBACPM,CACF,CACF,CAEA,OAAAC,EAAa,iBAAmBH,GAAcG,EAAa,iBAAkBR,EAAiBA,CAAe,EAC7GQ,EAAa,iBAAmBH,GAAcJ,EAAO,iBAAkBQ,EAAaT,CAAe,EACnGQ,EAAa,eAAiBH,GAAcG,EAAa,eAAgBC,EAAaT,CAAe,EACjGQ,EAAa,qBAAuB,cACtCY,GAAqBZ,EAAa,OAAQL,EAAY,SAAUK,EAAa,IAAKA,EAAa,QAAQ,EAElGA,CACT,CAEA,SAASY,GACPC,EACAC,EACAC,EACAC,EACA,CACA,IAAMC,EAAcC,GAAIL,CAAS,EAC9B,MAAME,CAAM,EACZ,MAAMC,GAAe,CAAC,EACzB,GAAIC,EAAY,IAAI,CAAC,EACnB,MAAM,IAAIE,GACR,iCAAiCC,EAC/BF,GAAID,CAAW,EAAE,MAAM,CAAC,EAAE,IAAI,EAC9BH,CACF,EAAE,QAAQ,CAAC,qBACb,CAEJ,CAEA,eAAsBP,GACpBc,EACAC,EACAC,EACAC,EACAC,EACA1B,EACwB,CACxB,IAAM2B,EAA0B,MAAM3B,EAAI,0BAA0B,CAClE,cAAesB,EACf,mBAAoBE,EACpB,UAAAE,CACF,CAAC,EAEKE,EAA+B,CAClC,OAAwC,CACtC,IAAmBD,EAAwB,IAC3C,MAAqBN,EACpBM,EAAwB,IACxBxB,EAAO,uBAAuBoB,CAAe,CAC/C,EAAE,QAAQ,CACZ,CACF,EACA,GAAII,EAAwB,uBAAwB,CAClD,IAAME,EAAuBC,GAC3B,IAAIX,GAAIQ,EAAwB,GAAG,EAAE,IAAIA,EAAwB,sBAAsB,EACvFxB,EAAO,uBAAuBoB,CAAe,EAC7CE,CACF,EAAE,QAAQ,EAAGN,GAAI,OAAO,EACxBS,EAAc,WAAoC,CAC/C,IAAmBC,EACnB,MAAqBR,EAAwBQ,EAAsBJ,CAAwB,EAAE,QAAQ,CACxG,CACF,CAEA,OAAOG,CACT,CAEA,eAAehB,GACbK,EACAc,EACAnC,EACAoC,EACAhC,EACA,CAEA,IAAMiC,GADiB,MAAMC,GAAqBtC,EAAaoC,EAAkBhC,CAAG,GAC5C,YAAY+B,CAAmB,EACvE,GAAI,CAACE,EACH,MAAM,IAAIxB,GAAgC,mCAAmCsB,CAAmB,kBAAkB,EAEpH,IAAMI,EAAsBF,EAAiB,IAC7C,GAAId,GAAIF,CAAW,EAAE,GAAGkB,CAAmB,EACzC,MAAM,IAAIC,GACR,aAAanB,CAAW,kCAAkCkB,CAAmB,SAASJ,CAAmB,kBAC3G,CAEJ,CAEA,eAAsBG,GACpBG,EACAC,EACAtC,EACmC,CACnC,IAAMuC,EAAuC,CAAC,EACxCZ,EAA0B,MAAM3B,EAAI,0BAA0B,CAClE,cAAeqC,EAAiB,iBAChC,mBAAoBC,EAAsB,iBAC1C,WACF,CAAC,EACKE,EAAYF,EAAsB,aAAa,UAC/CG,EAAiBpB,EACrBmB,EACArC,EAAO,uBAAuBmC,EAAsB,SAAS,CAC/D,EAAE,QAAQ,EACJI,EAA+BvB,GAAIsB,CAAc,EACpD,IAAId,EAAwB,YAAY,EACxC,QAAQxB,EAAO,uBAAuBkC,EAAiB,SAAS,EAAGlB,GAAI,SAAS,EAC7EwB,EAA0B9C,EAC9B6C,EACAvC,EAAO,uBAAuBkC,EAAiB,SAAS,CAC1D,EAAE,QAAQ,CAAC,EAKX,GAJAE,EAAkB,OAAyC,CACxD,IAAmBI,EACnB,MAAqBD,CACxB,EACIf,EAAwB,uBAAwB,CAClD,IAAMiB,EAAyBzB,GAAIuB,CAA4B,EAC5D,IAAIf,EAAwB,sBAAsB,EAClD,QAAQU,EAAiB,SAAUlB,GAAI,SAAS,EACnDoB,EAAkB,WAAoC,CACnD,IAAmB1C,EAAwB+C,EAAwBP,EAAiB,QAAQ,EAAE,QAAQ,CAAC,EACvG,MAAqBO,CACxB,CACF,CACA,MAAO,CACL,YAAaL,EACb,iBAAkB,CAChB,aAAc,CACX,IAAmBC,EACnB,MAAqBC,CACxB,EACA,KAAM,CACH,IAAmBH,EAAsB,aAAa,KACtD,MAAqBjB,EACpBiB,EAAsB,aAAa,KACnCnC,EAAO,uBAAuBmC,EAAsB,SAAS,CAC/D,EAAE,QAAQ,CACZ,EACA,SAAU,CACP,IAAmBA,EAAsB,aAAa,SACtD,MAAqBjB,EACpBiB,EAAsB,aAAa,SACnCnC,EAAO,uBAAuBmC,EAAsB,SAAS,CAC/D,EAAE,QAAQ,CACZ,CACF,EACA,aAAcX,EAAwB,aACtC,uBAAwBA,EAAwB,sBAClD,CACF,CAEO,SAASkB,GAAanD,EAAuD,CAClF,OAAOA,EAAO,YAAY,cAAgBA,EAAO,iBAAiB,WACpE,CNlWO,IAAMoD,GAAN,cAA+BC,EAAmB,CAGvD,YAAmBC,EAAmBC,EAAkCC,EAAsC,CAC5G,MAAM,EADW,UAAAF,EAAmB,SAAAC,EAAkC,uBAAAC,EAFxE,eAA2B,KAI3B,CAEA,MAAM,KAAKC,EAAkD,CAC3D,IAAMC,EAAiB,MAAM,KAAK,wBAAwBD,CAAM,EAChE,OAAO,KAAK,mBAAmBC,CAAc,CAC/C,CAEA,MAAM,wBAAwBD,EAA6C,CACzE,IAAME,EAAeC,GAAoB,KAAK,UAAWH,CAAM,EAC/D,OAAO,MAAM,KAAK,kCAAkCE,CAAY,CAClE,CAEA,MAAM,kCAAkCF,EAA+C,CACrF,GAAM,CACJ,OAAAI,EACA,gBAAAC,EACA,mBAAAC,EACA,iBAAAC,EACA,iBAAAC,EACA,eAAAC,EACA,qBAAAC,CACF,EAAIV,EAIEW,EAFiB,KAAK,kBAAkBN,CAAe,EAE3B,QAAQ,KACxCD,EACAG,EACAE,EACAD,EACAE,CACF,EAEA,OAAO,QAAQ,QAAQ,CACrB,KAAMJ,EACN,GAAID,EACJ,KAAMM,EAAW,UAAU,CAC7B,CAAC,CACH,CAEA,MAAM,wBAAwBX,EAA6C,CACzE,IAAMY,EAAe,MAAMC,GAAoB,KAAK,UAAWb,EAAQ,KAAK,GAAG,EACzE,CACJ,OAAAI,EACA,gBAAAC,EACA,mBAAAC,EACA,iBAAAC,EACA,UAAAO,EACA,iBAAAN,EACA,eAAAC,EACA,UAAAM,EACA,IAAAC,EACA,oBAAAC,EACA,SAAAC,CACF,EAAIN,EAEEO,EAAQ,KAAOC,GAAS,EAAE,SAAS,KAAK,EAC1CC,EACAC,EAEAC,EAAWP,EAIf,GAHIE,IACFK,EAAWC,GAAID,CAAQ,EAAE,KAAKL,CAAQ,EAAE,QAAQ,GAE9CH,IAAc,EAAgB,CAChC,IAAMU,EAAO,MAAM,KAAK,4BAA4BzB,EAAQY,EAAcW,CAAQ,EAClFF,EAAaI,EAAK,WAClBH,EAAQG,EAAK,KACf,KAAO,CACL,IAAMC,EAAiB,KAAK,kBAAkBrB,CAAe,EACzDY,IAAwB,cAC1BI,EAAaK,EAAe,QAAQ,cAClCnB,EACAH,EACAI,EACAM,EACAL,EACAU,EACAJ,EACAQ,CACF,EACAD,EAAQ,MAERD,EAAaK,EAAe,QAAQ,cAClCnB,EACAH,EACAI,EACAM,EACAL,EACAU,EACAJ,EACA,CACF,EACAO,EAAQC,EAEZ,CAEA,OAAO,QAAQ,QAAQ,CACrB,KAAMjB,EACN,GAAID,EACJ,MAAOiB,EACP,KAAMD,EAAW,UAAU,CAC7B,CAAC,CACH,CAEA,MAAc,4BACZrB,EACAY,EACAW,EAIC,CACD,GAAM,CAAE,OAAAnB,EAAQ,gBAAAC,EAAiB,UAAAS,EAAW,iBAAAN,EAAkB,oBAAAS,CAAoB,EAAIL,EAEhFe,EAAyC,KAAK,YAAYC,GAA4BvB,CAAe,EACvGgB,EACAC,EAEJ,GAAItB,EAAO,iBAAiB,YAAc,SAAkB,CAC1D,IAAI6B,EACEC,EAAkB,IAAIC,GAAU/B,EAAO,gBAAgB,EACvDgC,EAAc,IAAID,GAAU/B,EAAO,iBAAiB,YAAY,EAChEiC,EAAmB,MAAMC,GAAqBJ,EAAiBE,CAAW,EAC1EG,EAAWC,GACf,KAAK,kBAAkB,mBAA6B,EACpDpC,EAAO,gBACT,EACO,eAAYmC,CAAQ,EAC3B,IAAME,EAAc,MAAa,OAAI,MAAMF,CAAQ,EAAE,QAAQ,MAAM,cAAcF,CAAgB,EACjG,GAAII,GAAa,UAAU,OAAOP,CAAe,EAC/CD,EAAyBS,GAAcL,EAAiB,SAAS,WAAqB,KAAK,SAAS,MAC/F,CACL,IAAMM,EAAgB,MAAMJ,EAAS,WAAW,wBAAwBL,EAAiB,CACvF,KAAME,CACR,CAAC,EACD,GAAIO,EAAc,MAAM,SAAW,GAAK,CAACF,EACvCR,EAAyBS,GAAcL,EAAiB,SAAS,WAAqB,KAAK,SAAS,UAC3FM,EAAc,MAAM,OAAS,EAAG,CACzC,IAAMC,EAAoBD,EAAc,MAAM,CAAC,EAE/C,GAAI,CAACC,GAAmB,OACtB,MAAM,IAAIC,EAAS,oDAAoD,EAEzEZ,EAAyBS,GAAcE,EAAkB,OAAO,SAAS,WAAqB,KAAK,SAAS,CAC9G,KACE,OAAM,IAAIC,EAAS,oCAAoC,CAE3D,CAEIxB,IAAwB,cAC1BI,EAAaM,EAAmB,QAAQ,wBACtCvB,EACAyB,EACArB,EACAM,EACAS,CACF,EACAD,EAAQ,MAERD,EAAaM,EAAmB,QAAQ,wBACtCvB,EACAyB,EACArB,EACAM,EACA,CACF,EACAQ,EAAQC,EAEZ,MACMN,IAAwB,cAC1BI,EAAaM,EAAmB,QAAQ,OAAOvB,EAAQI,EAAkBM,EAAWS,CAAQ,EAC5FD,EAAQ,MAERD,EAAaM,EAAmB,QAAQ,OAAOvB,EAAQI,EAAkBM,EAAW,CAAC,EACrFQ,EAAQC,GAGZ,MAAO,CAAE,WAAAF,EAAY,MAAAC,CAAM,CAC7B,CAEA,MAAc,mBAAmBrB,EAAgC,CAC/D,IAAMyC,EAAc,MAAM,KAAK,KAAK,IAAI,YAAYzC,CAAmC,EAIjF0C,EAAmG,CAAE,qBAAsB,KAAM,aAAc,IAAK,EACpJ,CAAE,gBAAAC,CAAgB,EAAI,MAAM,KAAK,KAAK,IAAI,gBAAgB,CAC9D,GAAI3C,EACJ,IAAKyC,EACL,GAAGC,CACL,CAAC,EACD,MAAO,CAAE,KAAMC,CAAgB,CACjC,CAEQ,YAAoCC,EAAoBxC,EAA4B,CAC1F,OAAO,IAAI,KAAK,KAAK,IAAI,SAASwC,EAASxC,CAAe,CAC5D,CAEQ,kBAAkBA,EAAyC,CACjE,OAAO,KAAK,YAA4ByC,GAAwBzC,CAAe,CACjF,CACF,EO/MO,IAAM0C,GAAN,KAAgF,CACrF,YACUC,EACAC,EACAC,EACAC,EACR,CAJQ,SAAAH,EACA,uBAAAC,EACA,YAAAC,EACA,kBAAAC,CACP,CAEH,MAAM,QAAQC,EAA6BC,EAA4C,CACrF,IAAIC,EACAC,EACAF,GACFC,EAAWF,EACXG,EAAcF,GAEdE,EAAcH,EAEhB,IAAMI,EAAUC,GAAWF,EAAY,MAAOA,EAAY,SAAS,EACnE,OAAO,KAAK,aAAa,2BACvB,CACE,GAAGA,EACH,QAAAC,CACF,EACAF,CACF,CACF,CAEA,MAAM,KAAKJ,EAAiCI,EAA8C,CAGxF,OAFAI,EAAqBR,EAAO,MAAM,EAClCS,EAAuB,SAAUT,EAAO,OAAQA,EAAO,YAAY,QAAQ,EACvEU,GAAaV,CAAM,EACdW,GACLX,EAAO,YAAY,YACnB,KAAK,IACL,KAAK,kBACL,KAAK,OACLI,CACF,EAAE,wBAAwBJ,CAAM,EAE3BW,GACLX,EAAO,YAAY,YACnB,KAAK,IACL,KAAK,kBACL,KAAK,OACLI,CACF,EAAE,wBAAwBJ,CAAM,CAClC,CACF,EC3EA,OAAS,MAAAY,GAAI,WAAAC,GAAS,OAAAC,GAAK,QAAAC,OAAY,wBACvC,OAEE,WAAAC,GACA,aAAAC,EACA,iBAAAC,OAKK,kBACP,OAAS,OAAAC,OAAW,SCyzDb,IAAMC,GAAc,CACzB,QAAS,QACT,KAAM,SACN,aAAc,CACZ,CACE,KAAM,aACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,OACN,KAAM,CACJ,QAAS,gBACX,CACF,CACF,CACF,EACA,CACE,KAAM,iBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,OACN,KAAM,CACJ,QAAS,oBACX,CACF,CACF,CACF,EACA,CACE,KAAM,qBACN,SAAU,CACR,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CAAC,CACT,EACA,CACE,KAAM,UACN,SAAU,CACR,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,YACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,SACN,KAAM,KACR,CACF,CACF,EACA,CACE,KAAM,WACN,SAAU,CACR,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,YACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,WACN,KAAM,KACR,CACF,CACF,EACA,CACE,KAAM,gBACN,SAAU,CACR,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,mBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,YACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,qBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,oBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,WACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,YACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,OACN,KAAM,CACJ,QAAS,YACX,CACF,CACF,CACF,EACA,CACE,KAAM,wBACN,SAAU,CACR,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,mBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,WACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,YACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,oBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,0BACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,UACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,WACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,oBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,OACN,KAAM,CACJ,QAAS,YACX,CACF,CACF,CACF,EACA,CACE,KAAM,OACN,SAAU,CACR,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,WACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,WACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,qBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,mBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,SACN,KAAM,KACR,EACA,CACE,KAAM,mBACN,KAAM,KACR,CACF,CACF,EACA,CACE,KAAM,sBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,OACN,KAAM,CACJ,QAAS,yBACX,CACF,CACF,CACF,EACA,CACE,KAAM,oBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,OACN,KAAM,CACJ,QAAS,uBACX,CACF,CACF,CACF,EACA,CACE,KAAM,iBACN,SAAU,CACR,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,yBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,YACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,mBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,OACN,KAAM,CACJ,QAAS,YACX,CACF,CACF,CACF,EACA,CACE,KAAM,yBACN,SAAU,CACR,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,yBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,YACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,mBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,OACN,KAAM,CACJ,QAAS,YACX,CACF,CACF,CACF,EACA,CACE,KAAM,mBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,YACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,SACN,KAAM,KACR,CACF,CACF,EACA,CACE,KAAM,eACN,SAAU,CACR,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,YACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CAAC,CACT,EACA,CACE,KAAM,WACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,WACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CAAC,CACT,EACA,CACE,KAAM,cACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,aACN,KAAM,CACJ,QAAS,YACX,CACF,CACF,CACF,EACA,CACE,KAAM,aACN,SAAU,CACR,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,aACN,KAAM,CACJ,QAAS,YACX,CACF,CACF,CACF,EACA,CACE,KAAM,gBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,aACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CAAC,CACT,EACA,CACE,KAAM,mBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CAAC,CACT,EACA,CACE,KAAM,iCACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,eACN,KAAM,WACR,CACF,CACF,EACA,CACE,KAAM,gCACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,eACN,KAAM,WACR,CACF,CACF,EACA,CACE,KAAM,wBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,eACN,KAAM,WACR,CACF,CACF,EACA,CACE,KAAM,kBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,aACN,KAAM,KACR,CACF,CACF,EACA,CACE,KAAM,qBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,oBACN,KAAM,KACR,CACF,CACF,EACA,CACE,KAAM,uBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,aACN,KAAM,KACR,CACF,CACF,EACA,CACE,KAAM,sBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,mBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,UACN,KAAM,IACR,EACA,CACE,KAAM,eACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,CACF,CACF,EACA,CACE,KAAM,yBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,mBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,UACN,KAAM,IACR,EACA,CACE,KAAM,eACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,CACF,CACF,EACA,CACE,KAAM,mBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,aACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CAAC,CACT,EACA,CACE,KAAM,sBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,YACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CAAC,CACT,CACF,EACA,SAAU,CACR,CACE,KAAM,cACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,UACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,EACA,CACE,KAAM,UACN,KAAM,IACR,EACA,CACE,KAAM,WACN,KAAM,KACR,CACF,CACF,CACF,EACA,CACE,KAAM,SACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,QACN,KAAM,WACR,EACA,CACE,KAAM,8BACN,KAAM,WACR,EACA,CACE,KAAM,6BACN,KAAM,WACR,EACA,CACE,KAAM,qBACN,KAAM,WACR,EACA,CACE,KAAM,aACN,KAAM,WACR,EACA,CACE,KAAM,gBACN,KAAM,WACR,EACA,CACE,KAAM,oBACN,KAAM,IACR,EACA,CACE,KAAM,UACN,KAAM,MACR,EACA,CACE,KAAM,aACN,KAAM,MACR,EACA,CACE,KAAM,cACN,KAAM,MACR,CACF,CACF,CACF,EACA,CACE,KAAM,OACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,SACN,KAAM,WACR,EACA,CACE,KAAM,mBACN,KAAM,WACR,EACA,CACE,KAAM,SACN,KAAM,KACR,EACA,CACE,KAAM,aACN,KAAM,KACR,EACA,CACE,KAAM,YACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,EACA,CACE,KAAM,qBACN,KAAM,IACR,EACA,CACE,KAAM,eACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,EACA,CACE,KAAM,QACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,EACA,CACE,KAAM,YACN,KAAM,CACJ,QAAS,WACX,CACF,EACA,CACE,KAAM,OACN,KAAM,KACR,EACA,CACE,KAAM,MACN,KAAM,KACR,CACF,CACF,CACF,EACA,CACE,KAAM,mBACN,KAAM,CACJ,KAAM,SACN,OAAQ,CAAC,CACX,CACF,EACA,CACE,KAAM,OACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,OACN,KAAM,WACR,EACA,CACE,KAAM,IACN,KAAM,KACR,EACA,CACE,KAAM,IACN,KAAM,KACR,EACA,CACE,KAAM,eACN,KAAM,KACR,EACA,CACE,KAAM,cACN,KAAM,KACR,EACA,CACE,KAAM,WACN,KAAM,KACR,EACA,CACE,KAAM,WACN,KAAM,IACR,EACA,CACE,KAAM,gBACN,KAAM,KACR,EACA,CACE,KAAM,aACN,KAAM,KACR,EACA,CACE,KAAM,kBACN,KAAM,KACR,EACA,CACE,KAAM,qBACN,KAAM,MACR,EACA,CACE,KAAM,iBACN,KAAM,KACR,EACA,CACE,KAAM,oBACN,KAAM,KACR,CACF,CACF,CACF,EACA,CACE,KAAM,SACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,OACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,EACA,CACE,KAAM,SACN,KAAM,KACR,EACA,CACE,KAAM,MACN,KAAM,KACR,EACA,CACE,KAAM,aACN,KAAM,KACR,EACA,CACE,KAAM,OACN,KAAM,KACR,CACF,CACF,CACF,EACA,CACE,KAAM,cACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,cACN,KAAM,WACR,EACA,CACE,KAAM,OACN,KAAM,WACR,EACA,CACE,KAAM,WACN,KAAM,KACR,EACA,CACE,KAAM,aACN,KAAM,KACR,CACF,CACF,CACF,CACF,EACA,MAAO,CACL,CACE,KAAM,0BACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,qBACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,EACA,CACE,KAAM,UACN,KAAM,IACR,EACA,CACE,KAAM,WACN,KAAM,KACR,CACF,CACF,CACF,EACA,CACE,KAAM,wBACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,qBACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,EACA,CACE,KAAM,UACN,KAAM,IACR,EACA,CACE,KAAM,WACN,KAAM,KACR,CACF,CACF,CACF,EACA,CACE,KAAM,iBACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,8BACN,KAAM,WACR,EACA,CACE,KAAM,6BACN,KAAM,WACR,EACA,CACE,KAAM,qBACN,KAAM,WACR,CACF,CACF,CACF,EACA,CACE,KAAM,qBACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,IACN,KAAM,KACR,EACA,CACE,KAAM,aACN,KAAM,KACR,EACA,CACE,KAAM,kBACN,KAAM,KACR,EACA,CACE,KAAM,oBACN,KAAM,KACR,CACF,CACF,CACF,EACA,CACE,KAAM,aACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,QACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,EACA,CACE,KAAM,YACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,EACA,CACE,KAAM,qBACN,KAAM,IACR,EACA,CACE,KAAM,eACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,EACA,CACE,KAAM,aACN,KAAM,KACR,CACF,CACF,CACF,EACA,CACE,KAAM,aACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,QACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,EACA,CACE,KAAM,SACN,KAAM,KACR,EACA,CACE,KAAM,YACN,KAAM,WACR,EACA,CACE,KAAM,gBACN,KAAM,IACR,EACA,CACE,KAAM,eACN,KAAM,WACR,EACA,CACE,KAAM,YACN,KAAM,CACJ,QAAS,WACX,CACF,EACA,CACE,KAAM,OACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,EACA,CACE,KAAM,mBACN,KAAM,KACR,CACF,CACF,CACF,EACA,CACE,KAAM,cACN,KAAM,CACJ,KAAM,OACN,SAAU,CACR,CACE,KAAM,YACR,CACF,CACF,CACF,EACA,CACE,KAAM,YACN,KAAM,CACJ,KAAM,OACN,SAAU,CACR,CACE,KAAM,MACR,EACA,CACE,KAAM,WACR,EACA,CACE,KAAM,UACR,CACF,CACF,CACF,EACA,CACE,KAAM,aACN,KAAM,CACJ,KAAM,OACN,SAAU,CACR,CACE,KAAM,SACR,EACA,CACE,KAAM,UACR,EACA,CACE,KAAM,MACR,CACF,CACF,CACF,CACF,EACA,OAAQ,CACN,CACE,KAAM,IACN,KAAM,4BACN,IAAK,2CACP,EACA,CACE,KAAM,KACN,KAAM,wBACN,IAAK,2CACP,EACA,CACE,KAAM,KACN,KAAM,mBACN,IAAK,gDACP,EACA,CACE,KAAM,KACN,KAAM,cACN,IAAK,2BACP,EACA,CACE,KAAM,KACN,KAAM,eACN,IAAK,mBACP,EACA,CACE,KAAM,KACN,KAAM,oBACN,IAAK,oBACP,EACA,CACE,KAAM,KACN,KAAM,aACN,IAAK,aACP,EACA,CACE,KAAM,KACN,KAAM,cACN,IAAK,cACP,EACA,CACE,KAAM,KACN,KAAM,iBACN,IAAK,yBACP,EACA,CACE,KAAM,KACN,KAAM,uBACN,IAAK,wBACP,EACA,CACE,KAAM,KACN,KAAM,6BACN,IAAK,8BACP,EACA,CACE,KAAM,KACN,KAAM,kBACN,IAAK,iBACP,EACA,CACE,KAAM,KACN,KAAM,eACN,IAAK,mBACP,CACF,CACF,ECviGO,IAAMC,GAAkB,CAC7B,QAAS,QACT,KAAM,cACN,aAAc,CACZ,CACE,KAAM,aACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,aACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,OACN,KAAM,CACJ,QAAS,gBACX,CACF,CACF,CACF,EACA,CACE,KAAM,SACN,SAAU,CACR,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,uBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,aACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,4BACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,4BACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,iBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,aACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,0BACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,iBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,WACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,YACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,OACN,KAAM,CACJ,QAAS,YACX,CACF,CACF,CACF,EACA,CACE,KAAM,sBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,aACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,OACN,KAAM,CACJ,QAAS,yBACX,CACF,CACF,CACF,EACA,CACE,KAAM,oBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,aACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,OACN,KAAM,CACJ,QAAS,uBACX,CACF,CACF,CACF,EACA,CACE,KAAM,mBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,aACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,aACN,KAAM,KACR,CACF,CACF,EACA,CACE,KAAM,wBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,aACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,eACN,KAAM,WACR,CACF,CACF,EACA,CACE,KAAM,mBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,YACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,aACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,SACN,KAAM,KACR,CACF,CACF,EACA,CACE,KAAM,mBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,aACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,aACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CAAC,CACT,EACA,CACE,KAAM,8BACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,aACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,eACN,KAAM,WACR,CACF,CACF,CACF,EACA,SAAU,CACR,CACE,KAAM,aACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,OACN,KAAM,WACR,EACA,CACE,KAAM,QACN,KAAM,WACR,EACA,CACE,KAAM,2BACN,KAAM,WACR,EACA,CACE,KAAM,qBACN,KAAM,WACR,EACA,CACE,KAAM,oBACN,KAAM,IACR,EACA,CACE,KAAM,kBACN,KAAM,KACR,EACA,CACE,KAAM,iBACN,KAAM,KACR,CACF,CACF,CACF,EACA,CACE,KAAM,cACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,UACN,KAAM,IACR,EACA,CACE,KAAM,WACN,KAAM,KACR,EACA,CACE,KAAM,SACN,KAAM,KACR,CACF,CACF,CACF,EACA,CACE,KAAM,OACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,SACN,KAAM,WACR,EACA,CACE,KAAM,SACN,KAAM,KACR,EACA,CACE,KAAM,WACN,KAAM,KACR,EACA,CACE,KAAM,aACN,KAAM,KACR,EACA,CACE,KAAM,YACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,EACA,CACE,KAAM,qBACN,KAAM,I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",
|
|
6
6
|
"names": ["exports$3", "_dewExec$2", "dew$2", "byteLength", "toByteArray", "fromByteArray", "lookup", "revLookup", "Arr", "code", "i", "len", "getLens", "b64", "validLen", "placeHoldersLen", "lens", "_byteLength", "tmp", "arr", "curByte", "tripletToBase64", "num", "encodeChunk", "uint8", "start", "end", "output", "extraBytes", "parts", "maxChunkLength", "len2", "exports$2", "_dewExec$1", "dew$1", "buffer", "offset", "isLE", "mLen", "nBytes", "e", "m", "eLen", "eMax", "eBias", "nBits", "d", "s", "value", "c", "rt", "exports$1", "_dewExec", "dew", "base64", "ieee754", "customInspectSymbol", "Buffer", "SlowBuffer", "K_MAX_LENGTH", "typedArraySupport", "proto", "createBuffer", "length", "buf", "arg", "encodingOrOffset", "allocUnsafe", "from", "fromString", "fromArrayView", "isInstance", "fromArrayBuffer", "valueOf", "b", "fromObject", "assertSize", "size", "alloc", "fill", "encoding", "checked", "string", "actual", "fromArrayLike", "array", "arrayView", "copy", "byteOffset", "obj", "numberIsNaN", "a", "x", "y", "list", "pos", "mustMatch", "loweredCase", "utf8ToBytes", "base64ToBytes", "slowToString", "hexSlice", "utf8Slice", "asciiSlice", "latin1Slice", "base64Slice", "utf16leSlice", "swap", "n", "str", "max", "target", "thisStart", "thisEnd", "thisCopy", "targetCopy", "bidirectionalIndexOf", "val", "dir", "arrayIndexOf", "indexSize", "arrLength", "valLength", "read", "foundIndex", "found", "j", "hexWrite", "remaining", "strLen", "parsed", "utf8Write", "blitBuffer", "asciiWrite", "asciiToBytes", "base64Write", "ucs2Write", "utf16leToBytes", "res", "firstByte", "codePoint", "bytesPerSequence", "secondByte", "thirdByte", "fourthByte", "tempCodePoint", "decodeCodePointsArray", "MAX_ARGUMENTS_LENGTH", "codePoints", "ret", "out", "hexSliceLookupTable", "bytes", "newBuf", "checkOffset", "ext", "noAssert", "mul", "defineBigIntMethod", "validateNumber", "first", "last", "boundsError", "lo", "hi", "checkInt", "min", "maxBytes", "wrtBigUInt64LE", "checkIntBI", "wrtBigUInt64BE", "limit", "sub", "checkIEEE754", "writeFloat", "littleEndian", "writeDouble", "targetStart", "errors", "E", "sym", "getMessage", "Base", "name", "range", "input", "msg", "received", "addNumericalSeparator", "checkBounds", "type", "INVALID_BASE64_RE", "base64clean", "units", "leadSurrogate", "byteArray", "src", "dst", "alphabet", "table", "i16", "fn", "BufferBigIntNotDefined", "exports", "INSPECT_MAX_BYTES", "kMaxLength", "mainnet", "nodeUrlsDefault", "nodeRpcUrlsDefault", "Big", "SdkRootError", "code", "message", "SdkError", "InvalidAmountError", "AmountNotEnoughError", "InsufficientPoolLiquidityError", "JupiterError", "InvalidGasFeePaymentOptionError", "InvalidMessengerOptionError", "MethodNotSupportedError", "VerifyTxError", "InvalidTxError", "ExtraGasMaxLimitExceededError", "ArgumentInvalidDecimalsError", "argName", "decimalsIs", "decimalsRequired", "TimeoutError", "NodeRpcUrlNotInitializedError", "chainSymbol", "CCTPDoesNotSupportedError", "TxTooLargeError", "ErrorCode", "ChainSymbol", "ChainType", "chainDecimalsByType", "defaultProperties", "Chains", "chainProperties", "additionalProperties", "chainSymbol", "property", "SdkError", "chainType", "axios", "VERSION", "Big", "BN", "getFeePercent", "input", "output", "Big", "toSystemPrecision", "amount", "decimals", "convertAmountPrecision", "fromSystemPrecision", "decimalsFrom", "decimalsTo", "dif", "toPowBase10", "convertFloatAmountToInt", "amountFloat", "convertIntAmountToFloat", "amountInt", "amountValue", "calculatePoolInfoImbalance", "poolInfo", "swapToVUsd", "feeShare", "fee", "amountWithoutFee", "inSystemPrecision", "tokenBalance", "vUsdNewAmount", "getY", "swapFromVUsd", "vUsdBalance", "newAmount", "result", "getSwapFromVUsdPoolInfo", "vUsdAmount", "swapToVUsdReverse", "InsufficientPoolLiquidityError", "reversedFeeShare", "swapFromVUsdReverse", "amountWithFee", "x", "a", "d", "commonPartBig", "dCubed", "commonPartSquared", "sqrtBig", "dividerBig", "getEarned", "userLpAmount", "userRewardDebt", "accRewardPerShareP", "p", "userLpAmountBN", "BN", "accRewardPerSharePBN", "userRewardDebtBN", "aprInPercents", "apr", "getD", "aValue", "y", "xy", "xPlusY", "b", "aSquared", "bCubed", "a2b3", "c", "cbrtAPlusC", "cbrtAMinusC", "AddressStatus", "Messenger", "mapChainDetailsResponseToChainDetailsMap", "response", "map", "entry", "chainSymbol", "chainDetailsDTO", "chainDetails", "mapChainDetailsFromDto", "mapChainDetailsResponseToPoolInfoMap", "poolInfoMap", "chainSymbolValue", "token", "poolKey", "mapPoolKeyObjectToPoolKey", "imbalance", "calculatePoolInfoImbalance", "mapTokenWithChainDetailsFromDto", "dto", "chainName", "chainDetailsWithoutName", "_poolInfo", "dtoWithoutPoolInfo", "mapMessengerKeyDtoToMessenger", "mapTransferTimeFromDto", "result", "key", "value", "mapMessengerTransferTimeFromDto", "messengerTransferTime", "messenger", "basicChainProperties", "Chains", "tokenDto", "mapPoolKeyObjectToPoolKey", "poolKeyObject", "mapChainDetailsMapToPoolKeyObjects", "chainDetailsMap", "result", "chainSymbolValue", "chainDetails", "chainSymbol", "token", "mapPoolInfoResponseToPoolInfoMap", "responseBody", "poolInfoMap", "poolInfoByAddress", "poolAddress", "poolInfo", "calculatePoolInfoImbalance", "ApiClientImpl", "params", "axios", "VERSION", "data", "mapChainDetailsResponseToChainDetailsMap", "mapChainDetailsResponseToPoolInfoMap", "chainSymbol", "address", "txId", "args", "pools", "poolKeys", "mapPoolInfoResponseToPoolInfoMap", "Cache", "_20_SECONDS_TTL", "_55_SECONDS_TTL", "ApiClientCaching", "apiClient", "TOKEN_INFO_CACHE_KEY", "tokenInfo", "tokenInfoPromise", "chainSymbol", "address", "GAS_BALANCE_CACHE_KEY", "gasBalance", "gasBalancePromise", "PENDING_INFO_CACHE_KEY", "pendingInfo", "pendingInfoPromise", "args", "RECEIVE_TX_COST_KEY", "transactionCost", "fetchedTransactionCost", "txId", "pools", "AllbridgeCoreClientImpl", "apiClient", "map", "chainDetails", "chainSymbol", "address", "txId", "args", "pools", "AllbridgeCoreClientFilteredImpl", "client", "params", "type", "chainDetailsMapWithFlags", "result", "key", "chainDetailsWithTokensWithFlag", "filterAndConvertToTokenWithChainDetails", "chainSymbol", "address", "txId", "args", "poolKeyObject", "poolInfo", "poolKeyObjects", "tokens", "isStaging", "token", "convertToTokenWithChainDetails", "flags", "rest", "Cache", "_55_SECONDS_TTL", "AllbridgeCoreClientPoolInfoCaching", "client", "PoolInfoCache", "chainSymbol", "txId", "args", "address", "poolKeyObject", "poolInfo", "poolInfoMap", "result", "mapPoolKeyObjectToPoolKey", "SdkError", "poolKeyObjects", "mapChainDetailsMapToPoolKeyObjects", "Cache", "key", "value", "TronWeb", "Web3", "Big", "getPoolInfoByToken", "api", "sourceChainToken", "validateAmountGtZero", "amount", "Big", "InvalidAmountError", "validateAmountDecimals", "argName", "amountFloat", "decimalRequired", "integerPart", "fractionalPart", "ArgumentInvalidDecimalsError", "promiseWithTimeout", "promise", "msg", "timeoutMs", "resolve", "reject", "TimeoutError", "promiseWithTimeoutAndRetries", "toTry", "maxRetries", "attemptCount", "withExponentialBackoff", "fn", "keepWaitingIf", "secondsToWait", "exponentialFactor", "verbose", "attempts", "count", "initialAttempt", "waitUntil", "waitTime", "totalWaitTime", "lastAttempt", "res", "nextAttempt", "anchor", "PublicKey", "Big", "Bridge_default", "CctpBridge_default", "anchor", "PublicKey", "getAssociatedAccount", "publicKey", "mintAccount", "getConfigAccount", "programId", "configPda", "getLockAccount", "nonce", "bridgeProgramId", "lockPda", "getPriceAccount", "chainId", "gasOracleProgramId", "pricePda", "getAuthorityAccount", "configAccount", "poolAuthority", "getCctpAuthorityAccount", "cctpBridgeAccount", "cctpBridgeProgramId", "getBridgeTokenAccount", "poolPda", "getOtherChainTokenAccount", "token", "otherChainTokenPda", "Buffer", "getChainBridgeAccount", "chainBridgePda", "getGasUsageAccount", "messengerProgramId", "getSendMessageAccount", "messageWithSigner", "sentMessagePda", "getUserDepositAccount", "userPublicKey", "tokenMintAccount", "userDepositPda", "getCctpBridgeAccount", "getCctpBridgeTokenAccount", "getCctpLockAccount", "messageSentEventDataAccount", "tokenMessengerEventAuthority", "getCctpAccounts", "domain", "cctpTransmitterProgramId", "cctpTokenMessengerMinter", "messageTransmitterAccount", "findProgramAddress", "tokenMessenger", "tokenMinter", "localToken", "remoteTokenMessengerKey", "authorityPda", "label", "extraSeeds", "seeds", "extraSeed", "AnchorProvider", "Connection", "PublicKey", "buildAnchorProvider", "solanaRpcUrl", "accountAddress", "connection", "publicKey", "ChainBridgeService", "PublicKey", "Address", "Big", "randomBytes", "TronWebLib", "formatAddress", "address", "from", "to", "buffer", "evmAddressToBuffer32", "PublicKey", "tronAddressToBuffer32", "Address", "hexToBuffer", "hex", "Buffer", "buff", "ethAddress", "tronAddressToEthAddress", "bufferToSize", "size", "result", "getNonce", "randomBytes", "getNonceBigInt", "bigint", "prepareTxSwapParams", "bridgeChainType", "params", "txSwapParams", "sourceToken", "convertFloatAmountToInt", "formatAddress", "prepareTxSendParams", "api", "txSendParams", "toChainType", "Chains", "CCTPDoesNotSupportedError", "fee", "feeFormat", "gasFeeOption", "getGasFeeOptions", "InvalidGasFeePaymentOptionError", "extraGas", "extraGasFormat", "validateExtraGasNotExceeded", "validateAmountEnough", "amountInt", "decimals", "feeInt", "extraGasInt", "amountTotal", "Big", "AmountNotEnoughError", "convertIntAmountToFloat", "sourceAllbridgeChainId", "sourceChainType", "destinationAllbridgeChainId", "sourceChainTokenDecimals", "messenger", "transactionCostResponse", "gasFeeOptions", "gasFeeIntWithStables", "convertAmountPrecision", "gasFeePaymentMethod", "destinationToken", "extraGasMaxLimit", "getExtraGasMaxLimits", "extraGasMaxIntLimit", "ExtraGasMaxLimitExceededError", "sourceChainToken", "destinationChainToken", "extraGasMaxLimits", "maxAmount", "maxAmountFloat", "maxAmountFloatInSourceNative", "maxAmountInSourceNative", "maxAmountFloatInStable", "isSendParams", "EvmBridgeService", "ChainBridgeService", "web3", "api", "nodeRpcUrlsConfig", "params", "rawTransaction", "txSwapParams", "prepareTxSwapParams", "amount", "contractAddress", "fromAccountAddress", "fromTokenAddress", "toAccountAddress", "toTokenAddress", "minimumReceiveAmount", "swapMethod", "txSendParams", "prepareTxSendParams", "toChainId", "messenger", "fee", "gasFeePaymentMethod", "extraGas", "nonce", "getNonce", "sendMethod", "value", "totalFee", "Big", "cctp", "bridgeContract", "cctpBridgeContract", "CctpBridge_default", "recipientWalletAddress", "receiverAccount", "PublicKey", "receiveMint", "receiveUserToken", "getAssociatedAccount", "provider", "buildAnchorProvider", "accountData", "formatAddress", "tokenAccounts", "firstTokenAccount", "SdkError", "estimateGas", "feeOptions", "transactionHash", "abiItem", "Bridge_default", "DefaultRawBridgeTransactionBuilder", "api", "nodeRpcUrlsConfig", "params", "tokenService", "a", "b", "provider", "approveData", "spender", "getSpender", "validateAmountGtZero", "validateAmountDecimals", "isSendParams", "getChainBridgeService", "BN", "Program", "Spl", "web3", "Keypair", "PublicKey", "SystemProgram", "Big", "IDL", "IDL", "Spl", "Big", "Web3", "getTokenAccountData", "account", "provider", "Spl", "getVUsdAmount", "amount", "bridge", "poolAccount", "poolAccountInfo", "decimals", "feeShare", "Big", "poolInfo", "swapToVUsd", "getMessage", "args", "recipient", "sourceChainId", "destinationsChainId", "receiveToken", "nonce", "messenger", "chainBridge", "message", "Web3", "SdkError", "hash", "Buffer", "hashBuffer", "messageWithSigner", "InvalidTxError", "hashWithSigner", "hashWithSignerBuffer", "ComputeBudgetInstruction", "ComputeBudgetProgram", "Connection", "TransactionMessage", "Big", "AddressLookupTableAccount", "fetchAddressLookupTableAccountsFromTx", "transaction", "connection", "lookup", "AddressLookupTableAccount", "res", "SdkError", "SolanaAutoTxFee", "addUnitLimitAndUnitPriceToTx", "transaction", "txFeeParams", "solanaRpcUrl", "connection", "Connection", "simUnitsConsumed", "addUnitLimitAndUnitPriceToInstructions", "addUnitLimitAndUnitPriceToVersionedTx", "addressLookupTableAccounts", "fetchAddressLookupTableAccountsFromTx", "message", "TransactionMessage", "TxTooLargeError", "instructions", "units", "updateUnitLimit", "solanaTxFee", "SolanaAutoTxFee", "updateUnitPrice", "pricePerUnitInMicroLamports", "Big", "toPowBase10", "computeUnitLimitIndex", "instruction", "ComputeBudgetProgram", "ComputeBudgetInstruction", "computeUnitLimitInstruction", "computeUnitPriceIndex", "unitPrice", "getAveragePrioritizationFee", "computeUnitPriceInstruction", "prioritizationFees", "sum", "prioritizationFee", "NATIVE_MINT", "Connection", "TransactionMessage", "VersionedTransaction", "axios", "AxiosError", "JupiterService", "solanaRpcUrl", "jupiterUrl", "Connection", "userAddress", "stableTokenAddress", "amount", "exactOut", "quoteResponse", "swapMode", "axios", "NATIVE_MINT", "err", "AxiosError", "JupiterError", "inAmount", "transactionResponse", "swapTransaction", "swapTransactionBuf", "Buffer", "tx", "VersionedTransaction", "transaction", "sdkTx", "addressLookupTableAccounts", "fetchAddressLookupTableAccountsFromTx", "sdkAddressLookupTableAccounts", "message", "TransactionMessage", "sdkMessage", "signature", "SdkError", "e", "COMPUTE_UNIT_LIMIT", "JUP_ADD_INDEX", "SolanaBridgeService", "ChainBridgeService", "solanaRpcUrl", "params", "api", "JupiterService", "txSwapParams", "prepareTxSwapParams", "poolAddress", "toPoolAddress", "txFeeParams", "fromAccountAddress", "amount", "contractAddress", "fromTokenAddress", "toTokenAddress", "toAccountAddress", "minimumReceiveAmount", "account", "bridgeAddress", "tokenAddress", "receiveTokenAddress", "receivePoolAddress", "receiverOriginal", "userAccount", "PublicKey", "provider", "buildAnchorProvider", "bridge", "Program", "IDL", "bridgeAuthority", "getAuthorityAccount", "configAccount", "getConfigAccount", "sendMint", "sendBridgeToken", "getBridgeTokenAccount", "sendPool", "sendUserToken", "getAssociatedAccount", "receiverAccount", "receiveMint", "receiveBridgeToken", "receivePool", "receiveUserToken", "preInstructions", "web3", "getTokenAccountData", "createReceiveUserTokenInstruction", "Spl", "transaction", "BN", "connection", "addUnitLimitAndUnitPriceToTx", "txSendParams", "prepareTxSendParams", "solTxSendParams", "isJupiterForStableCoin", "jupTx", "tx", "solTxSendUpdatedParams", "e", "SdkRootError", "JupiterError", "swapAndBridgeTx", "requiredMessageSigner", "swapAndBridgeSolData", "messageAccount", "messageSentEventDataKeypair", "addUnitLimitAndUnitPriceToVersionedTx", "exactOut", "fee", "extraGas", "gasFeePaymentMethod", "amountToProcess", "Big", "amountIn", "newAmount", "AmountNotEnoughError", "convertIntAmountToFloat", "tokenDecimals", "sourceNativeTokenPrice", "Chains", "fromChainId", "toChainId", "destinationChainId", "receiverInBuffer32", "sourceChainId", "nonce", "getNonce", "poolAccount", "vUsdAmount", "getVUsdAmount", "lockAccount", "getLockAccount", "userToken", "bridgeTokenAccount", "chainBridgeAccount", "getChainBridgeAccount", "otherBridgeTokenAccount", "getOtherChainTokenAccount", "Buffer", "configAccountInfo", "priceAccount", "getPriceAccount", "thisGasPriceAccount", "message", "getMessage", "swapAndBridgeData", "vusdAmount", "recipient", "receiveToken", "mint", "config", "gasPrice", "thisGasPrice", "extraGasInstruction", "allbridgeMessengerProgramId", "messengerGasUsageAccount", "getGasUsageAccount", "messengerConfig", "sentMessageAccount", "getSendMessageAccount", "instructions", "allbridgeTableAccount", "res", "SdkError", "messageV0", "wormholeProgramId", "whBridgeAccount", "whFeeCollectorAccount", "whSequenceAccount", "wormholeMessengerConfigAccount", "Keypair", "bridgeAccountInfo", "feeLamports", "feeInstruction", "SystemProgram", "accounts", "cctpAddress", "CCTPDoesNotSupportedError", "CHAIN_ID", "cctpBridge", "cctpBridgeAccount", "getCctpBridgeAccount", "getCctpAuthorityAccount", "getCctpBridgeTokenAccount", "destinationChainSymbol", "domain", "cctpTransmitterProgramIdAddress", "cctpTokenMessengerMinterAddress", "cctpTransmitterProgramId", "cctpTokenMessengerMinter", "messageTransmitterAccount", "tokenMessenger", "tokenMessengerEventAuthority", "tokenMinter", "localToken", "remoteTokenMessengerKey", "authorityPda", "getCctpAccounts", "getCctpLockAccount", "MethodNotSupportedError", "Address", "contract", "Big", "contract", "ContractSpec", "ContractClient", "BridgeContract", "ContractClient", "options", "ContractSpec", "SrbBridgeService", "ChainBridgeService", "nodeRpcUrlsConfig", "params", "api", "txSendParams", "prepareTxSendParams", "amount", "contractAddress", "fromAccountAddress", "fromTokenAddress", "toChainId", "toAccountAddress", "toTokenAddress", "fee", "gasFeePaymentMethod", "extraGas", "totalFee", "Big", "contract", "BridgeContract", "tx", "Address", "Buffer", "getNonceBigInt", "txSwapParams", "prepareTxSwapParams", "minimumReceiveAmount", "MethodNotSupportedError", "address", "sender", "config", "Big", "BN", "amountToHex", "amount", "sleep", "ms", "resolve", "promisify", "func", "args", "reject", "err", "result", "sendRawTransaction", "tronWeb", "rawTransaction", "signedTx", "InvalidTxError", "transactionHash", "verifyTx", "txId", "timeout", "start", "VerifyTxError", "result", "sleep", "TronBridgeService", "ChainBridgeService", "tronWeb", "api", "params", "txSendParams", "prepareTxSendParams", "rawTransaction", "sendRawTransaction", "txSwapParams", "prepareTxSwapParams", "amount", "contractAddress", "fromAccountAddress", "fromTokenAddress", "toAccountAddress", "toTokenAddress", "minimumReceiveAmount", "parameters", "toChainId", "messenger", "fee", "gasFeePaymentMethod", "extraGas", "totalFee", "Big", "nonce", "getNonce", "value", "methodSignature", "fromAddress", "transactionObject", "SdkError", "DefaultBridgeService", "api", "nodeRpcUrlsConfig", "params", "tokenService", "DefaultRawBridgeTransactionBuilder", "a", "b", "provider", "spender", "getSpender", "approveData", "validateAmountGtZero", "validateAmountDecimals", "getChainBridgeService", "token", "messenger", "CCTPDoesNotSupportedError", "chainSymbol", "Chains", "EvmBridgeService", "nodeRpcUrl", "Web3", "TronBridgeService", "TronWeb", "SolanaBridgeService", "SrbBridgeService", "Big", "Cache", "TronWeb", "Web3", "Big", "depositAmountToVUsd", "amount", "aValue", "dValue", "tokenBalance", "vUsdBalance", "amountSP", "convertFloatAmountToInt", "amountSPBig", "Big", "oldD", "oldBalance", "newTokenBalance", "newVUsdBalance", "halfAmount", "getD", "vUsdToWithdrawalAmount", "lpAmount", "lpAmountSP", "Pool_default", "UserBalance", "userInfo", "convertIntAmountToFloat", "poolInfo", "decimals", "earned", "getEarned", "ChainPoolService", "EvmPoolService", "ChainPoolService", "web3", "api", "accountAddress", "token", "userBalanceInfo", "promiseWithTimeout", "promiseWithTimeoutAndRetries", "batch", "contract", "Pool_default", "arr", "methodName", "promisify", "cb", "rewardDebt", "lpAmount", "UserBalance", "poolInfo", "aValue", "dValue", "tokenBalance", "vUsdBalance", "totalLpAmount", "accRewardPerShareP", "tokenBalanceStr", "vUsdBalanceStr", "imbalance", "calculatePoolInfoImbalance", "poolContract", "params", "abiItem", "contractAddress", "DefaultRawPoolTransactionBuilder", "api", "nodeRpcUrlsConfig", "params", "tokenService", "a", "b", "provider", "approveData", "validateAmountGtZero", "validateAmountDecimals", "convertFloatAmountToInt", "getChainPoolService", "AnchorProvider", "BN", "Program", "Spl", "web3", "Connection", "PublicKey", "SolanaPoolService", "ChainPoolService", "solanaRpcUrl", "api", "accountAddress", "token", "provider", "bridge", "poolAccount", "PublicKey", "poolAccountInfo", "userDepositAccount", "getUserDepositAccount", "lpAmount", "rewardDebt", "UserBalance", "pool", "vUsdBalance", "tokenBalance", "imbalance", "calculatePoolInfoImbalance", "params", "accounts", "preInstructions", "tx", "BN", "addUnitLimitAndUnitPriceToTx", "bridgeAddress", "Program", "IDL", "connection", "Connection", "publicKey", "AnchorProvider", "poolAddress", "account", "user", "configAccount", "getConfigAccount", "bridgeAuthority", "getAuthorityAccount", "tokenMintAccount", "userToken", "getAssociatedAccount", "bridgeTokenAccount", "getBridgeTokenAccount", "web3", "getTokenAccountData", "createUserTokenInstruction", "Spl", "instruction", "contract", "contract", "ContractSpec", "ContractClient", "PoolContract", "ContractClient", "options", "ContractSpec", "SrbPoolService", "ChainPoolService", "nodeRpcUrlsConfig", "params", "api", "accountAddress", "token", "result", "SdkError", "userDeposit", "UserBalance", "pool", "calculatePoolInfoImbalance", "address", "sender", "config", "PoolContract", "Web3", "TronPoolService", "ChainPoolService", "tronWeb", "api", "tronJsonRpc", "Web3", "accountAddress", "token", "userBalanceInfo", "web3", "batch", "contract", "Pool_default", "tronAddressToEthAddress", "userAccount", "arr", "methodName", "promisify", "cb", "rewardDebt", "lpAmount", "UserBalance", "poolInfo", "aValue", "dValue", "tokenBalance", "vUsdBalance", "totalLpAmount", "accRewardPerShareP", "tokenBalanceStr", "vUsdBalanceStr", "imbalance", "calculatePoolInfoImbalance", "poolContract", "params", "amount", "parameter", "contractAddress", "methodSignature", "value", "fromAddress", "transactionObject", "SdkError", "DefaultLiquidityPoolService", "api", "nodeRpcUrlsConfig", "params", "tokenService", "DefaultRawPoolTransactionBuilder", "ttl", "Cache", "a", "b", "provider", "approveData", "amount", "token", "validateAmountGtZero", "validateAmountDecimals", "pool", "vUsdBalance", "tokenBalance", "aValue", "dValue", "vUsd", "depositAmountToVUsd", "convertIntAmountToFloat", "accountAddress", "tokenAmountInSP", "vUsdToWithdrawalAmount", "tokenAmount", "fromSystemPrecision", "earned", "commonAmount", "Big", "getChainPoolService", "poolKey", "fromCache", "poolInfo", "chainSymbol", "Chains", "EvmPoolService", "nodeRpcUrl", "Web3", "tronJsonRpc", "TronPoolService", "tronWeb", "TronWeb", "SolanaPoolService", "SrbPoolService", "Big", "swapAndBridgeFeeCalculation", "amountInTokenPrecision", "sourcePoolInfo", "destinationPoolInfo", "swapToVUsdCalcResult", "swapToVUsd", "swapFromVUsdCalcResult", "swapFromVUsd", "swapAndBridgeFeeCalculationReverse", "swapToVUsdReverse", "swapFromVUsdReverse", "amount", "feeShare", "decimals", "poolInfo", "amountValue", "Big", "fee", "amountWithoutFee", "calcSwapToVUsd", "toSystemPrecision", "amountInSystemPrecision", "tokenBalance", "vUsdNewAmount", "getY", "vUsdBalance", "newAmount", "result", "fromSystemPrecision", "resultWithoutFee", "reversedFeeShare", "amountWithFee", "calcSwapToVUsdReverse", "inSystemPrecision", "Big", "getSendAmountDetails", "amountInTokenPrecision", "sourceToken", "sourcePool", "destToken", "destPool", "vUsd", "swapToVUsd", "vUsdInTokenPrecision", "fromSystemPrecision", "result", "swapFromVUsd", "swapToFeeInt", "Big", "swapFromFeeInt", "convertIntAmountToFloat", "Connection", "PublicKey", "TransactionMessage", "DefaultSolUtils", "nodeRpcUrlsConfig", "params", "transaction", "memo", "SdkError", "connection", "Connection", "addressLookupTableAccounts", "fetchAddressLookupTableAccountsFromTx", "message", "TransactionMessage", "lastInstruction", "PublicKey", "Buffer", "StellarAsset", "BASE_FEE", "Horizon", "Operation", "StellarOperation", "SorobanRpc", "TimeoutInfinite", "TransactionBuilder", "StellarTransactionBuilder", "contract", "contract", "ContractSpec", "ContractClient", "TokenContract", "ContractClient", "options", "ContractSpec", "FEE", "SEND_TRANSACTION_TIMEOUT", "DefaultSrbUtils", "nodeRpcUrlsConfig", "params", "stellarAccount", "Horizon", "tokenName", "TokenContract", "symbol", "srbTokenAddress", "SdkError", "asset", "StellarAsset", "changeTrust", "StellarOperation", "StellarTransactionBuilder", "sender", "tokenAddress", "nodeRpcUrl", "balance", "xdrTx", "stellar", "transaction", "sourceAccount", "server", "SorobanRpc", "account", "TransactionBuilder", "simulation", "BASE_FEE", "Operation", "TimeoutInfinite", "hash", "secondsToWait", "getTransactionResponseAll", "withExponentialBackoff", "resp", "lastResponse", "contract", "address", "config", "DefaultUtils", "nodeRpcUrlsConfig", "params", "DefaultSrbUtils", "DefaultSolUtils", "FeePaymentMethod", "AmountFormat", "Big", "TronWeb", "Web3", "erc20abi", "Big", "ChainTokenService", "params", "allowance", "MAX_AMOUNT", "USDT_TOKEN_ADDRESS", "POLYGON_GAS_LIMIT", "EvmTokenService", "ChainTokenService", "web3", "api", "params", "tokenAddress", "owner", "spender", "erc20abi", "rawTransaction", "amount", "approveMethod", "amountToHex", "chainSymbol", "transactionConfig", "feeOptions", "transactionHash", "abiItem", "contractAddress", "AnchorProvider", "Connection", "PublicKey", "SolanaTokenService", "ChainTokenService", "solanaRpcUrl", "api", "params", "MethodNotSupportedError", "accountAddress", "connection", "Connection", "publicKey", "PublicKey", "AnchorProvider", "account", "token", "associatedAccount", "getAssociatedAccount", "getTokenAccountData", "e", "Horizon", "NotFoundError", "SrbTokenService", "ChainTokenService", "nodeRpcUrlsConfig", "params", "api", "MethodNotSupportedError", "SdkError", "symbol", "srbTokenAddress", "stellar", "Horizon", "stellarAccount", "err", "NotFoundError", "balanceInfo", "balance", "convertFloatAmountToInt", "Chains", "nativeBalance", "ERC20_default", "MAX_AMOUNT", "TronTokenService", "ChainTokenService", "tronWeb", "api", "params", "tokenAddress", "owner", "rawTransaction", "sendRawTransaction", "spender", "amount", "amountHex", "amountToHex", "parameter", "contractAddress", "ERC20_default", "methodSignature", "parameters", "value", "fromAddress", "transactionObject", "SdkError", "DefaultTokenService", "api", "nodeRpcUrlsConfig", "params", "provider", "allowanceInt", "convertIntAmountToFloat", "validateAmountGtZero", "validateAmountDecimals", "approveData", "tokenBalance", "Chains", "chainSymbol", "ownerAddress", "EvmTokenService", "nodeRpcUrl", "Web3", "TronTokenService", "tronWeb", "TronWeb", "SolanaTokenService", "SrbTokenService", "convertFloatAmountToInt", "Big", "NodeRpcUrlsConfig", "nodeRpcUrls", "chainSymbol", "nodeRpcUrl", "NodeRpcUrlNotInitializedError", "AllbridgeCoreSdkService", "nodeRpcUrlsConfig", "params", "mainnet", "Chains", "apiClient", "ApiClientImpl", "apiClientCaching", "ApiClientCaching", "coreClient", "AllbridgeCoreClientImpl", "coreClientPoolInfoCaching", "AllbridgeCoreClientPoolInfoCaching", "AllbridgeCoreClientFilteredImpl", "DefaultTokenService", "DefaultBridgeService", "DefaultLiquidityPoolService", "type", "chainDetails", "txId", "address", "resolve", "amount", "amountFormat", "sourceToken", "destToken", "validateAmountGtZero", "amountInTokenPrecision", "validateAmountDecimals", "convertFloatAmountToInt", "vUsdAmountInt", "swapToVUsd", "getPoolInfoByToken", "destPoolInfo", "amountResultIntFormatted", "pendingInfoDTO", "pendingInfo", "tokenAddress", "info", "SdkError", "destPoolAfterPending", "getSwapFromVUsdPoolInfo", "amountResultIntAfterPendingFormatted", "estimatedAmount", "Big", "convertAmountPrecision", "convertIntAmountToFloat", "provider", "amountFloat", "sourceChainToken", "amountInt", "vUsdInSystemPrecision", "vUsdInSourcePrecision", "fromSystemPrecision", "getFeePercent", "destinationChainToken", "usd", "swapFromVUsd", "vUsdInDestinationPrecision", "amountToSendFloat", "messenger", "amountToBeReceivedFloat", "sourcePool", "destPool", "sourceProvider", "destinationProvider", "destinationPool", "amountToSend", "CCTPDoesNotSupportedError", "result", "resultInDestPrecision", "vUsd", "amountToBeReceived", "resultInSourcePrecision", "swapFromVUsdReverse", "resultInt", "swapToVUsdReverse", "InsufficientPoolLiquidityError", "getGasFeeOptions", "token", "tokens", "poolKeys", "t", "apr", "aprInPercents", "getExtraGasMaxLimits", "vUsdAmount", "amountResultInt", "swapAndBridgeFeeCalculation", "swapAndBridgeFeeCalculationReverse", "newAmount", "getSendAmountDetails", "isNodeUrlsConfig", "nodeUrls", "AllbridgeCoreSdk", "params", "mainnet", "nodeRpcUrlsConfig", "NodeRpcUrlsConfig", "AllbridgeCoreSdkService", "DefaultUtils", "type", "chainSymbol", "txId", "address", "recipientAddress", "tokenAddress", "amount", "amountFormat", "sourceToken", "destToken", "provider", "amountFloat", "sourceChainToken", "destinationChainToken", "amountToSendFloat", "messenger", "amountToBeReceivedFloat", "sourceProvider", "destinationProvider", "sourcePool", "destinationPool", "token", "tokens", "apr", "vUsdAmount", "amountInTokenPrecision"]
|
|
7
7
|
}
|