diff --git a/academy/README.md b/academy/README.md new file mode 100644 index 000000000..a73457b87 --- /dev/null +++ b/academy/README.md @@ -0,0 +1,83 @@ +# =nil; DApp Examples + +Welcome to **=nil; DApp Examples**, a collection of example decentralized applications (DApps) built on the **=nil; blockchain**. This repository serves as a hands-on learning resource for developers exploring **=nil;**'s unique architecture, including **sharded smart contract design, asynchronous contract execution, cross-shard messaging, and token interactions**. + +## πŸš€ Overview + +This repository contains multiple example projects that **demonstrate how to build and interact with =nil;**. Each example walks through different use cases, helping developers understand how to design scalable, efficient, and modular decentralized applications on **=nil;**. + +### πŸ“Œ What Makes =nil; Unique? + +- **Sharded Smart Contracts:** Applications are designed to run across multiple contract shards, improving scalability and execution efficiency. +- **Asynchronous Execution:** Contracts can interact across shards asynchronously, reducing bottlenecks and improving performance. +- **Modular Contract Design**: =nil; promotes modularity, enabling developers to split application logic into isolated contracts, which simplifies code maintenance, enhances flexibility, and allows for more robust upgrades over time. + +--- + +## πŸ“‚ Included Examples + +### 1️⃣ **Lending and Borrowing Protocol** + +- An example application showcasing a decentralized lending platform built on the =nil; blockchain, featuring deposits, borrowing, repayments, and interest calculations. +- Demonstrates cross-shard interactions with different contract modules managing specific tasks across multiple shards. +- Utilizes asynchronous contract execution and various token functionalities to ensure efficient and scalable DeFi operations. + +> More examples will be added over time! + +--- + +## πŸ›  Getting Started + +### βœ… Prerequisites + +Before running the examples, make sure you have: + +- **Node.js** (>=16.x) +- **Hardhat** +- **=nil; testnet RPC endpoint** (Get one [here](https://t.me/NilDevnetTokenBot)) + +### πŸ“₯ Installation + +Clone this repository and install dependencies: + +```sh +git clone https://github.com/nilfoundation/nil +cd nil/academy +``` + +### Running an Example + +Each example is contained in its own directory. Navigate to the example you want to run, compile the contracts, and execute the interaction scripts. + +Follow the specific instructions in each example’s README. + +## 🎯 What You Will Learn + +By working with these examples, you will gain hands-on experience in: + +- βœ… **Sharded Smart Contract Design:** Learn how to split logic across multiple contracts for efficiency. +- βœ… **Asynchronous Messaging:** Handle cross-shard interactions and optimize contract execution. +- βœ… **Token Handling:** Work with token transactions and related mechanisms. +- βœ… **Building Scalable Applications:** Implement application logic in a modular way. + +--- + +## 🀝 Contributing + +We welcome contributions from developers! If you'd like to add new examples or improve existing ones, feel free to submit a **Pull Request**. + +### πŸ’‘ How to Contribute: + +- Check the **[Issues](https://github.com/NilFoundation/nil/issues)** section for tasks marked as **"dapp-examples"**. +- Review the **[Contribution Guide](https://github.com/NilFoundation/nil/blob/9549a10983af05c63daa26073cfec3e5ab2aa8ab/CONTRIBUTION-GUIDE.md)** for best practices. +- Add features, test cases, or suggest new DeFi or blockchain use cases. + +Every contribution helps make this repository a **better learning resource** for everyone! + +--- + +## πŸ“Œ Repository Maintenance + +**This repository is actively maintained.** New examples and updates will be added regularly. Stay tuned for upcoming projects showcasing more advanced **=nil;** features. + +Happy coding! diff --git a/academy/lending-protocol/.env.example b/academy/lending-protocol/.env.example new file mode 100644 index 000000000..e497d1357 --- /dev/null +++ b/academy/lending-protocol/.env.example @@ -0,0 +1,5 @@ +NIL_RPC_ENDPOINT=YOUR_RPC_URL +PRIVATE_KEY=YOUR_PRIVATE_KEY +NIL=0x0001111111111111111111111111111111111110 +USDT=0x0001111111111111111111111111111111111113 +ETH=0x0001111111111111111111111111111111111112 \ No newline at end of file diff --git a/academy/lending-protocol/.gitignore b/academy/lending-protocol/.gitignore new file mode 100644 index 000000000..4ffa2f45c --- /dev/null +++ b/academy/lending-protocol/.gitignore @@ -0,0 +1,4 @@ +/node_modules +.env +/cache +/typechain-types \ No newline at end of file diff --git a/academy/lending-protocol/Deep-Dive-Into-The-Protocol b/academy/lending-protocol/Deep-Dive-Into-The-Protocol new file mode 100644 index 000000000..f936bb549 --- /dev/null +++ b/academy/lending-protocol/Deep-Dive-Into-The-Protocol @@ -0,0 +1,143 @@ +### **Sharded Lending Protocol on =nil; Foundation** + +**This document is an example and is provided for educational purposes only.** It is not audited, and the implementation described here is not intended for production use. The following guide demonstrates how to implement a decentralized lending and borrowing protocol on **=nil; Foundation** using **sharded smart contract architecture**. The goal is to **illustrate key coding practices**, such as using `sendRequest`, `asyncCall`, `sendRequestWithTokens`, encoding function signatures, and handling `TokenId` as an argument of type `address`. The example should serve as a reference for learning and prototyping. + +--- + +### **Sharded Smart Contract Architecture in DeFi** + +**Sharded smart contract design** involves splitting the logic of a decentralized application (dApp) into multiple, independent contracts, each responsible for specific tasks. These contracts communicate asynchronously, enabling the system to process transactions concurrently and increase scalability. In the context of a decentralized lending protocol, this means dividing the protocol’s functions into separate contracts such as **GlobalLedger**, **InterestManager**, **LendingPool**, and **Oracle**. These contracts are **deployed across different shards** to process tasks in parallel, improving system performance and throughput. + +This example demonstrates how sharded contracts can enhance scalability, efficiency, and maintainability, but note that the code is meant for educational use only. It has not been audited and should not be used in a production environment without thorough review. + +--- + +### **Key Coding Practices for Implementing the Lending Protocol** + +The following section describes best practices used throughout this educational example. We will walk through how to handle key aspects like `TokenId` as `address`, use of `sendRequest` and `asyncCall`, and the importance of correctly encoding function signatures and contexts. + +--- + +#### **1. TokenId as Address** + +In **=nil;**, `TokenId` is an alias for the `address` type. When interacting with other contracts that require `TokenId` as an argument, you must treat `TokenId` as an `address` to ensure compatibility as Solidity only recognizes in-built types. + +**Key Consideration:** + +- **TokenId is treated as an `address`:** Always ensure that `TokenId` is passed as an `address` when encoding, decoding, or interacting with other contracts. + +Example: + +```solidity +function deposit() public payable { + Nil.Token[] memory tokens = Nil.txnTokens(); + bytes memory callData = abi.encodeWithSignature( + "recordDeposit(address,address,uint256)", + msg.sender, + tokens[0].id, // TokenId is treated as address + tokens[0].amount + ); + Nil.asyncCall(globalLedger, address(this), 0, callData); +} +``` + +**Best Practice:** + +- When working with `TokenId`, **always treat it as an `address`** in function signatures or contract calls. +- Ensure proper encoding of `TokenId` to prevent errors during cross contract execution. + +--- + +#### **2. Using `sendRequest` and `sendRequestWithTokens`** + +The **`sendRequest`** and **`sendRequestWithTokens`** functions are used to send asynchronous requests to other contracts. These functions are crucial for non-blocking operations, allowing the protocol to continue processing. When the request is processed at the destination contract, a response is sent and the function selector encoded in the `context` is invoked along with the response data. + +Example of using `sendRequest`: + +```solidity +bytes memory callData = abi.encodeWithSignature("getPrice(address)", borrowToken); +bytes memory context = abi.encodeWithSelector( + this.processLoan.selector, msg.sender, amount, borrowToken, collateralToken +); +Nil.sendRequest(oracle, 0, 9_000_000, context, callData); +``` + +**Key Points:** + +- **Function Selectors:** Always use `abi.encodeWithSelector` when creating function selectors to ensure the correct function is called during the callback. + +```solidity +bytes memory context = abi.encodeWithSelector( + this.processLoan.selector, msg.sender, amount, borrowToken, collateralToken +); +``` + +- **Signature Encoding:** The function signature must match exactly, including spaces, capitalization, and parameter types. Even small errors can lead to encoding failures. + +```solidity +bytes memory callData = abi.encodeWithSignature("getPrice(address)", borrowToken); +``` + +**Best Practices:** + +- **Ensure correct encoding of function signatures:** Be cautious about the spacing, capitalization, and parameter ordering. Even a small discrepancy will break the function call. +- Always verify that the `context` you create matches the structure expected by the callback function. Mismatches can cause decoding errors during execution. + +--- + +#### **3. Handling Context and `asyncCall`** + +The **`asyncCall`** function enables asynchronous interactions between contracts. In this example, `asyncCall` is used to record deposit information in the **GlobalLedger** contract while allowing the **LendingPool** contract to continue processing other transactions. The `asyncCall` doesnn't expect a callback and hence is a fire and forget function, where as `sendRequest` discussed above expects a callback. + +Example of using `asyncCall` with context: + +```solidity +bytes memory callData = abi.encodeWithSignature( + "recordDeposit(address,address,uint256)", + msg.sender, + tokens[0].id, // TokenId as address + tokens[0].amount +); +Nil.asyncCall(globalLedger, address(this), 0, callData); +``` + +**Best Practices:** + +- **Context Construction:** Use `abi.encodeWithSignature` or `abi.encode` to build the callData, ensuring it contains all the necessary data for the destination contract's function. + +--- + +#### **4. Be Cautious with Space and Character Sensitivity** + +Solidity is sensitive to even the smallest differences in function signatures, such as spaces or capitalization. This is crucial when working with ABI encoding functions like `abi.encodeWithSignature`. + +**Example of Correct Encoding:** + +```solidity +abi.encodeWithSignature("getPrice(address)", borrowToken) +``` + +**Example of Incorrect Encoding:** + +```solidity +abi.encodeWithSignature("getPrice(address )", borrowToken) // Incorrect due to space after address +``` + +**Best Practices:** + +- **Verify the exact function signature:** Always check that the function signatures used in your contract calls match the exact expected format, including spaces, punctuation, and capitalization. + +--- + +### **Conclusion** + +This guide provides an example implementation of a decentralized lending and borrowing protocol on **=nil; Foundation**, using sharded smart contract architecture. **Please note that this is an educational example only and is not audited for production use.** + +By following the coding practices outlined here, you can better understand how to: + +1. Handle `TokenId` as an `address` when interacting with other contracts. +2. Correctly use `sendRequest` and `asyncCall` for asynchronous contract interactions. +3. Ensure that function signatures and contexts are encoded and decoded properly. +4. Avoid common pitfalls related to character sensitivity in ABI encoding. + +While this example showcases how sharding and asynchronous communication can improve scalability and efficiency, remember that it is intended for learning and prototyping only. If you plan to deploy similar protocols in production, thorough auditing and testing are crucial to ensure security and reliability. diff --git a/academy/lending-protocol/README.md b/academy/lending-protocol/README.md new file mode 100644 index 000000000..dc7c26227 --- /dev/null +++ b/academy/lending-protocol/README.md @@ -0,0 +1,96 @@ +## 🏦 Lending and Borrowing Protocol on =nil; + +## πŸ” Overview + +This repository contains an **educational example** of a decentralized application (dApp) showcasing a lending and borrowing protocol built on the **=nil;** blockchain. This example demonstrates how to leverage sharded smart contracts, asynchronous communication, and cross-shard interactions using various methods of `nil.sol`. You can learn how to build on **=nil;** by working through this example. + +### ✨ Features + +- πŸ’° **Deposit USDT and ETH** into a lending pool +- πŸ” **Borrow assets** based on collateral +- πŸ’³ **Repay borrowed assets** seamlessly +- πŸ“Š **Oracle-based price updates** for accurate valuations + +### πŸš€ Key Highlights + +- 🧩 **Sharded Smart Contracts**: Efficient workload distribution across shards +- ⚑ **Asynchronous Communication**: Transaction execution with minimal bottlenecks +- πŸ”— **Cross-Shard Interactions**: Smart contract coordination across different shards + +--- + +## βš™οΈ Prerequisites + +Before working with this repository, ensure you have the following installed: + +- πŸ“Œ [Node.js](https://nodejs.org/) (version 16 or higher recommended) +- πŸ“¦ [npm](https://www.npmjs.com/) (included with Node.js) +- πŸ”¨ Hardhat for smart contract development +- 🌍 A =nil; testnet RPC endpoint +- πŸ”‘ `.env` file with RPC and private key configuration (similar to `.env.example`) + +Check your installed versions with: + +```sh +node -v +npm -v +``` + +--- + +## πŸ“¦ Installation + +1. πŸ“₯ Clone the repository: + ```sh + git clone https://github.com/NilFoundation/nil.git + ``` +2. πŸ“‚ Navigate to the project root and install dependencies: + ```sh + cd nil/academy/lending-protocol + npm install + ``` +3. πŸ—‚οΈ **Set up the `.env` file** based on the `.env.example` file: + - Copy `.env.example` to `.env` and update with your RPC endpoint and private key. + ```sh + cp .env.example .env + ``` +4. πŸ—οΈ Compile the smart contracts: + ```sh + npx hardhat compile + ``` +5. πŸš€ Run the end-to-end lending workflow: + ```sh + npx hardhat run-lending-protocol + ``` + This script deploys **contracts across different shards**, sets up accounts, deposits assets, borrows against collateral, and processes repayments. + +--- + +## πŸ“œ Understanding the `run-lending-protocol` Flow + +This command executes the following steps: + +1. πŸ— **Deploys contracts** across multiple shards +2. πŸ‘₯ **Creates smart contract-based accounts** +3. πŸ“Š **Sets and verifies oracle prices** for assets +4. πŸ’Έ **Funds accounts with USDT and ETH** +5. 🏦 **Deposits funds** into the lending pool +6. πŸ”„ **Initiates borrowing** of ETH against USDT +7. βœ… **Processes loan repayment** + +Check the `Deep-Dive-Into-The-Protocol` for more detailed explanations and coding patterns when building on top of =nil; + +## 🀝 Contribution + +This project serves as an example, but contributions are welcome to improve and expand its functionality! + +### πŸ’‘ How You Can Contribute: + +- ✍️ **Enhance lending mechanisms** and introduce new features +- πŸ” **Enable multi token support for lending and borrowing** +- πŸ›  **Improve cross-shard execution and smart contract interactions** + +πŸ“Œ Check out our list of open issues: [Issue](https://github.com/NilFoundation/nil/issues). +πŸ“– For detailed contribution guidelines, refer to [Contribution Guide](https://github.com/NilFoundation/nil/blob/main/CONTRIBUTION-GUIDE.md) + +πŸš€ **Thank you for your support, and happy building!** πŸŽ‰ diff --git a/academy/lending-protocol/artifacts/@nilfoundation/smart-contracts/contracts/Nil.sol/Nil.dbg.json b/academy/lending-protocol/artifacts/@nilfoundation/smart-contracts/contracts/Nil.sol/Nil.dbg.json new file mode 100644 index 000000000..d0ed167b2 --- /dev/null +++ b/academy/lending-protocol/artifacts/@nilfoundation/smart-contracts/contracts/Nil.sol/Nil.dbg.json @@ -0,0 +1,4 @@ +{ + "_format": "hh-sol-dbg-1", + "buildInfo": "../../../../build-info/fb23e4780e5447fac4926540bca38304.json" +} diff --git a/academy/lending-protocol/artifacts/@nilfoundation/smart-contracts/contracts/Nil.sol/Nil.json b/academy/lending-protocol/artifacts/@nilfoundation/smart-contracts/contracts/Nil.sol/Nil.json new file mode 100644 index 000000000..afe9dd896 --- /dev/null +++ b/academy/lending-protocol/artifacts/@nilfoundation/smart-contracts/contracts/Nil.sol/Nil.json @@ -0,0 +1,141 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "Nil", + "sourceName": "@nilfoundation/smart-contracts/contracts/Nil.sol", + "abi": [ + { + "inputs": [], + "name": "ASYNC_REQUEST_MIN_GAS", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "FORWARD_NONE", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "FORWARD_PERCENTAGE", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "FORWARD_REMAINING", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "FORWARD_VALUE", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "IS_INTERNAL_TRANSACTION", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "IS_RESPONSE_TRANSACTION", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "LOG", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MANAGE_TOKEN", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "VERIFY_SIGNATURE", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x608080604052346019576101ad908161001f823930815050f35b600080fdfe608080604052600436101561001357600080fd5b60003560e01c9081631816a5e114610162575080633840cdae1461014b57806342e6d4d714610134578063434b4d631461011d578063620c9317146101065780639bc465a0146100ef578063a167fd5f146100d8578063cbb1c30a146100c0578063d2ec13b2146100a95763df09b8eb1461008d57600080fd5b60003660031901126100a457602060405160038152f35b600080fd5b60003660031901126100a457602060405160028152f35b60003660031901126100a457602060405161c3508152f35b60003660031901126100a457602060405160fe8152f35b60003660031901126100a457602060405160018152f35b60003660031901126100a457602060405160d08152f35b60003660031901126100a457602060405160ff8152f35b60003660031901126100a457602060405160008152f35b60003660031901126100a457602060405160d98152f35b60003660031901126100a4578060da60209252f3fea2646970667358221220898ff60cb7b50b285a30b44445cb43751c54ff66d8e3a54d31e96850b7d3118564736f6c634300081c0033", + "deployedBytecode": "0x608080604052600436101561001357600080fd5b60003560e01c9081631816a5e114610162575080633840cdae1461014b57806342e6d4d714610134578063434b4d631461011d578063620c9317146101065780639bc465a0146100ef578063a167fd5f146100d8578063cbb1c30a146100c0578063d2ec13b2146100a95763df09b8eb1461008d57600080fd5b60003660031901126100a457602060405160038152f35b600080fd5b60003660031901126100a457602060405160028152f35b60003660031901126100a457602060405161c3508152f35b60003660031901126100a457602060405160fe8152f35b60003660031901126100a457602060405160018152f35b60003660031901126100a457602060405160d08152f35b60003660031901126100a457602060405160ff8152f35b60003660031901126100a457602060405160008152f35b60003660031901126100a457602060405160d98152f35b60003660031901126100a4578060da60209252f3fea2646970667358221220898ff60cb7b50b285a30b44445cb43751c54ff66d8e3a54d31e96850b7d3118564736f6c634300081c0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/academy/lending-protocol/artifacts/@nilfoundation/smart-contracts/contracts/Nil.sol/NilBase.dbg.json b/academy/lending-protocol/artifacts/@nilfoundation/smart-contracts/contracts/Nil.sol/NilBase.dbg.json new file mode 100644 index 000000000..d0ed167b2 --- /dev/null +++ b/academy/lending-protocol/artifacts/@nilfoundation/smart-contracts/contracts/Nil.sol/NilBase.dbg.json @@ -0,0 +1,4 @@ +{ + "_format": "hh-sol-dbg-1", + "buildInfo": "../../../../build-info/fb23e4780e5447fac4926540bca38304.json" +} diff --git a/academy/lending-protocol/artifacts/@nilfoundation/smart-contracts/contracts/Nil.sol/NilBase.json b/academy/lending-protocol/artifacts/@nilfoundation/smart-contracts/contracts/Nil.sol/NilBase.json new file mode 100644 index 000000000..11a7e5e6d --- /dev/null +++ b/academy/lending-protocol/artifacts/@nilfoundation/smart-contracts/contracts/Nil.sol/NilBase.json @@ -0,0 +1,10 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "NilBase", + "sourceName": "@nilfoundation/smart-contracts/contracts/Nil.sol", + "abi": [], + "bytecode": "0x60808060405234601357603a908160198239f35b600080fdfe600080fdfea2646970667358221220e7dfbc6c34530a3c5329951b301754ec88b3b8605b2fc482d6564aae4461711764736f6c634300081c0033", + "deployedBytecode": "0x600080fdfea2646970667358221220e7dfbc6c34530a3c5329951b301754ec88b3b8605b2fc482d6564aae4461711764736f6c634300081c0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/academy/lending-protocol/artifacts/@nilfoundation/smart-contracts/contracts/Nil.sol/NilBounceable.dbg.json b/academy/lending-protocol/artifacts/@nilfoundation/smart-contracts/contracts/Nil.sol/NilBounceable.dbg.json new file mode 100644 index 000000000..d0ed167b2 --- /dev/null +++ b/academy/lending-protocol/artifacts/@nilfoundation/smart-contracts/contracts/Nil.sol/NilBounceable.dbg.json @@ -0,0 +1,4 @@ +{ + "_format": "hh-sol-dbg-1", + "buildInfo": "../../../../build-info/fb23e4780e5447fac4926540bca38304.json" +} diff --git a/academy/lending-protocol/artifacts/@nilfoundation/smart-contracts/contracts/Nil.sol/NilBounceable.json b/academy/lending-protocol/artifacts/@nilfoundation/smart-contracts/contracts/Nil.sol/NilBounceable.json new file mode 100644 index 000000000..7333a5338 --- /dev/null +++ b/academy/lending-protocol/artifacts/@nilfoundation/smart-contracts/contracts/Nil.sol/NilBounceable.json @@ -0,0 +1,24 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "NilBounceable", + "sourceName": "@nilfoundation/smart-contracts/contracts/Nil.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "string", + "name": "err", + "type": "string" + } + ], + "name": "bounce", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } + ], + "bytecode": "0x", + "deployedBytecode": "0x", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/academy/lending-protocol/artifacts/@nilfoundation/smart-contracts/contracts/Nil.sol/NilConfigAbi.dbg.json b/academy/lending-protocol/artifacts/@nilfoundation/smart-contracts/contracts/Nil.sol/NilConfigAbi.dbg.json new file mode 100644 index 000000000..d0ed167b2 --- /dev/null +++ b/academy/lending-protocol/artifacts/@nilfoundation/smart-contracts/contracts/Nil.sol/NilConfigAbi.dbg.json @@ -0,0 +1,4 @@ +{ + "_format": "hh-sol-dbg-1", + "buildInfo": "../../../../build-info/fb23e4780e5447fac4926540bca38304.json" +} diff --git a/academy/lending-protocol/artifacts/@nilfoundation/smart-contracts/contracts/Nil.sol/NilConfigAbi.json b/academy/lending-protocol/artifacts/@nilfoundation/smart-contracts/contracts/Nil.sol/NilConfigAbi.json new file mode 100644 index 000000000..89a9860f3 --- /dev/null +++ b/academy/lending-protocol/artifacts/@nilfoundation/smart-contracts/contracts/Nil.sol/NilConfigAbi.json @@ -0,0 +1,68 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "NilConfigAbi", + "sourceName": "@nilfoundation/smart-contracts/contracts/Nil.sol", + "abi": [ + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "uint8[33]", + "name": "PublicKey", + "type": "uint8[33]" + }, + { + "internalType": "address", + "name": "WithdrawalAddress", + "type": "address" + } + ], + "internalType": "struct Nil.ValidatorInfo[]", + "name": "list", + "type": "tuple[]" + } + ], + "internalType": "struct Nil.ParamValidators", + "name": "", + "type": "tuple" + } + ], + "name": "curr_validators", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "gasPriceScale", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "shards", + "type": "uint256[]" + } + ], + "internalType": "struct Nil.ParamGasPrice", + "name": "", + "type": "tuple" + } + ], + "name": "gas_price", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x608080604052346015576102e6908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c8063978384d1146100f15763e52108f91461003257600080fd5b346100ec5760203660031901126100ec5760043567ffffffffffffffff81116100ec57604060031982360301126100ec5761006b610252565b908060040135825260248101359067ffffffffffffffff82116100ec570190366023830112156100ec576004820135916100ac6100a784610298565b610272565b92602060048186848152019260051b84010101913683116100ec57602401905b8282106100dc5760208401859052005b81358152602091820191016100cc565b600080fd5b346100ec5760203660031901126100ec5760043567ffffffffffffffff81116100ec57602060031982360301126100ec57604051906020820182811067ffffffffffffffff82111761023c5760405280600401359067ffffffffffffffff82116100ec570190366023830112156100ec5760048201356101736100a782610298565b9260206004610440828786815201940283010101903682116100ec57602401915b8183106101a15750505052005b610440833603126100ec576101b4610252565b9036601f850112156100ec57604051610420810181811067ffffffffffffffff82111761023c57604052806104208601913683116100ec5786905b838210610222575050835235906001600160a01b03821682036100ec578260209283610440950152815201920191610194565b813560ff811681036100ec578152602091820191016101ef565b634e487b7160e01b600052604160045260246000fd5b604051906040820182811067ffffffffffffffff82111761023c57604052565b6040519190601f01601f1916820167ffffffffffffffff81118382101761023c57604052565b67ffffffffffffffff811161023c5760051b6020019056fea2646970667358221220de34a4264d612b8581fb95f30d06b59679e1b3558fe1177cfdb313384bf5fd7064736f6c634300081c0033", + "deployedBytecode": "0x6080604052600436101561001257600080fd5b60003560e01c8063978384d1146100f15763e52108f91461003257600080fd5b346100ec5760203660031901126100ec5760043567ffffffffffffffff81116100ec57604060031982360301126100ec5761006b610252565b908060040135825260248101359067ffffffffffffffff82116100ec570190366023830112156100ec576004820135916100ac6100a784610298565b610272565b92602060048186848152019260051b84010101913683116100ec57602401905b8282106100dc5760208401859052005b81358152602091820191016100cc565b600080fd5b346100ec5760203660031901126100ec5760043567ffffffffffffffff81116100ec57602060031982360301126100ec57604051906020820182811067ffffffffffffffff82111761023c5760405280600401359067ffffffffffffffff82116100ec570190366023830112156100ec5760048201356101736100a782610298565b9260206004610440828786815201940283010101903682116100ec57602401915b8183106101a15750505052005b610440833603126100ec576101b4610252565b9036601f850112156100ec57604051610420810181811067ffffffffffffffff82111761023c57604052806104208601913683116100ec5786905b838210610222575050835235906001600160a01b03821682036100ec578260209283610440950152815201920191610194565b813560ff811681036100ec578152602091820191016101ef565b634e487b7160e01b600052604160045260246000fd5b604051906040820182811067ffffffffffffffff82111761023c57604052565b6040519190601f01601f1916820167ffffffffffffffff81118382101761023c57604052565b67ffffffffffffffff811161023c5760051b6020019056fea2646970667358221220de34a4264d612b8581fb95f30d06b59679e1b3558fe1177cfdb313384bf5fd7064736f6c634300081c0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/academy/lending-protocol/artifacts/@nilfoundation/smart-contracts/contracts/Nil.sol/__Precompile__.dbg.json b/academy/lending-protocol/artifacts/@nilfoundation/smart-contracts/contracts/Nil.sol/__Precompile__.dbg.json new file mode 100644 index 000000000..d0ed167b2 --- /dev/null +++ b/academy/lending-protocol/artifacts/@nilfoundation/smart-contracts/contracts/Nil.sol/__Precompile__.dbg.json @@ -0,0 +1,4 @@ +{ + "_format": "hh-sol-dbg-1", + "buildInfo": "../../../../build-info/fb23e4780e5447fac4926540bca38304.json" +} diff --git a/academy/lending-protocol/artifacts/@nilfoundation/smart-contracts/contracts/Nil.sol/__Precompile__.json b/academy/lending-protocol/artifacts/@nilfoundation/smart-contracts/contracts/Nil.sol/__Precompile__.json new file mode 100644 index 000000000..4171e8a74 --- /dev/null +++ b/academy/lending-protocol/artifacts/@nilfoundation/smart-contracts/contracts/Nil.sol/__Precompile__.json @@ -0,0 +1,362 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "__Precompile__", + "sourceName": "@nilfoundation/smart-contracts/contracts/Nil.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + }, + { + "internalType": "uint8", + "name": "", + "type": "uint8" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "TokenId", + "name": "id", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct Nil.Token[]", + "name": "", + "type": "tuple[]" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "precompileAsyncCall", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "precompileAwaitCall", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + }, + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "isSet", + "type": "bool" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "precompileConfigParam", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "precompileGetGasPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "precompileGetPoseidonHash", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "TokenId", + "name": "id", + "type": "address" + }, + { + "internalType": "address", + "name": "addr", + "type": "address" + } + ], + "name": "precompileGetTokenBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "precompileGetTransactionTokens", + "outputs": [ + { + "components": [ + { + "internalType": "TokenId", + "name": "id", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct Nil.Token[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "transaction", + "type": "string" + }, + { + "internalType": "int256[]", + "name": "data", + "type": "int256[]" + } + ], + "name": "precompileLog", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "mint", + "type": "bool" + } + ], + "name": "precompileManageToken", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "components": [ + { + "internalType": "TokenId", + "name": "id", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct Nil.Token[]", + "name": "", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "precompileSendRequest", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "components": [ + { + "internalType": "TokenId", + "name": "id", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct Nil.Token[]", + "name": "", + "type": "tuple[]" + } + ], + "name": "precompileSendTokens", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x608080604052346015576106b4908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c806303cfdb76146103e757806340225e941461037357806359777fc21461035a57806378312c6b1461032a578063802db0e0146102c05780638c4b00361461020d5780639614ddaf146101eb5780639ef8d0fa14610177578063a6c085bf1461015b578063d6ff6d2e146101225763f69756531461009557600080fd5b61010036600319011261011d576100aa610642565b5060243560ff81160361011d576100bf610467565b506100c861047d565b506100d1610493565b5060c4356001600160401b03811161011d576100f1903690600401610599565b5060e4356001600160401b03811161011d57610111903690600401610525565b50602060405160008152f35b600080fd5b3461011d57604036600319011261011d5761013b61043b565b506024356001600160401b03811161011d57610111903690600401610599565b3461011d57602036600319011261011d57602060405160008152f35b3461011d57606036600319011261011d57610190610642565b506024356001600160401b03811161011d576101b0903690600401610651565b50506044356001600160401b03811161011d576101d1903690600401610651565b505060405160208152806101e760208201610543565b0390f35b3461011d57604036600319011261011d5761020461043b565b50610111610451565b3461011d57604036600319011261011d576004356001600160401b03811161011d573660238201121561011d5761024e9036906024816004013591016104e4565b506024356001600160401b03811161011d573660238201121561011d578060040135906024602061028661028185610582565b6104a9565b848152019260051b8201019036821161011d57602401915b8183106102b057602060405160008152f35b823581526020928301920161029e565b3461011d57600036600319011261011d57604051806020810160208252606051809152604082019060809060005b8181106102fc575050500390f35b825180516001600160a01b0316855260209081015181860152869550604090940193909201916001016102ee565b3461011d57602036600319011261011d576004356001600160401b03811161011d57610111903690600401610525565b3461011d57604036600319011261011d57610111610633565b60a036600319011261011d5761038761043b565b506024356001600160401b03811161011d576103a7903690600401610599565b506064356001600160401b03811161011d576103c7903690600401610525565b506084356001600160401b03811161011d57610111903690600401610525565b606036600319011261011d576103fb61043b565b506044356001600160401b03811161011d5761041b903690600401610525565b50604051604081528061043060408201610543565b600060208301520390f35b600435906001600160a01b038216820361011d57565b602435906001600160a01b038216820361011d57565b604435906001600160a01b038216820361011d57565b606435906001600160a01b038216820361011d57565b608435906001600160a01b038216820361011d57565b6040519190601f01601f191682016001600160401b038111838210176104ce57604052565b634e487b7160e01b600052604160045260246000fd5b9291926001600160401b0382116104ce57610508601f8301601f19166020016104a9565b938285528282011161011d57816000926020928387013784010152565b9080601f8301121561011d57816020610540933591016104e4565b90565b906060519182815260005b83811061056e5750826000602080949584010152601f8019910116010190565b80608060209201518282850101520161054e565b6001600160401b0381116104ce5760051b60200190565b81601f8201121561011d578035906105b361028183610582565b9260208085858152019360061b8301019181831161011d57602001925b8284106105de575050505090565b60408483031261011d5760405190604082018281106001600160401b038211176104ce576040528435906001600160a01b038216820361011d57826020926040945282870135838201528152019301926105d0565b60243590811515820361011d57565b60043590811515820361011d57565b9181601f8401121561011d578235916001600160401b03831161011d576020838186019501011161011d5756fea2646970667358221220ab42df288db8856dbc9140e7ca40ead038c4f87b8cffbd7bf84cbfc2ebb6515364736f6c634300081c0033", + "deployedBytecode": "0x6080604052600436101561001257600080fd5b60003560e01c806303cfdb76146103e757806340225e941461037357806359777fc21461035a57806378312c6b1461032a578063802db0e0146102c05780638c4b00361461020d5780639614ddaf146101eb5780639ef8d0fa14610177578063a6c085bf1461015b578063d6ff6d2e146101225763f69756531461009557600080fd5b61010036600319011261011d576100aa610642565b5060243560ff81160361011d576100bf610467565b506100c861047d565b506100d1610493565b5060c4356001600160401b03811161011d576100f1903690600401610599565b5060e4356001600160401b03811161011d57610111903690600401610525565b50602060405160008152f35b600080fd5b3461011d57604036600319011261011d5761013b61043b565b506024356001600160401b03811161011d57610111903690600401610599565b3461011d57602036600319011261011d57602060405160008152f35b3461011d57606036600319011261011d57610190610642565b506024356001600160401b03811161011d576101b0903690600401610651565b50506044356001600160401b03811161011d576101d1903690600401610651565b505060405160208152806101e760208201610543565b0390f35b3461011d57604036600319011261011d5761020461043b565b50610111610451565b3461011d57604036600319011261011d576004356001600160401b03811161011d573660238201121561011d5761024e9036906024816004013591016104e4565b506024356001600160401b03811161011d573660238201121561011d578060040135906024602061028661028185610582565b6104a9565b848152019260051b8201019036821161011d57602401915b8183106102b057602060405160008152f35b823581526020928301920161029e565b3461011d57600036600319011261011d57604051806020810160208252606051809152604082019060809060005b8181106102fc575050500390f35b825180516001600160a01b0316855260209081015181860152869550604090940193909201916001016102ee565b3461011d57602036600319011261011d576004356001600160401b03811161011d57610111903690600401610525565b3461011d57604036600319011261011d57610111610633565b60a036600319011261011d5761038761043b565b506024356001600160401b03811161011d576103a7903690600401610599565b506064356001600160401b03811161011d576103c7903690600401610525565b506084356001600160401b03811161011d57610111903690600401610525565b606036600319011261011d576103fb61043b565b506044356001600160401b03811161011d5761041b903690600401610525565b50604051604081528061043060408201610543565b600060208301520390f35b600435906001600160a01b038216820361011d57565b602435906001600160a01b038216820361011d57565b604435906001600160a01b038216820361011d57565b606435906001600160a01b038216820361011d57565b608435906001600160a01b038216820361011d57565b6040519190601f01601f191682016001600160401b038111838210176104ce57604052565b634e487b7160e01b600052604160045260246000fd5b9291926001600160401b0382116104ce57610508601f8301601f19166020016104a9565b938285528282011161011d57816000926020928387013784010152565b9080601f8301121561011d57816020610540933591016104e4565b90565b906060519182815260005b83811061056e5750826000602080949584010152601f8019910116010190565b80608060209201518282850101520161054e565b6001600160401b0381116104ce5760051b60200190565b81601f8201121561011d578035906105b361028183610582565b9260208085858152019360061b8301019181831161011d57602001925b8284106105de575050505090565b60408483031261011d5760405190604082018281106001600160401b038211176104ce576040528435906001600160a01b038216820361011d57826020926040945282870135838201528152019301926105d0565b60243590811515820361011d57565b60043590811515820361011d57565b9181601f8401121561011d578235916001600160401b03831161011d576020838186019501011161011d5756fea2646970667358221220ab42df288db8856dbc9140e7ca40ead038c4f87b8cffbd7bf84cbfc2ebb6515364736f6c634300081c0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/academy/lending-protocol/artifacts/@nilfoundation/smart-contracts/contracts/NilTokenBase.sol/NilTokenBase.dbg.json b/academy/lending-protocol/artifacts/@nilfoundation/smart-contracts/contracts/NilTokenBase.sol/NilTokenBase.dbg.json new file mode 100644 index 000000000..d0ed167b2 --- /dev/null +++ b/academy/lending-protocol/artifacts/@nilfoundation/smart-contracts/contracts/NilTokenBase.sol/NilTokenBase.dbg.json @@ -0,0 +1,4 @@ +{ + "_format": "hh-sol-dbg-1", + "buildInfo": "../../../../build-info/fb23e4780e5447fac4926540bca38304.json" +} diff --git a/academy/lending-protocol/artifacts/@nilfoundation/smart-contracts/contracts/NilTokenBase.sol/NilTokenBase.json b/academy/lending-protocol/artifacts/@nilfoundation/smart-contracts/contracts/NilTokenBase.sol/NilTokenBase.json new file mode 100644 index 000000000..300bd0fc1 --- /dev/null +++ b/academy/lending-protocol/artifacts/@nilfoundation/smart-contracts/contracts/NilTokenBase.sol/NilTokenBase.json @@ -0,0 +1,144 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "NilTokenBase", + "sourceName": "@nilfoundation/smart-contracts/contracts/NilTokenBase.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burnToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "getOwnTokenBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "getTokenBalanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTokenId", + "outputs": [ + { + "internalType": "TokenId", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTokenName", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTokenTotalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "mintToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "TokenId", + "name": "tokenId", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "sendToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "name", + "type": "string" + } + ], + "name": "setTokenName", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x", + "deployedBytecode": "0x", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/academy/lending-protocol/artifacts/build-info/fb23e4780e5447fac4926540bca38304.json b/academy/lending-protocol/artifacts/build-info/fb23e4780e5447fac4926540bca38304.json new file mode 100644 index 000000000..a1b0ea486 --- /dev/null +++ b/academy/lending-protocol/artifacts/build-info/fb23e4780e5447fac4926540bca38304.json @@ -0,0 +1 @@ +{"id":"fb23e4780e5447fac4926540bca38304","_format":"hh-sol-build-info-1","solcVersion":"0.8.28","solcLongVersion":"0.8.28+commit.7893614a","input":{"language":"Solidity","sources":{"@nilfoundation/smart-contracts/contracts/Nil.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n// TokenId is a type that represents a unique token identifier.\ntype TokenId is address;\n\nusing {\n tokenIdEqual as ==,\n tokenIdNotEqual as !=,\n tokenIdLess as <,\n tokenIdGreater as >,\n tokenIdLessOrEqual as <=,\n tokenIdGreaterOrEqual as >=\n} for TokenId global;\n\nlibrary Nil {\n uint private constant SEND_TRANSACTION = 0xfc;\n address private constant ASYNC_CALL = address(0xfd);\n address public constant VERIFY_SIGNATURE = address(0xfe);\n address public constant IS_INTERNAL_TRANSACTION = address(0xff);\n address public constant MANAGE_TOKEN = address(0xd0);\n address private constant GET_TOKEN_BALANCE = address(0xd1);\n address private constant SEND_TOKEN_SYNC = address(0xd2);\n address private constant GET_TRANSACTION_TOKENS = address(0xd3);\n address private constant GET_GAS_PRICE = address(0xd4);\n address private constant GET_POSEIDON_HASH = address(0xd5);\n address private constant AWAIT_CALL = address(0xd6);\n address private constant CONFIG_PARAM = address(0xd7);\n address private constant SEND_REQUEST = address(0xd8);\n address public constant IS_RESPONSE_TRANSACTION = address(0xd9);\n address public constant LOG = address(0xda);\n\n // The following constants specify from where and how the gas should be taken during async call.\n // Forwarding values are calculated in the following order: FORWARD_VALUE, FORWARD_PERCENTAGE, FORWARD_REMAINING.\n //\n // Take whole remaining gas from inbound transaction feeCredit. If there are more than one transactions with such forward\n // kind, the gas will be divided and forwarded in equal parts.\n uint8 public constant FORWARD_REMAINING = 0;\n // Get a percentage of the available feeCredit.\n uint8 public constant FORWARD_PERCENTAGE = 1;\n // Get exact value from the available feeCredit.\n uint8 public constant FORWARD_VALUE = 2;\n // Do not forward gas from inbound transaction, take gas from the account instead.\n uint8 public constant FORWARD_NONE = 3;\n // Minimal amount of gas reserved by AWAIT_CALL / SEND_REQUEST\n uint public constant ASYNC_REQUEST_MIN_GAS = 50_000;\n\n // Token is a struct that represents a token with an id and amount.\n struct Token {\n TokenId id;\n uint256 amount;\n }\n\n /**\n * @dev Deploys a contract asynchronously. It implicitly uses FORWARD_REMAINING kind and sets refundTo to\n * inbound transaction's refundTo.\n * @param shardId The shard ID where to deploy contract.\n * @param bounceTo Address to bounce to if the deployment fails.\n * @param value Value to be sent with the deployment.\n * @param code Bytecode of the contract to be deployed.\n * @param salt Salt for the contract address creation.\n * @return Address of the deployed contract.\n */\n function asyncDeploy(\n uint shardId,\n address bounceTo,\n uint value,\n bytes memory code,\n uint256 salt\n ) internal returns (address) {\n return Nil.asyncDeploy(shardId, address(0), bounceTo, 0, FORWARD_REMAINING, value, code, salt);\n }\n\n /**\n * @dev Deploys a contract asynchronously.\n * @param shardId The shard ID where to deploy contract.\n * @param refundTo Address to refund if the deployment fails.\n * @param bounceTo Address to bounce to if the deployment fails.\n * @param feeCredit Fee credit for the deployment.\n * @param forwardKind Kind of forwarding for the gas.\n * @param value Value to be sent with the deployment.\n * @param code Bytecode of the contract to be deployed.\n * @param salt Salt for the contract address creation.\n * @return Address of the deployed contract.\n */\n function asyncDeploy(\n uint shardId,\n address refundTo,\n address bounceTo,\n uint feeCredit,\n uint8 forwardKind,\n uint value,\n bytes memory code,\n uint256 salt\n ) internal returns (address) {\n Token[] memory tokens;\n address contractAddress = Nil.createAddress(shardId, code, salt);\n __Precompile__(ASYNC_CALL).precompileAsyncCall{value: value}(true, forwardKind, contractAddress, refundTo,\n bounceTo, feeCredit, tokens, bytes.concat(code, bytes32(salt)));\n return contractAddress;\n }\n\n /**\n * @dev Makes an asynchronous call to a contract. It implicitly uses FORWARD_REMAINING kind and sets refundTo to\n * inbound transaction's refundTo.\n * @param dst Destination address of the call.\n * @param bounceTo Address to bounce to if the call fails.\n * @param value Value to be sent with the call.\n * @param callData Calldata for the call.\n */\n function asyncCall(\n address dst,\n address bounceTo,\n uint value,\n bytes memory callData\n ) internal {\n asyncCall(dst, address(0), bounceTo, 0, FORWARD_REMAINING, value, callData);\n }\n\n /**\n * @dev Makes an asynchronous call to a contract.\n * @param dst Destination address of the call.\n * @param refundTo Address to refund if the call fails.\n * @param bounceTo Address to bounce to if the call fails.\n * @param feeCredit Fee credit for the call.\n * @param forwardKind Kind of forwarding for the gas.\n * @param value Value to be sent with the call.\n * @param callData Calldata for the call.\n */\n function asyncCall(\n address dst,\n address refundTo,\n address bounceTo,\n uint feeCredit,\n uint8 forwardKind,\n uint value,\n bytes memory callData\n ) internal {\n Token[] memory tokens;\n asyncCallWithTokens(dst, refundTo, bounceTo, feeCredit, forwardKind, value, tokens, callData);\n }\n\n /**\n * @dev Makes an asynchronous call to a contract with tokens.\n * @param dst Destination address of the call.\n * @param refundTo Address to refund if the call fails.\n * @param bounceTo Address to bounce to if the call fails.\n * @param feeCredit Fee credit for the call.\n * @param forwardKind Kind of forwarding for the gas.\n * @param value Value to be sent with the call.\n * @param tokens Array of tokens to be sent with the call.\n * @param callData Calldata for the call.\n */\n function asyncCallWithTokens(\n address dst,\n address refundTo,\n address bounceTo,\n uint feeCredit,\n uint8 forwardKind,\n uint value,\n Token[] memory tokens,\n bytes memory callData\n ) internal {\n __Precompile__(ASYNC_CALL).precompileAsyncCall{value: value}(false, forwardKind, dst, refundTo,\n bounceTo, feeCredit, tokens, callData);\n }\n\n /**\n * @dev Makes a synchronous call to a contract.\n * @param dst Destination address of the call.\n * @param gas Gas limit for the call.\n * @param value Value to be sent with the call.\n * @param tokens Array of tokens to be sent with the call.\n * @param callData Calldata for the call.\n * @return success Boolean indicating if the call was successful.\n * @return returnData Data returned from the call.\n */\n function syncCall(\n address dst,\n uint gas,\n uint value,\n Token[] memory tokens,\n bytes memory callData\n ) internal returns(bool, bytes memory) {\n if (tokens.length > 0) {\n __Precompile__(SEND_TOKEN_SYNC).precompileSendTokens(dst, tokens);\n }\n (bool success, bytes memory returnData) = dst.call{gas: gas, value: value}(callData);\n return (success, returnData);\n }\n\n /**\n * @dev Makes an asynchronous call to a contract and waits for the result.\n * @param dst Destination address of the call.\n * @param responseProcessingGas Amount of gas is being bought and reserved to process the response.\n * should be >= `ASYNC_REQUEST_MIN_GAS` to make a call, otherwise `awaitCall` will fail.\n * @param callData Calldata for the call.\n * @return returnData Data returned from the call.\n * @return success Boolean indicating if the call was successful.\n */\n function awaitCall(\n address dst,\n uint responseProcessingGas,\n bytes memory callData\n ) internal returns(bytes memory, bool) {\n return __Precompile__(AWAIT_CALL).precompileAwaitCall(dst, responseProcessingGas, callData);\n }\n\n /**\n * @dev Sends a request to a contract.\n * @param dst Destination address of the request.\n * @param value Value to be sent with the request.\n * @param responseProcessingGas Amount of gas is being bought and reserved to process the response.\n * Should be >= `ASYNC_REQUEST_MIN_GAS` to make a call, otherwise `sendRequest` will fail.\n * @param context Context data that is preserved in order to be available in the response method.\n * @param callData Calldata for the request.\n */\n function sendRequest(\n address dst,\n uint256 value,\n uint responseProcessingGas,\n bytes memory context,\n bytes memory callData\n ) internal {\n Token[] memory tokens;\n __Precompile__(SEND_REQUEST).precompileSendRequest{value: value}(dst, tokens, responseProcessingGas, context, callData);\n }\n\n /**\n * @dev Sends a request to a contract with tokens.\n * @param dst Destination address of the request.\n * @param value Value to be sent with the request.\n * @param tokens Array of tokens to be sent with the request.\n * @param responseProcessingGas Amount of gas is being bought and reserved to process the response.\n * should be >= `ASYNC_REQUEST_MIN_GAS` to make a call, otherwise `awaitCall` will fail.\n * @param context Context data that is preserved in order to be available in the response method.\n * @param callData Calldata for the request.\n */\n function sendRequestWithTokens(\n address dst,\n uint256 value,\n Token[] memory tokens,\n uint responseProcessingGas,\n bytes memory context,\n bytes memory callData\n ) internal {\n __Precompile__(SEND_REQUEST).precompileSendRequest{value: value}(dst, tokens, responseProcessingGas, context, callData);\n }\n\n /**\n * @dev Sends a raw internal transaction using a special precompiled contract.\n * @param transaction The transaction to be sent.\n */\n function sendTransaction(bytes memory transaction) internal {\n uint transaction_size = transaction.length;\n assembly {\n // Call precompiled contract.\n // Arguments: gas, precompiled address, value, input, input size, output, output size\n if iszero(call(gas(), SEND_TRANSACTION, 0, add(transaction, 32), transaction_size, 0, 0)) {\n revert(0, 0)\n }\n }\n }\n\n /**\n * @dev Validates a signature using a precompiled contract.\n * @param pubkey Public key used for validation.\n * @param hash Hash of the transaction.\n * @param signature Signature to be validated.\n * @return Boolean indicating if the signature is valid.\n */\n function validateSignature(\n bytes memory pubkey,\n uint256 hash,\n bytes memory signature\n ) internal view returns (bool) {\n // ABI encode the input parameters\n bytes memory encodedInput = abi.encode(pubkey, hash, signature);\n bool success;\n bool result;\n\n // Perform the static call to the precompiled contract at address `VerifyExternalTransaction`\n bytes memory returnData;\n (success, returnData) = VERIFY_SIGNATURE.staticcall(encodedInput);\n\n require(success, \"Precompiled contract call failed\");\n\n // Extract the boolean result from the returned data\n if (returnData.length > 0) {\n result = abi.decode(returnData, (bool));\n }\n\n return result;\n }\n\n /**\n * @dev Returns the balance of a token with a given id for a given address.\n * @param addr Address to check the balance for.\n * @param id TokenId of the token.\n * @return Balance of the token.\n */\n function tokenBalance(address addr, TokenId id) internal view returns(uint256) {\n return __Precompile__(GET_TOKEN_BALANCE).precompileGetTokenBalance(id, addr);\n }\n\n /**\n * @dev Returns tokens from the current transaction.\n * @return Array of tokens from the current transaction.\n */\n function txnTokens() internal returns(Token[] memory) {\n return __Precompile__(GET_TRANSACTION_TOKENS).precompileGetTransactionTokens();\n }\n\n /**\n * @dev Returns the shard id for a given address.\n * @param addr Address to get the shard id for.\n * @return Shard id of the address.\n */\n function getShardId(address addr) internal pure returns(uint256) {\n return uint256(uint160(addr)) >> (18 * 8);\n }\n\n /**\n * @notice Returns the gas price for the shard in which the given address resides.\n * @dev It may return the price with some delay, i.e it can be not equal to the actual price. So, one should\n * calculate real gas price pessimistically, i.e. `gas_price = getGasPrice() + blocks_delay * price_growth_factor`.\n * Where, `blocks_delay` is the blocks number between the block for which gas price is actual and the block in which\n * the transaction will be processed; and `price_growth_factor` is the maximum value by which gas can grow per block.\n * @param addr Address to get the gas price for.\n * @return Gas price for the shard.\n */\n function getGasPrice(address addr) internal returns(uint256) {\n return __Precompile__(GET_GAS_PRICE).precompileGetGasPrice(getShardId(addr));\n }\n\n /**\n * @dev Creates a contract address.\n * @param shardId Shard id for the address.\n * @param code Bytecode of the contract.\n * @param salt Salt for the address creation.\n * @return Address of the created contract.\n */\n function createAddress(uint shardId, bytes memory code, uint256 salt) internal returns(address) {\n require(shardId < 0xffff, \"Shard id is too big\");\n uint160 addr = uint160(uint256(getPoseidonHash(abi.encodePacked(code, salt))));\n addr &= 0xffffffffffffffffffffffffffffffffffff;\n addr |= uint160(shardId) << (18 * 8);\n return address(addr);\n }\n\n /**\n * @dev Creates a contract address using create2.\n * @param shardId Shard id for the address.\n * @param sender Address of the sender.\n * @param salt Salt for the address creation.\n * @param codeHash Hash of the contract bytecode.\n * @return Address of the created contract.\n */\n function createAddress2(uint shardId, address sender, uint256 salt, uint256 codeHash) internal returns(address) {\n require(shardId < 0xffff, \"Shard id is too big\");\n uint160 addr = uint160(uint256(getPoseidonHash(abi.encodePacked(bytes1(0xff), sender, salt, codeHash))));\n addr &= 0xffffffffffffffffffffffffffffffffffff;\n addr |= uint160(shardId) << (18 * 8);\n return address(addr);\n }\n\n /**\n * @dev Returns the Poseidon hash of the given data.\n * @param data Data to hash.\n * @return Poseidon hash of the data.\n */\n function getPoseidonHash(bytes memory data) internal returns(uint256) {\n return __Precompile__(GET_POSEIDON_HASH).precompileGetPoseidonHash(data);\n }\n\n /**\n * @dev Sets a configuration parameter.\n * @param name Name of the parameter.\n * @param data Data of the parameter.\n */\n function setConfigParam(string memory name, bytes memory data) internal {\n __Precompile__(CONFIG_PARAM).precompileConfigParam(true, name, data);\n }\n\n /**\n * @dev Returns a configuration parameter.\n * @param name Name of the parameter.\n * @return Data of the parameter.\n */\n function getConfigParam(string memory name) internal returns(bytes memory) {\n return __Precompile__(CONFIG_PARAM).precompileConfigParam(false, name, bytes(\"\"));\n }\n\n struct ValidatorInfo {\n uint8[33] PublicKey;\n address WithdrawalAddress;\n }\n\n struct ParamValidators {\n ValidatorInfo[] list;\n }\n\n struct ParamGasPrice {\n uint256 gasPriceScale;\n uint256[] shards;\n }\n\n /**\n * @dev Returns the current validators.\n * @return Struct containing the list of validators.\n */\n function getValidators() internal returns(ParamValidators memory) {\n bytes memory data = getConfigParam(\"curr_validators\");\n return abi.decode(data, (ParamValidators));\n }\n\n /**\n * @dev Returns the gas price parameter.\n * @return Struct containing the gas price scale.\n */\n function getParamGasPrice() internal returns(ParamGasPrice memory) {\n bytes memory data = getConfigParam(\"gas_price\");\n return abi.decode(data, (ParamGasPrice));\n }\n\n /**\n * @dev Logs a transaction with data.\n * @param transaction Transaction to log.\n * @param data Data to log.\n */\n function log(string memory transaction, int[] memory data) internal {\n __Precompile__(LOG).precompileLog(transaction, data);\n }\n\n /**\n * @dev Logs a transaction with empty data.\n * @param transaction Transaction to log.\n */\n function log(string memory transaction) internal {\n int[] memory data;\n __Precompile__(LOG).precompileLog(transaction, data);\n }\n}\n\n// NilBase is a base contract that provides modifiers for checking the type of transaction (internal or external).\ncontract NilBase {\n /**\n * @dev Modifier to check that the method was invoked from a response transaction.\n */\n modifier onlyResponse() {\n (bool success,/* bytes memory returnData*/) = Nil.IS_RESPONSE_TRANSACTION.staticcall(bytes(\"\"));\n require(success, \"IS_RESPONSE_TRANSACTION call failed\");\n _;\n }\n\n /**\n * @dev Modifier to check that the method was invoked from an internal transaction.\n */\n modifier onlyInternal() {\n require(isInternalTransaction(), \"Trying to call internal function with external transaction\");\n _;\n }\n\n /**\n * @dev Modifier to check that the method was invoked from an external transaction.\n */\n modifier onlyExternal() {\n require(!isInternalTransaction(), \"Trying to call external function with internal transaction\");\n _;\n }\n\n // isInternalTransaction returns true if the current transaction is internal.\n function isInternalTransaction() internal view returns (bool) {\n bytes memory data;\n (bool success, bytes memory returnData) = Nil.IS_INTERNAL_TRANSACTION.staticcall(data);\n require(success, \"Precompiled contract call failed\");\n require(returnData.length > 0, \"'IS_INTERNAL_TRANSACTION' returns invalid data\");\n return abi.decode(returnData, (bool));\n }\n}\n\nabstract contract NilBounceable is NilBase {\n function bounce(string calldata err) virtual payable external;\n}\n\n// WARNING: User should never use this contract directly.\ncontract __Precompile__ {\n // if mint flag is set to false, token will be burned instead\n function precompileManageToken(uint256 amount, bool mint) public returns(bool) {}\n function precompileGetTokenBalance(TokenId id, address addr) public view returns(uint256) {}\n function precompileAsyncCall(bool, uint8, address, address, address, uint, Nil.Token[] memory, bytes memory) public payable returns(bool) {}\n function precompileAwaitCall(address, uint, bytes memory) public payable returns(bytes memory, bool) {}\n function precompileSendRequest(address, Nil.Token[] memory, uint, bytes memory, bytes memory) public payable returns(bool) {}\n function precompileSendTokens(address, Nil.Token[] memory) public returns(bool) {}\n function precompileGetTransactionTokens() public returns(Nil.Token[] memory) {}\n function precompileGetGasPrice(uint id) public returns(uint256) {}\n function precompileGetPoseidonHash(bytes memory data) public returns(uint256) {}\n function precompileConfigParam(bool isSet, string calldata name, bytes calldata data) public returns(bytes memory) {}\n function precompileLog(string memory transaction, int[] memory data) public returns(bool) {}\n}\n\ncontract NilConfigAbi {\n function curr_validators(Nil.ParamValidators memory) public {}\n function gas_price(Nil.ParamGasPrice memory) public {}\n}\n\nfunction tokenIdEqual(TokenId a, TokenId b) pure returns (bool) {\n return TokenId.unwrap(a) == TokenId.unwrap(b);\n}\n\nfunction tokenIdNotEqual(TokenId a, TokenId b) pure returns (bool) {\n return TokenId.unwrap(a) != TokenId.unwrap(b);\n}\n\nfunction tokenIdLess(TokenId a, TokenId b) pure returns (bool) {\n return TokenId.unwrap(a) < TokenId.unwrap(b);\n}\n\nfunction tokenIdGreater(TokenId a, TokenId b) pure returns (bool) {\n return TokenId.unwrap(a) > TokenId.unwrap(b);\n}\n\nfunction tokenIdLessOrEqual(TokenId a, TokenId b) pure returns (bool) {\n return TokenId.unwrap(a) <= TokenId.unwrap(b);\n}\n\nfunction tokenIdGreaterOrEqual(TokenId a, TokenId b) pure returns (bool) {\n return TokenId.unwrap(a) >= TokenId.unwrap(b);\n}\n"},"@nilfoundation/smart-contracts/contracts/NilTokenBase.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./Nil.sol\";\n\n/**\n * @title NilTokenBase\n * @dev Abstract contract that provides functionality for token processing.\n * Methods with \"Internal\" suffix are internal, which means that they can be called only from the derived contract\n * itself. But there are default wrapper methods that provide the account owner access to internal methods.\n * They are virtual, so the main contract can disable them by overriding them. Then only logic of the contract can use\n * internal methods.\n */\nabstract contract NilTokenBase is NilBase {\n uint totalSupply;\n string tokenName;\n\n /**\n * @dev Returns the total supply of the token.\n * @return The total supply of the token.\n */\n function getTokenTotalSupply() public view returns(uint) {\n return totalSupply;\n }\n\n /**\n * @dev Returns the balance of the token owned by this contract.\n * @return The balance of the token owned by this contract.\n */\n function getOwnTokenBalance() public view returns(uint256) {\n return Nil.tokenBalance(address(this), getTokenId());\n }\n\n /**\n * @dev Returns the unique identifier of the token owned by this contract.\n * @return The unique identifier of the token owned by this contract.\n */\n function getTokenId() public view returns(TokenId) {\n return TokenId.wrap(address(this));\n }\n\n /**\n * @dev Returns the name of the token.\n * @return The name of the token.\n */\n function getTokenName() public view returns(string memory) {\n return tokenName;\n }\n\n /**\n * @dev Set the name of the token.\n * @param name The name of the token.\n */\n function setTokenName(string memory name) onlyExternal virtual public {\n tokenName = name;\n }\n\n /**\n * @dev Mints a specified amount of token using external call.\n * It is wrapper over `mintTokenInternal` method to provide access to the owner of the account.\n * @param amount The amount of token to mint.\n */\n function mintToken(uint256 amount) onlyExternal virtual public {\n mintTokenInternal(amount);\n }\n\n /**\n * @dev Burns a specified amount of token using external call.\n * It is wrapper over `burnTokenInternal` method to provide access to the owner of the account.\n * @param amount The amount of token to burn.\n */\n function burnToken(uint256 amount) onlyExternal virtual public {\n burnTokenInternal(amount);\n }\n\n /**\n * @dev Sends a specified amount of arbitrary token to a given address.\n * It is wrapper over `sendTokenInternal` method to provide access to the owner of the account.\n * @param amount The amount of token to mint.\n */\n function sendToken(address to, TokenId tokenId, uint256 amount) onlyExternal virtual public {\n sendTokenInternal(to, tokenId, amount);\n }\n\n /**\n * @dev Mints a specified amount of token and increases the total supply.\n * All minting should be carried out using this method.\n * @param amount The amount of token to mint.\n */\n function mintTokenInternal(uint256 amount) internal {\n bool success = __Precompile__(Nil.MANAGE_TOKEN).precompileManageToken(amount, true);\n require(success, \"Mint failed\");\n totalSupply += amount;\n }\n\n /**\n * @dev Burns a specified amount of token and decreases the total supply.\n * All burning should be carried out using this method.\n * @param amount The amount of token to mint.\n */\n function burnTokenInternal(uint256 amount) internal {\n require(totalSupply >= amount, \"Burn failed: not enough tokens\");\n bool success = __Precompile__(Nil.MANAGE_TOKEN).precompileManageToken(amount, false);\n require(success, \"Burn failed\");\n totalSupply -= amount;\n }\n\n /**\n * @dev Sends a specified amount of arbitrary token to a given address.\n * @param to The address to send the token to.\n * @param tokenId ID of the token to send.\n * @param amount The amount of token to send.\n */\n function sendTokenInternal(address to, TokenId tokenId, uint256 amount) internal {\n Nil.Token[] memory tokens_ = new Nil.Token[](1);\n tokens_[0] = Nil.Token(tokenId, amount);\n Nil.asyncCallWithTokens(to, address(0), address(0), 0, Nil.FORWARD_REMAINING, 0, tokens_, \"\");\n }\n\n /**\n * @dev Returns the balance of the token for a given address.\n * @param account The address to check the balance for.\n * @return The balance of the token for the given address.\n */\n function getTokenBalanceOf(address account) public view returns(uint256) {\n return Nil.tokenBalance(account, getTokenId());\n }\n}\n"},"contracts/CollateralManager.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity ^0.8.28;\n\nimport \"@nilfoundation/smart-contracts/contracts/Nil.sol\";\nimport \"@nilfoundation/smart-contracts/contracts/NilTokenBase.sol\";\n\n/// @title GlobalLedger\n/// @dev The GlobalLedger contract is responsible for tracking user deposits and loans in the lending protocol.\n/// It stores the deposit balances for users and keeps track of the loans each user has taken.\ncontract GlobalLedger {\n /// @dev Mapping of user addresses to their token deposits (token -> amount).\n mapping(address => mapping(TokenId => uint256)) public deposits;\n\n /// @dev Mapping of user addresses to their loans (loan amount and loan token).\n mapping(address => Loan) public loans;\n\n /// @dev Struct to store loan details: amount and the token type.\n struct Loan {\n uint256 amount;\n TokenId token;\n }\n\n /// @notice Records a user's deposit into the ledger.\n /// @dev Increases the deposit balance for the user for the specified token.\n /// @param user The address of the user making the deposit.\n /// @param token The token type being deposited (e.g., USDT, ETH).\n /// @param amount The amount of the token being deposited.\n function recordDeposit(address user, TokenId token, uint256 amount) public {\n deposits[user][token] += amount;\n }\n\n /// @notice Fetches a user's deposit balance for a specific token.\n /// @dev Returns the amount of the token deposited by the user.\n /// @param user The address of the user whose deposit balance is being fetched.\n /// @param token The token type for which the balance is being fetched.\n /// @return uint256 The deposit amount for the given user and token.\n function getDeposit(\n address user,\n TokenId token\n ) public view returns (uint256) {\n return deposits[user][token]; // Return the deposit amount for the given user and token\n }\n\n /// @notice Records a user's loan in the ledger.\n /// @dev Stores the amount of the loan and the token type used for the loan.\n /// @param user The address of the user taking the loan.\n /// @param token The token type used for the loan (e.g., USDT, ETH).\n /// @param amount The amount of the loan being taken.\n function recordLoan(address user, TokenId token, uint256 amount) public {\n loans[user] = Loan(amount, token);\n }\n\n /// @notice Retrieves a user's loan details.\n /// @dev Returns the loan amount and the token used for the loan.\n /// @param user The address of the user whose loan details are being fetched.\n /// @return uint256 The loan amount.\n /// @return TokenId The token type used for the loan.\n function getLoanDetails(\n address user\n ) public view returns (uint256, TokenId) {\n return (loans[user].amount, loans[user].token);\n }\n}\n"},"contracts/InterestManager.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity ^0.8.28;\n\nimport \"@nilfoundation/smart-contracts/contracts/Nil.sol\";\nimport \"@nilfoundation/smart-contracts/contracts/NilTokenBase.sol\";\n\n/// @title InterestManager\n/// @dev The InterestManager contract is responsible for providing the interest rate to be used in the lending protocol.\ncontract InterestManager {\n /// @notice Fetches the current interest rate.\n /// @dev In this basic implementation, the interest rate is fixed at 5%.\n /// In a real-world scenario, this could be replaced with a dynamic calculation based on market conditions or other factors.\n /// @return uint256 The current interest rate (5% in this case).\n function getInterestRate() public pure returns (uint256) {\n return 5;\n }\n}\n"},"contracts/LendingPool.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity ^0.8.28;\n\nimport \"@nilfoundation/smart-contracts/contracts/Nil.sol\";\nimport \"@nilfoundation/smart-contracts/contracts/NilTokenBase.sol\";\n\n/// @title LendingPool\n/// @dev The LendingPool contract facilitates lending and borrowing of tokens and handles collateral management.\n/// It interacts with other contracts such as GlobalLedger, InterestManager, and Oracle for tracking deposits, calculating interest, and fetching token prices.\ncontract LendingPool is NilBase, NilTokenBase {\n address public globalLedger;\n address public interestManager;\n address public oracle;\n TokenId public usdt;\n TokenId public eth;\n\n /// @notice Constructor to initialize the LendingPool contract with addresses for dependencies.\n /// @dev Sets the contract addresses for GlobalLedger, InterestManager, Oracle, USDT, and ETH tokens.\n /// @param _globalLedger The address of the GlobalLedger contract.\n /// @param _interestManager The address of the InterestManager contract.\n /// @param _oracle The address of the Oracle contract.\n /// @param _usdt The TokenId for USDT.\n /// @param _eth The TokenId for ETH.\n constructor(\n address _globalLedger,\n address _interestManager,\n address _oracle,\n TokenId _usdt,\n TokenId _eth\n ) {\n globalLedger = _globalLedger;\n interestManager = _interestManager;\n oracle = _oracle;\n usdt = _usdt;\n eth = _eth;\n }\n\n /// @notice Deposit function to deposit tokens into the lending pool.\n /// @dev The deposited tokens are recorded in the GlobalLedger via an asynchronous call.\n function deposit() public payable {\n /// Retrieve the tokens being sent in the transaction\n Nil.Token[] memory tokens = Nil.txnTokens();\n\n /// @notice Encoding the call to the GlobalLedger to record the deposit\n /// @dev The deposit details (user address, token type, and amount) are encoded for GlobalLedger.\n /// @param callData The encoded call data for recording the deposit in GlobalLedger.\n bytes memory callData = abi.encodeWithSignature(\n \"recordDeposit(address,address,uint256)\",\n msg.sender,\n tokens[0].id, // The token being deposited (usdt or eth)\n tokens[0].amount // The amount of the token being deposited\n );\n\n /// @notice Making an asynchronous call to the GlobalLedger to record the deposit\n /// @dev This ensures that the user's deposit is recorded in GlobalLedger asynchronously.\n Nil.asyncCall(globalLedger, address(this), 0, callData);\n }\n\n /// @notice Borrow function allows a user to borrow tokens (either USDT or ETH).\n /// @dev Ensures sufficient liquidity, checks collateral, and processes the loan after fetching the price from the Oracle.\n /// @param amount The amount of the token to borrow.\n /// @param borrowToken The token the user wants to borrow (either USDT or ETH).\n function borrow(uint256 amount, TokenId borrowToken) public payable {\n /// @notice Ensure the token being borrowed is either USDT or ETH\n /// @dev Prevents invalid token types from being borrowed.\n require(borrowToken == usdt || borrowToken == eth, \"Invalid token\");\n\n /// @notice Ensure that the LendingPool has enough liquidity of the requested borrow token\n /// @dev Checks the LendingPool's balance to confirm it has enough tokens to fulfill the borrow request.\n require(\n Nil.tokenBalance(address(this), borrowToken) >= amount,\n \"Insufficient funds\"\n );\n\n /// @notice Determine which collateral token will be used (opposite of the borrow token)\n /// @dev Identifies the collateral token by comparing the borrow token.\n TokenId collateralToken = (borrowToken == usdt) ? eth : usdt;\n\n /// @notice Prepare a call to the Oracle to get the price of the borrow token\n /// @dev The price of the borrow token is fetched from the Oracle to calculate collateral.\n /// @param callData The encoded data to fetch the price from the Oracle.\n bytes memory callData = abi.encodeWithSignature(\n \"getPrice(address)\",\n borrowToken\n );\n\n /// @notice Encoding the context to process the loan after the price is fetched\n /// @dev The context contains the borrower’s details, loan amount, borrow token, and collateral token.\n bytes memory context = abi.encodeWithSelector(\n this.processLoan.selector,\n msg.sender,\n amount,\n borrowToken,\n collateralToken\n );\n\n /// @notice Send a request to the Oracle to get the price of the borrow token.\n /// @dev This request is processed with a fee for the transaction, allowing the system to fetch the token price.\n Nil.sendRequest(oracle, 0, 9_000_000, context, callData);\n }\n\n /// @notice Callback function to process the loan after the price data is retrieved from Oracle.\n /// @dev Ensures that the borrower has enough collateral, calculates the loan value, and initiates loan processing.\n /// @param success Indicates if the Oracle call was successful.\n /// @param returnData The price data returned from the Oracle.\n /// @param context The context data containing borrower details, loan amount, and collateral token.\n function processLoan(\n bool success,\n bytes memory returnData,\n bytes memory context\n ) public payable {\n /// @notice Ensure the Oracle call was successful\n /// @dev Verifies that the price data was successfully retrieved from the Oracle.\n require(success, \"Oracle call failed\");\n\n /// @notice Decode the context to extract borrower details, loan amount, and collateral token\n /// @dev Decodes the context passed from the borrow function to retrieve necessary data.\n (\n address borrower,\n uint256 amount,\n TokenId borrowToken,\n TokenId collateralToken\n ) = abi.decode(context, (address, uint256, TokenId, TokenId));\n\n /// @notice Decode the price data returned from the Oracle\n /// @dev The returned price data is used to calculate the loan value in USD.\n uint256 borrowTokenPrice = abi.decode(returnData, (uint256));\n /// @notice Calculate the loan value in USD\n /// @dev Multiplies the amount by the borrow token price to get the loan value in USD.\n uint256 loanValueInUSD = amount * borrowTokenPrice;\n /// @notice Calculate the required collateral (120% of the loan value)\n /// @dev The collateral is calculated as 120% of the loan value to mitigate risk.\n uint256 requiredCollateral = (loanValueInUSD * 120) / 100;\n\n /// @notice Prepare a call to GlobalLedger to check the user's collateral balance\n /// @dev Fetches the collateral balance from the GlobalLedger contract to ensure sufficient collateral.\n bytes memory ledgerCallData = abi.encodeWithSignature(\n \"getDeposit(address,address)\",\n borrower,\n collateralToken\n );\n\n /// @notice Encoding the context to finalize the loan once the collateral is validated\n /// @dev Once the collateral balance is validated, the loan is finalized and processed.\n bytes memory ledgerContext = abi.encodeWithSelector(\n this.finalizeLoan.selector,\n borrower,\n amount,\n borrowToken,\n requiredCollateral\n );\n\n /// @notice Send request to GlobalLedger to get the user's collateral\n /// @dev The fee for this request is retained for processing the collateral validation response.\n Nil.sendRequest(\n globalLedger,\n 0,\n 6_000_000,\n ledgerContext,\n ledgerCallData\n );\n }\n\n /// @notice Finalize the loan by ensuring sufficient collateral and recording the loan in GlobalLedger.\n /// @dev Verifies that the user has enough collateral, processes the loan, and sends the borrowed tokens to the borrower.\n /// @param success Indicates if the collateral check was successful.\n /// @param returnData The collateral balance returned from the GlobalLedger.\n /// @param context The context containing loan details.\n function finalizeLoan(\n bool success,\n bytes memory returnData,\n bytes memory context\n ) public payable {\n /// @notice Ensure the collateral check was successful\n /// @dev Verifies the collateral validation result from GlobalLedger.\n require(success, \"Ledger call failed\");\n\n /// @notice Decode the context to extract loan details\n /// @dev Decodes the context passed from the processLoan function to retrieve loan data.\n (\n address borrower,\n uint256 amount,\n TokenId borrowToken,\n uint256 requiredCollateral\n ) = abi.decode(context, (address, uint256, TokenId, uint256));\n\n /// @notice Decode the user's collateral balance from GlobalLedger\n /// @dev Retrieves the user's collateral balance from the GlobalLedger to compare it with the required collateral.\n uint256 userCollateral = abi.decode(returnData, (uint256));\n\n /// @notice Check if the user has enough collateral to cover the loan\n /// @dev Ensures the borrower has sufficient collateral before proceeding with the loan.\n require(\n userCollateral >= requiredCollateral,\n \"Insufficient collateral\"\n );\n\n /// @notice Record the loan in GlobalLedger\n /// @dev The loan details are recorded in the GlobalLedger contract.\n bytes memory recordLoanCallData = abi.encodeWithSignature(\n \"recordLoan(address,address,uint256)\",\n borrower,\n borrowToken,\n amount\n );\n Nil.asyncCall(globalLedger, address(this), 0, recordLoanCallData);\n\n /// @notice Send the borrowed tokens to the borrower\n /// @dev Transfers the loan amount to the borrower's address after finalizing the loan.\n sendTokenInternal(borrower, borrowToken, amount);\n }\n\n /// @notice Repay loan function called by the borrower to repay their loan.\n /// @dev Initiates the repayment process by retrieving the loan details from GlobalLedger.\n function repayLoan() public payable {\n /// @notice Retrieve the tokens being sent in the transaction\n /// @dev Retrieves the tokens involved in the repayment.\n Nil.Token[] memory tokens = Nil.txnTokens();\n\n /// @notice Prepare to query the loan details from GlobalLedger\n /// @dev Fetches the loan details of the borrower to proceed with repayment.\n bytes memory callData = abi.encodeWithSignature(\n \"getLoanDetails(address)\",\n msg.sender\n );\n\n /// @notice Encoding the context to handle repayment after loan details are fetched\n /// @dev Once the loan details are retrieved, the repayment amount is processed.\n bytes memory context = abi.encodeWithSelector(\n this.handleRepayment.selector,\n msg.sender,\n tokens[0].amount\n );\n\n /// @notice Send request to GlobalLedger to fetch loan details\n /// @dev Retrieves the borrower’s loan details before proceeding with the repayment.\n Nil.sendRequest(globalLedger, 0, 11_000_000, context, callData);\n }\n\n /// @notice Handle the loan repayment, calculate the interest, and update GlobalLedger.\n /// @dev Calculates the total repayment (principal + interest) and updates the loan status in GlobalLedger.\n /// @param success Indicates if the loan details retrieval was successful.\n /// @param returnData The loan details returned from the GlobalLedger.\n /// @param context The context containing borrower and repayment details.\n function handleRepayment(\n bool success,\n bytes memory returnData,\n bytes memory context\n ) public payable {\n /// @notice Ensure the GlobalLedger call was successful\n /// @dev Verifies that the loan details were successfully retrieved from the GlobalLedger.\n require(success, \"Ledger call failed\");\n\n /// @notice Decode context and loan details\n /// @dev Decodes the context and the return data to retrieve the borrower's loan details.\n (address borrower, uint256 sentAmount) = abi.decode(\n context,\n (address, uint256)\n );\n (uint256 amount, TokenId token) = abi.decode(\n returnData,\n (uint256, TokenId)\n );\n\n /// @notice Ensure the borrower has an active loan\n /// @dev Ensures the borrower has an outstanding loan before proceeding with repayment.\n require(amount > 0, \"No active loan\");\n\n /// @notice Request the interest rate from the InterestManager\n /// @dev Fetches the current interest rate for the loan from the InterestManager contract.\n bytes memory interestCallData = abi.encodeWithSignature(\n \"getInterestRate()\"\n );\n bytes memory interestContext = abi.encodeWithSelector(\n this.processRepayment.selector,\n borrower,\n amount,\n token,\n sentAmount\n );\n\n /// @notice Send request to InterestManager to fetch interest rate\n /// @dev This request fetches the interest rate that will be used to calculate the total repayment.\n Nil.sendRequest(\n interestManager,\n 0,\n 8_000_000,\n interestContext,\n interestCallData\n );\n }\n\n /// @notice Process the repayment, calculate the total repayment including interest.\n /// @dev Finalizes the loan repayment, ensuring the borrower has sent sufficient funds.\n /// @param success Indicates if the interest rate call was successful.\n /// @param returnData The interest rate returned from the InterestManager.\n /// @param context The context containing repayment details.\n function processRepayment(\n bool success,\n bytes memory returnData,\n bytes memory context\n ) public payable {\n /// @notice Ensure the interest rate call was successful\n /// @dev Verifies that the interest rate retrieval was successful.\n require(success, \"Interest rate call failed\");\n\n /// @notice Decode the repayment details and the interest rate\n /// @dev Decodes the repayment context and retrieves the interest rate for loan repayment.\n (\n address borrower,\n uint256 amount,\n TokenId token,\n uint256 sentAmount\n ) = abi.decode(context, (address, uint256, TokenId, uint256));\n\n /// @notice Decode the interest rate from the response\n /// @dev Decodes the interest rate received from the InterestManager contract.\n uint256 interestRate = abi.decode(returnData, (uint256));\n /// @notice Calculate the total repayment amount (principal + interest)\n /// @dev Adds the interest to the principal to calculate the total repayment due.\n uint256 totalRepayment = amount + ((amount * interestRate) / 100);\n\n /// @notice Ensure the borrower has sent sufficient funds for the repayment\n /// @dev Verifies that the borrower has provided enough funds to repay the loan in full.\n require(sentAmount >= totalRepayment, \"Insufficient funds\");\n\n /// @notice Clear the loan and release collateral\n /// @dev Marks the loan as repaid and releases any associated collateral back to the borrower.\n bytes memory clearLoanCallData = abi.encodeWithSignature(\n \"recordLoan(address,address,uint256)\",\n borrower,\n token,\n 0 // Mark the loan as repaid\n );\n bytes memory releaseCollateralContext = abi.encodeWithSelector(\n this.releaseCollateral.selector,\n borrower,\n token\n );\n\n /// @notice Send request to GlobalLedger to update the loan status\n /// @dev Updates the loan status to indicate repayment completion in the GlobalLedger.\n Nil.sendRequest(\n globalLedger,\n 0,\n 6_000_000,\n releaseCollateralContext,\n clearLoanCallData\n );\n }\n\n /// @notice Release the collateral after the loan is repaid.\n /// @dev Sends the collateral back to the borrower after confirming the loan is fully repaid.\n /// @param success Indicates if the loan clearing was successful.\n /// @param returnData The collateral data returned from the GlobalLedger.\n /// @param context The context containing borrower and collateral token.\n function releaseCollateral(\n bool success,\n bytes memory returnData,\n bytes memory context\n ) public payable {\n /// @notice Ensure the loan clearing was successful\n /// @dev Verifies the result of clearing the loan in the GlobalLedger.\n require(success, \"Loan clearing failed\");\n\n /// @notice Silence unused variable warning\n /// @dev A placeholder for unused variables to avoid compiler warnings.\n returnData;\n\n /// @notice Decode context for borrower and collateral token\n /// @dev Decodes the context passed from the loan clearing function to retrieve the borrower's details.\n (address borrower, TokenId borrowToken) = abi.decode(\n context,\n (address, TokenId)\n );\n\n /// @notice Determine the collateral token (opposite of borrow token)\n /// @dev Identifies the token being used as collateral based on the borrow token.\n TokenId collateralToken = (borrowToken == usdt) ? eth : usdt;\n\n /// @notice Request collateral amount from GlobalLedger\n /// @dev Retrieves the amount of collateral associated with the borrower from the GlobalLedger.\n bytes memory getCollateralCallData = abi.encodeWithSignature(\n \"getDeposit(address,address)\",\n borrower,\n collateralToken\n );\n\n /// @notice Context to send collateral to the borrower\n /// @dev After confirming the collateral balance, it is returned to the borrower.\n bytes memory sendCollateralContext = abi.encodeWithSelector(\n this.sendCollateral.selector,\n borrower,\n collateralToken\n );\n\n /// @notice Send request to GlobalLedger to retrieve the collateral\n /// @dev This request ensures that the correct collateral is available for release.\n Nil.sendRequest(\n globalLedger,\n 0,\n 3_50_000,\n sendCollateralContext,\n getCollateralCallData\n );\n }\n\n /// @notice Send the collateral back to the borrower.\n /// @dev Ensures there is enough collateral to release and then sends the funds back to the borrower.\n /// @param success Indicates if the collateral retrieval was successful.\n /// @param returnData The amount of collateral available.\n /// @param context The context containing borrower and collateral token.\n function sendCollateral(\n bool success,\n bytes memory returnData,\n bytes memory context\n ) public payable {\n /// @notice Ensure the collateral retrieval was successful\n /// @dev Verifies that the request to retrieve the collateral was successful.\n require(success, \"Failed to retrieve collateral\");\n\n /// @notice Decode the collateral details\n /// @dev Decodes the context passed from the releaseCollateral function to retrieve collateral details.\n (address borrower, TokenId collateralToken) = abi.decode(\n context,\n (address, TokenId)\n );\n uint256 collateralAmount = abi.decode(returnData, (uint256));\n\n /// @notice Ensure there's collateral to release\n /// @dev Verifies that there is enough collateral to be released.\n require(collateralAmount > 0, \"No collateral to release\");\n\n /// @notice Ensure sufficient balance in the LendingPool to send collateral\n /// @dev Verifies that the LendingPool has enough collateral to send to the borrower.\n require(\n Nil.tokenBalance(address(this), collateralToken) >=\n collateralAmount,\n \"Insufficient funds\"\n );\n\n /// @notice Send the collateral tokens to the borrower\n /// @dev Executes the transfer of collateral tokens back to the borrower.\n sendTokenInternal(borrower, collateralToken, collateralAmount);\n }\n}\n"},"contracts/Oracle.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity ^0.8.28;\n\nimport \"@nilfoundation/smart-contracts/contracts/Nil.sol\";\nimport \"@nilfoundation/smart-contracts/contracts/NilTokenBase.sol\";\n\n/// @title Oracle\n/// @dev The Oracle contract provides token price data to the lending protocol.\n/// It is used to fetch the price of tokens (e.g., USDT, ETH) used for collateral calculations in the lending process.\ncontract Oracle is NilBase {\n /// @dev Mapping to store the price of each token (TokenId => price).\n mapping(TokenId => uint256) public rates;\n\n /// @notice Set the price of a token.\n /// @dev This function allows the price of tokens to be updated in the Oracle contract.\n /// Only authorized entities (e.g., the contract owner or admin) should be able to set the price.\n /// @param token The token whose price is being set.\n /// @param price The new price of the token.\n function setPrice(TokenId token, uint256 price) public {\n /// @notice Store the price of the token in the rates mapping.\n /// @dev This updates the price of the specified token in the Oracle contract.\n rates[token] = price;\n }\n\n /// @notice Retrieve the price of a token.\n /// @dev This function allows other contracts (like LendingPool) to access the current price of a token.\n /// @param token The token whose price is being fetched.\n /// @return uint256 The price of the specified token.\n function getPrice(TokenId token) public view returns (uint256) {\n /// @notice Return the price of the specified token.\n /// @dev This function provides the price stored in the `rates` mapping for the given token.\n return rates[token];\n }\n}\n"}},"settings":{"viaIR":true,"optimizer":{"enabled":true,"runs":200},"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"],"":["ast"]}}}},"output":{"sources":{"@nilfoundation/smart-contracts/contracts/Nil.sol":{"ast":{"absolutePath":"@nilfoundation/smart-contracts/contracts/Nil.sol","exportedSymbols":{"Nil":[885],"NilBase":[970],"NilBounceable":[978],"NilConfigAbi":[1130],"TokenId":[3],"__Precompile__":[1115],"tokenIdEqual":[1152],"tokenIdGreater":[1218],"tokenIdGreaterOrEqual":[1262],"tokenIdLess":[1196],"tokenIdLessOrEqual":[1240],"tokenIdNotEqual":[1174]},"id":1263,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"32:23:0"},{"canonicalName":"TokenId","id":3,"name":"TokenId","nameLocation":"126:7:0","nodeType":"UserDefinedValueTypeDefinition","src":"121:24:0","underlyingType":{"id":2,"name":"address","nodeType":"ElementaryTypeName","src":"137:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},{"functionList":[{"definition":{"id":4,"name":"tokenIdEqual","nameLocations":["159:12:0"],"nodeType":"IdentifierPath","referencedDeclaration":1152,"src":"159:12:0"},"operator":"=="},{"definition":{"id":5,"name":"tokenIdNotEqual","nameLocations":["183:15:0"],"nodeType":"IdentifierPath","referencedDeclaration":1174,"src":"183:15:0"},"operator":"!="},{"definition":{"id":6,"name":"tokenIdLess","nameLocations":["210:11:0"],"nodeType":"IdentifierPath","referencedDeclaration":1196,"src":"210:11:0"},"operator":"<"},{"definition":{"id":7,"name":"tokenIdGreater","nameLocations":["232:14:0"],"nodeType":"IdentifierPath","referencedDeclaration":1218,"src":"232:14:0"},"operator":">"},{"definition":{"id":8,"name":"tokenIdLessOrEqual","nameLocations":["257:18:0"],"nodeType":"IdentifierPath","referencedDeclaration":1240,"src":"257:18:0"},"operator":"<="},{"definition":{"id":9,"name":"tokenIdGreaterOrEqual","nameLocations":["287:21:0"],"nodeType":"IdentifierPath","referencedDeclaration":1262,"src":"287:21:0"},"operator":">="}],"global":true,"id":12,"nodeType":"UsingForDirective","src":"147:189:0","typeName":{"id":11,"nodeType":"UserDefinedTypeName","pathNode":{"id":10,"name":"TokenId","nameLocations":["321:7:0"],"nodeType":"IdentifierPath","referencedDeclaration":3,"src":"321:7:0"},"referencedDeclaration":3,"src":"321:7:0","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}}},{"abstract":false,"baseContracts":[],"canonicalName":"Nil","contractDependencies":[],"contractKind":"library","fullyImplemented":true,"id":885,"linearizedBaseContracts":[885],"name":"Nil","nameLocation":"346:3:0","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":15,"mutability":"constant","name":"SEND_TRANSACTION","nameLocation":"378:16:0","nodeType":"VariableDeclaration","scope":885,"src":"356:45:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13,"name":"uint","nodeType":"ElementaryTypeName","src":"356:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30786663","id":14,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"397:4:0","typeDescriptions":{"typeIdentifier":"t_rational_252_by_1","typeString":"int_const 252"},"value":"0xfc"},"visibility":"private"},{"constant":true,"id":21,"mutability":"constant","name":"ASYNC_CALL","nameLocation":"432:10:0","nodeType":"VariableDeclaration","scope":885,"src":"407:51:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16,"name":"address","nodeType":"ElementaryTypeName","src":"407:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"arguments":[{"hexValue":"30786664","id":19,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"453:4:0","typeDescriptions":{"typeIdentifier":"t_rational_253_by_1","typeString":"int_const 253"},"value":"0xfd"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_253_by_1","typeString":"int_const 253"}],"id":18,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"445:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17,"name":"address","nodeType":"ElementaryTypeName","src":"445:7:0","typeDescriptions":{}}},"id":20,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"445:13:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"constant":true,"functionSelector":"a167fd5f","id":27,"mutability":"constant","name":"VERIFY_SIGNATURE","nameLocation":"488:16:0","nodeType":"VariableDeclaration","scope":885,"src":"464:56:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22,"name":"address","nodeType":"ElementaryTypeName","src":"464:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"arguments":[{"hexValue":"30786665","id":25,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"515:4:0","typeDescriptions":{"typeIdentifier":"t_rational_254_by_1","typeString":"int_const 254"},"value":"0xfe"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_254_by_1","typeString":"int_const 254"}],"id":24,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"507:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23,"name":"address","nodeType":"ElementaryTypeName","src":"507:7:0","typeDescriptions":{}}},"id":26,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"507:13:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"constant":true,"functionSelector":"434b4d63","id":33,"mutability":"constant","name":"IS_INTERNAL_TRANSACTION","nameLocation":"550:23:0","nodeType":"VariableDeclaration","scope":885,"src":"526:63:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28,"name":"address","nodeType":"ElementaryTypeName","src":"526:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"arguments":[{"hexValue":"30786666","id":31,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"584:4:0","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"0xff"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"}],"id":30,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"576:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":29,"name":"address","nodeType":"ElementaryTypeName","src":"576:7:0","typeDescriptions":{}}},"id":32,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"576:13:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"constant":true,"functionSelector":"620c9317","id":39,"mutability":"constant","name":"MANAGE_TOKEN","nameLocation":"619:12:0","nodeType":"VariableDeclaration","scope":885,"src":"595:52:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34,"name":"address","nodeType":"ElementaryTypeName","src":"595:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"arguments":[{"hexValue":"30786430","id":37,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"642:4:0","typeDescriptions":{"typeIdentifier":"t_rational_208_by_1","typeString":"int_const 208"},"value":"0xd0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_208_by_1","typeString":"int_const 208"}],"id":36,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"634:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":35,"name":"address","nodeType":"ElementaryTypeName","src":"634:7:0","typeDescriptions":{}}},"id":38,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"634:13:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"constant":true,"id":45,"mutability":"constant","name":"GET_TOKEN_BALANCE","nameLocation":"678:17:0","nodeType":"VariableDeclaration","scope":885,"src":"653:58:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40,"name":"address","nodeType":"ElementaryTypeName","src":"653:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"arguments":[{"hexValue":"30786431","id":43,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"706:4:0","typeDescriptions":{"typeIdentifier":"t_rational_209_by_1","typeString":"int_const 209"},"value":"0xd1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_209_by_1","typeString":"int_const 209"}],"id":42,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"698:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":41,"name":"address","nodeType":"ElementaryTypeName","src":"698:7:0","typeDescriptions":{}}},"id":44,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"698:13:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"constant":true,"id":51,"mutability":"constant","name":"SEND_TOKEN_SYNC","nameLocation":"742:15:0","nodeType":"VariableDeclaration","scope":885,"src":"717:56:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":46,"name":"address","nodeType":"ElementaryTypeName","src":"717:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"arguments":[{"hexValue":"30786432","id":49,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"768:4:0","typeDescriptions":{"typeIdentifier":"t_rational_210_by_1","typeString":"int_const 210"},"value":"0xd2"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_210_by_1","typeString":"int_const 210"}],"id":48,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"760:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":47,"name":"address","nodeType":"ElementaryTypeName","src":"760:7:0","typeDescriptions":{}}},"id":50,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"760:13:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"constant":true,"id":57,"mutability":"constant","name":"GET_TRANSACTION_TOKENS","nameLocation":"804:22:0","nodeType":"VariableDeclaration","scope":885,"src":"779:63:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":52,"name":"address","nodeType":"ElementaryTypeName","src":"779:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"arguments":[{"hexValue":"30786433","id":55,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"837:4:0","typeDescriptions":{"typeIdentifier":"t_rational_211_by_1","typeString":"int_const 211"},"value":"0xd3"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_211_by_1","typeString":"int_const 211"}],"id":54,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"829:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":53,"name":"address","nodeType":"ElementaryTypeName","src":"829:7:0","typeDescriptions":{}}},"id":56,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"829:13:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"constant":true,"id":63,"mutability":"constant","name":"GET_GAS_PRICE","nameLocation":"873:13:0","nodeType":"VariableDeclaration","scope":885,"src":"848:54:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":58,"name":"address","nodeType":"ElementaryTypeName","src":"848:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"arguments":[{"hexValue":"30786434","id":61,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"897:4:0","typeDescriptions":{"typeIdentifier":"t_rational_212_by_1","typeString":"int_const 212"},"value":"0xd4"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_212_by_1","typeString":"int_const 212"}],"id":60,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"889:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":59,"name":"address","nodeType":"ElementaryTypeName","src":"889:7:0","typeDescriptions":{}}},"id":62,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"889:13:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"constant":true,"id":69,"mutability":"constant","name":"GET_POSEIDON_HASH","nameLocation":"933:17:0","nodeType":"VariableDeclaration","scope":885,"src":"908:58:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":64,"name":"address","nodeType":"ElementaryTypeName","src":"908:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"arguments":[{"hexValue":"30786435","id":67,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"961:4:0","typeDescriptions":{"typeIdentifier":"t_rational_213_by_1","typeString":"int_const 213"},"value":"0xd5"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_213_by_1","typeString":"int_const 213"}],"id":66,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"953:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":65,"name":"address","nodeType":"ElementaryTypeName","src":"953:7:0","typeDescriptions":{}}},"id":68,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"953:13:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"constant":true,"id":75,"mutability":"constant","name":"AWAIT_CALL","nameLocation":"997:10:0","nodeType":"VariableDeclaration","scope":885,"src":"972:51:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":70,"name":"address","nodeType":"ElementaryTypeName","src":"972:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"arguments":[{"hexValue":"30786436","id":73,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1018:4:0","typeDescriptions":{"typeIdentifier":"t_rational_214_by_1","typeString":"int_const 214"},"value":"0xd6"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_214_by_1","typeString":"int_const 214"}],"id":72,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1010:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":71,"name":"address","nodeType":"ElementaryTypeName","src":"1010:7:0","typeDescriptions":{}}},"id":74,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1010:13:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"constant":true,"id":81,"mutability":"constant","name":"CONFIG_PARAM","nameLocation":"1054:12:0","nodeType":"VariableDeclaration","scope":885,"src":"1029:53:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":76,"name":"address","nodeType":"ElementaryTypeName","src":"1029:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"arguments":[{"hexValue":"30786437","id":79,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1077:4:0","typeDescriptions":{"typeIdentifier":"t_rational_215_by_1","typeString":"int_const 215"},"value":"0xd7"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_215_by_1","typeString":"int_const 215"}],"id":78,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1069:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":77,"name":"address","nodeType":"ElementaryTypeName","src":"1069:7:0","typeDescriptions":{}}},"id":80,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1069:13:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"constant":true,"id":87,"mutability":"constant","name":"SEND_REQUEST","nameLocation":"1113:12:0","nodeType":"VariableDeclaration","scope":885,"src":"1088:53:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":82,"name":"address","nodeType":"ElementaryTypeName","src":"1088:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"arguments":[{"hexValue":"30786438","id":85,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1136:4:0","typeDescriptions":{"typeIdentifier":"t_rational_216_by_1","typeString":"int_const 216"},"value":"0xd8"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_216_by_1","typeString":"int_const 216"}],"id":84,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1128:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":83,"name":"address","nodeType":"ElementaryTypeName","src":"1128:7:0","typeDescriptions":{}}},"id":86,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1128:13:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"constant":true,"functionSelector":"3840cdae","id":93,"mutability":"constant","name":"IS_RESPONSE_TRANSACTION","nameLocation":"1171:23:0","nodeType":"VariableDeclaration","scope":885,"src":"1147:63:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":88,"name":"address","nodeType":"ElementaryTypeName","src":"1147:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"arguments":[{"hexValue":"30786439","id":91,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1205:4:0","typeDescriptions":{"typeIdentifier":"t_rational_217_by_1","typeString":"int_const 217"},"value":"0xd9"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_217_by_1","typeString":"int_const 217"}],"id":90,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1197:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":89,"name":"address","nodeType":"ElementaryTypeName","src":"1197:7:0","typeDescriptions":{}}},"id":92,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1197:13:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"constant":true,"functionSelector":"1816a5e1","id":99,"mutability":"constant","name":"LOG","nameLocation":"1240:3:0","nodeType":"VariableDeclaration","scope":885,"src":"1216:43:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":94,"name":"address","nodeType":"ElementaryTypeName","src":"1216:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"arguments":[{"hexValue":"30786461","id":97,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1254:4:0","typeDescriptions":{"typeIdentifier":"t_rational_218_by_1","typeString":"int_const 218"},"value":"0xda"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_218_by_1","typeString":"int_const 218"}],"id":96,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1246:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":95,"name":"address","nodeType":"ElementaryTypeName","src":"1246:7:0","typeDescriptions":{}}},"id":98,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1246:13:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"constant":true,"functionSelector":"42e6d4d7","id":102,"mutability":"constant","name":"FORWARD_REMAINING","nameLocation":"1707:17:0","nodeType":"VariableDeclaration","scope":885,"src":"1685:43:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":100,"name":"uint8","nodeType":"ElementaryTypeName","src":"1685:5:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"hexValue":"30","id":101,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1727:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"visibility":"public"},{"constant":true,"functionSelector":"9bc465a0","id":105,"mutability":"constant","name":"FORWARD_PERCENTAGE","nameLocation":"1808:18:0","nodeType":"VariableDeclaration","scope":885,"src":"1786:44:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":103,"name":"uint8","nodeType":"ElementaryTypeName","src":"1786:5:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"hexValue":"31","id":104,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1829:1:0","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"visibility":"public"},{"constant":true,"functionSelector":"d2ec13b2","id":108,"mutability":"constant","name":"FORWARD_VALUE","nameLocation":"1911:13:0","nodeType":"VariableDeclaration","scope":885,"src":"1889:39:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":106,"name":"uint8","nodeType":"ElementaryTypeName","src":"1889:5:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"hexValue":"32","id":107,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1927:1:0","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"visibility":"public"},{"constant":true,"functionSelector":"df09b8eb","id":111,"mutability":"constant","name":"FORWARD_NONE","nameLocation":"2043:12:0","nodeType":"VariableDeclaration","scope":885,"src":"2021:38:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":109,"name":"uint8","nodeType":"ElementaryTypeName","src":"2021:5:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"hexValue":"33","id":110,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2058:1:0","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"visibility":"public"},{"constant":true,"functionSelector":"cbb1c30a","id":114,"mutability":"constant","name":"ASYNC_REQUEST_MIN_GAS","nameLocation":"2153:21:0","nodeType":"VariableDeclaration","scope":885,"src":"2132:51:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":112,"name":"uint","nodeType":"ElementaryTypeName","src":"2132:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"35305f303030","id":113,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2177:6:0","typeDescriptions":{"typeIdentifier":"t_rational_50000_by_1","typeString":"int_const 50000"},"value":"50_000"},"visibility":"public"},{"canonicalName":"Nil.Token","id":120,"members":[{"constant":false,"id":117,"mutability":"mutable","name":"id","nameLocation":"2293:2:0","nodeType":"VariableDeclaration","scope":120,"src":"2285:10:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"},"typeName":{"id":116,"nodeType":"UserDefinedTypeName","pathNode":{"id":115,"name":"TokenId","nameLocations":["2285:7:0"],"nodeType":"IdentifierPath","referencedDeclaration":3,"src":"2285:7:0"},"referencedDeclaration":3,"src":"2285:7:0","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"visibility":"internal"},{"constant":false,"id":119,"mutability":"mutable","name":"amount","nameLocation":"2313:6:0","nodeType":"VariableDeclaration","scope":120,"src":"2305:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":118,"name":"uint256","nodeType":"ElementaryTypeName","src":"2305:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"Token","nameLocation":"2269:5:0","nodeType":"StructDefinition","scope":885,"src":"2262:64:0","visibility":"public"},{"body":{"id":151,"nodeType":"Block","src":"3025:111:0","statements":[{"expression":{"arguments":[{"id":138,"name":"shardId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":123,"src":"3058:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"hexValue":"30","id":141,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3075:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":140,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3067:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":139,"name":"address","nodeType":"ElementaryTypeName","src":"3067:7:0","typeDescriptions":{}}},"id":142,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3067:10:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":143,"name":"bounceTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":125,"src":"3079:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":144,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3089:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":145,"name":"FORWARD_REMAINING","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":102,"src":"3092:17:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":146,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":127,"src":"3111:5:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":147,"name":"code","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":129,"src":"3118:4:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":148,"name":"salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":131,"src":"3124:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":136,"name":"Nil","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":885,"src":"3042:3:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Nil_$885_$","typeString":"type(library Nil)"}},"id":137,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3046:11:0","memberName":"asyncDeploy","nodeType":"MemberAccess","referencedDeclaration":216,"src":"3042:15:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$_t_address_$_t_address_$_t_uint256_$_t_uint8_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_address_$","typeString":"function (uint256,address,address,uint256,uint8,uint256,bytes memory,uint256) returns (address)"}},"id":149,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3042:87:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":135,"id":150,"nodeType":"Return","src":"3035:94:0"}]},"documentation":{"id":121,"nodeType":"StructuredDocumentation","src":"2332:517:0","text":" @dev Deploys a contract asynchronously. It implicitly uses FORWARD_REMAINING kind and sets refundTo to\n inbound transaction's refundTo.\n @param shardId The shard ID where to deploy contract.\n @param bounceTo Address to bounce to if the deployment fails.\n @param value Value to be sent with the deployment.\n @param code Bytecode of the contract to be deployed.\n @param salt Salt for the contract address creation.\n @return Address of the deployed contract."},"id":152,"implemented":true,"kind":"function","modifiers":[],"name":"asyncDeploy","nameLocation":"2863:11:0","nodeType":"FunctionDefinition","parameters":{"id":132,"nodeType":"ParameterList","parameters":[{"constant":false,"id":123,"mutability":"mutable","name":"shardId","nameLocation":"2889:7:0","nodeType":"VariableDeclaration","scope":152,"src":"2884:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":122,"name":"uint","nodeType":"ElementaryTypeName","src":"2884:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":125,"mutability":"mutable","name":"bounceTo","nameLocation":"2914:8:0","nodeType":"VariableDeclaration","scope":152,"src":"2906:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":124,"name":"address","nodeType":"ElementaryTypeName","src":"2906:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":127,"mutability":"mutable","name":"value","nameLocation":"2937:5:0","nodeType":"VariableDeclaration","scope":152,"src":"2932:10:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":126,"name":"uint","nodeType":"ElementaryTypeName","src":"2932:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":129,"mutability":"mutable","name":"code","nameLocation":"2965:4:0","nodeType":"VariableDeclaration","scope":152,"src":"2952:17:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":128,"name":"bytes","nodeType":"ElementaryTypeName","src":"2952:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":131,"mutability":"mutable","name":"salt","nameLocation":"2987:4:0","nodeType":"VariableDeclaration","scope":152,"src":"2979:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":130,"name":"uint256","nodeType":"ElementaryTypeName","src":"2979:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2874:123:0"},"returnParameters":{"id":135,"nodeType":"ParameterList","parameters":[{"constant":false,"id":134,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":152,"src":"3016:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":133,"name":"address","nodeType":"ElementaryTypeName","src":"3016:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3015:9:0"},"scope":885,"src":"2854:282:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":215,"nodeType":"Block","src":"3988:336:0","statements":[{"assignments":[178],"declarations":[{"constant":false,"id":178,"mutability":"mutable","name":"tokens","nameLocation":"4013:6:0","nodeType":"VariableDeclaration","scope":215,"src":"3998:21:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Token_$120_memory_ptr_$dyn_memory_ptr","typeString":"struct Nil.Token[]"},"typeName":{"baseType":{"id":176,"nodeType":"UserDefinedTypeName","pathNode":{"id":175,"name":"Token","nameLocations":["3998:5:0"],"nodeType":"IdentifierPath","referencedDeclaration":120,"src":"3998:5:0"},"referencedDeclaration":120,"src":"3998:5:0","typeDescriptions":{"typeIdentifier":"t_struct$_Token_$120_storage_ptr","typeString":"struct Nil.Token"}},"id":177,"nodeType":"ArrayTypeName","src":"3998:7:0","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Token_$120_storage_$dyn_storage_ptr","typeString":"struct Nil.Token[]"}},"visibility":"internal"}],"id":179,"nodeType":"VariableDeclarationStatement","src":"3998:21:0"},{"assignments":[181],"declarations":[{"constant":false,"id":181,"mutability":"mutable","name":"contractAddress","nameLocation":"4037:15:0","nodeType":"VariableDeclaration","scope":215,"src":"4029:23:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":180,"name":"address","nodeType":"ElementaryTypeName","src":"4029:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":188,"initialValue":{"arguments":[{"id":184,"name":"shardId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":155,"src":"4073:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":185,"name":"code","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":167,"src":"4082:4:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":186,"name":"salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":169,"src":"4088:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":182,"name":"Nil","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":885,"src":"4055:3:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Nil_$885_$","typeString":"type(library Nil)"}},"id":183,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4059:13:0","memberName":"createAddress","nodeType":"MemberAccess","referencedDeclaration":666,"src":"4055:17:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_address_$","typeString":"function (uint256,bytes memory,uint256) returns (address)"}},"id":187,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4055:38:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"4029:64:0"},{"expression":{"arguments":[{"hexValue":"74727565","id":195,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4164:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"id":196,"name":"forwardKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":163,"src":"4170:11:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":197,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":181,"src":"4183:15:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":198,"name":"refundTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":157,"src":"4200:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":199,"name":"bounceTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":159,"src":"4222:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":200,"name":"feeCredit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":161,"src":"4232:9:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":201,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":178,"src":"4243:6:0","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Token_$120_memory_ptr_$dyn_memory_ptr","typeString":"struct Nil.Token memory[] memory"}},{"arguments":[{"id":205,"name":"code","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":167,"src":"4264:4:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"arguments":[{"id":208,"name":"salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":169,"src":"4278:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":207,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4270:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":206,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4270:7:0","typeDescriptions":{}}},"id":209,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4270:13:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":203,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4251:5:0","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":202,"name":"bytes","nodeType":"ElementaryTypeName","src":"4251:5:0","typeDescriptions":{}}},"id":204,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4257:6:0","memberName":"concat","nodeType":"MemberAccess","src":"4251:12:0","typeDescriptions":{"typeIdentifier":"t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":210,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4251:33:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_struct$_Token_$120_memory_ptr_$dyn_memory_ptr","typeString":"struct Nil.Token memory[] memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_struct$_Token_$120_memory_ptr_$dyn_memory_ptr","typeString":"struct Nil.Token memory[] memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"id":190,"name":"ASYNC_CALL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21,"src":"4118:10:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":189,"name":"__Precompile__","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1115,"src":"4103:14:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$___Precompile___$1115_$","typeString":"type(contract __Precompile__)"}},"id":191,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4103:26:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$___Precompile___$1115","typeString":"contract __Precompile__"}},"id":192,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4130:19:0","memberName":"precompileAsyncCall","nodeType":"MemberAccess","referencedDeclaration":1023,"src":"4103:46:0","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_bool_$_t_uint8_$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_array$_t_struct$_Token_$120_memory_ptr_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (bool,uint8,address,address,address,uint256,struct Nil.Token memory[] memory,bytes memory) payable external returns (bool)"}},"id":194,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":193,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":165,"src":"4157:5:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"4103:60:0","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_bool_$_t_uint8_$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_array$_t_struct$_Token_$120_memory_ptr_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$value","typeString":"function (bool,uint8,address,address,address,uint256,struct Nil.Token memory[] memory,bytes memory) payable external returns (bool)"}},"id":211,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4103:182:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":212,"nodeType":"ExpressionStatement","src":"4103:182:0"},{"expression":{"id":213,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":181,"src":"4302:15:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":173,"id":214,"nodeType":"Return","src":"4295:22:0"}]},"documentation":{"id":153,"nodeType":"StructuredDocumentation","src":"3142:593:0","text":" @dev Deploys a contract asynchronously.\n @param shardId The shard ID where to deploy contract.\n @param refundTo Address to refund if the deployment fails.\n @param bounceTo Address to bounce to if the deployment fails.\n @param feeCredit Fee credit for the deployment.\n @param forwardKind Kind of forwarding for the gas.\n @param value Value to be sent with the deployment.\n @param code Bytecode of the contract to be deployed.\n @param salt Salt for the contract address creation.\n @return Address of the deployed contract."},"id":216,"implemented":true,"kind":"function","modifiers":[],"name":"asyncDeploy","nameLocation":"3749:11:0","nodeType":"FunctionDefinition","parameters":{"id":170,"nodeType":"ParameterList","parameters":[{"constant":false,"id":155,"mutability":"mutable","name":"shardId","nameLocation":"3775:7:0","nodeType":"VariableDeclaration","scope":216,"src":"3770:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":154,"name":"uint","nodeType":"ElementaryTypeName","src":"3770:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":157,"mutability":"mutable","name":"refundTo","nameLocation":"3800:8:0","nodeType":"VariableDeclaration","scope":216,"src":"3792:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":156,"name":"address","nodeType":"ElementaryTypeName","src":"3792:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":159,"mutability":"mutable","name":"bounceTo","nameLocation":"3826:8:0","nodeType":"VariableDeclaration","scope":216,"src":"3818:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":158,"name":"address","nodeType":"ElementaryTypeName","src":"3818:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":161,"mutability":"mutable","name":"feeCredit","nameLocation":"3849:9:0","nodeType":"VariableDeclaration","scope":216,"src":"3844:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":160,"name":"uint","nodeType":"ElementaryTypeName","src":"3844:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":163,"mutability":"mutable","name":"forwardKind","nameLocation":"3874:11:0","nodeType":"VariableDeclaration","scope":216,"src":"3868:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":162,"name":"uint8","nodeType":"ElementaryTypeName","src":"3868:5:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":165,"mutability":"mutable","name":"value","nameLocation":"3900:5:0","nodeType":"VariableDeclaration","scope":216,"src":"3895:10:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":164,"name":"uint","nodeType":"ElementaryTypeName","src":"3895:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":167,"mutability":"mutable","name":"code","nameLocation":"3928:4:0","nodeType":"VariableDeclaration","scope":216,"src":"3915:17:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":166,"name":"bytes","nodeType":"ElementaryTypeName","src":"3915:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":169,"mutability":"mutable","name":"salt","nameLocation":"3950:4:0","nodeType":"VariableDeclaration","scope":216,"src":"3942:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":168,"name":"uint256","nodeType":"ElementaryTypeName","src":"3942:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3760:200:0"},"returnParameters":{"id":173,"nodeType":"ParameterList","parameters":[{"constant":false,"id":172,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":216,"src":"3979:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":171,"name":"address","nodeType":"ElementaryTypeName","src":"3979:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3978:9:0"},"scope":885,"src":"3740:584:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":241,"nodeType":"Block","src":"4847:92:0","statements":[{"expression":{"arguments":[{"id":229,"name":"dst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":219,"src":"4867:3:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":232,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4880:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":231,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4872:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":230,"name":"address","nodeType":"ElementaryTypeName","src":"4872:7:0","typeDescriptions":{}}},"id":233,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4872:10:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":234,"name":"bounceTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":221,"src":"4884:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":235,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4894:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":236,"name":"FORWARD_REMAINING","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":102,"src":"4897:17:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":237,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":223,"src":"4916:5:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":238,"name":"callData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":225,"src":"4923:8:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":228,"name":"asyncCall","nodeType":"Identifier","overloadedDeclarations":[242,278],"referencedDeclaration":278,"src":"4857:9:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint8_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,address,uint256,uint8,uint256,bytes memory)"}},"id":239,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4857:75:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":240,"nodeType":"ExpressionStatement","src":"4857:75:0"}]},"documentation":{"id":217,"nodeType":"StructuredDocumentation","src":"4330:380:0","text":" @dev Makes an asynchronous call to a contract. It implicitly uses FORWARD_REMAINING kind and sets refundTo to\n inbound transaction's refundTo.\n @param dst Destination address of the call.\n @param bounceTo Address to bounce to if the call fails.\n @param value Value to be sent with the call.\n @param callData Calldata for the call."},"id":242,"implemented":true,"kind":"function","modifiers":[],"name":"asyncCall","nameLocation":"4724:9:0","nodeType":"FunctionDefinition","parameters":{"id":226,"nodeType":"ParameterList","parameters":[{"constant":false,"id":219,"mutability":"mutable","name":"dst","nameLocation":"4751:3:0","nodeType":"VariableDeclaration","scope":242,"src":"4743:11:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":218,"name":"address","nodeType":"ElementaryTypeName","src":"4743:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":221,"mutability":"mutable","name":"bounceTo","nameLocation":"4772:8:0","nodeType":"VariableDeclaration","scope":242,"src":"4764:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":220,"name":"address","nodeType":"ElementaryTypeName","src":"4764:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":223,"mutability":"mutable","name":"value","nameLocation":"4795:5:0","nodeType":"VariableDeclaration","scope":242,"src":"4790:10:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":222,"name":"uint","nodeType":"ElementaryTypeName","src":"4790:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":225,"mutability":"mutable","name":"callData","nameLocation":"4823:8:0","nodeType":"VariableDeclaration","scope":242,"src":"4810:21:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":224,"name":"bytes","nodeType":"ElementaryTypeName","src":"4810:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4733:104:0"},"returnParameters":{"id":227,"nodeType":"ParameterList","parameters":[],"src":"4847:0:0"},"scope":885,"src":"4715:224:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":277,"nodeType":"Block","src":"5603:141:0","statements":[{"assignments":[264],"declarations":[{"constant":false,"id":264,"mutability":"mutable","name":"tokens","nameLocation":"5628:6:0","nodeType":"VariableDeclaration","scope":277,"src":"5613:21:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Token_$120_memory_ptr_$dyn_memory_ptr","typeString":"struct Nil.Token[]"},"typeName":{"baseType":{"id":262,"nodeType":"UserDefinedTypeName","pathNode":{"id":261,"name":"Token","nameLocations":["5613:5:0"],"nodeType":"IdentifierPath","referencedDeclaration":120,"src":"5613:5:0"},"referencedDeclaration":120,"src":"5613:5:0","typeDescriptions":{"typeIdentifier":"t_struct$_Token_$120_storage_ptr","typeString":"struct Nil.Token"}},"id":263,"nodeType":"ArrayTypeName","src":"5613:7:0","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Token_$120_storage_$dyn_storage_ptr","typeString":"struct Nil.Token[]"}},"visibility":"internal"}],"id":265,"nodeType":"VariableDeclarationStatement","src":"5613:21:0"},{"expression":{"arguments":[{"id":267,"name":"dst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":245,"src":"5664:3:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":268,"name":"refundTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":247,"src":"5669:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":269,"name":"bounceTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":249,"src":"5679:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":270,"name":"feeCredit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":251,"src":"5689:9:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":271,"name":"forwardKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":253,"src":"5700:11:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":272,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":255,"src":"5713:5:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":273,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":264,"src":"5720:6:0","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Token_$120_memory_ptr_$dyn_memory_ptr","typeString":"struct Nil.Token memory[] memory"}},{"id":274,"name":"callData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":257,"src":"5728:8:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_struct$_Token_$120_memory_ptr_$dyn_memory_ptr","typeString":"struct Nil.Token memory[] memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":266,"name":"asyncCallWithTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":317,"src":"5644:19:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint8_$_t_uint256_$_t_array$_t_struct$_Token_$120_memory_ptr_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,address,uint256,uint8,uint256,struct Nil.Token memory[] memory,bytes memory)"}},"id":275,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5644:93:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":276,"nodeType":"ExpressionStatement","src":"5644:93:0"}]},"documentation":{"id":243,"nodeType":"StructuredDocumentation","src":"4945:444:0","text":" @dev Makes an asynchronous call to a contract.\n @param dst Destination address of the call.\n @param refundTo Address to refund if the call fails.\n @param bounceTo Address to bounce to if the call fails.\n @param feeCredit Fee credit for the call.\n @param forwardKind Kind of forwarding for the gas.\n @param value Value to be sent with the call.\n @param callData Calldata for the call."},"id":278,"implemented":true,"kind":"function","modifiers":[],"name":"asyncCall","nameLocation":"5403:9:0","nodeType":"FunctionDefinition","parameters":{"id":258,"nodeType":"ParameterList","parameters":[{"constant":false,"id":245,"mutability":"mutable","name":"dst","nameLocation":"5430:3:0","nodeType":"VariableDeclaration","scope":278,"src":"5422:11:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":244,"name":"address","nodeType":"ElementaryTypeName","src":"5422:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":247,"mutability":"mutable","name":"refundTo","nameLocation":"5451:8:0","nodeType":"VariableDeclaration","scope":278,"src":"5443:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":246,"name":"address","nodeType":"ElementaryTypeName","src":"5443:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":249,"mutability":"mutable","name":"bounceTo","nameLocation":"5477:8:0","nodeType":"VariableDeclaration","scope":278,"src":"5469:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":248,"name":"address","nodeType":"ElementaryTypeName","src":"5469:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":251,"mutability":"mutable","name":"feeCredit","nameLocation":"5500:9:0","nodeType":"VariableDeclaration","scope":278,"src":"5495:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":250,"name":"uint","nodeType":"ElementaryTypeName","src":"5495:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":253,"mutability":"mutable","name":"forwardKind","nameLocation":"5525:11:0","nodeType":"VariableDeclaration","scope":278,"src":"5519:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":252,"name":"uint8","nodeType":"ElementaryTypeName","src":"5519:5:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":255,"mutability":"mutable","name":"value","nameLocation":"5551:5:0","nodeType":"VariableDeclaration","scope":278,"src":"5546:10:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":254,"name":"uint","nodeType":"ElementaryTypeName","src":"5546:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":257,"mutability":"mutable","name":"callData","nameLocation":"5579:8:0","nodeType":"VariableDeclaration","scope":278,"src":"5566:21:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":256,"name":"bytes","nodeType":"ElementaryTypeName","src":"5566:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5412:181:0"},"returnParameters":{"id":259,"nodeType":"ParameterList","parameters":[],"src":"5603:0:0"},"scope":885,"src":"5394:350:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":316,"nodeType":"Block","src":"6524:163:0","statements":[{"expression":{"arguments":[{"hexValue":"66616c7365","id":306,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6595:5:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"id":307,"name":"forwardKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":289,"src":"6602:11:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":308,"name":"dst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":281,"src":"6615:3:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":309,"name":"refundTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":283,"src":"6620:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":310,"name":"bounceTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":285,"src":"6642:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":311,"name":"feeCredit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":287,"src":"6652:9:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":312,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":295,"src":"6663:6:0","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Token_$120_memory_ptr_$dyn_memory_ptr","typeString":"struct Nil.Token memory[] memory"}},{"id":313,"name":"callData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":297,"src":"6671:8:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_struct$_Token_$120_memory_ptr_$dyn_memory_ptr","typeString":"struct Nil.Token memory[] memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_struct$_Token_$120_memory_ptr_$dyn_memory_ptr","typeString":"struct Nil.Token memory[] memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"id":301,"name":"ASYNC_CALL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21,"src":"6549:10:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":300,"name":"__Precompile__","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1115,"src":"6534:14:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$___Precompile___$1115_$","typeString":"type(contract __Precompile__)"}},"id":302,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6534:26:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$___Precompile___$1115","typeString":"contract __Precompile__"}},"id":303,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6561:19:0","memberName":"precompileAsyncCall","nodeType":"MemberAccess","referencedDeclaration":1023,"src":"6534:46:0","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_bool_$_t_uint8_$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_array$_t_struct$_Token_$120_memory_ptr_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (bool,uint8,address,address,address,uint256,struct Nil.Token memory[] memory,bytes memory) payable external returns (bool)"}},"id":305,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":304,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":291,"src":"6588:5:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"6534:60:0","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_bool_$_t_uint8_$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_array$_t_struct$_Token_$120_memory_ptr_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$value","typeString":"function (bool,uint8,address,address,address,uint256,struct Nil.Token memory[] memory,bytes memory) payable external returns (bool)"}},"id":314,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6534:146:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":315,"nodeType":"ExpressionStatement","src":"6534:146:0"}]},"documentation":{"id":279,"nodeType":"StructuredDocumentation","src":"5750:519:0","text":" @dev Makes an asynchronous call to a contract with tokens.\n @param dst Destination address of the call.\n @param refundTo Address to refund if the call fails.\n @param bounceTo Address to bounce to if the call fails.\n @param feeCredit Fee credit for the call.\n @param forwardKind Kind of forwarding for the gas.\n @param value Value to be sent with the call.\n @param tokens Array of tokens to be sent with the call.\n @param callData Calldata for the call."},"id":317,"implemented":true,"kind":"function","modifiers":[],"name":"asyncCallWithTokens","nameLocation":"6283:19:0","nodeType":"FunctionDefinition","parameters":{"id":298,"nodeType":"ParameterList","parameters":[{"constant":false,"id":281,"mutability":"mutable","name":"dst","nameLocation":"6320:3:0","nodeType":"VariableDeclaration","scope":317,"src":"6312:11:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":280,"name":"address","nodeType":"ElementaryTypeName","src":"6312:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":283,"mutability":"mutable","name":"refundTo","nameLocation":"6341:8:0","nodeType":"VariableDeclaration","scope":317,"src":"6333:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":282,"name":"address","nodeType":"ElementaryTypeName","src":"6333:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":285,"mutability":"mutable","name":"bounceTo","nameLocation":"6367:8:0","nodeType":"VariableDeclaration","scope":317,"src":"6359:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":284,"name":"address","nodeType":"ElementaryTypeName","src":"6359:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":287,"mutability":"mutable","name":"feeCredit","nameLocation":"6390:9:0","nodeType":"VariableDeclaration","scope":317,"src":"6385:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":286,"name":"uint","nodeType":"ElementaryTypeName","src":"6385:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":289,"mutability":"mutable","name":"forwardKind","nameLocation":"6415:11:0","nodeType":"VariableDeclaration","scope":317,"src":"6409:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":288,"name":"uint8","nodeType":"ElementaryTypeName","src":"6409:5:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":291,"mutability":"mutable","name":"value","nameLocation":"6441:5:0","nodeType":"VariableDeclaration","scope":317,"src":"6436:10:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":290,"name":"uint","nodeType":"ElementaryTypeName","src":"6436:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":295,"mutability":"mutable","name":"tokens","nameLocation":"6471:6:0","nodeType":"VariableDeclaration","scope":317,"src":"6456:21:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Token_$120_memory_ptr_$dyn_memory_ptr","typeString":"struct Nil.Token[]"},"typeName":{"baseType":{"id":293,"nodeType":"UserDefinedTypeName","pathNode":{"id":292,"name":"Token","nameLocations":["6456:5:0"],"nodeType":"IdentifierPath","referencedDeclaration":120,"src":"6456:5:0"},"referencedDeclaration":120,"src":"6456:5:0","typeDescriptions":{"typeIdentifier":"t_struct$_Token_$120_storage_ptr","typeString":"struct Nil.Token"}},"id":294,"nodeType":"ArrayTypeName","src":"6456:7:0","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Token_$120_storage_$dyn_storage_ptr","typeString":"struct Nil.Token[]"}},"visibility":"internal"},{"constant":false,"id":297,"mutability":"mutable","name":"callData","nameLocation":"6500:8:0","nodeType":"VariableDeclaration","scope":317,"src":"6487:21:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":296,"name":"bytes","nodeType":"ElementaryTypeName","src":"6487:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6302:212:0"},"returnParameters":{"id":299,"nodeType":"ParameterList","parameters":[],"src":"6524:0:0"},"scope":885,"src":"6274:413:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":367,"nodeType":"Block","src":"7322:261:0","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":340,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":337,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":328,"src":"7336:6:0","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Token_$120_memory_ptr_$dyn_memory_ptr","typeString":"struct Nil.Token memory[] memory"}},"id":338,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7343:6:0","memberName":"length","nodeType":"MemberAccess","src":"7336:13:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":339,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7352:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7336:17:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":350,"nodeType":"IfStatement","src":"7332:113:0","trueBody":{"id":349,"nodeType":"Block","src":"7355:90:0","statements":[{"expression":{"arguments":[{"id":345,"name":"dst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":320,"src":"7422:3:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":346,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":328,"src":"7427:6:0","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Token_$120_memory_ptr_$dyn_memory_ptr","typeString":"struct Nil.Token memory[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_struct$_Token_$120_memory_ptr_$dyn_memory_ptr","typeString":"struct Nil.Token memory[] memory"}],"expression":{"arguments":[{"id":342,"name":"SEND_TOKEN_SYNC","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51,"src":"7384:15:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":341,"name":"__Precompile__","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1115,"src":"7369:14:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$___Precompile___$1115_$","typeString":"type(contract __Precompile__)"}},"id":343,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7369:31:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$___Precompile___$1115","typeString":"contract __Precompile__"}},"id":344,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7401:20:0","memberName":"precompileSendTokens","nodeType":"MemberAccess","referencedDeclaration":1067,"src":"7369:52:0","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_array$_t_struct$_Token_$120_memory_ptr_$dyn_memory_ptr_$returns$_t_bool_$","typeString":"function (address,struct Nil.Token memory[] memory) external returns (bool)"}},"id":347,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7369:65:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":348,"nodeType":"ExpressionStatement","src":"7369:65:0"}]}},{"assignments":[352,354],"declarations":[{"constant":false,"id":352,"mutability":"mutable","name":"success","nameLocation":"7460:7:0","nodeType":"VariableDeclaration","scope":367,"src":"7455:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":351,"name":"bool","nodeType":"ElementaryTypeName","src":"7455:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":354,"mutability":"mutable","name":"returnData","nameLocation":"7482:10:0","nodeType":"VariableDeclaration","scope":367,"src":"7469:23:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":353,"name":"bytes","nodeType":"ElementaryTypeName","src":"7469:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":362,"initialValue":{"arguments":[{"id":360,"name":"callData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":330,"src":"7529:8:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":355,"name":"dst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":320,"src":"7496:3:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":356,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7500:4:0","memberName":"call","nodeType":"MemberAccess","src":"7496:8:0","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":359,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["gas","value"],"nodeType":"FunctionCallOptions","options":[{"id":357,"name":"gas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":322,"src":"7510:3:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":358,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":324,"src":"7522:5:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"7496:32:0","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$gasvalue","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":361,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7496:42:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"7454:84:0"},{"expression":{"components":[{"id":363,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":352,"src":"7556:7:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":364,"name":"returnData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":354,"src":"7565:10:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"id":365,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7555:21:0","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"functionReturnParameters":336,"id":366,"nodeType":"Return","src":"7548:28:0"}]},"documentation":{"id":318,"nodeType":"StructuredDocumentation","src":"6693:442:0","text":" @dev Makes a synchronous call to a contract.\n @param dst Destination address of the call.\n @param gas Gas limit for the call.\n @param value Value to be sent with the call.\n @param tokens Array of tokens to be sent with the call.\n @param callData Calldata for the call.\n @return success Boolean indicating if the call was successful.\n @return returnData Data returned from the call."},"id":368,"implemented":true,"kind":"function","modifiers":[],"name":"syncCall","nameLocation":"7149:8:0","nodeType":"FunctionDefinition","parameters":{"id":331,"nodeType":"ParameterList","parameters":[{"constant":false,"id":320,"mutability":"mutable","name":"dst","nameLocation":"7175:3:0","nodeType":"VariableDeclaration","scope":368,"src":"7167:11:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":319,"name":"address","nodeType":"ElementaryTypeName","src":"7167:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":322,"mutability":"mutable","name":"gas","nameLocation":"7193:3:0","nodeType":"VariableDeclaration","scope":368,"src":"7188:8:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":321,"name":"uint","nodeType":"ElementaryTypeName","src":"7188:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":324,"mutability":"mutable","name":"value","nameLocation":"7211:5:0","nodeType":"VariableDeclaration","scope":368,"src":"7206:10:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":323,"name":"uint","nodeType":"ElementaryTypeName","src":"7206:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":328,"mutability":"mutable","name":"tokens","nameLocation":"7241:6:0","nodeType":"VariableDeclaration","scope":368,"src":"7226:21:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Token_$120_memory_ptr_$dyn_memory_ptr","typeString":"struct Nil.Token[]"},"typeName":{"baseType":{"id":326,"nodeType":"UserDefinedTypeName","pathNode":{"id":325,"name":"Token","nameLocations":["7226:5:0"],"nodeType":"IdentifierPath","referencedDeclaration":120,"src":"7226:5:0"},"referencedDeclaration":120,"src":"7226:5:0","typeDescriptions":{"typeIdentifier":"t_struct$_Token_$120_storage_ptr","typeString":"struct Nil.Token"}},"id":327,"nodeType":"ArrayTypeName","src":"7226:7:0","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Token_$120_storage_$dyn_storage_ptr","typeString":"struct Nil.Token[]"}},"visibility":"internal"},{"constant":false,"id":330,"mutability":"mutable","name":"callData","nameLocation":"7270:8:0","nodeType":"VariableDeclaration","scope":368,"src":"7257:21:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":329,"name":"bytes","nodeType":"ElementaryTypeName","src":"7257:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7157:127:0"},"returnParameters":{"id":336,"nodeType":"ParameterList","parameters":[{"constant":false,"id":333,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":368,"src":"7302:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":332,"name":"bool","nodeType":"ElementaryTypeName","src":"7302:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":335,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":368,"src":"7308:12:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":334,"name":"bytes","nodeType":"ElementaryTypeName","src":"7308:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7301:20:0"},"scope":885,"src":"7140:443:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":391,"nodeType":"Block","src":"8260:108:0","statements":[{"expression":{"arguments":[{"id":386,"name":"dst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":371,"src":"8324:3:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":387,"name":"responseProcessingGas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":373,"src":"8329:21:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":388,"name":"callData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":375,"src":"8352:8:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"id":383,"name":"AWAIT_CALL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75,"src":"8292:10:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":382,"name":"__Precompile__","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1115,"src":"8277:14:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$___Precompile___$1115_$","typeString":"type(contract __Precompile__)"}},"id":384,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8277:26:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$___Precompile___$1115","typeString":"contract __Precompile__"}},"id":385,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8304:19:0","memberName":"precompileAwaitCall","nodeType":"MemberAccess","referencedDeclaration":1037,"src":"8277:46:0","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$_t_bool_$","typeString":"function (address,uint256,bytes memory) payable external returns (bytes memory,bool)"}},"id":389,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8277:84:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bytes_memory_ptr_$_t_bool_$","typeString":"tuple(bytes memory,bool)"}},"functionReturnParameters":381,"id":390,"nodeType":"Return","src":"8270:91:0"}]},"documentation":{"id":369,"nodeType":"StructuredDocumentation","src":"7589:516:0","text":" @dev Makes an asynchronous call to a contract and waits for the result.\n @param dst Destination address of the call.\n @param responseProcessingGas Amount of gas is being bought and reserved to process the response.\n should be >= `ASYNC_REQUEST_MIN_GAS` to make a call, otherwise `awaitCall` will fail.\n @param callData Calldata for the call.\n @return returnData Data returned from the call.\n @return success Boolean indicating if the call was successful."},"id":392,"implemented":true,"kind":"function","modifiers":[],"name":"awaitCall","nameLocation":"8119:9:0","nodeType":"FunctionDefinition","parameters":{"id":376,"nodeType":"ParameterList","parameters":[{"constant":false,"id":371,"mutability":"mutable","name":"dst","nameLocation":"8146:3:0","nodeType":"VariableDeclaration","scope":392,"src":"8138:11:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":370,"name":"address","nodeType":"ElementaryTypeName","src":"8138:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":373,"mutability":"mutable","name":"responseProcessingGas","nameLocation":"8164:21:0","nodeType":"VariableDeclaration","scope":392,"src":"8159:26:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":372,"name":"uint","nodeType":"ElementaryTypeName","src":"8159:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":375,"mutability":"mutable","name":"callData","nameLocation":"8208:8:0","nodeType":"VariableDeclaration","scope":392,"src":"8195:21:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":374,"name":"bytes","nodeType":"ElementaryTypeName","src":"8195:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"8128:94:0"},"returnParameters":{"id":381,"nodeType":"ParameterList","parameters":[{"constant":false,"id":378,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":392,"src":"8240:12:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":377,"name":"bytes","nodeType":"ElementaryTypeName","src":"8240:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":380,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":392,"src":"8254:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":379,"name":"bool","nodeType":"ElementaryTypeName","src":"8254:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8239:20:0"},"scope":885,"src":"8110:258:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":425,"nodeType":"Block","src":"9076:167:0","statements":[{"assignments":[410],"declarations":[{"constant":false,"id":410,"mutability":"mutable","name":"tokens","nameLocation":"9101:6:0","nodeType":"VariableDeclaration","scope":425,"src":"9086:21:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Token_$120_memory_ptr_$dyn_memory_ptr","typeString":"struct Nil.Token[]"},"typeName":{"baseType":{"id":408,"nodeType":"UserDefinedTypeName","pathNode":{"id":407,"name":"Token","nameLocations":["9086:5:0"],"nodeType":"IdentifierPath","referencedDeclaration":120,"src":"9086:5:0"},"referencedDeclaration":120,"src":"9086:5:0","typeDescriptions":{"typeIdentifier":"t_struct$_Token_$120_storage_ptr","typeString":"struct Nil.Token"}},"id":409,"nodeType":"ArrayTypeName","src":"9086:7:0","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Token_$120_storage_$dyn_storage_ptr","typeString":"struct Nil.Token[]"}},"visibility":"internal"}],"id":411,"nodeType":"VariableDeclarationStatement","src":"9086:21:0"},{"expression":{"arguments":[{"id":418,"name":"dst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":395,"src":"9182:3:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":419,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":410,"src":"9187:6:0","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Token_$120_memory_ptr_$dyn_memory_ptr","typeString":"struct Nil.Token memory[] memory"}},{"id":420,"name":"responseProcessingGas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":399,"src":"9195:21:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":421,"name":"context","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":401,"src":"9218:7:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":422,"name":"callData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":403,"src":"9227:8:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_struct$_Token_$120_memory_ptr_$dyn_memory_ptr","typeString":"struct Nil.Token memory[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_struct$_Token_$120_memory_ptr_$dyn_memory_ptr","typeString":"struct Nil.Token memory[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"id":413,"name":"SEND_REQUEST","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87,"src":"9132:12:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":412,"name":"__Precompile__","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1115,"src":"9117:14:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$___Precompile___$1115_$","typeString":"type(contract __Precompile__)"}},"id":414,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9117:28:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$___Precompile___$1115","typeString":"contract __Precompile__"}},"id":415,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9146:21:0","memberName":"precompileSendRequest","nodeType":"MemberAccess","referencedDeclaration":1055,"src":"9117:50:0","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_address_$_t_array$_t_struct$_Token_$120_memory_ptr_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (address,struct Nil.Token memory[] memory,uint256,bytes memory,bytes memory) payable external returns (bool)"}},"id":417,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":416,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":397,"src":"9175:5:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"9117:64:0","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_address_$_t_array$_t_struct$_Token_$120_memory_ptr_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$value","typeString":"function (address,struct Nil.Token memory[] memory,uint256,bytes memory,bytes memory) payable external returns (bool)"}},"id":423,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9117:119:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":424,"nodeType":"ExpressionStatement","src":"9117:119:0"}]},"documentation":{"id":393,"nodeType":"StructuredDocumentation","src":"8374:520:0","text":" @dev Sends a request to a contract.\n @param dst Destination address of the request.\n @param value Value to be sent with the request.\n @param responseProcessingGas Amount of gas is being bought and reserved to process the response.\n Should be >= `ASYNC_REQUEST_MIN_GAS` to make a call, otherwise `sendRequest` will fail.\n @param context Context data that is preserved in order to be available in the response method.\n @param callData Calldata for the request."},"id":426,"implemented":true,"kind":"function","modifiers":[],"name":"sendRequest","nameLocation":"8908:11:0","nodeType":"FunctionDefinition","parameters":{"id":404,"nodeType":"ParameterList","parameters":[{"constant":false,"id":395,"mutability":"mutable","name":"dst","nameLocation":"8937:3:0","nodeType":"VariableDeclaration","scope":426,"src":"8929:11:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":394,"name":"address","nodeType":"ElementaryTypeName","src":"8929:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":397,"mutability":"mutable","name":"value","nameLocation":"8958:5:0","nodeType":"VariableDeclaration","scope":426,"src":"8950:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":396,"name":"uint256","nodeType":"ElementaryTypeName","src":"8950:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":399,"mutability":"mutable","name":"responseProcessingGas","nameLocation":"8978:21:0","nodeType":"VariableDeclaration","scope":426,"src":"8973:26:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":398,"name":"uint","nodeType":"ElementaryTypeName","src":"8973:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":401,"mutability":"mutable","name":"context","nameLocation":"9022:7:0","nodeType":"VariableDeclaration","scope":426,"src":"9009:20:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":400,"name":"bytes","nodeType":"ElementaryTypeName","src":"9009:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":403,"mutability":"mutable","name":"callData","nameLocation":"9052:8:0","nodeType":"VariableDeclaration","scope":426,"src":"9039:21:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":402,"name":"bytes","nodeType":"ElementaryTypeName","src":"9039:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"8919:147:0"},"returnParameters":{"id":405,"nodeType":"ParameterList","parameters":[],"src":"9076:0:0"},"scope":885,"src":"8899:344:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":457,"nodeType":"Block","src":"10068:136:0","statements":[{"expression":{"arguments":[{"id":450,"name":"dst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":429,"src":"10143:3:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":451,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":435,"src":"10148:6:0","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Token_$120_memory_ptr_$dyn_memory_ptr","typeString":"struct Nil.Token memory[] memory"}},{"id":452,"name":"responseProcessingGas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":437,"src":"10156:21:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":453,"name":"context","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":439,"src":"10179:7:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":454,"name":"callData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":441,"src":"10188:8:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_struct$_Token_$120_memory_ptr_$dyn_memory_ptr","typeString":"struct Nil.Token memory[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_struct$_Token_$120_memory_ptr_$dyn_memory_ptr","typeString":"struct Nil.Token memory[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"id":445,"name":"SEND_REQUEST","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87,"src":"10093:12:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":444,"name":"__Precompile__","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1115,"src":"10078:14:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$___Precompile___$1115_$","typeString":"type(contract __Precompile__)"}},"id":446,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10078:28:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$___Precompile___$1115","typeString":"contract __Precompile__"}},"id":447,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10107:21:0","memberName":"precompileSendRequest","nodeType":"MemberAccess","referencedDeclaration":1055,"src":"10078:50:0","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_address_$_t_array$_t_struct$_Token_$120_memory_ptr_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (address,struct Nil.Token memory[] memory,uint256,bytes memory,bytes memory) payable external returns (bool)"}},"id":449,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":448,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":431,"src":"10136:5:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"10078:64:0","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_address_$_t_array$_t_struct$_Token_$120_memory_ptr_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$value","typeString":"function (address,struct Nil.Token memory[] memory,uint256,bytes memory,bytes memory) payable external returns (bool)"}},"id":455,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10078:119:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":456,"nodeType":"ExpressionStatement","src":"10078:119:0"}]},"documentation":{"id":427,"nodeType":"StructuredDocumentation","src":"9249:596:0","text":" @dev Sends a request to a contract with tokens.\n @param dst Destination address of the request.\n @param value Value to be sent with the request.\n @param tokens Array of tokens to be sent with the request.\n @param responseProcessingGas Amount of gas is being bought and reserved to process the response.\n should be >= `ASYNC_REQUEST_MIN_GAS` to make a call, otherwise `awaitCall` will fail.\n @param context Context data that is preserved in order to be available in the response method.\n @param callData Calldata for the request."},"id":458,"implemented":true,"kind":"function","modifiers":[],"name":"sendRequestWithTokens","nameLocation":"9859:21:0","nodeType":"FunctionDefinition","parameters":{"id":442,"nodeType":"ParameterList","parameters":[{"constant":false,"id":429,"mutability":"mutable","name":"dst","nameLocation":"9898:3:0","nodeType":"VariableDeclaration","scope":458,"src":"9890:11:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":428,"name":"address","nodeType":"ElementaryTypeName","src":"9890:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":431,"mutability":"mutable","name":"value","nameLocation":"9919:5:0","nodeType":"VariableDeclaration","scope":458,"src":"9911:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":430,"name":"uint256","nodeType":"ElementaryTypeName","src":"9911:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":435,"mutability":"mutable","name":"tokens","nameLocation":"9949:6:0","nodeType":"VariableDeclaration","scope":458,"src":"9934:21:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Token_$120_memory_ptr_$dyn_memory_ptr","typeString":"struct Nil.Token[]"},"typeName":{"baseType":{"id":433,"nodeType":"UserDefinedTypeName","pathNode":{"id":432,"name":"Token","nameLocations":["9934:5:0"],"nodeType":"IdentifierPath","referencedDeclaration":120,"src":"9934:5:0"},"referencedDeclaration":120,"src":"9934:5:0","typeDescriptions":{"typeIdentifier":"t_struct$_Token_$120_storage_ptr","typeString":"struct Nil.Token"}},"id":434,"nodeType":"ArrayTypeName","src":"9934:7:0","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Token_$120_storage_$dyn_storage_ptr","typeString":"struct Nil.Token[]"}},"visibility":"internal"},{"constant":false,"id":437,"mutability":"mutable","name":"responseProcessingGas","nameLocation":"9970:21:0","nodeType":"VariableDeclaration","scope":458,"src":"9965:26:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":436,"name":"uint","nodeType":"ElementaryTypeName","src":"9965:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":439,"mutability":"mutable","name":"context","nameLocation":"10014:7:0","nodeType":"VariableDeclaration","scope":458,"src":"10001:20:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":438,"name":"bytes","nodeType":"ElementaryTypeName","src":"10001:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":441,"mutability":"mutable","name":"callData","nameLocation":"10044:8:0","nodeType":"VariableDeclaration","scope":458,"src":"10031:21:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":440,"name":"bytes","nodeType":"ElementaryTypeName","src":"10031:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"9880:178:0"},"returnParameters":{"id":443,"nodeType":"ParameterList","parameters":[],"src":"10068:0:0"},"scope":885,"src":"9850:354:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":470,"nodeType":"Block","src":"10423:375:0","statements":[{"assignments":[465],"declarations":[{"constant":false,"id":465,"mutability":"mutable","name":"transaction_size","nameLocation":"10438:16:0","nodeType":"VariableDeclaration","scope":470,"src":"10433:21:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":464,"name":"uint","nodeType":"ElementaryTypeName","src":"10433:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":468,"initialValue":{"expression":{"id":466,"name":"transaction","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":461,"src":"10457:11:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":467,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10469:6:0","memberName":"length","nodeType":"MemberAccess","src":"10457:18:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10433:42:0"},{"AST":{"nativeSrc":"10494:298:0","nodeType":"YulBlock","src":"10494:298:0","statements":[{"body":{"nativeSrc":"10738:44:0","nodeType":"YulBlock","src":"10738:44:0","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"10763:1:0","nodeType":"YulLiteral","src":"10763:1:0","type":"","value":"0"},{"kind":"number","nativeSrc":"10766:1:0","nodeType":"YulLiteral","src":"10766:1:0","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"10756:6:0","nodeType":"YulIdentifier","src":"10756:6:0"},"nativeSrc":"10756:12:0","nodeType":"YulFunctionCall","src":"10756:12:0"},"nativeSrc":"10756:12:0","nodeType":"YulExpressionStatement","src":"10756:12:0"}]},"condition":{"arguments":[{"arguments":[{"arguments":[],"functionName":{"name":"gas","nativeSrc":"10663:3:0","nodeType":"YulIdentifier","src":"10663:3:0"},"nativeSrc":"10663:5:0","nodeType":"YulFunctionCall","src":"10663:5:0"},{"name":"SEND_TRANSACTION","nativeSrc":"10670:16:0","nodeType":"YulIdentifier","src":"10670:16:0"},{"kind":"number","nativeSrc":"10688:1:0","nodeType":"YulLiteral","src":"10688:1:0","type":"","value":"0"},{"arguments":[{"name":"transaction","nativeSrc":"10695:11:0","nodeType":"YulIdentifier","src":"10695:11:0"},{"kind":"number","nativeSrc":"10708:2:0","nodeType":"YulLiteral","src":"10708:2:0","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"10691:3:0","nodeType":"YulIdentifier","src":"10691:3:0"},"nativeSrc":"10691:20:0","nodeType":"YulFunctionCall","src":"10691:20:0"},{"name":"transaction_size","nativeSrc":"10713:16:0","nodeType":"YulIdentifier","src":"10713:16:0"},{"kind":"number","nativeSrc":"10731:1:0","nodeType":"YulLiteral","src":"10731:1:0","type":"","value":"0"},{"kind":"number","nativeSrc":"10734:1:0","nodeType":"YulLiteral","src":"10734:1:0","type":"","value":"0"}],"functionName":{"name":"call","nativeSrc":"10658:4:0","nodeType":"YulIdentifier","src":"10658:4:0"},"nativeSrc":"10658:78:0","nodeType":"YulFunctionCall","src":"10658:78:0"}],"functionName":{"name":"iszero","nativeSrc":"10651:6:0","nodeType":"YulIdentifier","src":"10651:6:0"},"nativeSrc":"10651:86:0","nodeType":"YulFunctionCall","src":"10651:86:0"},"nativeSrc":"10648:134:0","nodeType":"YulIf","src":"10648:134:0"}]},"evmVersion":"paris","externalReferences":[{"declaration":15,"isOffset":false,"isSlot":false,"src":"10670:16:0","valueSize":1},{"declaration":461,"isOffset":false,"isSlot":false,"src":"10695:11:0","valueSize":1},{"declaration":465,"isOffset":false,"isSlot":false,"src":"10713:16:0","valueSize":1}],"id":469,"nodeType":"InlineAssembly","src":"10485:307:0"}]},"documentation":{"id":459,"nodeType":"StructuredDocumentation","src":"10210:148:0","text":" @dev Sends a raw internal transaction using a special precompiled contract.\n @param transaction The transaction to be sent."},"id":471,"implemented":true,"kind":"function","modifiers":[],"name":"sendTransaction","nameLocation":"10372:15:0","nodeType":"FunctionDefinition","parameters":{"id":462,"nodeType":"ParameterList","parameters":[{"constant":false,"id":461,"mutability":"mutable","name":"transaction","nameLocation":"10401:11:0","nodeType":"VariableDeclaration","scope":471,"src":"10388:24:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":460,"name":"bytes","nodeType":"ElementaryTypeName","src":"10388:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"10387:26:0"},"returnParameters":{"id":463,"nodeType":"ParameterList","parameters":[],"src":"10423:0:0"},"scope":885,"src":"10363:435:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":533,"nodeType":"Block","src":"11238:626:0","statements":[{"assignments":[484],"declarations":[{"constant":false,"id":484,"mutability":"mutable","name":"encodedInput","nameLocation":"11304:12:0","nodeType":"VariableDeclaration","scope":533,"src":"11291:25:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":483,"name":"bytes","nodeType":"ElementaryTypeName","src":"11291:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":491,"initialValue":{"arguments":[{"id":487,"name":"pubkey","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":474,"src":"11330:6:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":488,"name":"hash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":476,"src":"11338:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":489,"name":"signature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":478,"src":"11344:9:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":485,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"11319:3:0","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":486,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11323:6:0","memberName":"encode","nodeType":"MemberAccess","src":"11319:10:0","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":490,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11319:35:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"11291:63:0"},{"assignments":[493],"declarations":[{"constant":false,"id":493,"mutability":"mutable","name":"success","nameLocation":"11369:7:0","nodeType":"VariableDeclaration","scope":533,"src":"11364:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":492,"name":"bool","nodeType":"ElementaryTypeName","src":"11364:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":494,"nodeType":"VariableDeclarationStatement","src":"11364:12:0"},{"assignments":[496],"declarations":[{"constant":false,"id":496,"mutability":"mutable","name":"result","nameLocation":"11391:6:0","nodeType":"VariableDeclaration","scope":533,"src":"11386:11:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":495,"name":"bool","nodeType":"ElementaryTypeName","src":"11386:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":497,"nodeType":"VariableDeclarationStatement","src":"11386:11:0"},{"assignments":[499],"declarations":[{"constant":false,"id":499,"mutability":"mutable","name":"returnData","nameLocation":"11523:10:0","nodeType":"VariableDeclaration","scope":533,"src":"11510:23:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":498,"name":"bytes","nodeType":"ElementaryTypeName","src":"11510:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":500,"nodeType":"VariableDeclarationStatement","src":"11510:23:0"},{"expression":{"id":508,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":501,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":493,"src":"11544:7:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":502,"name":"returnData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":499,"src":"11553:10:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"id":503,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"11543:21:0","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":506,"name":"encodedInput","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":484,"src":"11595:12:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":504,"name":"VERIFY_SIGNATURE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27,"src":"11567:16:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":505,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11584:10:0","memberName":"staticcall","nodeType":"MemberAccess","src":"11567:27:0","typeDescriptions":{"typeIdentifier":"t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) view returns (bool,bytes memory)"}},"id":507,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11567:41:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"src":"11543:65:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":509,"nodeType":"ExpressionStatement","src":"11543:65:0"},{"expression":{"arguments":[{"id":511,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":493,"src":"11627:7:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"507265636f6d70696c656420636f6e74726163742063616c6c206661696c6564","id":512,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"11636:34:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_f42cbdd5ebaf1558fa890262cd040b92d82e3a725cf1bba522f51c0b6f01d380","typeString":"literal_string \"Precompiled contract call failed\""},"value":"Precompiled contract call failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_f42cbdd5ebaf1558fa890262cd040b92d82e3a725cf1bba522f51c0b6f01d380","typeString":"literal_string \"Precompiled contract call failed\""}],"id":510,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"11619:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":513,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11619:52:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":514,"nodeType":"ExpressionStatement","src":"11619:52:0"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":518,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":515,"name":"returnData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":499,"src":"11747:10:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":516,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11758:6:0","memberName":"length","nodeType":"MemberAccess","src":"11747:17:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":517,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11767:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11747:21:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":530,"nodeType":"IfStatement","src":"11743:91:0","trueBody":{"id":529,"nodeType":"Block","src":"11770:64:0","statements":[{"expression":{"id":527,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":519,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":496,"src":"11784:6:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":522,"name":"returnData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":499,"src":"11804:10:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":524,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11817:4:0","typeDescriptions":{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"},"typeName":{"id":523,"name":"bool","nodeType":"ElementaryTypeName","src":"11817:4:0","typeDescriptions":{}}}],"id":525,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"11816:6:0","typeDescriptions":{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"}],"expression":{"id":520,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"11793:3:0","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":521,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11797:6:0","memberName":"decode","nodeType":"MemberAccess","src":"11793:10:0","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":526,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11793:30:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"11784:39:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":528,"nodeType":"ExpressionStatement","src":"11784:39:0"}]}},{"expression":{"id":531,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":496,"src":"11851:6:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":482,"id":532,"nodeType":"Return","src":"11844:13:0"}]},"documentation":{"id":472,"nodeType":"StructuredDocumentation","src":"10804:284:0","text":" @dev Validates a signature using a precompiled contract.\n @param pubkey Public key used for validation.\n @param hash Hash of the transaction.\n @param signature Signature to be validated.\n @return Boolean indicating if the signature is valid."},"id":534,"implemented":true,"kind":"function","modifiers":[],"name":"validateSignature","nameLocation":"11102:17:0","nodeType":"FunctionDefinition","parameters":{"id":479,"nodeType":"ParameterList","parameters":[{"constant":false,"id":474,"mutability":"mutable","name":"pubkey","nameLocation":"11142:6:0","nodeType":"VariableDeclaration","scope":534,"src":"11129:19:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":473,"name":"bytes","nodeType":"ElementaryTypeName","src":"11129:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":476,"mutability":"mutable","name":"hash","nameLocation":"11166:4:0","nodeType":"VariableDeclaration","scope":534,"src":"11158:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":475,"name":"uint256","nodeType":"ElementaryTypeName","src":"11158:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":478,"mutability":"mutable","name":"signature","nameLocation":"11193:9:0","nodeType":"VariableDeclaration","scope":534,"src":"11180:22:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":477,"name":"bytes","nodeType":"ElementaryTypeName","src":"11180:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"11119:89:0"},"returnParameters":{"id":482,"nodeType":"ParameterList","parameters":[{"constant":false,"id":481,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":534,"src":"11232:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":480,"name":"bool","nodeType":"ElementaryTypeName","src":"11232:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"11231:6:0"},"scope":885,"src":"11093:771:0","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":553,"nodeType":"Block","src":"12174:93:0","statements":[{"expression":{"arguments":[{"id":549,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":540,"src":"12251:2:0","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},{"id":550,"name":"addr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":537,"src":"12255:4:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":546,"name":"GET_TOKEN_BALANCE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45,"src":"12206:17:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":545,"name":"__Precompile__","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1115,"src":"12191:14:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$___Precompile___$1115_$","typeString":"type(contract __Precompile__)"}},"id":547,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12191:33:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$___Precompile___$1115","typeString":"contract __Precompile__"}},"id":548,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12225:25:0","memberName":"precompileGetTokenBalance","nodeType":"MemberAccess","referencedDeclaration":999,"src":"12191:59:0","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_userDefinedValueType$_TokenId_$3_$_t_address_$returns$_t_uint256_$","typeString":"function (TokenId,address) view external returns (uint256)"}},"id":551,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12191:69:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":544,"id":552,"nodeType":"Return","src":"12184:76:0"}]},"documentation":{"id":535,"nodeType":"StructuredDocumentation","src":"11870:220:0","text":" @dev Returns the balance of a token with a given id for a given address.\n @param addr Address to check the balance for.\n @param id TokenId of the token.\n @return Balance of the token."},"id":554,"implemented":true,"kind":"function","modifiers":[],"name":"tokenBalance","nameLocation":"12104:12:0","nodeType":"FunctionDefinition","parameters":{"id":541,"nodeType":"ParameterList","parameters":[{"constant":false,"id":537,"mutability":"mutable","name":"addr","nameLocation":"12125:4:0","nodeType":"VariableDeclaration","scope":554,"src":"12117:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":536,"name":"address","nodeType":"ElementaryTypeName","src":"12117:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":540,"mutability":"mutable","name":"id","nameLocation":"12139:2:0","nodeType":"VariableDeclaration","scope":554,"src":"12131:10:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"},"typeName":{"id":539,"nodeType":"UserDefinedTypeName","pathNode":{"id":538,"name":"TokenId","nameLocations":["12131:7:0"],"nodeType":"IdentifierPath","referencedDeclaration":3,"src":"12131:7:0"},"referencedDeclaration":3,"src":"12131:7:0","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"visibility":"internal"}],"src":"12116:26:0"},"returnParameters":{"id":544,"nodeType":"ParameterList","parameters":[{"constant":false,"id":543,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":554,"src":"12165:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":542,"name":"uint256","nodeType":"ElementaryTypeName","src":"12165:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12164:9:0"},"scope":885,"src":"12095:172:0","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":568,"nodeType":"Block","src":"12461:95:0","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":563,"name":"GET_TRANSACTION_TOKENS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":57,"src":"12493:22:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":562,"name":"__Precompile__","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1115,"src":"12478:14:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$___Precompile___$1115_$","typeString":"type(contract __Precompile__)"}},"id":564,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12478:38:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$___Precompile___$1115","typeString":"contract __Precompile__"}},"id":565,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12517:30:0","memberName":"precompileGetTransactionTokens","nodeType":"MemberAccess","referencedDeclaration":1075,"src":"12478:69:0","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$__$returns$_t_array$_t_struct$_Token_$120_memory_ptr_$dyn_memory_ptr_$","typeString":"function () external returns (struct Nil.Token memory[] memory)"}},"id":566,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12478:71:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Token_$120_memory_ptr_$dyn_memory_ptr","typeString":"struct Nil.Token memory[] memory"}},"functionReturnParameters":561,"id":567,"nodeType":"Return","src":"12471:78:0"}]},"documentation":{"id":555,"nodeType":"StructuredDocumentation","src":"12273:129:0","text":" @dev Returns tokens from the current transaction.\n @return Array of tokens from the current transaction."},"id":569,"implemented":true,"kind":"function","modifiers":[],"name":"txnTokens","nameLocation":"12416:9:0","nodeType":"FunctionDefinition","parameters":{"id":556,"nodeType":"ParameterList","parameters":[],"src":"12425:2:0"},"returnParameters":{"id":561,"nodeType":"ParameterList","parameters":[{"constant":false,"id":560,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":569,"src":"12445:14:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Token_$120_memory_ptr_$dyn_memory_ptr","typeString":"struct Nil.Token[]"},"typeName":{"baseType":{"id":558,"nodeType":"UserDefinedTypeName","pathNode":{"id":557,"name":"Token","nameLocations":["12445:5:0"],"nodeType":"IdentifierPath","referencedDeclaration":120,"src":"12445:5:0"},"referencedDeclaration":120,"src":"12445:5:0","typeDescriptions":{"typeIdentifier":"t_struct$_Token_$120_storage_ptr","typeString":"struct Nil.Token"}},"id":559,"nodeType":"ArrayTypeName","src":"12445:7:0","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Token_$120_storage_$dyn_storage_ptr","typeString":"struct Nil.Token[]"}},"visibility":"internal"}],"src":"12444:16:0"},"scope":885,"src":"12407:149:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":590,"nodeType":"Block","src":"12789:58:0","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":588,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":581,"name":"addr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":572,"src":"12822:4:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":580,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12814:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":579,"name":"uint160","nodeType":"ElementaryTypeName","src":"12814:7:0","typeDescriptions":{}}},"id":582,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12814:13:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":578,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12806:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":577,"name":"uint256","nodeType":"ElementaryTypeName","src":"12806:7:0","typeDescriptions":{}}},"id":583,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12806:22:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_rational_144_by_1","typeString":"int_const 144"},"id":586,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3138","id":584,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12833:2:0","typeDescriptions":{"typeIdentifier":"t_rational_18_by_1","typeString":"int_const 18"},"value":"18"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"38","id":585,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12838:1:0","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"12833:6:0","typeDescriptions":{"typeIdentifier":"t_rational_144_by_1","typeString":"int_const 144"}}],"id":587,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"12832:8:0","typeDescriptions":{"typeIdentifier":"t_rational_144_by_1","typeString":"int_const 144"}},"src":"12806:34:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":576,"id":589,"nodeType":"Return","src":"12799:41:0"}]},"documentation":{"id":570,"nodeType":"StructuredDocumentation","src":"12562:157:0","text":" @dev Returns the shard id for a given address.\n @param addr Address to get the shard id for.\n @return Shard id of the address."},"id":591,"implemented":true,"kind":"function","modifiers":[],"name":"getShardId","nameLocation":"12733:10:0","nodeType":"FunctionDefinition","parameters":{"id":573,"nodeType":"ParameterList","parameters":[{"constant":false,"id":572,"mutability":"mutable","name":"addr","nameLocation":"12752:4:0","nodeType":"VariableDeclaration","scope":591,"src":"12744:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":571,"name":"address","nodeType":"ElementaryTypeName","src":"12744:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12743:14:0"},"returnParameters":{"id":576,"nodeType":"ParameterList","parameters":[{"constant":false,"id":575,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":591,"src":"12780:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":574,"name":"uint256","nodeType":"ElementaryTypeName","src":"12780:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12779:9:0"},"scope":885,"src":"12724:123:0","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":608,"nodeType":"Block","src":"13586:93:0","statements":[{"expression":{"arguments":[{"arguments":[{"id":604,"name":"addr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":594,"src":"13666:4:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":603,"name":"getShardId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":591,"src":"13655:10:0","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$returns$_t_uint256_$","typeString":"function (address) pure returns (uint256)"}},"id":605,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13655:16:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":600,"name":"GET_GAS_PRICE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63,"src":"13618:13:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":599,"name":"__Precompile__","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1115,"src":"13603:14:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$___Precompile___$1115_$","typeString":"type(contract __Precompile__)"}},"id":601,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13603:29:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$___Precompile___$1115","typeString":"contract __Precompile__"}},"id":602,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13633:21:0","memberName":"precompileGetGasPrice","nodeType":"MemberAccess","referencedDeclaration":1083,"src":"13603:51:0","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) external returns (uint256)"}},"id":606,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13603:69:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":598,"id":607,"nodeType":"Return","src":"13596:76:0"}]},"documentation":{"id":592,"nodeType":"StructuredDocumentation","src":"12853:667:0","text":" @notice Returns the gas price for the shard in which the given address resides.\n @dev It may return the price with some delay, i.e it can be not equal to the actual price. So, one should\n calculate real gas price pessimistically, i.e. `gas_price = getGasPrice() + blocks_delay * price_growth_factor`.\n Where, `blocks_delay` is the blocks number between the block for which gas price is actual and the block in which\n the transaction will be processed; and `price_growth_factor` is the maximum value by which gas can grow per block.\n @param addr Address to get the gas price for.\n @return Gas price for the shard."},"id":609,"implemented":true,"kind":"function","modifiers":[],"name":"getGasPrice","nameLocation":"13534:11:0","nodeType":"FunctionDefinition","parameters":{"id":595,"nodeType":"ParameterList","parameters":[{"constant":false,"id":594,"mutability":"mutable","name":"addr","nameLocation":"13554:4:0","nodeType":"VariableDeclaration","scope":609,"src":"13546:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":593,"name":"address","nodeType":"ElementaryTypeName","src":"13546:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13545:14:0"},"returnParameters":{"id":598,"nodeType":"ParameterList","parameters":[{"constant":false,"id":597,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":609,"src":"13577:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":596,"name":"uint256","nodeType":"ElementaryTypeName","src":"13577:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13576:9:0"},"scope":885,"src":"13525:154:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":665,"nodeType":"Block","src":"14028:285:0","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":624,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":622,"name":"shardId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":612,"src":"14046:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"307866666666","id":623,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14056:6:0","typeDescriptions":{"typeIdentifier":"t_rational_65535_by_1","typeString":"int_const 65535"},"value":"0xffff"},"src":"14046:16:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"536861726420696420697320746f6f20626967","id":625,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"14064:21:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_ca851c85e5423e9b339c9300f5a8b77ce8054c947d66b19ec86c373106503872","typeString":"literal_string \"Shard id is too big\""},"value":"Shard id is too big"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_ca851c85e5423e9b339c9300f5a8b77ce8054c947d66b19ec86c373106503872","typeString":"literal_string \"Shard id is too big\""}],"id":621,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"14038:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":626,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14038:48:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":627,"nodeType":"ExpressionStatement","src":"14038:48:0"},{"assignments":[629],"declarations":[{"constant":false,"id":629,"mutability":"mutable","name":"addr","nameLocation":"14104:4:0","nodeType":"VariableDeclaration","scope":665,"src":"14096:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"},"typeName":{"id":628,"name":"uint160","nodeType":"ElementaryTypeName","src":"14096:7:0","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"visibility":"internal"}],"id":643,"initialValue":{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"id":637,"name":"code","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":614,"src":"14160:4:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":638,"name":"salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":616,"src":"14166:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":635,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"14143:3:0","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":636,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14147:12:0","memberName":"encodePacked","nodeType":"MemberAccess","src":"14143:16:0","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":639,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14143:28:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":634,"name":"getPoseidonHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":746,"src":"14127:15:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes_memory_ptr_$returns$_t_uint256_$","typeString":"function (bytes memory) returns (uint256)"}},"id":640,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14127:45:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":633,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14119:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":632,"name":"uint256","nodeType":"ElementaryTypeName","src":"14119:7:0","typeDescriptions":{}}},"id":641,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14119:54:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":631,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14111:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":630,"name":"uint160","nodeType":"ElementaryTypeName","src":"14111:7:0","typeDescriptions":{}}},"id":642,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14111:63:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"nodeType":"VariableDeclarationStatement","src":"14096:78:0"},{"expression":{"id":646,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":644,"name":"addr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":629,"src":"14184:4:0","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"nodeType":"Assignment","operator":"&=","rightHandSide":{"hexValue":"3078666666666666666666666666666666666666666666666666666666666666666666666666","id":645,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14192:38:0","typeDescriptions":{"typeIdentifier":"t_rational_22300745198530623141535718272648361505980415_by_1","typeString":"int_const 2230...(36 digits omitted)...0415"},"value":"0xffffffffffffffffffffffffffffffffffff"},"src":"14184:46:0","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"id":647,"nodeType":"ExpressionStatement","src":"14184:46:0"},{"expression":{"id":658,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":648,"name":"addr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":629,"src":"14240:4:0","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"nodeType":"Assignment","operator":"|=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint160","typeString":"uint160"},"id":657,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":651,"name":"shardId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":612,"src":"14256:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":650,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14248:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":649,"name":"uint160","nodeType":"ElementaryTypeName","src":"14248:7:0","typeDescriptions":{}}},"id":652,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14248:16:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_rational_144_by_1","typeString":"int_const 144"},"id":655,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3138","id":653,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14269:2:0","typeDescriptions":{"typeIdentifier":"t_rational_18_by_1","typeString":"int_const 18"},"value":"18"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"38","id":654,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14274:1:0","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"14269:6:0","typeDescriptions":{"typeIdentifier":"t_rational_144_by_1","typeString":"int_const 144"}}],"id":656,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"14268:8:0","typeDescriptions":{"typeIdentifier":"t_rational_144_by_1","typeString":"int_const 144"}},"src":"14248:28:0","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"src":"14240:36:0","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"id":659,"nodeType":"ExpressionStatement","src":"14240:36:0"},{"expression":{"arguments":[{"id":662,"name":"addr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":629,"src":"14301:4:0","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":661,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14293:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":660,"name":"address","nodeType":"ElementaryTypeName","src":"14293:7:0","typeDescriptions":{}}},"id":663,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14293:13:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":620,"id":664,"nodeType":"Return","src":"14286:20:0"}]},"documentation":{"id":610,"nodeType":"StructuredDocumentation","src":"13685:242:0","text":" @dev Creates a contract address.\n @param shardId Shard id for the address.\n @param code Bytecode of the contract.\n @param salt Salt for the address creation.\n @return Address of the created contract."},"id":666,"implemented":true,"kind":"function","modifiers":[],"name":"createAddress","nameLocation":"13941:13:0","nodeType":"FunctionDefinition","parameters":{"id":617,"nodeType":"ParameterList","parameters":[{"constant":false,"id":612,"mutability":"mutable","name":"shardId","nameLocation":"13960:7:0","nodeType":"VariableDeclaration","scope":666,"src":"13955:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":611,"name":"uint","nodeType":"ElementaryTypeName","src":"13955:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":614,"mutability":"mutable","name":"code","nameLocation":"13982:4:0","nodeType":"VariableDeclaration","scope":666,"src":"13969:17:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":613,"name":"bytes","nodeType":"ElementaryTypeName","src":"13969:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":616,"mutability":"mutable","name":"salt","nameLocation":"13996:4:0","nodeType":"VariableDeclaration","scope":666,"src":"13988:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":615,"name":"uint256","nodeType":"ElementaryTypeName","src":"13988:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13954:47:0"},"returnParameters":{"id":620,"nodeType":"ParameterList","parameters":[{"constant":false,"id":619,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":666,"src":"14019:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":618,"name":"address","nodeType":"ElementaryTypeName","src":"14019:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14018:9:0"},"scope":885,"src":"13932:381:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":729,"nodeType":"Block","src":"14745:311:0","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":683,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":681,"name":"shardId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":669,"src":"14763:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"307866666666","id":682,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14773:6:0","typeDescriptions":{"typeIdentifier":"t_rational_65535_by_1","typeString":"int_const 65535"},"value":"0xffff"},"src":"14763:16:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"536861726420696420697320746f6f20626967","id":684,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"14781:21:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_ca851c85e5423e9b339c9300f5a8b77ce8054c947d66b19ec86c373106503872","typeString":"literal_string \"Shard id is too big\""},"value":"Shard id is too big"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_ca851c85e5423e9b339c9300f5a8b77ce8054c947d66b19ec86c373106503872","typeString":"literal_string \"Shard id is too big\""}],"id":680,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"14755:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":685,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14755:48:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":686,"nodeType":"ExpressionStatement","src":"14755:48:0"},{"assignments":[688],"declarations":[{"constant":false,"id":688,"mutability":"mutable","name":"addr","nameLocation":"14821:4:0","nodeType":"VariableDeclaration","scope":729,"src":"14813:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"},"typeName":{"id":687,"name":"uint160","nodeType":"ElementaryTypeName","src":"14813:7:0","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"visibility":"internal"}],"id":707,"initialValue":{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"hexValue":"30786666","id":698,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14884:4:0","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"0xff"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"}],"id":697,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14877:6:0","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes1_$","typeString":"type(bytes1)"},"typeName":{"id":696,"name":"bytes1","nodeType":"ElementaryTypeName","src":"14877:6:0","typeDescriptions":{}}},"id":699,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14877:12:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},{"id":700,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":671,"src":"14891:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":701,"name":"salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":673,"src":"14899:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":702,"name":"codeHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":675,"src":"14905:8:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes1","typeString":"bytes1"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":694,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"14860:3:0","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":695,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14864:12:0","memberName":"encodePacked","nodeType":"MemberAccess","src":"14860:16:0","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":703,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14860:54:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":693,"name":"getPoseidonHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":746,"src":"14844:15:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes_memory_ptr_$returns$_t_uint256_$","typeString":"function (bytes memory) returns (uint256)"}},"id":704,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14844:71:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":692,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14836:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":691,"name":"uint256","nodeType":"ElementaryTypeName","src":"14836:7:0","typeDescriptions":{}}},"id":705,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14836:80:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":690,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14828:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":689,"name":"uint160","nodeType":"ElementaryTypeName","src":"14828:7:0","typeDescriptions":{}}},"id":706,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14828:89:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"nodeType":"VariableDeclarationStatement","src":"14813:104:0"},{"expression":{"id":710,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":708,"name":"addr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":688,"src":"14927:4:0","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"nodeType":"Assignment","operator":"&=","rightHandSide":{"hexValue":"3078666666666666666666666666666666666666666666666666666666666666666666666666","id":709,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14935:38:0","typeDescriptions":{"typeIdentifier":"t_rational_22300745198530623141535718272648361505980415_by_1","typeString":"int_const 2230...(36 digits omitted)...0415"},"value":"0xffffffffffffffffffffffffffffffffffff"},"src":"14927:46:0","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"id":711,"nodeType":"ExpressionStatement","src":"14927:46:0"},{"expression":{"id":722,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":712,"name":"addr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":688,"src":"14983:4:0","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"nodeType":"Assignment","operator":"|=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint160","typeString":"uint160"},"id":721,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":715,"name":"shardId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":669,"src":"14999:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":714,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14991:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":713,"name":"uint160","nodeType":"ElementaryTypeName","src":"14991:7:0","typeDescriptions":{}}},"id":716,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14991:16:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_rational_144_by_1","typeString":"int_const 144"},"id":719,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3138","id":717,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15012:2:0","typeDescriptions":{"typeIdentifier":"t_rational_18_by_1","typeString":"int_const 18"},"value":"18"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"38","id":718,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15017:1:0","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"15012:6:0","typeDescriptions":{"typeIdentifier":"t_rational_144_by_1","typeString":"int_const 144"}}],"id":720,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"15011:8:0","typeDescriptions":{"typeIdentifier":"t_rational_144_by_1","typeString":"int_const 144"}},"src":"14991:28:0","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"src":"14983:36:0","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"id":723,"nodeType":"ExpressionStatement","src":"14983:36:0"},{"expression":{"arguments":[{"id":726,"name":"addr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":688,"src":"15044:4:0","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":725,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15036:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":724,"name":"address","nodeType":"ElementaryTypeName","src":"15036:7:0","typeDescriptions":{}}},"id":727,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15036:13:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":679,"id":728,"nodeType":"Return","src":"15029:20:0"}]},"documentation":{"id":667,"nodeType":"StructuredDocumentation","src":"14319:309:0","text":" @dev Creates a contract address using create2.\n @param shardId Shard id for the address.\n @param sender Address of the sender.\n @param salt Salt for the address creation.\n @param codeHash Hash of the contract bytecode.\n @return Address of the created contract."},"id":730,"implemented":true,"kind":"function","modifiers":[],"name":"createAddress2","nameLocation":"14642:14:0","nodeType":"FunctionDefinition","parameters":{"id":676,"nodeType":"ParameterList","parameters":[{"constant":false,"id":669,"mutability":"mutable","name":"shardId","nameLocation":"14662:7:0","nodeType":"VariableDeclaration","scope":730,"src":"14657:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":668,"name":"uint","nodeType":"ElementaryTypeName","src":"14657:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":671,"mutability":"mutable","name":"sender","nameLocation":"14679:6:0","nodeType":"VariableDeclaration","scope":730,"src":"14671:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":670,"name":"address","nodeType":"ElementaryTypeName","src":"14671:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":673,"mutability":"mutable","name":"salt","nameLocation":"14695:4:0","nodeType":"VariableDeclaration","scope":730,"src":"14687:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":672,"name":"uint256","nodeType":"ElementaryTypeName","src":"14687:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":675,"mutability":"mutable","name":"codeHash","nameLocation":"14709:8:0","nodeType":"VariableDeclaration","scope":730,"src":"14701:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":674,"name":"uint256","nodeType":"ElementaryTypeName","src":"14701:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14656:62:0"},"returnParameters":{"id":679,"nodeType":"ParameterList","parameters":[{"constant":false,"id":678,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":730,"src":"14736:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":677,"name":"address","nodeType":"ElementaryTypeName","src":"14736:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14735:9:0"},"scope":885,"src":"14633:423:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":745,"nodeType":"Block","src":"15280:89:0","statements":[{"expression":{"arguments":[{"id":742,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":733,"src":"15357:4:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"id":739,"name":"GET_POSEIDON_HASH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69,"src":"15312:17:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":738,"name":"__Precompile__","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1115,"src":"15297:14:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$___Precompile___$1115_$","typeString":"type(contract __Precompile__)"}},"id":740,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15297:33:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$___Precompile___$1115","typeString":"contract __Precompile__"}},"id":741,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15331:25:0","memberName":"precompileGetPoseidonHash","nodeType":"MemberAccess","referencedDeclaration":1091,"src":"15297:59:0","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$_t_uint256_$","typeString":"function (bytes memory) external returns (uint256)"}},"id":743,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15297:65:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":737,"id":744,"nodeType":"Return","src":"15290:72:0"}]},"documentation":{"id":731,"nodeType":"StructuredDocumentation","src":"15062:143:0","text":" @dev Returns the Poseidon hash of the given data.\n @param data Data to hash.\n @return Poseidon hash of the data."},"id":746,"implemented":true,"kind":"function","modifiers":[],"name":"getPoseidonHash","nameLocation":"15219:15:0","nodeType":"FunctionDefinition","parameters":{"id":734,"nodeType":"ParameterList","parameters":[{"constant":false,"id":733,"mutability":"mutable","name":"data","nameLocation":"15248:4:0","nodeType":"VariableDeclaration","scope":746,"src":"15235:17:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":732,"name":"bytes","nodeType":"ElementaryTypeName","src":"15235:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"15234:19:0"},"returnParameters":{"id":737,"nodeType":"ParameterList","parameters":[{"constant":false,"id":736,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":746,"src":"15271:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":735,"name":"uint256","nodeType":"ElementaryTypeName","src":"15271:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15270:9:0"},"scope":885,"src":"15210:159:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":763,"nodeType":"Block","src":"15591:85:0","statements":[{"expression":{"arguments":[{"hexValue":"74727565","id":758,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"15652:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"id":759,"name":"name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":749,"src":"15658:4:0","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":760,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":751,"src":"15664:4:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"id":755,"name":"CONFIG_PARAM","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":81,"src":"15616:12:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":754,"name":"__Precompile__","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1115,"src":"15601:14:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$___Precompile___$1115_$","typeString":"type(contract __Precompile__)"}},"id":756,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15601:28:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$___Precompile___$1115","typeString":"contract __Precompile__"}},"id":757,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15630:21:0","memberName":"precompileConfigParam","nodeType":"MemberAccess","referencedDeclaration":1103,"src":"15601:50:0","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bool_$_t_string_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bool,string memory,bytes memory) external returns (bytes memory)"}},"id":761,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15601:68:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":762,"nodeType":"ExpressionStatement","src":"15601:68:0"}]},"documentation":{"id":747,"nodeType":"StructuredDocumentation","src":"15375:139:0","text":" @dev Sets a configuration parameter.\n @param name Name of the parameter.\n @param data Data of the parameter."},"id":764,"implemented":true,"kind":"function","modifiers":[],"name":"setConfigParam","nameLocation":"15528:14:0","nodeType":"FunctionDefinition","parameters":{"id":752,"nodeType":"ParameterList","parameters":[{"constant":false,"id":749,"mutability":"mutable","name":"name","nameLocation":"15557:4:0","nodeType":"VariableDeclaration","scope":764,"src":"15543:18:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":748,"name":"string","nodeType":"ElementaryTypeName","src":"15543:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":751,"mutability":"mutable","name":"data","nameLocation":"15576:4:0","nodeType":"VariableDeclaration","scope":764,"src":"15563:17:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":750,"name":"bytes","nodeType":"ElementaryTypeName","src":"15563:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"15542:39:0"},"returnParameters":{"id":753,"nodeType":"ParameterList","parameters":[],"src":"15591:0:0"},"scope":885,"src":"15519:157:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":784,"nodeType":"Block","src":"15900:98:0","statements":[{"expression":{"arguments":[{"hexValue":"66616c7365","id":776,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"15968:5:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"id":777,"name":"name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":767,"src":"15975:4:0","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"arguments":[{"hexValue":"","id":780,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"15987:2:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"id":779,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15981:5:0","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":778,"name":"bytes","nodeType":"ElementaryTypeName","src":"15981:5:0","typeDescriptions":{}}},"id":781,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15981:9:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"id":773,"name":"CONFIG_PARAM","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":81,"src":"15932:12:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":772,"name":"__Precompile__","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1115,"src":"15917:14:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$___Precompile___$1115_$","typeString":"type(contract __Precompile__)"}},"id":774,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15917:28:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$___Precompile___$1115","typeString":"contract __Precompile__"}},"id":775,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15946:21:0","memberName":"precompileConfigParam","nodeType":"MemberAccess","referencedDeclaration":1103,"src":"15917:50:0","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bool_$_t_string_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bool,string memory,bytes memory) external returns (bytes memory)"}},"id":782,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15917:74:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":771,"id":783,"nodeType":"Return","src":"15910:81:0"}]},"documentation":{"id":765,"nodeType":"StructuredDocumentation","src":"15682:138:0","text":" @dev Returns a configuration parameter.\n @param name Name of the parameter.\n @return Data of the parameter."},"id":785,"implemented":true,"kind":"function","modifiers":[],"name":"getConfigParam","nameLocation":"15834:14:0","nodeType":"FunctionDefinition","parameters":{"id":768,"nodeType":"ParameterList","parameters":[{"constant":false,"id":767,"mutability":"mutable","name":"name","nameLocation":"15863:4:0","nodeType":"VariableDeclaration","scope":785,"src":"15849:18:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":766,"name":"string","nodeType":"ElementaryTypeName","src":"15849:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"15848:20:0"},"returnParameters":{"id":771,"nodeType":"ParameterList","parameters":[{"constant":false,"id":770,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":785,"src":"15886:12:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":769,"name":"bytes","nodeType":"ElementaryTypeName","src":"15886:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"15885:14:0"},"scope":885,"src":"15825:173:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"canonicalName":"Nil.ValidatorInfo","id":792,"members":[{"constant":false,"id":789,"mutability":"mutable","name":"PublicKey","nameLocation":"16045:9:0","nodeType":"VariableDeclaration","scope":792,"src":"16035:19:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint8_$33_storage_ptr","typeString":"uint8[33]"},"typeName":{"baseType":{"id":786,"name":"uint8","nodeType":"ElementaryTypeName","src":"16035:5:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":788,"length":{"hexValue":"3333","id":787,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16041:2:0","typeDescriptions":{"typeIdentifier":"t_rational_33_by_1","typeString":"int_const 33"},"value":"33"},"nodeType":"ArrayTypeName","src":"16035:9:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint8_$33_storage_ptr","typeString":"uint8[33]"}},"visibility":"internal"},{"constant":false,"id":791,"mutability":"mutable","name":"WithdrawalAddress","nameLocation":"16072:17:0","nodeType":"VariableDeclaration","scope":792,"src":"16064:25:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":790,"name":"address","nodeType":"ElementaryTypeName","src":"16064:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"name":"ValidatorInfo","nameLocation":"16011:13:0","nodeType":"StructDefinition","scope":885,"src":"16004:92:0","visibility":"public"},{"canonicalName":"Nil.ParamValidators","id":797,"members":[{"constant":false,"id":796,"mutability":"mutable","name":"list","nameLocation":"16151:4:0","nodeType":"VariableDeclaration","scope":797,"src":"16135:20:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ValidatorInfo_$792_storage_$dyn_storage_ptr","typeString":"struct Nil.ValidatorInfo[]"},"typeName":{"baseType":{"id":794,"nodeType":"UserDefinedTypeName","pathNode":{"id":793,"name":"ValidatorInfo","nameLocations":["16135:13:0"],"nodeType":"IdentifierPath","referencedDeclaration":792,"src":"16135:13:0"},"referencedDeclaration":792,"src":"16135:13:0","typeDescriptions":{"typeIdentifier":"t_struct$_ValidatorInfo_$792_storage_ptr","typeString":"struct Nil.ValidatorInfo"}},"id":795,"nodeType":"ArrayTypeName","src":"16135:15:0","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ValidatorInfo_$792_storage_$dyn_storage_ptr","typeString":"struct Nil.ValidatorInfo[]"}},"visibility":"internal"}],"name":"ParamValidators","nameLocation":"16109:15:0","nodeType":"StructDefinition","scope":885,"src":"16102:60:0","visibility":"public"},{"canonicalName":"Nil.ParamGasPrice","id":803,"members":[{"constant":false,"id":799,"mutability":"mutable","name":"gasPriceScale","nameLocation":"16207:13:0","nodeType":"VariableDeclaration","scope":803,"src":"16199:21:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":798,"name":"uint256","nodeType":"ElementaryTypeName","src":"16199:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":802,"mutability":"mutable","name":"shards","nameLocation":"16240:6:0","nodeType":"VariableDeclaration","scope":803,"src":"16230:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":800,"name":"uint256","nodeType":"ElementaryTypeName","src":"16230:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":801,"nodeType":"ArrayTypeName","src":"16230:9:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"name":"ParamGasPrice","nameLocation":"16175:13:0","nodeType":"StructDefinition","scope":885,"src":"16168:85:0","visibility":"public"},{"body":{"id":823,"nodeType":"Block","src":"16442:122:0","statements":[{"assignments":[811],"declarations":[{"constant":false,"id":811,"mutability":"mutable","name":"data","nameLocation":"16465:4:0","nodeType":"VariableDeclaration","scope":823,"src":"16452:17:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":810,"name":"bytes","nodeType":"ElementaryTypeName","src":"16452:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":815,"initialValue":{"arguments":[{"hexValue":"637572725f76616c696461746f7273","id":813,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"16487:17:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_800d9f748e3879a48d0649e2bab84ff428d31e51989f0bc4b7edd35f253b0dac","typeString":"literal_string \"curr_validators\""},"value":"curr_validators"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_800d9f748e3879a48d0649e2bab84ff428d31e51989f0bc4b7edd35f253b0dac","typeString":"literal_string \"curr_validators\""}],"id":812,"name":"getConfigParam","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":785,"src":"16472:14:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (string memory) returns (bytes memory)"}},"id":814,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16472:33:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"16452:53:0"},{"expression":{"arguments":[{"id":818,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":811,"src":"16533:4:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":819,"name":"ParamValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":797,"src":"16540:15:0","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ParamValidators_$797_storage_ptr_$","typeString":"type(struct Nil.ParamValidators storage pointer)"}}],"id":820,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"16539:17:0","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ParamValidators_$797_storage_ptr_$","typeString":"type(struct Nil.ParamValidators storage pointer)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_struct$_ParamValidators_$797_storage_ptr_$","typeString":"type(struct Nil.ParamValidators storage pointer)"}],"expression":{"id":816,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"16522:3:0","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":817,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"16526:6:0","memberName":"decode","nodeType":"MemberAccess","src":"16522:10:0","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":821,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16522:35:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ParamValidators_$797_memory_ptr","typeString":"struct Nil.ParamValidators memory"}},"functionReturnParameters":809,"id":822,"nodeType":"Return","src":"16515:42:0"}]},"documentation":{"id":804,"nodeType":"StructuredDocumentation","src":"16259:112:0","text":" @dev Returns the current validators.\n @return Struct containing the list of validators."},"id":824,"implemented":true,"kind":"function","modifiers":[],"name":"getValidators","nameLocation":"16385:13:0","nodeType":"FunctionDefinition","parameters":{"id":805,"nodeType":"ParameterList","parameters":[],"src":"16398:2:0"},"returnParameters":{"id":809,"nodeType":"ParameterList","parameters":[{"constant":false,"id":808,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":824,"src":"16418:22:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ParamValidators_$797_memory_ptr","typeString":"struct Nil.ParamValidators"},"typeName":{"id":807,"nodeType":"UserDefinedTypeName","pathNode":{"id":806,"name":"ParamValidators","nameLocations":["16418:15:0"],"nodeType":"IdentifierPath","referencedDeclaration":797,"src":"16418:15:0"},"referencedDeclaration":797,"src":"16418:15:0","typeDescriptions":{"typeIdentifier":"t_struct$_ParamValidators_$797_storage_ptr","typeString":"struct Nil.ParamValidators"}},"visibility":"internal"}],"src":"16417:24:0"},"scope":885,"src":"16376:188:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":844,"nodeType":"Block","src":"16752:114:0","statements":[{"assignments":[832],"declarations":[{"constant":false,"id":832,"mutability":"mutable","name":"data","nameLocation":"16775:4:0","nodeType":"VariableDeclaration","scope":844,"src":"16762:17:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":831,"name":"bytes","nodeType":"ElementaryTypeName","src":"16762:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":836,"initialValue":{"arguments":[{"hexValue":"6761735f7072696365","id":834,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"16797:11:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_060d67fa8f16b13ab32224ff5b4e95c5da55a2545f350085dda83a8fb017858e","typeString":"literal_string \"gas_price\""},"value":"gas_price"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_060d67fa8f16b13ab32224ff5b4e95c5da55a2545f350085dda83a8fb017858e","typeString":"literal_string \"gas_price\""}],"id":833,"name":"getConfigParam","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":785,"src":"16782:14:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (string memory) returns (bytes memory)"}},"id":835,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16782:27:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"16762:47:0"},{"expression":{"arguments":[{"id":839,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":832,"src":"16837:4:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":840,"name":"ParamGasPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":803,"src":"16844:13:0","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ParamGasPrice_$803_storage_ptr_$","typeString":"type(struct Nil.ParamGasPrice storage pointer)"}}],"id":841,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"16843:15:0","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ParamGasPrice_$803_storage_ptr_$","typeString":"type(struct Nil.ParamGasPrice storage pointer)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_struct$_ParamGasPrice_$803_storage_ptr_$","typeString":"type(struct Nil.ParamGasPrice storage pointer)"}],"expression":{"id":837,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"16826:3:0","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":838,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"16830:6:0","memberName":"decode","nodeType":"MemberAccess","src":"16826:10:0","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":842,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16826:33:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ParamGasPrice_$803_memory_ptr","typeString":"struct Nil.ParamGasPrice memory"}},"functionReturnParameters":830,"id":843,"nodeType":"Return","src":"16819:40:0"}]},"documentation":{"id":825,"nodeType":"StructuredDocumentation","src":"16570:110:0","text":" @dev Returns the gas price parameter.\n @return Struct containing the gas price scale."},"id":845,"implemented":true,"kind":"function","modifiers":[],"name":"getParamGasPrice","nameLocation":"16694:16:0","nodeType":"FunctionDefinition","parameters":{"id":826,"nodeType":"ParameterList","parameters":[],"src":"16710:2:0"},"returnParameters":{"id":830,"nodeType":"ParameterList","parameters":[{"constant":false,"id":829,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":845,"src":"16730:20:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ParamGasPrice_$803_memory_ptr","typeString":"struct Nil.ParamGasPrice"},"typeName":{"id":828,"nodeType":"UserDefinedTypeName","pathNode":{"id":827,"name":"ParamGasPrice","nameLocations":["16730:13:0"],"nodeType":"IdentifierPath","referencedDeclaration":803,"src":"16730:13:0"},"referencedDeclaration":803,"src":"16730:13:0","typeDescriptions":{"typeIdentifier":"t_struct$_ParamGasPrice_$803_storage_ptr","typeString":"struct Nil.ParamGasPrice"}},"visibility":"internal"}],"src":"16729:22:0"},"scope":885,"src":"16685:181:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":862,"nodeType":"Block","src":"17076:69:0","statements":[{"expression":{"arguments":[{"id":858,"name":"transaction","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":848,"src":"17120:11:0","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":859,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":851,"src":"17133:4:0","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}],"expression":{"arguments":[{"id":855,"name":"LOG","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99,"src":"17101:3:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":854,"name":"__Precompile__","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1115,"src":"17086:14:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$___Precompile___$1115_$","typeString":"type(contract __Precompile__)"}},"id":856,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17086:19:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$___Precompile___$1115","typeString":"contract __Precompile__"}},"id":857,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17106:13:0","memberName":"precompileLog","nodeType":"MemberAccess","referencedDeclaration":1114,"src":"17086:33:0","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_string_memory_ptr_$_t_array$_t_int256_$dyn_memory_ptr_$returns$_t_bool_$","typeString":"function (string memory,int256[] memory) external returns (bool)"}},"id":860,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17086:52:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":861,"nodeType":"ExpressionStatement","src":"17086:52:0"}]},"documentation":{"id":846,"nodeType":"StructuredDocumentation","src":"16872:131:0","text":" @dev Logs a transaction with data.\n @param transaction Transaction to log.\n @param data Data to log."},"id":863,"implemented":true,"kind":"function","modifiers":[],"name":"log","nameLocation":"17017:3:0","nodeType":"FunctionDefinition","parameters":{"id":852,"nodeType":"ParameterList","parameters":[{"constant":false,"id":848,"mutability":"mutable","name":"transaction","nameLocation":"17035:11:0","nodeType":"VariableDeclaration","scope":863,"src":"17021:25:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":847,"name":"string","nodeType":"ElementaryTypeName","src":"17021:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":851,"mutability":"mutable","name":"data","nameLocation":"17061:4:0","nodeType":"VariableDeclaration","scope":863,"src":"17048:17:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[]"},"typeName":{"baseType":{"id":849,"name":"int","nodeType":"ElementaryTypeName","src":"17048:3:0","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":850,"nodeType":"ArrayTypeName","src":"17048:5:0","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}},"visibility":"internal"}],"src":"17020:46:0"},"returnParameters":{"id":853,"nodeType":"ParameterList","parameters":[],"src":"17076:0:0"},"scope":885,"src":"17008:137:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":883,"nodeType":"Block","src":"17310:96:0","statements":[{"assignments":[873],"declarations":[{"constant":false,"id":873,"mutability":"mutable","name":"data","nameLocation":"17333:4:0","nodeType":"VariableDeclaration","scope":883,"src":"17320:17:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[]"},"typeName":{"baseType":{"id":871,"name":"int","nodeType":"ElementaryTypeName","src":"17320:3:0","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":872,"nodeType":"ArrayTypeName","src":"17320:5:0","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}},"visibility":"internal"}],"id":874,"nodeType":"VariableDeclarationStatement","src":"17320:17:0"},{"expression":{"arguments":[{"id":879,"name":"transaction","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":866,"src":"17381:11:0","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":880,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":873,"src":"17394:4:0","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}],"expression":{"arguments":[{"id":876,"name":"LOG","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99,"src":"17362:3:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":875,"name":"__Precompile__","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1115,"src":"17347:14:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$___Precompile___$1115_$","typeString":"type(contract __Precompile__)"}},"id":877,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17347:19:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$___Precompile___$1115","typeString":"contract __Precompile__"}},"id":878,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17367:13:0","memberName":"precompileLog","nodeType":"MemberAccess","referencedDeclaration":1114,"src":"17347:33:0","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_string_memory_ptr_$_t_array$_t_int256_$dyn_memory_ptr_$returns$_t_bool_$","typeString":"function (string memory,int256[] memory) external returns (bool)"}},"id":881,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17347:52:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":882,"nodeType":"ExpressionStatement","src":"17347:52:0"}]},"documentation":{"id":864,"nodeType":"StructuredDocumentation","src":"17151:105:0","text":" @dev Logs a transaction with empty data.\n @param transaction Transaction to log."},"id":884,"implemented":true,"kind":"function","modifiers":[],"name":"log","nameLocation":"17270:3:0","nodeType":"FunctionDefinition","parameters":{"id":867,"nodeType":"ParameterList","parameters":[{"constant":false,"id":866,"mutability":"mutable","name":"transaction","nameLocation":"17288:11:0","nodeType":"VariableDeclaration","scope":884,"src":"17274:25:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":865,"name":"string","nodeType":"ElementaryTypeName","src":"17274:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"17273:27:0"},"returnParameters":{"id":868,"nodeType":"ParameterList","parameters":[],"src":"17310:0:0"},"scope":885,"src":"17261:145:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":1263,"src":"338:17070:0","usedErrors":[],"usedEvents":[]},{"abstract":false,"baseContracts":[],"canonicalName":"NilBase","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":970,"linearizedBaseContracts":[970],"name":"NilBase","nameLocation":"17534:7:0","nodeType":"ContractDefinition","nodes":[{"body":{"id":905,"nodeType":"Block","src":"17675:188:0","statements":[{"assignments":[889,null],"declarations":[{"constant":false,"id":889,"mutability":"mutable","name":"success","nameLocation":"17691:7:0","nodeType":"VariableDeclaration","scope":905,"src":"17686:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":888,"name":"bool","nodeType":"ElementaryTypeName","src":"17686:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":898,"initialValue":{"arguments":[{"arguments":[{"hexValue":"","id":895,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"17776:2:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"id":894,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17770:5:0","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":893,"name":"bytes","nodeType":"ElementaryTypeName","src":"17770:5:0","typeDescriptions":{}}},"id":896,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17770:9:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"expression":{"id":890,"name":"Nil","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":885,"src":"17731:3:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Nil_$885_$","typeString":"type(library Nil)"}},"id":891,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"17735:23:0","memberName":"IS_RESPONSE_TRANSACTION","nodeType":"MemberAccess","referencedDeclaration":93,"src":"17731:27:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":892,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17759:10:0","memberName":"staticcall","nodeType":"MemberAccess","src":"17731:38:0","typeDescriptions":{"typeIdentifier":"t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) view returns (bool,bytes memory)"}},"id":897,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17731:49:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"17685:95:0"},{"expression":{"arguments":[{"id":900,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":889,"src":"17798:7:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"49535f524553504f4e53455f5452414e53414354494f4e2063616c6c206661696c6564","id":901,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"17807:37:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_f28ad930f17b194652cec51f8a9b80f40b112af98c4436fbccfb5b0402f8ee61","typeString":"literal_string \"IS_RESPONSE_TRANSACTION call failed\""},"value":"IS_RESPONSE_TRANSACTION call failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_f28ad930f17b194652cec51f8a9b80f40b112af98c4436fbccfb5b0402f8ee61","typeString":"literal_string \"IS_RESPONSE_TRANSACTION call failed\""}],"id":899,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"17790:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":902,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17790:55:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":903,"nodeType":"ExpressionStatement","src":"17790:55:0"},{"id":904,"nodeType":"PlaceholderStatement","src":"17855:1:0"}]},"documentation":{"id":886,"nodeType":"StructuredDocumentation","src":"17548:98:0","text":" @dev Modifier to check that the method was invoked from a response transaction."},"id":906,"name":"onlyResponse","nameLocation":"17660:12:0","nodeType":"ModifierDefinition","parameters":{"id":887,"nodeType":"ParameterList","parameters":[],"src":"17672:2:0"},"src":"17651:212:0","virtual":false,"visibility":"internal"},{"body":{"id":916,"nodeType":"Block","src":"17997:122:0","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":910,"name":"isInternalTransaction","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":969,"src":"18015:21:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":911,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18015:23:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"547279696e6720746f2063616c6c20696e7465726e616c2066756e6374696f6e20776974682065787465726e616c207472616e73616374696f6e","id":912,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"18040:60:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_48675da5b0affe20197f41ac44c3e593bf6ff49dc6763b616683b469d0d4eae5","typeString":"literal_string \"Trying to call internal function with external transaction\""},"value":"Trying to call internal function with external transaction"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_48675da5b0affe20197f41ac44c3e593bf6ff49dc6763b616683b469d0d4eae5","typeString":"literal_string \"Trying to call internal function with external transaction\""}],"id":909,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"18007:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":913,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18007:94:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":914,"nodeType":"ExpressionStatement","src":"18007:94:0"},{"id":915,"nodeType":"PlaceholderStatement","src":"18111:1:0"}]},"documentation":{"id":907,"nodeType":"StructuredDocumentation","src":"17869:99:0","text":" @dev Modifier to check that the method was invoked from an internal transaction."},"id":917,"name":"onlyInternal","nameLocation":"17982:12:0","nodeType":"ModifierDefinition","parameters":{"id":908,"nodeType":"ParameterList","parameters":[],"src":"17994:2:0"},"src":"17973:146:0","virtual":false,"visibility":"internal"},{"body":{"id":928,"nodeType":"Block","src":"18253:123:0","statements":[{"expression":{"arguments":[{"id":923,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"18271:24:0","subExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":921,"name":"isInternalTransaction","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":969,"src":"18272:21:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":922,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18272:23:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"547279696e6720746f2063616c6c2065787465726e616c2066756e6374696f6e207769746820696e7465726e616c207472616e73616374696f6e","id":924,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"18297:60:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_d7052f7f766c23fa170f5843ffb7d9d4e807ea8ca8af3af554ce2fa58f6e428b","typeString":"literal_string \"Trying to call external function with internal transaction\""},"value":"Trying to call external function with internal transaction"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_d7052f7f766c23fa170f5843ffb7d9d4e807ea8ca8af3af554ce2fa58f6e428b","typeString":"literal_string \"Trying to call external function with internal transaction\""}],"id":920,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"18263:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":925,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18263:95:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":926,"nodeType":"ExpressionStatement","src":"18263:95:0"},{"id":927,"nodeType":"PlaceholderStatement","src":"18368:1:0"}]},"documentation":{"id":918,"nodeType":"StructuredDocumentation","src":"18125:99:0","text":" @dev Modifier to check that the method was invoked from an external transaction."},"id":929,"name":"onlyExternal","nameLocation":"18238:12:0","nodeType":"ModifierDefinition","parameters":{"id":919,"nodeType":"ParameterList","parameters":[],"src":"18250:2:0"},"src":"18229:147:0","virtual":false,"visibility":"internal"},{"body":{"id":968,"nodeType":"Block","src":"18526:329:0","statements":[{"assignments":[935],"declarations":[{"constant":false,"id":935,"mutability":"mutable","name":"data","nameLocation":"18549:4:0","nodeType":"VariableDeclaration","scope":968,"src":"18536:17:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":934,"name":"bytes","nodeType":"ElementaryTypeName","src":"18536:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":936,"nodeType":"VariableDeclarationStatement","src":"18536:17:0"},{"assignments":[938,940],"declarations":[{"constant":false,"id":938,"mutability":"mutable","name":"success","nameLocation":"18569:7:0","nodeType":"VariableDeclaration","scope":968,"src":"18564:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":937,"name":"bool","nodeType":"ElementaryTypeName","src":"18564:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":940,"mutability":"mutable","name":"returnData","nameLocation":"18591:10:0","nodeType":"VariableDeclaration","scope":968,"src":"18578:23:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":939,"name":"bytes","nodeType":"ElementaryTypeName","src":"18578:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":946,"initialValue":{"arguments":[{"id":944,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":935,"src":"18644:4:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"expression":{"id":941,"name":"Nil","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":885,"src":"18605:3:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Nil_$885_$","typeString":"type(library Nil)"}},"id":942,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"18609:23:0","memberName":"IS_INTERNAL_TRANSACTION","nodeType":"MemberAccess","referencedDeclaration":33,"src":"18605:27:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":943,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18633:10:0","memberName":"staticcall","nodeType":"MemberAccess","src":"18605:38:0","typeDescriptions":{"typeIdentifier":"t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) view returns (bool,bytes memory)"}},"id":945,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18605:44:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"18563:86:0"},{"expression":{"arguments":[{"id":948,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":938,"src":"18667:7:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"507265636f6d70696c656420636f6e74726163742063616c6c206661696c6564","id":949,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"18676:34:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_f42cbdd5ebaf1558fa890262cd040b92d82e3a725cf1bba522f51c0b6f01d380","typeString":"literal_string \"Precompiled contract call failed\""},"value":"Precompiled contract call failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_f42cbdd5ebaf1558fa890262cd040b92d82e3a725cf1bba522f51c0b6f01d380","typeString":"literal_string \"Precompiled contract call failed\""}],"id":947,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"18659:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":950,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18659:52:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":951,"nodeType":"ExpressionStatement","src":"18659:52:0"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":956,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":953,"name":"returnData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":940,"src":"18729:10:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":954,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18740:6:0","memberName":"length","nodeType":"MemberAccess","src":"18729:17:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":955,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18749:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"18729:21:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"2749535f494e5445524e414c5f5452414e53414354494f4e272072657475726e7320696e76616c69642064617461","id":957,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"18752:48:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_3fce2a93973fec3de5bb99ef754f8bc48c2f9fa29011a27def1db051990a9fcc","typeString":"literal_string \"'IS_INTERNAL_TRANSACTION' returns invalid data\""},"value":"'IS_INTERNAL_TRANSACTION' returns invalid data"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3fce2a93973fec3de5bb99ef754f8bc48c2f9fa29011a27def1db051990a9fcc","typeString":"literal_string \"'IS_INTERNAL_TRANSACTION' returns invalid data\""}],"id":952,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"18721:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":958,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18721:80:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":959,"nodeType":"ExpressionStatement","src":"18721:80:0"},{"expression":{"arguments":[{"id":962,"name":"returnData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":940,"src":"18829:10:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":964,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18842:4:0","typeDescriptions":{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"},"typeName":{"id":963,"name":"bool","nodeType":"ElementaryTypeName","src":"18842:4:0","typeDescriptions":{}}}],"id":965,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"18841:6:0","typeDescriptions":{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"}],"expression":{"id":960,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"18818:3:0","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":961,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"18822:6:0","memberName":"decode","nodeType":"MemberAccess","src":"18818:10:0","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":966,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18818:30:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":933,"id":967,"nodeType":"Return","src":"18811:37:0"}]},"id":969,"implemented":true,"kind":"function","modifiers":[],"name":"isInternalTransaction","nameLocation":"18473:21:0","nodeType":"FunctionDefinition","parameters":{"id":930,"nodeType":"ParameterList","parameters":[],"src":"18494:2:0"},"returnParameters":{"id":933,"nodeType":"ParameterList","parameters":[{"constant":false,"id":932,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":969,"src":"18520:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":931,"name":"bool","nodeType":"ElementaryTypeName","src":"18520:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"18519:6:0"},"scope":970,"src":"18464:391:0","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":1263,"src":"17525:1332:0","usedErrors":[],"usedEvents":[]},{"abstract":true,"baseContracts":[{"baseName":{"id":971,"name":"NilBase","nameLocations":["18894:7:0"],"nodeType":"IdentifierPath","referencedDeclaration":970,"src":"18894:7:0"},"id":972,"nodeType":"InheritanceSpecifier","src":"18894:7:0"}],"canonicalName":"NilBounceable","contractDependencies":[],"contractKind":"contract","fullyImplemented":false,"id":978,"linearizedBaseContracts":[978,970],"name":"NilBounceable","nameLocation":"18877:13:0","nodeType":"ContractDefinition","nodes":[{"functionSelector":"e2f5df8c","id":977,"implemented":false,"kind":"function","modifiers":[],"name":"bounce","nameLocation":"18917:6:0","nodeType":"FunctionDefinition","parameters":{"id":975,"nodeType":"ParameterList","parameters":[{"constant":false,"id":974,"mutability":"mutable","name":"err","nameLocation":"18940:3:0","nodeType":"VariableDeclaration","scope":977,"src":"18924:19:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":973,"name":"string","nodeType":"ElementaryTypeName","src":"18924:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"18923:21:0"},"returnParameters":{"id":976,"nodeType":"ParameterList","parameters":[],"src":"18969:0:0"},"scope":978,"src":"18908:62:0","stateMutability":"payable","virtual":true,"visibility":"external"}],"scope":1263,"src":"18859:113:0","usedErrors":[],"usedEvents":[]},{"abstract":false,"baseContracts":[],"canonicalName":"__Precompile__","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":1115,"linearizedBaseContracts":[1115],"name":"__Precompile__","nameLocation":"19041:14:0","nodeType":"ContractDefinition","nodes":[{"body":{"id":987,"nodeType":"Block","src":"19207:2:0","statements":[]},"functionSelector":"59777fc2","id":988,"implemented":true,"kind":"function","modifiers":[],"name":"precompileManageToken","nameLocation":"19137:21:0","nodeType":"FunctionDefinition","parameters":{"id":983,"nodeType":"ParameterList","parameters":[{"constant":false,"id":980,"mutability":"mutable","name":"amount","nameLocation":"19167:6:0","nodeType":"VariableDeclaration","scope":988,"src":"19159:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":979,"name":"uint256","nodeType":"ElementaryTypeName","src":"19159:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":982,"mutability":"mutable","name":"mint","nameLocation":"19180:4:0","nodeType":"VariableDeclaration","scope":988,"src":"19175:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":981,"name":"bool","nodeType":"ElementaryTypeName","src":"19175:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"19158:27:0"},"returnParameters":{"id":986,"nodeType":"ParameterList","parameters":[{"constant":false,"id":985,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":988,"src":"19201:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":984,"name":"bool","nodeType":"ElementaryTypeName","src":"19201:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"19200:6:0"},"scope":1115,"src":"19128:81:0","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":998,"nodeType":"Block","src":"19304:2:0","statements":[]},"functionSelector":"9614ddaf","id":999,"implemented":true,"kind":"function","modifiers":[],"name":"precompileGetTokenBalance","nameLocation":"19223:25:0","nodeType":"FunctionDefinition","parameters":{"id":994,"nodeType":"ParameterList","parameters":[{"constant":false,"id":991,"mutability":"mutable","name":"id","nameLocation":"19257:2:0","nodeType":"VariableDeclaration","scope":999,"src":"19249:10:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"},"typeName":{"id":990,"nodeType":"UserDefinedTypeName","pathNode":{"id":989,"name":"TokenId","nameLocations":["19249:7:0"],"nodeType":"IdentifierPath","referencedDeclaration":3,"src":"19249:7:0"},"referencedDeclaration":3,"src":"19249:7:0","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"visibility":"internal"},{"constant":false,"id":993,"mutability":"mutable","name":"addr","nameLocation":"19269:4:0","nodeType":"VariableDeclaration","scope":999,"src":"19261:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":992,"name":"address","nodeType":"ElementaryTypeName","src":"19261:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19248:26:0"},"returnParameters":{"id":997,"nodeType":"ParameterList","parameters":[{"constant":false,"id":996,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":999,"src":"19295:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":995,"name":"uint256","nodeType":"ElementaryTypeName","src":"19295:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19294:9:0"},"scope":1115,"src":"19214:92:0","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":1022,"nodeType":"Block","src":"19449:2:0","statements":[]},"functionSelector":"f6975653","id":1023,"implemented":true,"kind":"function","modifiers":[],"name":"precompileAsyncCall","nameLocation":"19320:19:0","nodeType":"FunctionDefinition","parameters":{"id":1018,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1001,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1023,"src":"19340:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1000,"name":"bool","nodeType":"ElementaryTypeName","src":"19340:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1003,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1023,"src":"19346:5:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":1002,"name":"uint8","nodeType":"ElementaryTypeName","src":"19346:5:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":1005,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1023,"src":"19353:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1004,"name":"address","nodeType":"ElementaryTypeName","src":"19353:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1007,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1023,"src":"19362:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1006,"name":"address","nodeType":"ElementaryTypeName","src":"19362:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1009,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1023,"src":"19371:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1008,"name":"address","nodeType":"ElementaryTypeName","src":"19371:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1011,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1023,"src":"19380:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1010,"name":"uint","nodeType":"ElementaryTypeName","src":"19380:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1015,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1023,"src":"19386:18:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Token_$120_memory_ptr_$dyn_memory_ptr","typeString":"struct Nil.Token[]"},"typeName":{"baseType":{"id":1013,"nodeType":"UserDefinedTypeName","pathNode":{"id":1012,"name":"Nil.Token","nameLocations":["19386:3:0","19390:5:0"],"nodeType":"IdentifierPath","referencedDeclaration":120,"src":"19386:9:0"},"referencedDeclaration":120,"src":"19386:9:0","typeDescriptions":{"typeIdentifier":"t_struct$_Token_$120_storage_ptr","typeString":"struct Nil.Token"}},"id":1014,"nodeType":"ArrayTypeName","src":"19386:11:0","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Token_$120_storage_$dyn_storage_ptr","typeString":"struct Nil.Token[]"}},"visibility":"internal"},{"constant":false,"id":1017,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1023,"src":"19406:12:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1016,"name":"bytes","nodeType":"ElementaryTypeName","src":"19406:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"19339:80:0"},"returnParameters":{"id":1021,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1020,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1023,"src":"19443:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1019,"name":"bool","nodeType":"ElementaryTypeName","src":"19443:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"19442:6:0"},"scope":1115,"src":"19311:140:0","stateMutability":"payable","virtual":false,"visibility":"public"},{"body":{"id":1036,"nodeType":"Block","src":"19557:2:0","statements":[]},"functionSelector":"03cfdb76","id":1037,"implemented":true,"kind":"function","modifiers":[],"name":"precompileAwaitCall","nameLocation":"19465:19:0","nodeType":"FunctionDefinition","parameters":{"id":1030,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1025,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1037,"src":"19485:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1024,"name":"address","nodeType":"ElementaryTypeName","src":"19485:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1027,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1037,"src":"19494:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1026,"name":"uint","nodeType":"ElementaryTypeName","src":"19494:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1029,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1037,"src":"19500:12:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1028,"name":"bytes","nodeType":"ElementaryTypeName","src":"19500:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"19484:29:0"},"returnParameters":{"id":1035,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1032,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1037,"src":"19537:12:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1031,"name":"bytes","nodeType":"ElementaryTypeName","src":"19537:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":1034,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1037,"src":"19551:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1033,"name":"bool","nodeType":"ElementaryTypeName","src":"19551:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"19536:20:0"},"scope":1115,"src":"19456:103:0","stateMutability":"payable","virtual":false,"visibility":"public"},{"body":{"id":1054,"nodeType":"Block","src":"19687:2:0","statements":[]},"functionSelector":"40225e94","id":1055,"implemented":true,"kind":"function","modifiers":[],"name":"precompileSendRequest","nameLocation":"19573:21:0","nodeType":"FunctionDefinition","parameters":{"id":1050,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1039,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1055,"src":"19595:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1038,"name":"address","nodeType":"ElementaryTypeName","src":"19595:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1043,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1055,"src":"19604:18:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Token_$120_memory_ptr_$dyn_memory_ptr","typeString":"struct Nil.Token[]"},"typeName":{"baseType":{"id":1041,"nodeType":"UserDefinedTypeName","pathNode":{"id":1040,"name":"Nil.Token","nameLocations":["19604:3:0","19608:5:0"],"nodeType":"IdentifierPath","referencedDeclaration":120,"src":"19604:9:0"},"referencedDeclaration":120,"src":"19604:9:0","typeDescriptions":{"typeIdentifier":"t_struct$_Token_$120_storage_ptr","typeString":"struct Nil.Token"}},"id":1042,"nodeType":"ArrayTypeName","src":"19604:11:0","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Token_$120_storage_$dyn_storage_ptr","typeString":"struct Nil.Token[]"}},"visibility":"internal"},{"constant":false,"id":1045,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1055,"src":"19624:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1044,"name":"uint","nodeType":"ElementaryTypeName","src":"19624:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1047,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1055,"src":"19630:12:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1046,"name":"bytes","nodeType":"ElementaryTypeName","src":"19630:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":1049,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1055,"src":"19644:12:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1048,"name":"bytes","nodeType":"ElementaryTypeName","src":"19644:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"19594:63:0"},"returnParameters":{"id":1053,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1052,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1055,"src":"19681:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1051,"name":"bool","nodeType":"ElementaryTypeName","src":"19681:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"19680:6:0"},"scope":1115,"src":"19564:125:0","stateMutability":"payable","virtual":false,"visibility":"public"},{"body":{"id":1066,"nodeType":"Block","src":"19774:2:0","statements":[]},"functionSelector":"d6ff6d2e","id":1067,"implemented":true,"kind":"function","modifiers":[],"name":"precompileSendTokens","nameLocation":"19703:20:0","nodeType":"FunctionDefinition","parameters":{"id":1062,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1057,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1067,"src":"19724:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1056,"name":"address","nodeType":"ElementaryTypeName","src":"19724:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1061,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1067,"src":"19733:18:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Token_$120_memory_ptr_$dyn_memory_ptr","typeString":"struct Nil.Token[]"},"typeName":{"baseType":{"id":1059,"nodeType":"UserDefinedTypeName","pathNode":{"id":1058,"name":"Nil.Token","nameLocations":["19733:3:0","19737:5:0"],"nodeType":"IdentifierPath","referencedDeclaration":120,"src":"19733:9:0"},"referencedDeclaration":120,"src":"19733:9:0","typeDescriptions":{"typeIdentifier":"t_struct$_Token_$120_storage_ptr","typeString":"struct Nil.Token"}},"id":1060,"nodeType":"ArrayTypeName","src":"19733:11:0","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Token_$120_storage_$dyn_storage_ptr","typeString":"struct Nil.Token[]"}},"visibility":"internal"}],"src":"19723:29:0"},"returnParameters":{"id":1065,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1064,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1067,"src":"19768:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1063,"name":"bool","nodeType":"ElementaryTypeName","src":"19768:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"19767:6:0"},"scope":1115,"src":"19694:82:0","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":1074,"nodeType":"Block","src":"19858:2:0","statements":[]},"functionSelector":"802db0e0","id":1075,"implemented":true,"kind":"function","modifiers":[],"name":"precompileGetTransactionTokens","nameLocation":"19790:30:0","nodeType":"FunctionDefinition","parameters":{"id":1068,"nodeType":"ParameterList","parameters":[],"src":"19820:2:0"},"returnParameters":{"id":1073,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1072,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1075,"src":"19838:18:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Token_$120_memory_ptr_$dyn_memory_ptr","typeString":"struct Nil.Token[]"},"typeName":{"baseType":{"id":1070,"nodeType":"UserDefinedTypeName","pathNode":{"id":1069,"name":"Nil.Token","nameLocations":["19838:3:0","19842:5:0"],"nodeType":"IdentifierPath","referencedDeclaration":120,"src":"19838:9:0"},"referencedDeclaration":120,"src":"19838:9:0","typeDescriptions":{"typeIdentifier":"t_struct$_Token_$120_storage_ptr","typeString":"struct Nil.Token"}},"id":1071,"nodeType":"ArrayTypeName","src":"19838:11:0","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Token_$120_storage_$dyn_storage_ptr","typeString":"struct Nil.Token[]"}},"visibility":"internal"}],"src":"19837:20:0"},"scope":1115,"src":"19781:79:0","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":1082,"nodeType":"Block","src":"19929:2:0","statements":[]},"functionSelector":"a6c085bf","id":1083,"implemented":true,"kind":"function","modifiers":[],"name":"precompileGetGasPrice","nameLocation":"19874:21:0","nodeType":"FunctionDefinition","parameters":{"id":1078,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1077,"mutability":"mutable","name":"id","nameLocation":"19901:2:0","nodeType":"VariableDeclaration","scope":1083,"src":"19896:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1076,"name":"uint","nodeType":"ElementaryTypeName","src":"19896:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19895:9:0"},"returnParameters":{"id":1081,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1080,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1083,"src":"19920:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1079,"name":"uint256","nodeType":"ElementaryTypeName","src":"19920:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19919:9:0"},"scope":1115,"src":"19865:66:0","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":1090,"nodeType":"Block","src":"20014:2:0","statements":[]},"functionSelector":"78312c6b","id":1091,"implemented":true,"kind":"function","modifiers":[],"name":"precompileGetPoseidonHash","nameLocation":"19945:25:0","nodeType":"FunctionDefinition","parameters":{"id":1086,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1085,"mutability":"mutable","name":"data","nameLocation":"19984:4:0","nodeType":"VariableDeclaration","scope":1091,"src":"19971:17:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1084,"name":"bytes","nodeType":"ElementaryTypeName","src":"19971:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"19970:19:0"},"returnParameters":{"id":1089,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1088,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1091,"src":"20005:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1087,"name":"uint256","nodeType":"ElementaryTypeName","src":"20005:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20004:9:0"},"scope":1115,"src":"19936:80:0","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":1102,"nodeType":"Block","src":"20136:2:0","statements":[]},"functionSelector":"9ef8d0fa","id":1103,"implemented":true,"kind":"function","modifiers":[],"name":"precompileConfigParam","nameLocation":"20030:21:0","nodeType":"FunctionDefinition","parameters":{"id":1098,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1093,"mutability":"mutable","name":"isSet","nameLocation":"20057:5:0","nodeType":"VariableDeclaration","scope":1103,"src":"20052:10:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1092,"name":"bool","nodeType":"ElementaryTypeName","src":"20052:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1095,"mutability":"mutable","name":"name","nameLocation":"20080:4:0","nodeType":"VariableDeclaration","scope":1103,"src":"20064:20:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":1094,"name":"string","nodeType":"ElementaryTypeName","src":"20064:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":1097,"mutability":"mutable","name":"data","nameLocation":"20101:4:0","nodeType":"VariableDeclaration","scope":1103,"src":"20086:19:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":1096,"name":"bytes","nodeType":"ElementaryTypeName","src":"20086:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"20051:55:0"},"returnParameters":{"id":1101,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1100,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1103,"src":"20122:12:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1099,"name":"bytes","nodeType":"ElementaryTypeName","src":"20122:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"20121:14:0"},"scope":1115,"src":"20021:117:0","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":1113,"nodeType":"Block","src":"20233:2:0","statements":[]},"functionSelector":"8c4b0036","id":1114,"implemented":true,"kind":"function","modifiers":[],"name":"precompileLog","nameLocation":"20152:13:0","nodeType":"FunctionDefinition","parameters":{"id":1109,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1105,"mutability":"mutable","name":"transaction","nameLocation":"20180:11:0","nodeType":"VariableDeclaration","scope":1114,"src":"20166:25:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":1104,"name":"string","nodeType":"ElementaryTypeName","src":"20166:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":1108,"mutability":"mutable","name":"data","nameLocation":"20206:4:0","nodeType":"VariableDeclaration","scope":1114,"src":"20193:17:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[]"},"typeName":{"baseType":{"id":1106,"name":"int","nodeType":"ElementaryTypeName","src":"20193:3:0","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":1107,"nodeType":"ArrayTypeName","src":"20193:5:0","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}},"visibility":"internal"}],"src":"20165:46:0"},"returnParameters":{"id":1112,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1111,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1114,"src":"20227:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1110,"name":"bool","nodeType":"ElementaryTypeName","src":"20227:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"20226:6:0"},"scope":1115,"src":"20143:92:0","stateMutability":"nonpayable","virtual":false,"visibility":"public"}],"scope":1263,"src":"19032:1205:0","usedErrors":[],"usedEvents":[]},{"abstract":false,"baseContracts":[],"canonicalName":"NilConfigAbi","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":1130,"linearizedBaseContracts":[1130],"name":"NilConfigAbi","nameLocation":"20248:12:0","nodeType":"ContractDefinition","nodes":[{"body":{"id":1121,"nodeType":"Block","src":"20327:2:0","statements":[]},"functionSelector":"978384d1","id":1122,"implemented":true,"kind":"function","modifiers":[],"name":"curr_validators","nameLocation":"20276:15:0","nodeType":"FunctionDefinition","parameters":{"id":1119,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1118,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1122,"src":"20292:26:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ParamValidators_$797_memory_ptr","typeString":"struct Nil.ParamValidators"},"typeName":{"id":1117,"nodeType":"UserDefinedTypeName","pathNode":{"id":1116,"name":"Nil.ParamValidators","nameLocations":["20292:3:0","20296:15:0"],"nodeType":"IdentifierPath","referencedDeclaration":797,"src":"20292:19:0"},"referencedDeclaration":797,"src":"20292:19:0","typeDescriptions":{"typeIdentifier":"t_struct$_ParamValidators_$797_storage_ptr","typeString":"struct Nil.ParamValidators"}},"visibility":"internal"}],"src":"20291:28:0"},"returnParameters":{"id":1120,"nodeType":"ParameterList","parameters":[],"src":"20327:0:0"},"scope":1130,"src":"20267:62:0","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":1128,"nodeType":"Block","src":"20386:2:0","statements":[]},"functionSelector":"e52108f9","id":1129,"implemented":true,"kind":"function","modifiers":[],"name":"gas_price","nameLocation":"20343:9:0","nodeType":"FunctionDefinition","parameters":{"id":1126,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1125,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1129,"src":"20353:24:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ParamGasPrice_$803_memory_ptr","typeString":"struct Nil.ParamGasPrice"},"typeName":{"id":1124,"nodeType":"UserDefinedTypeName","pathNode":{"id":1123,"name":"Nil.ParamGasPrice","nameLocations":["20353:3:0","20357:13:0"],"nodeType":"IdentifierPath","referencedDeclaration":803,"src":"20353:17:0"},"referencedDeclaration":803,"src":"20353:17:0","typeDescriptions":{"typeIdentifier":"t_struct$_ParamGasPrice_$803_storage_ptr","typeString":"struct Nil.ParamGasPrice"}},"visibility":"internal"}],"src":"20352:26:0"},"returnParameters":{"id":1127,"nodeType":"ParameterList","parameters":[],"src":"20386:0:0"},"scope":1130,"src":"20334:54:0","stateMutability":"nonpayable","virtual":false,"visibility":"public"}],"scope":1263,"src":"20239:151:0","usedErrors":[],"usedEvents":[]},{"body":{"id":1151,"nodeType":"Block","src":"20456:54:0","statements":[{"expression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1149,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":1143,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1133,"src":"20484:1:0","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}],"expression":{"id":1141,"name":"TokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3,"src":"20469:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_TokenId_$3_$","typeString":"type(TokenId)"}},"id":1142,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"20477:6:0","memberName":"unwrap","nodeType":"MemberAccess","src":"20469:14:0","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_TokenId_$3_$returns$_t_address_$","typeString":"function (TokenId) pure returns (address)"}},"id":1144,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20469:17:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":1147,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1136,"src":"20505:1:0","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}],"expression":{"id":1145,"name":"TokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3,"src":"20490:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_TokenId_$3_$","typeString":"type(TokenId)"}},"id":1146,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"20498:6:0","memberName":"unwrap","nodeType":"MemberAccess","src":"20490:14:0","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_TokenId_$3_$returns$_t_address_$","typeString":"function (TokenId) pure returns (address)"}},"id":1148,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20490:17:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"20469:38:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":1140,"id":1150,"nodeType":"Return","src":"20462:45:0"}]},"id":1152,"implemented":true,"kind":"freeFunction","modifiers":[],"name":"tokenIdEqual","nameLocation":"20401:12:0","nodeType":"FunctionDefinition","parameters":{"id":1137,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1133,"mutability":"mutable","name":"a","nameLocation":"20422:1:0","nodeType":"VariableDeclaration","scope":1152,"src":"20414:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"},"typeName":{"id":1132,"nodeType":"UserDefinedTypeName","pathNode":{"id":1131,"name":"TokenId","nameLocations":["20414:7:0"],"nodeType":"IdentifierPath","referencedDeclaration":3,"src":"20414:7:0"},"referencedDeclaration":3,"src":"20414:7:0","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"visibility":"internal"},{"constant":false,"id":1136,"mutability":"mutable","name":"b","nameLocation":"20433:1:0","nodeType":"VariableDeclaration","scope":1152,"src":"20425:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"},"typeName":{"id":1135,"nodeType":"UserDefinedTypeName","pathNode":{"id":1134,"name":"TokenId","nameLocations":["20425:7:0"],"nodeType":"IdentifierPath","referencedDeclaration":3,"src":"20425:7:0"},"referencedDeclaration":3,"src":"20425:7:0","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"visibility":"internal"}],"src":"20413:22:0"},"returnParameters":{"id":1140,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1139,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1152,"src":"20450:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1138,"name":"bool","nodeType":"ElementaryTypeName","src":"20450:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"20449:6:0"},"scope":1263,"src":"20392:118:0","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1173,"nodeType":"Block","src":"20579:54:0","statements":[{"expression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1171,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":1165,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1155,"src":"20607:1:0","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}],"expression":{"id":1163,"name":"TokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3,"src":"20592:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_TokenId_$3_$","typeString":"type(TokenId)"}},"id":1164,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"20600:6:0","memberName":"unwrap","nodeType":"MemberAccess","src":"20592:14:0","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_TokenId_$3_$returns$_t_address_$","typeString":"function (TokenId) pure returns (address)"}},"id":1166,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20592:17:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":1169,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1158,"src":"20628:1:0","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}],"expression":{"id":1167,"name":"TokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3,"src":"20613:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_TokenId_$3_$","typeString":"type(TokenId)"}},"id":1168,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"20621:6:0","memberName":"unwrap","nodeType":"MemberAccess","src":"20613:14:0","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_TokenId_$3_$returns$_t_address_$","typeString":"function (TokenId) pure returns (address)"}},"id":1170,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20613:17:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"20592:38:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":1162,"id":1172,"nodeType":"Return","src":"20585:45:0"}]},"id":1174,"implemented":true,"kind":"freeFunction","modifiers":[],"name":"tokenIdNotEqual","nameLocation":"20521:15:0","nodeType":"FunctionDefinition","parameters":{"id":1159,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1155,"mutability":"mutable","name":"a","nameLocation":"20545:1:0","nodeType":"VariableDeclaration","scope":1174,"src":"20537:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"},"typeName":{"id":1154,"nodeType":"UserDefinedTypeName","pathNode":{"id":1153,"name":"TokenId","nameLocations":["20537:7:0"],"nodeType":"IdentifierPath","referencedDeclaration":3,"src":"20537:7:0"},"referencedDeclaration":3,"src":"20537:7:0","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"visibility":"internal"},{"constant":false,"id":1158,"mutability":"mutable","name":"b","nameLocation":"20556:1:0","nodeType":"VariableDeclaration","scope":1174,"src":"20548:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"},"typeName":{"id":1157,"nodeType":"UserDefinedTypeName","pathNode":{"id":1156,"name":"TokenId","nameLocations":["20548:7:0"],"nodeType":"IdentifierPath","referencedDeclaration":3,"src":"20548:7:0"},"referencedDeclaration":3,"src":"20548:7:0","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"visibility":"internal"}],"src":"20536:22:0"},"returnParameters":{"id":1162,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1161,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1174,"src":"20573:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1160,"name":"bool","nodeType":"ElementaryTypeName","src":"20573:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"20572:6:0"},"scope":1263,"src":"20512:121:0","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1195,"nodeType":"Block","src":"20698:53:0","statements":[{"expression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1193,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":1187,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1177,"src":"20726:1:0","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}],"expression":{"id":1185,"name":"TokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3,"src":"20711:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_TokenId_$3_$","typeString":"type(TokenId)"}},"id":1186,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"20719:6:0","memberName":"unwrap","nodeType":"MemberAccess","src":"20711:14:0","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_TokenId_$3_$returns$_t_address_$","typeString":"function (TokenId) pure returns (address)"}},"id":1188,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20711:17:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[{"id":1191,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1180,"src":"20746:1:0","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}],"expression":{"id":1189,"name":"TokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3,"src":"20731:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_TokenId_$3_$","typeString":"type(TokenId)"}},"id":1190,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"20739:6:0","memberName":"unwrap","nodeType":"MemberAccess","src":"20731:14:0","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_TokenId_$3_$returns$_t_address_$","typeString":"function (TokenId) pure returns (address)"}},"id":1192,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20731:17:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"20711:37:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":1184,"id":1194,"nodeType":"Return","src":"20704:44:0"}]},"id":1196,"implemented":true,"kind":"freeFunction","modifiers":[],"name":"tokenIdLess","nameLocation":"20644:11:0","nodeType":"FunctionDefinition","parameters":{"id":1181,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1177,"mutability":"mutable","name":"a","nameLocation":"20664:1:0","nodeType":"VariableDeclaration","scope":1196,"src":"20656:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"},"typeName":{"id":1176,"nodeType":"UserDefinedTypeName","pathNode":{"id":1175,"name":"TokenId","nameLocations":["20656:7:0"],"nodeType":"IdentifierPath","referencedDeclaration":3,"src":"20656:7:0"},"referencedDeclaration":3,"src":"20656:7:0","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"visibility":"internal"},{"constant":false,"id":1180,"mutability":"mutable","name":"b","nameLocation":"20675:1:0","nodeType":"VariableDeclaration","scope":1196,"src":"20667:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"},"typeName":{"id":1179,"nodeType":"UserDefinedTypeName","pathNode":{"id":1178,"name":"TokenId","nameLocations":["20667:7:0"],"nodeType":"IdentifierPath","referencedDeclaration":3,"src":"20667:7:0"},"referencedDeclaration":3,"src":"20667:7:0","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"visibility":"internal"}],"src":"20655:22:0"},"returnParameters":{"id":1184,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1183,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1196,"src":"20692:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1182,"name":"bool","nodeType":"ElementaryTypeName","src":"20692:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"20691:6:0"},"scope":1263,"src":"20635:116:0","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1217,"nodeType":"Block","src":"20819:53:0","statements":[{"expression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1215,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":1209,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1199,"src":"20847:1:0","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}],"expression":{"id":1207,"name":"TokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3,"src":"20832:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_TokenId_$3_$","typeString":"type(TokenId)"}},"id":1208,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"20840:6:0","memberName":"unwrap","nodeType":"MemberAccess","src":"20832:14:0","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_TokenId_$3_$returns$_t_address_$","typeString":"function (TokenId) pure returns (address)"}},"id":1210,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20832:17:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"arguments":[{"id":1213,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1202,"src":"20867:1:0","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}],"expression":{"id":1211,"name":"TokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3,"src":"20852:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_TokenId_$3_$","typeString":"type(TokenId)"}},"id":1212,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"20860:6:0","memberName":"unwrap","nodeType":"MemberAccess","src":"20852:14:0","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_TokenId_$3_$returns$_t_address_$","typeString":"function (TokenId) pure returns (address)"}},"id":1214,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20852:17:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"20832:37:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":1206,"id":1216,"nodeType":"Return","src":"20825:44:0"}]},"id":1218,"implemented":true,"kind":"freeFunction","modifiers":[],"name":"tokenIdGreater","nameLocation":"20762:14:0","nodeType":"FunctionDefinition","parameters":{"id":1203,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1199,"mutability":"mutable","name":"a","nameLocation":"20785:1:0","nodeType":"VariableDeclaration","scope":1218,"src":"20777:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"},"typeName":{"id":1198,"nodeType":"UserDefinedTypeName","pathNode":{"id":1197,"name":"TokenId","nameLocations":["20777:7:0"],"nodeType":"IdentifierPath","referencedDeclaration":3,"src":"20777:7:0"},"referencedDeclaration":3,"src":"20777:7:0","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"visibility":"internal"},{"constant":false,"id":1202,"mutability":"mutable","name":"b","nameLocation":"20796:1:0","nodeType":"VariableDeclaration","scope":1218,"src":"20788:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"},"typeName":{"id":1201,"nodeType":"UserDefinedTypeName","pathNode":{"id":1200,"name":"TokenId","nameLocations":["20788:7:0"],"nodeType":"IdentifierPath","referencedDeclaration":3,"src":"20788:7:0"},"referencedDeclaration":3,"src":"20788:7:0","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"visibility":"internal"}],"src":"20776:22:0"},"returnParameters":{"id":1206,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1205,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1218,"src":"20813:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1204,"name":"bool","nodeType":"ElementaryTypeName","src":"20813:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"20812:6:0"},"scope":1263,"src":"20753:119:0","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1239,"nodeType":"Block","src":"20944:54:0","statements":[{"expression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1237,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":1231,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1221,"src":"20972:1:0","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}],"expression":{"id":1229,"name":"TokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3,"src":"20957:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_TokenId_$3_$","typeString":"type(TokenId)"}},"id":1230,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"20965:6:0","memberName":"unwrap","nodeType":"MemberAccess","src":"20957:14:0","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_TokenId_$3_$returns$_t_address_$","typeString":"function (TokenId) pure returns (address)"}},"id":1232,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20957:17:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"arguments":[{"id":1235,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1224,"src":"20993:1:0","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}],"expression":{"id":1233,"name":"TokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3,"src":"20978:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_TokenId_$3_$","typeString":"type(TokenId)"}},"id":1234,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"20986:6:0","memberName":"unwrap","nodeType":"MemberAccess","src":"20978:14:0","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_TokenId_$3_$returns$_t_address_$","typeString":"function (TokenId) pure returns (address)"}},"id":1236,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20978:17:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"20957:38:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":1228,"id":1238,"nodeType":"Return","src":"20950:45:0"}]},"id":1240,"implemented":true,"kind":"freeFunction","modifiers":[],"name":"tokenIdLessOrEqual","nameLocation":"20883:18:0","nodeType":"FunctionDefinition","parameters":{"id":1225,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1221,"mutability":"mutable","name":"a","nameLocation":"20910:1:0","nodeType":"VariableDeclaration","scope":1240,"src":"20902:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"},"typeName":{"id":1220,"nodeType":"UserDefinedTypeName","pathNode":{"id":1219,"name":"TokenId","nameLocations":["20902:7:0"],"nodeType":"IdentifierPath","referencedDeclaration":3,"src":"20902:7:0"},"referencedDeclaration":3,"src":"20902:7:0","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"visibility":"internal"},{"constant":false,"id":1224,"mutability":"mutable","name":"b","nameLocation":"20921:1:0","nodeType":"VariableDeclaration","scope":1240,"src":"20913:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"},"typeName":{"id":1223,"nodeType":"UserDefinedTypeName","pathNode":{"id":1222,"name":"TokenId","nameLocations":["20913:7:0"],"nodeType":"IdentifierPath","referencedDeclaration":3,"src":"20913:7:0"},"referencedDeclaration":3,"src":"20913:7:0","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"visibility":"internal"}],"src":"20901:22:0"},"returnParameters":{"id":1228,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1227,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1240,"src":"20938:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1226,"name":"bool","nodeType":"ElementaryTypeName","src":"20938:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"20937:6:0"},"scope":1263,"src":"20874:124:0","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1261,"nodeType":"Block","src":"21073:54:0","statements":[{"expression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1259,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":1253,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1243,"src":"21101:1:0","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}],"expression":{"id":1251,"name":"TokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3,"src":"21086:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_TokenId_$3_$","typeString":"type(TokenId)"}},"id":1252,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"21094:6:0","memberName":"unwrap","nodeType":"MemberAccess","src":"21086:14:0","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_TokenId_$3_$returns$_t_address_$","typeString":"function (TokenId) pure returns (address)"}},"id":1254,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21086:17:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"arguments":[{"id":1257,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1246,"src":"21122:1:0","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}],"expression":{"id":1255,"name":"TokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3,"src":"21107:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_TokenId_$3_$","typeString":"type(TokenId)"}},"id":1256,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"21115:6:0","memberName":"unwrap","nodeType":"MemberAccess","src":"21107:14:0","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_TokenId_$3_$returns$_t_address_$","typeString":"function (TokenId) pure returns (address)"}},"id":1258,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21107:17:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"21086:38:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":1250,"id":1260,"nodeType":"Return","src":"21079:45:0"}]},"id":1262,"implemented":true,"kind":"freeFunction","modifiers":[],"name":"tokenIdGreaterOrEqual","nameLocation":"21009:21:0","nodeType":"FunctionDefinition","parameters":{"id":1247,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1243,"mutability":"mutable","name":"a","nameLocation":"21039:1:0","nodeType":"VariableDeclaration","scope":1262,"src":"21031:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"},"typeName":{"id":1242,"nodeType":"UserDefinedTypeName","pathNode":{"id":1241,"name":"TokenId","nameLocations":["21031:7:0"],"nodeType":"IdentifierPath","referencedDeclaration":3,"src":"21031:7:0"},"referencedDeclaration":3,"src":"21031:7:0","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"visibility":"internal"},{"constant":false,"id":1246,"mutability":"mutable","name":"b","nameLocation":"21050:1:0","nodeType":"VariableDeclaration","scope":1262,"src":"21042:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"},"typeName":{"id":1245,"nodeType":"UserDefinedTypeName","pathNode":{"id":1244,"name":"TokenId","nameLocations":["21042:7:0"],"nodeType":"IdentifierPath","referencedDeclaration":3,"src":"21042:7:0"},"referencedDeclaration":3,"src":"21042:7:0","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"visibility":"internal"}],"src":"21030:22:0"},"returnParameters":{"id":1250,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1249,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1262,"src":"21067:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1248,"name":"bool","nodeType":"ElementaryTypeName","src":"21067:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"21066:6:0"},"scope":1263,"src":"21000:127:0","stateMutability":"pure","virtual":false,"visibility":"internal"}],"src":"32:21096:0"},"id":0},"@nilfoundation/smart-contracts/contracts/NilTokenBase.sol":{"ast":{"absolutePath":"@nilfoundation/smart-contracts/contracts/NilTokenBase.sol","exportedSymbols":{"Nil":[885],"NilBase":[970],"NilBounceable":[978],"NilConfigAbi":[1130],"NilTokenBase":[1515],"TokenId":[3],"__Precompile__":[1115],"tokenIdEqual":[1152],"tokenIdGreater":[1218],"tokenIdGreaterOrEqual":[1262],"tokenIdLess":[1196],"tokenIdLessOrEqual":[1240],"tokenIdNotEqual":[1174]},"id":1516,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1264,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"32:23:1"},{"absolutePath":"@nilfoundation/smart-contracts/contracts/Nil.sol","file":"./Nil.sol","id":1265,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1516,"sourceUnit":1263,"src":"57:19:1","symbolAliases":[],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":1267,"name":"NilBase","nameLocations":["582:7:1"],"nodeType":"IdentifierPath","referencedDeclaration":970,"src":"582:7:1"},"id":1268,"nodeType":"InheritanceSpecifier","src":"582:7:1"}],"canonicalName":"NilTokenBase","contractDependencies":[],"contractKind":"contract","documentation":{"id":1266,"nodeType":"StructuredDocumentation","src":"78:469:1","text":" @title NilTokenBase\n @dev Abstract contract that provides functionality for token processing.\n Methods with \"Internal\" suffix are internal, which means that they can be called only from the derived contract\n itself. But there are default wrapper methods that provide the account owner access to internal methods.\n They are virtual, so the main contract can disable them by overriding them. Then only logic of the contract can use\n internal methods."},"fullyImplemented":true,"id":1515,"linearizedBaseContracts":[1515,970],"name":"NilTokenBase","nameLocation":"566:12:1","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":1270,"mutability":"mutable","name":"totalSupply","nameLocation":"601:11:1","nodeType":"VariableDeclaration","scope":1515,"src":"596:16:1","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1269,"name":"uint","nodeType":"ElementaryTypeName","src":"596:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1272,"mutability":"mutable","name":"tokenName","nameLocation":"625:9:1","nodeType":"VariableDeclaration","scope":1515,"src":"618:16:1","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":1271,"name":"string","nodeType":"ElementaryTypeName","src":"618:6:1","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"body":{"id":1280,"nodeType":"Block","src":"811:35:1","statements":[{"expression":{"id":1278,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1270,"src":"828:11:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":1277,"id":1279,"nodeType":"Return","src":"821:18:1"}]},"documentation":{"id":1273,"nodeType":"StructuredDocumentation","src":"641:108:1","text":" @dev Returns the total supply of the token.\n @return The total supply of the token."},"functionSelector":"57df844b","id":1281,"implemented":true,"kind":"function","modifiers":[],"name":"getTokenTotalSupply","nameLocation":"763:19:1","nodeType":"FunctionDefinition","parameters":{"id":1274,"nodeType":"ParameterList","parameters":[],"src":"782:2:1"},"returnParameters":{"id":1277,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1276,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1281,"src":"805:4:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1275,"name":"uint","nodeType":"ElementaryTypeName","src":"805:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"804:6:1"},"scope":1515,"src":"754:92:1","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":1297,"nodeType":"Block","src":"1060:69:1","statements":[{"expression":{"arguments":[{"arguments":[{"id":1291,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1102:4:1","typeDescriptions":{"typeIdentifier":"t_contract$_NilTokenBase_$1515","typeString":"contract NilTokenBase"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_NilTokenBase_$1515","typeString":"contract NilTokenBase"}],"id":1290,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1094:7:1","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1289,"name":"address","nodeType":"ElementaryTypeName","src":"1094:7:1","typeDescriptions":{}}},"id":1292,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1094:13:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"id":1293,"name":"getTokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1314,"src":"1109:10:1","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_TokenId_$3_$","typeString":"function () view returns (TokenId)"}},"id":1294,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1109:12:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}],"expression":{"id":1287,"name":"Nil","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":885,"src":"1077:3:1","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Nil_$885_$","typeString":"type(library Nil)"}},"id":1288,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1081:12:1","memberName":"tokenBalance","nodeType":"MemberAccess","referencedDeclaration":554,"src":"1077:16:1","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_userDefinedValueType$_TokenId_$3_$returns$_t_uint256_$","typeString":"function (address,TokenId) view returns (uint256)"}},"id":1295,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1077:45:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":1286,"id":1296,"nodeType":"Return","src":"1070:52:1"}]},"documentation":{"id":1282,"nodeType":"StructuredDocumentation","src":"852:144:1","text":" @dev Returns the balance of the token owned by this contract.\n @return The balance of the token owned by this contract."},"functionSelector":"d19b9b75","id":1298,"implemented":true,"kind":"function","modifiers":[],"name":"getOwnTokenBalance","nameLocation":"1010:18:1","nodeType":"FunctionDefinition","parameters":{"id":1283,"nodeType":"ParameterList","parameters":[],"src":"1028:2:1"},"returnParameters":{"id":1286,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1285,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1298,"src":"1051:7:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1284,"name":"uint256","nodeType":"ElementaryTypeName","src":"1051:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1050:9:1"},"scope":1515,"src":"1001:128:1","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":1313,"nodeType":"Block","src":"1355:51:1","statements":[{"expression":{"arguments":[{"arguments":[{"id":1309,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1393:4:1","typeDescriptions":{"typeIdentifier":"t_contract$_NilTokenBase_$1515","typeString":"contract NilTokenBase"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_NilTokenBase_$1515","typeString":"contract NilTokenBase"}],"id":1308,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1385:7:1","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1307,"name":"address","nodeType":"ElementaryTypeName","src":"1385:7:1","typeDescriptions":{}}},"id":1310,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1385:13:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":1305,"name":"TokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3,"src":"1372:7:1","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_TokenId_$3_$","typeString":"type(TokenId)"}},"id":1306,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1380:4:1","memberName":"wrap","nodeType":"MemberAccess","src":"1372:12:1","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_address_$returns$_t_userDefinedValueType$_TokenId_$3_$","typeString":"function (address) pure returns (TokenId)"}},"id":1311,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1372:27:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"functionReturnParameters":1304,"id":1312,"nodeType":"Return","src":"1365:34:1"}]},"documentation":{"id":1299,"nodeType":"StructuredDocumentation","src":"1135:164:1","text":" @dev Returns the unique identifier of the token owned by this contract.\n @return The unique identifier of the token owned by this contract."},"functionSelector":"010a38f5","id":1314,"implemented":true,"kind":"function","modifiers":[],"name":"getTokenId","nameLocation":"1313:10:1","nodeType":"FunctionDefinition","parameters":{"id":1300,"nodeType":"ParameterList","parameters":[],"src":"1323:2:1"},"returnParameters":{"id":1304,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1303,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1314,"src":"1346:7:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"},"typeName":{"id":1302,"nodeType":"UserDefinedTypeName","pathNode":{"id":1301,"name":"TokenId","nameLocations":["1346:7:1"],"nodeType":"IdentifierPath","referencedDeclaration":3,"src":"1346:7:1"},"referencedDeclaration":3,"src":"1346:7:1","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"visibility":"internal"}],"src":"1345:9:1"},"scope":1515,"src":"1304:102:1","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":1322,"nodeType":"Block","src":"1568:33:1","statements":[{"expression":{"id":1320,"name":"tokenName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1272,"src":"1585:9:1","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":1319,"id":1321,"nodeType":"Return","src":"1578:16:1"}]},"documentation":{"id":1315,"nodeType":"StructuredDocumentation","src":"1412:92:1","text":" @dev Returns the name of the token.\n @return The name of the token."},"functionSelector":"862b092b","id":1323,"implemented":true,"kind":"function","modifiers":[],"name":"getTokenName","nameLocation":"1518:12:1","nodeType":"FunctionDefinition","parameters":{"id":1316,"nodeType":"ParameterList","parameters":[],"src":"1530:2:1"},"returnParameters":{"id":1319,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1318,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1323,"src":"1553:13:1","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":1317,"name":"string","nodeType":"ElementaryTypeName","src":"1553:6:1","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1552:15:1"},"scope":1515,"src":"1509:92:1","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":1335,"nodeType":"Block","src":"1774:33:1","statements":[{"expression":{"id":1333,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1331,"name":"tokenName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1272,"src":"1784:9:1","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":1332,"name":"name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1326,"src":"1796:4:1","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"1784:16:1","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":1334,"nodeType":"ExpressionStatement","src":"1784:16:1"}]},"documentation":{"id":1324,"nodeType":"StructuredDocumentation","src":"1607:92:1","text":" @dev Set the name of the token.\n @param name The name of the token."},"functionSelector":"a4f29aad","id":1336,"implemented":true,"kind":"function","modifiers":[{"id":1329,"kind":"modifierInvocation","modifierName":{"id":1328,"name":"onlyExternal","nameLocations":["1746:12:1"],"nodeType":"IdentifierPath","referencedDeclaration":929,"src":"1746:12:1"},"nodeType":"ModifierInvocation","src":"1746:12:1"}],"name":"setTokenName","nameLocation":"1713:12:1","nodeType":"FunctionDefinition","parameters":{"id":1327,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1326,"mutability":"mutable","name":"name","nameLocation":"1740:4:1","nodeType":"VariableDeclaration","scope":1336,"src":"1726:18:1","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":1325,"name":"string","nodeType":"ElementaryTypeName","src":"1726:6:1","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1725:20:1"},"returnParameters":{"id":1330,"nodeType":"ParameterList","parameters":[],"src":"1774:0:1"},"scope":1515,"src":"1704:103:1","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":1348,"nodeType":"Block","src":"2109:42:1","statements":[{"expression":{"arguments":[{"id":1345,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1339,"src":"2137:6:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1344,"name":"mintTokenInternal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1409,"src":"2119:17:1","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":1346,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2119:25:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1347,"nodeType":"ExpressionStatement","src":"2119:25:1"}]},"documentation":{"id":1337,"nodeType":"StructuredDocumentation","src":"1813:228:1","text":" @dev Mints a specified amount of token using external call.\n It is wrapper over `mintTokenInternal` method to provide access to the owner of the account.\n @param amount The amount of token to mint."},"functionSelector":"c634d032","id":1349,"implemented":true,"kind":"function","modifiers":[{"id":1342,"kind":"modifierInvocation","modifierName":{"id":1341,"name":"onlyExternal","nameLocations":["2081:12:1"],"nodeType":"IdentifierPath","referencedDeclaration":929,"src":"2081:12:1"},"nodeType":"ModifierInvocation","src":"2081:12:1"}],"name":"mintToken","nameLocation":"2055:9:1","nodeType":"FunctionDefinition","parameters":{"id":1340,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1339,"mutability":"mutable","name":"amount","nameLocation":"2073:6:1","nodeType":"VariableDeclaration","scope":1349,"src":"2065:14:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1338,"name":"uint256","nodeType":"ElementaryTypeName","src":"2065:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2064:16:1"},"returnParameters":{"id":1343,"nodeType":"ParameterList","parameters":[],"src":"2109:0:1"},"scope":1515,"src":"2046:105:1","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":1361,"nodeType":"Block","src":"2453:42:1","statements":[{"expression":{"arguments":[{"id":1358,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1352,"src":"2481:6:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1357,"name":"burnTokenInternal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1443,"src":"2463:17:1","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":1359,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2463:25:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1360,"nodeType":"ExpressionStatement","src":"2463:25:1"}]},"documentation":{"id":1350,"nodeType":"StructuredDocumentation","src":"2157:228:1","text":" @dev Burns a specified amount of token using external call.\n It is wrapper over `burnTokenInternal` method to provide access to the owner of the account.\n @param amount The amount of token to burn."},"functionSelector":"7b47ec1a","id":1362,"implemented":true,"kind":"function","modifiers":[{"id":1355,"kind":"modifierInvocation","modifierName":{"id":1354,"name":"onlyExternal","nameLocations":["2425:12:1"],"nodeType":"IdentifierPath","referencedDeclaration":929,"src":"2425:12:1"},"nodeType":"ModifierInvocation","src":"2425:12:1"}],"name":"burnToken","nameLocation":"2399:9:1","nodeType":"FunctionDefinition","parameters":{"id":1353,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1352,"mutability":"mutable","name":"amount","nameLocation":"2417:6:1","nodeType":"VariableDeclaration","scope":1362,"src":"2409:14:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1351,"name":"uint256","nodeType":"ElementaryTypeName","src":"2409:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2408:16:1"},"returnParameters":{"id":1356,"nodeType":"ParameterList","parameters":[],"src":"2453:0:1"},"scope":1515,"src":"2390:105:1","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":1381,"nodeType":"Block","src":"2835:55:1","statements":[{"expression":{"arguments":[{"id":1376,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1365,"src":"2863:2:1","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1377,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1368,"src":"2867:7:1","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},{"id":1378,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1370,"src":"2876:6:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1375,"name":"sendTokenInternal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1498,"src":"2845:17:1","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_userDefinedValueType$_TokenId_$3_$_t_uint256_$returns$__$","typeString":"function (address,TokenId,uint256)"}},"id":1379,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2845:38:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1380,"nodeType":"ExpressionStatement","src":"2845:38:1"}]},"documentation":{"id":1363,"nodeType":"StructuredDocumentation","src":"2501:237:1","text":" @dev Sends a specified amount of arbitrary token to a given address.\n It is wrapper over `sendTokenInternal` method to provide access to the owner of the account.\n @param amount The amount of token to mint."},"functionSelector":"2fdcfbd2","id":1382,"implemented":true,"kind":"function","modifiers":[{"id":1373,"kind":"modifierInvocation","modifierName":{"id":1372,"name":"onlyExternal","nameLocations":["2807:12:1"],"nodeType":"IdentifierPath","referencedDeclaration":929,"src":"2807:12:1"},"nodeType":"ModifierInvocation","src":"2807:12:1"}],"name":"sendToken","nameLocation":"2752:9:1","nodeType":"FunctionDefinition","parameters":{"id":1371,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1365,"mutability":"mutable","name":"to","nameLocation":"2770:2:1","nodeType":"VariableDeclaration","scope":1382,"src":"2762:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1364,"name":"address","nodeType":"ElementaryTypeName","src":"2762:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1368,"mutability":"mutable","name":"tokenId","nameLocation":"2782:7:1","nodeType":"VariableDeclaration","scope":1382,"src":"2774:15:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"},"typeName":{"id":1367,"nodeType":"UserDefinedTypeName","pathNode":{"id":1366,"name":"TokenId","nameLocations":["2774:7:1"],"nodeType":"IdentifierPath","referencedDeclaration":3,"src":"2774:7:1"},"referencedDeclaration":3,"src":"2774:7:1","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"visibility":"internal"},{"constant":false,"id":1370,"mutability":"mutable","name":"amount","nameLocation":"2799:6:1","nodeType":"VariableDeclaration","scope":1382,"src":"2791:14:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1369,"name":"uint256","nodeType":"ElementaryTypeName","src":"2791:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2761:45:1"},"returnParameters":{"id":1374,"nodeType":"ParameterList","parameters":[],"src":"2835:0:1"},"scope":1515,"src":"2743:147:1","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":1408,"nodeType":"Block","src":"3152:172:1","statements":[{"assignments":[1389],"declarations":[{"constant":false,"id":1389,"mutability":"mutable","name":"success","nameLocation":"3167:7:1","nodeType":"VariableDeclaration","scope":1408,"src":"3162:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1388,"name":"bool","nodeType":"ElementaryTypeName","src":"3162:4:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":1398,"initialValue":{"arguments":[{"id":1395,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1385,"src":"3232:6:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"74727565","id":1396,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3240:4:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"arguments":[{"expression":{"id":1391,"name":"Nil","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":885,"src":"3192:3:1","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Nil_$885_$","typeString":"type(library Nil)"}},"id":1392,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3196:12:1","memberName":"MANAGE_TOKEN","nodeType":"MemberAccess","referencedDeclaration":39,"src":"3192:16:1","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1390,"name":"__Precompile__","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1115,"src":"3177:14:1","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$___Precompile___$1115_$","typeString":"type(contract __Precompile__)"}},"id":1393,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3177:32:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$___Precompile___$1115","typeString":"contract __Precompile__"}},"id":1394,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3210:21:1","memberName":"precompileManageToken","nodeType":"MemberAccess","referencedDeclaration":988,"src":"3177:54:1","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$_t_bool_$returns$_t_bool_$","typeString":"function (uint256,bool) external returns (bool)"}},"id":1397,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3177:68:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"3162:83:1"},{"expression":{"arguments":[{"id":1400,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1389,"src":"3263:7:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4d696e74206661696c6564","id":1401,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3272:13:1","typeDescriptions":{"typeIdentifier":"t_stringliteral_28c39b78ba029f0fc13f1547f14e04b4ee342add2eb73cbd87e27098ff34658b","typeString":"literal_string \"Mint failed\""},"value":"Mint failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_28c39b78ba029f0fc13f1547f14e04b4ee342add2eb73cbd87e27098ff34658b","typeString":"literal_string \"Mint failed\""}],"id":1399,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"3255:7:1","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1402,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3255:31:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1403,"nodeType":"ExpressionStatement","src":"3255:31:1"},{"expression":{"id":1406,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1404,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1270,"src":"3296:11:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":1405,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1385,"src":"3311:6:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3296:21:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1407,"nodeType":"ExpressionStatement","src":"3296:21:1"}]},"documentation":{"id":1383,"nodeType":"StructuredDocumentation","src":"2896:199:1","text":" @dev Mints a specified amount of token and increases the total supply.\n All minting should be carried out using this method.\n @param amount The amount of token to mint."},"id":1409,"implemented":true,"kind":"function","modifiers":[],"name":"mintTokenInternal","nameLocation":"3109:17:1","nodeType":"FunctionDefinition","parameters":{"id":1386,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1385,"mutability":"mutable","name":"amount","nameLocation":"3135:6:1","nodeType":"VariableDeclaration","scope":1409,"src":"3127:14:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1384,"name":"uint256","nodeType":"ElementaryTypeName","src":"3127:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3126:16:1"},"returnParameters":{"id":1387,"nodeType":"ParameterList","parameters":[],"src":"3152:0:1"},"scope":1515,"src":"3100:224:1","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":1442,"nodeType":"Block","src":"3586:247:1","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1418,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1416,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1270,"src":"3604:11:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":1417,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1412,"src":"3619:6:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3604:21:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4275726e206661696c65643a206e6f7420656e6f75676820746f6b656e73","id":1419,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3627:32:1","typeDescriptions":{"typeIdentifier":"t_stringliteral_3e83ddaf21df4fdccbfd5c208e795a9320509543dbf86b6f91158f238861872d","typeString":"literal_string \"Burn failed: not enough tokens\""},"value":"Burn failed: not enough tokens"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3e83ddaf21df4fdccbfd5c208e795a9320509543dbf86b6f91158f238861872d","typeString":"literal_string \"Burn failed: not enough tokens\""}],"id":1415,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"3596:7:1","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1420,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3596:64:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1421,"nodeType":"ExpressionStatement","src":"3596:64:1"},{"assignments":[1423],"declarations":[{"constant":false,"id":1423,"mutability":"mutable","name":"success","nameLocation":"3675:7:1","nodeType":"VariableDeclaration","scope":1442,"src":"3670:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1422,"name":"bool","nodeType":"ElementaryTypeName","src":"3670:4:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":1432,"initialValue":{"arguments":[{"id":1429,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1412,"src":"3740:6:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"66616c7365","id":1430,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3748:5:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"arguments":[{"expression":{"id":1425,"name":"Nil","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":885,"src":"3700:3:1","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Nil_$885_$","typeString":"type(library Nil)"}},"id":1426,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3704:12:1","memberName":"MANAGE_TOKEN","nodeType":"MemberAccess","referencedDeclaration":39,"src":"3700:16:1","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1424,"name":"__Precompile__","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1115,"src":"3685:14:1","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$___Precompile___$1115_$","typeString":"type(contract __Precompile__)"}},"id":1427,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3685:32:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$___Precompile___$1115","typeString":"contract __Precompile__"}},"id":1428,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3718:21:1","memberName":"precompileManageToken","nodeType":"MemberAccess","referencedDeclaration":988,"src":"3685:54:1","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$_t_bool_$returns$_t_bool_$","typeString":"function (uint256,bool) external returns (bool)"}},"id":1431,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3685:69:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"3670:84:1"},{"expression":{"arguments":[{"id":1434,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1423,"src":"3772:7:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4275726e206661696c6564","id":1435,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3781:13:1","typeDescriptions":{"typeIdentifier":"t_stringliteral_631bce6a3bcd28e9679e48ac217872ce5f9b492f607a1d08fbb2906971f38cc4","typeString":"literal_string \"Burn failed\""},"value":"Burn failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_631bce6a3bcd28e9679e48ac217872ce5f9b492f607a1d08fbb2906971f38cc4","typeString":"literal_string \"Burn failed\""}],"id":1433,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"3764:7:1","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1436,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3764:31:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1437,"nodeType":"ExpressionStatement","src":"3764:31:1"},{"expression":{"id":1440,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1438,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1270,"src":"3805:11:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":1439,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1412,"src":"3820:6:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3805:21:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1441,"nodeType":"ExpressionStatement","src":"3805:21:1"}]},"documentation":{"id":1410,"nodeType":"StructuredDocumentation","src":"3330:199:1","text":" @dev Burns a specified amount of token and decreases the total supply.\n All burning should be carried out using this method.\n @param amount The amount of token to mint."},"id":1443,"implemented":true,"kind":"function","modifiers":[],"name":"burnTokenInternal","nameLocation":"3543:17:1","nodeType":"FunctionDefinition","parameters":{"id":1413,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1412,"mutability":"mutable","name":"amount","nameLocation":"3569:6:1","nodeType":"VariableDeclaration","scope":1443,"src":"3561:14:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1411,"name":"uint256","nodeType":"ElementaryTypeName","src":"3561:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3560:16:1"},"returnParameters":{"id":1414,"nodeType":"ParameterList","parameters":[],"src":"3586:0:1"},"scope":1515,"src":"3534:299:1","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":1497,"nodeType":"Block","src":"4160:216:1","statements":[{"assignments":[1459],"declarations":[{"constant":false,"id":1459,"mutability":"mutable","name":"tokens_","nameLocation":"4189:7:1","nodeType":"VariableDeclaration","scope":1497,"src":"4170:26:1","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Token_$120_memory_ptr_$dyn_memory_ptr","typeString":"struct Nil.Token[]"},"typeName":{"baseType":{"id":1457,"nodeType":"UserDefinedTypeName","pathNode":{"id":1456,"name":"Nil.Token","nameLocations":["4170:3:1","4174:5:1"],"nodeType":"IdentifierPath","referencedDeclaration":120,"src":"4170:9:1"},"referencedDeclaration":120,"src":"4170:9:1","typeDescriptions":{"typeIdentifier":"t_struct$_Token_$120_storage_ptr","typeString":"struct Nil.Token"}},"id":1458,"nodeType":"ArrayTypeName","src":"4170:11:1","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Token_$120_storage_$dyn_storage_ptr","typeString":"struct Nil.Token[]"}},"visibility":"internal"}],"id":1466,"initialValue":{"arguments":[{"hexValue":"31","id":1464,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4215:1:1","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"}],"id":1463,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"4199:15:1","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_Token_$120_memory_ptr_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (struct Nil.Token memory[] memory)"},"typeName":{"baseType":{"id":1461,"nodeType":"UserDefinedTypeName","pathNode":{"id":1460,"name":"Nil.Token","nameLocations":["4203:3:1","4207:5:1"],"nodeType":"IdentifierPath","referencedDeclaration":120,"src":"4203:9:1"},"referencedDeclaration":120,"src":"4203:9:1","typeDescriptions":{"typeIdentifier":"t_struct$_Token_$120_storage_ptr","typeString":"struct Nil.Token"}},"id":1462,"nodeType":"ArrayTypeName","src":"4203:11:1","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Token_$120_storage_$dyn_storage_ptr","typeString":"struct Nil.Token[]"}}},"id":1465,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4199:18:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Token_$120_memory_ptr_$dyn_memory_ptr","typeString":"struct Nil.Token memory[] memory"}},"nodeType":"VariableDeclarationStatement","src":"4170:47:1"},{"expression":{"id":1475,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":1467,"name":"tokens_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1459,"src":"4227:7:1","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Token_$120_memory_ptr_$dyn_memory_ptr","typeString":"struct Nil.Token memory[] memory"}},"id":1469,"indexExpression":{"hexValue":"30","id":1468,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4235:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4227:10:1","typeDescriptions":{"typeIdentifier":"t_struct$_Token_$120_memory_ptr","typeString":"struct Nil.Token memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":1472,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1449,"src":"4250:7:1","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},{"id":1473,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1451,"src":"4259:6:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":1470,"name":"Nil","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":885,"src":"4240:3:1","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Nil_$885_$","typeString":"type(library Nil)"}},"id":1471,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4244:5:1","memberName":"Token","nodeType":"MemberAccess","referencedDeclaration":120,"src":"4240:9:1","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Token_$120_storage_ptr_$","typeString":"type(struct Nil.Token storage pointer)"}},"id":1474,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4240:26:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Token_$120_memory_ptr","typeString":"struct Nil.Token memory"}},"src":"4227:39:1","typeDescriptions":{"typeIdentifier":"t_struct$_Token_$120_memory_ptr","typeString":"struct Nil.Token memory"}},"id":1476,"nodeType":"ExpressionStatement","src":"4227:39:1"},{"expression":{"arguments":[{"id":1480,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1446,"src":"4300:2:1","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":1483,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4312:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1482,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4304:7:1","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1481,"name":"address","nodeType":"ElementaryTypeName","src":"4304:7:1","typeDescriptions":{}}},"id":1484,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4304:10:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":1487,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4324:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1486,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4316:7:1","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1485,"name":"address","nodeType":"ElementaryTypeName","src":"4316:7:1","typeDescriptions":{}}},"id":1488,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4316:10:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":1489,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4328:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"expression":{"id":1490,"name":"Nil","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":885,"src":"4331:3:1","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Nil_$885_$","typeString":"type(library Nil)"}},"id":1491,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4335:17:1","memberName":"FORWARD_REMAINING","nodeType":"MemberAccess","referencedDeclaration":102,"src":"4331:21:1","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"hexValue":"30","id":1492,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4354:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":1493,"name":"tokens_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1459,"src":"4357:7:1","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Token_$120_memory_ptr_$dyn_memory_ptr","typeString":"struct Nil.Token memory[] memory"}},{"hexValue":"","id":1494,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4366:2:1","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_array$_t_struct$_Token_$120_memory_ptr_$dyn_memory_ptr","typeString":"struct Nil.Token memory[] memory"},{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":1477,"name":"Nil","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":885,"src":"4276:3:1","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Nil_$885_$","typeString":"type(library Nil)"}},"id":1479,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4280:19:1","memberName":"asyncCallWithTokens","nodeType":"MemberAccess","referencedDeclaration":317,"src":"4276:23:1","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint8_$_t_uint256_$_t_array$_t_struct$_Token_$120_memory_ptr_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,address,uint256,uint8,uint256,struct Nil.Token memory[] memory,bytes memory)"}},"id":1495,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4276:93:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1496,"nodeType":"ExpressionStatement","src":"4276:93:1"}]},"documentation":{"id":1444,"nodeType":"StructuredDocumentation","src":"3839:235:1","text":" @dev Sends a specified amount of arbitrary token to a given address.\n @param to The address to send the token to.\n @param tokenId ID of the token to send.\n @param amount The amount of token to send."},"id":1498,"implemented":true,"kind":"function","modifiers":[],"name":"sendTokenInternal","nameLocation":"4088:17:1","nodeType":"FunctionDefinition","parameters":{"id":1452,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1446,"mutability":"mutable","name":"to","nameLocation":"4114:2:1","nodeType":"VariableDeclaration","scope":1498,"src":"4106:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1445,"name":"address","nodeType":"ElementaryTypeName","src":"4106:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1449,"mutability":"mutable","name":"tokenId","nameLocation":"4126:7:1","nodeType":"VariableDeclaration","scope":1498,"src":"4118:15:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"},"typeName":{"id":1448,"nodeType":"UserDefinedTypeName","pathNode":{"id":1447,"name":"TokenId","nameLocations":["4118:7:1"],"nodeType":"IdentifierPath","referencedDeclaration":3,"src":"4118:7:1"},"referencedDeclaration":3,"src":"4118:7:1","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"visibility":"internal"},{"constant":false,"id":1451,"mutability":"mutable","name":"amount","nameLocation":"4143:6:1","nodeType":"VariableDeclaration","scope":1498,"src":"4135:14:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1450,"name":"uint256","nodeType":"ElementaryTypeName","src":"4135:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4105:45:1"},"returnParameters":{"id":1453,"nodeType":"ParameterList","parameters":[],"src":"4160:0:1"},"scope":1515,"src":"4079:297:1","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":1513,"nodeType":"Block","src":"4660:63:1","statements":[{"expression":{"arguments":[{"id":1508,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1501,"src":"4694:7:1","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"id":1509,"name":"getTokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1314,"src":"4703:10:1","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_TokenId_$3_$","typeString":"function () view returns (TokenId)"}},"id":1510,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4703:12:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}],"expression":{"id":1506,"name":"Nil","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":885,"src":"4677:3:1","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Nil_$885_$","typeString":"type(library Nil)"}},"id":1507,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4681:12:1","memberName":"tokenBalance","nodeType":"MemberAccess","referencedDeclaration":554,"src":"4677:16:1","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_userDefinedValueType$_TokenId_$3_$returns$_t_uint256_$","typeString":"function (address,TokenId) view returns (uint256)"}},"id":1511,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4677:39:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":1505,"id":1512,"nodeType":"Return","src":"4670:46:1"}]},"documentation":{"id":1499,"nodeType":"StructuredDocumentation","src":"4382:200:1","text":" @dev Returns the balance of the token for a given address.\n @param account The address to check the balance for.\n @return The balance of the token for the given address."},"functionSelector":"83894548","id":1514,"implemented":true,"kind":"function","modifiers":[],"name":"getTokenBalanceOf","nameLocation":"4596:17:1","nodeType":"FunctionDefinition","parameters":{"id":1502,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1501,"mutability":"mutable","name":"account","nameLocation":"4622:7:1","nodeType":"VariableDeclaration","scope":1514,"src":"4614:15:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1500,"name":"address","nodeType":"ElementaryTypeName","src":"4614:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4613:17:1"},"returnParameters":{"id":1505,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1504,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1514,"src":"4651:7:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1503,"name":"uint256","nodeType":"ElementaryTypeName","src":"4651:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4650:9:1"},"scope":1515,"src":"4587:136:1","stateMutability":"view","virtual":false,"visibility":"public"}],"scope":1516,"src":"548:4177:1","usedErrors":[],"usedEvents":[]}],"src":"32:4694:1"},"id":1},"contracts/CollateralManager.sol":{"ast":{"absolutePath":"contracts/CollateralManager.sol","exportedSymbols":{"GlobalLedger":[1623],"Nil":[885],"NilBase":[970],"NilBounceable":[978],"NilConfigAbi":[1130],"NilTokenBase":[1515],"TokenId":[3],"__Precompile__":[1115],"tokenIdEqual":[1152],"tokenIdGreater":[1218],"tokenIdGreaterOrEqual":[1262],"tokenIdLess":[1196],"tokenIdLessOrEqual":[1240],"tokenIdNotEqual":[1174]},"id":1624,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":1517,"literals":["solidity","^","0.8",".28"],"nodeType":"PragmaDirective","src":"39:24:2"},{"absolutePath":"@nilfoundation/smart-contracts/contracts/Nil.sol","file":"@nilfoundation/smart-contracts/contracts/Nil.sol","id":1518,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1624,"sourceUnit":1263,"src":"65:58:2","symbolAliases":[],"unitAlias":""},{"absolutePath":"@nilfoundation/smart-contracts/contracts/NilTokenBase.sol","file":"@nilfoundation/smart-contracts/contracts/NilTokenBase.sol","id":1519,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1624,"sourceUnit":1516,"src":"124:67:2","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"GlobalLedger","contractDependencies":[],"contractKind":"contract","documentation":{"id":1520,"nodeType":"StructuredDocumentation","src":"193:231:2","text":"@title GlobalLedger\n @dev The GlobalLedger contract is responsible for tracking user deposits and loans in the lending protocol.\n It stores the deposit balances for users and keeps track of the loans each user has taken."},"fullyImplemented":true,"id":1623,"linearizedBaseContracts":[1623],"name":"GlobalLedger","nameLocation":"433:12:2","nodeType":"ContractDefinition","nodes":[{"constant":false,"documentation":{"id":1521,"nodeType":"StructuredDocumentation","src":"452:77:2","text":"@dev Mapping of user addresses to their token deposits (token -> amount)."},"functionSelector":"8f601f66","id":1528,"mutability":"mutable","name":"deposits","nameLocation":"589:8:2","nodeType":"VariableDeclaration","scope":1623,"src":"534:63:2","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_userDefinedValueType$_TokenId_$3_$_t_uint256_$_$","typeString":"mapping(address => mapping(TokenId => uint256))"},"typeName":{"id":1527,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":1522,"name":"address","nodeType":"ElementaryTypeName","src":"542:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"534:47:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_userDefinedValueType$_TokenId_$3_$_t_uint256_$_$","typeString":"mapping(address => mapping(TokenId => uint256))"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":1526,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":1524,"nodeType":"UserDefinedTypeName","pathNode":{"id":1523,"name":"TokenId","nameLocations":["561:7:2"],"nodeType":"IdentifierPath","referencedDeclaration":3,"src":"561:7:2"},"referencedDeclaration":3,"src":"561:7:2","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"nodeType":"Mapping","src":"553:27:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_userDefinedValueType$_TokenId_$3_$_t_uint256_$","typeString":"mapping(TokenId => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":1525,"name":"uint256","nodeType":"ElementaryTypeName","src":"572:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}},"visibility":"public"},{"constant":false,"documentation":{"id":1529,"nodeType":"StructuredDocumentation","src":"604:79:2","text":"@dev Mapping of user addresses to their loans (loan amount and loan token)."},"functionSelector":"73b4086b","id":1534,"mutability":"mutable","name":"loans","nameLocation":"720:5:2","nodeType":"VariableDeclaration","scope":1623,"src":"688:37:2","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_Loan_$1541_storage_$","typeString":"mapping(address => struct GlobalLedger.Loan)"},"typeName":{"id":1533,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":1530,"name":"address","nodeType":"ElementaryTypeName","src":"696:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"688:24:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_Loan_$1541_storage_$","typeString":"mapping(address => struct GlobalLedger.Loan)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":1532,"nodeType":"UserDefinedTypeName","pathNode":{"id":1531,"name":"Loan","nameLocations":["707:4:2"],"nodeType":"IdentifierPath","referencedDeclaration":1541,"src":"707:4:2"},"referencedDeclaration":1541,"src":"707:4:2","typeDescriptions":{"typeIdentifier":"t_struct$_Loan_$1541_storage_ptr","typeString":"struct GlobalLedger.Loan"}}},"visibility":"public"},{"canonicalName":"GlobalLedger.Loan","documentation":{"id":1535,"nodeType":"StructuredDocumentation","src":"732:65:2","text":"@dev Struct to store loan details: amount and the token type."},"id":1541,"members":[{"constant":false,"id":1537,"mutability":"mutable","name":"amount","nameLocation":"832:6:2","nodeType":"VariableDeclaration","scope":1541,"src":"824:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1536,"name":"uint256","nodeType":"ElementaryTypeName","src":"824:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1540,"mutability":"mutable","name":"token","nameLocation":"856:5:2","nodeType":"VariableDeclaration","scope":1541,"src":"848:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"},"typeName":{"id":1539,"nodeType":"UserDefinedTypeName","pathNode":{"id":1538,"name":"TokenId","nameLocations":["848:7:2"],"nodeType":"IdentifierPath","referencedDeclaration":3,"src":"848:7:2"},"referencedDeclaration":3,"src":"848:7:2","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"visibility":"internal"}],"name":"Loan","nameLocation":"809:4:2","nodeType":"StructDefinition","scope":1623,"src":"802:66:2","visibility":"public"},{"body":{"id":1560,"nodeType":"Block","src":"1286:48:2","statements":[{"expression":{"id":1558,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":1552,"name":"deposits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1528,"src":"1296:8:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_userDefinedValueType$_TokenId_$3_$_t_uint256_$_$","typeString":"mapping(address => mapping(TokenId => uint256))"}},"id":1555,"indexExpression":{"id":1553,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1544,"src":"1305:4:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1296:14:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_userDefinedValueType$_TokenId_$3_$_t_uint256_$","typeString":"mapping(TokenId => uint256)"}},"id":1556,"indexExpression":{"id":1554,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1547,"src":"1311:5:2","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1296:21:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":1557,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1549,"src":"1321:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1296:31:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1559,"nodeType":"ExpressionStatement","src":"1296:31:2"}]},"documentation":{"id":1542,"nodeType":"StructuredDocumentation","src":"874:332:2","text":"@notice Records a user's deposit into the ledger.\n @dev Increases the deposit balance for the user for the specified token.\n @param user The address of the user making the deposit.\n @param token The token type being deposited (e.g., USDT, ETH).\n @param amount The amount of the token being deposited."},"functionSelector":"e8599307","id":1561,"implemented":true,"kind":"function","modifiers":[],"name":"recordDeposit","nameLocation":"1220:13:2","nodeType":"FunctionDefinition","parameters":{"id":1550,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1544,"mutability":"mutable","name":"user","nameLocation":"1242:4:2","nodeType":"VariableDeclaration","scope":1561,"src":"1234:12:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1543,"name":"address","nodeType":"ElementaryTypeName","src":"1234:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1547,"mutability":"mutable","name":"token","nameLocation":"1256:5:2","nodeType":"VariableDeclaration","scope":1561,"src":"1248:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"},"typeName":{"id":1546,"nodeType":"UserDefinedTypeName","pathNode":{"id":1545,"name":"TokenId","nameLocations":["1248:7:2"],"nodeType":"IdentifierPath","referencedDeclaration":3,"src":"1248:7:2"},"referencedDeclaration":3,"src":"1248:7:2","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"visibility":"internal"},{"constant":false,"id":1549,"mutability":"mutable","name":"amount","nameLocation":"1271:6:2","nodeType":"VariableDeclaration","scope":1561,"src":"1263:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1548,"name":"uint256","nodeType":"ElementaryTypeName","src":"1263:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1233:45:2"},"returnParameters":{"id":1551,"nodeType":"ParameterList","parameters":[],"src":"1286:0:2"},"scope":1623,"src":"1211:123:2","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":1578,"nodeType":"Block","src":"1813:103:2","statements":[{"expression":{"baseExpression":{"baseExpression":{"id":1572,"name":"deposits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1528,"src":"1830:8:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_userDefinedValueType$_TokenId_$3_$_t_uint256_$_$","typeString":"mapping(address => mapping(TokenId => uint256))"}},"id":1574,"indexExpression":{"id":1573,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1564,"src":"1839:4:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1830:14:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_userDefinedValueType$_TokenId_$3_$_t_uint256_$","typeString":"mapping(TokenId => uint256)"}},"id":1576,"indexExpression":{"id":1575,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1567,"src":"1845:5:2","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1830:21:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":1571,"id":1577,"nodeType":"Return","src":"1823:28:2"}]},"documentation":{"id":1562,"nodeType":"StructuredDocumentation","src":"1340:367:2","text":"@notice Fetches a user's deposit balance for a specific token.\n @dev Returns the amount of the token deposited by the user.\n @param user The address of the user whose deposit balance is being fetched.\n @param token The token type for which the balance is being fetched.\n @return uint256 The deposit amount for the given user and token."},"functionSelector":"c35082a9","id":1579,"implemented":true,"kind":"function","modifiers":[],"name":"getDeposit","nameLocation":"1721:10:2","nodeType":"FunctionDefinition","parameters":{"id":1568,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1564,"mutability":"mutable","name":"user","nameLocation":"1749:4:2","nodeType":"VariableDeclaration","scope":1579,"src":"1741:12:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1563,"name":"address","nodeType":"ElementaryTypeName","src":"1741:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1567,"mutability":"mutable","name":"token","nameLocation":"1771:5:2","nodeType":"VariableDeclaration","scope":1579,"src":"1763:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"},"typeName":{"id":1566,"nodeType":"UserDefinedTypeName","pathNode":{"id":1565,"name":"TokenId","nameLocations":["1763:7:2"],"nodeType":"IdentifierPath","referencedDeclaration":3,"src":"1763:7:2"},"referencedDeclaration":3,"src":"1763:7:2","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"visibility":"internal"}],"src":"1731:51:2"},"returnParameters":{"id":1571,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1570,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1579,"src":"1804:7:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1569,"name":"uint256","nodeType":"ElementaryTypeName","src":"1804:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1803:9:2"},"scope":1623,"src":"1712:204:2","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":1599,"nodeType":"Block","src":"2320:50:2","statements":[{"expression":{"id":1597,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":1590,"name":"loans","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1534,"src":"2330:5:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_Loan_$1541_storage_$","typeString":"mapping(address => struct GlobalLedger.Loan storage ref)"}},"id":1592,"indexExpression":{"id":1591,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1582,"src":"2336:4:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2330:11:2","typeDescriptions":{"typeIdentifier":"t_struct$_Loan_$1541_storage","typeString":"struct GlobalLedger.Loan storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":1594,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1587,"src":"2349:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1595,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1585,"src":"2357:5:2","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}],"id":1593,"name":"Loan","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1541,"src":"2344:4:2","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Loan_$1541_storage_ptr_$","typeString":"type(struct GlobalLedger.Loan storage pointer)"}},"id":1596,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2344:19:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Loan_$1541_memory_ptr","typeString":"struct GlobalLedger.Loan memory"}},"src":"2330:33:2","typeDescriptions":{"typeIdentifier":"t_struct$_Loan_$1541_storage","typeString":"struct GlobalLedger.Loan storage ref"}},"id":1598,"nodeType":"ExpressionStatement","src":"2330:33:2"}]},"documentation":{"id":1580,"nodeType":"StructuredDocumentation","src":"1922:321:2","text":"@notice Records a user's loan in the ledger.\n @dev Stores the amount of the loan and the token type used for the loan.\n @param user The address of the user taking the loan.\n @param token The token type used for the loan (e.g., USDT, ETH).\n @param amount The amount of the loan being taken."},"functionSelector":"dd6e8c20","id":1600,"implemented":true,"kind":"function","modifiers":[],"name":"recordLoan","nameLocation":"2257:10:2","nodeType":"FunctionDefinition","parameters":{"id":1588,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1582,"mutability":"mutable","name":"user","nameLocation":"2276:4:2","nodeType":"VariableDeclaration","scope":1600,"src":"2268:12:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1581,"name":"address","nodeType":"ElementaryTypeName","src":"2268:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1585,"mutability":"mutable","name":"token","nameLocation":"2290:5:2","nodeType":"VariableDeclaration","scope":1600,"src":"2282:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"},"typeName":{"id":1584,"nodeType":"UserDefinedTypeName","pathNode":{"id":1583,"name":"TokenId","nameLocations":["2282:7:2"],"nodeType":"IdentifierPath","referencedDeclaration":3,"src":"2282:7:2"},"referencedDeclaration":3,"src":"2282:7:2","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"visibility":"internal"},{"constant":false,"id":1587,"mutability":"mutable","name":"amount","nameLocation":"2305:6:2","nodeType":"VariableDeclaration","scope":1600,"src":"2297:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1586,"name":"uint256","nodeType":"ElementaryTypeName","src":"2297:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2267:45:2"},"returnParameters":{"id":1589,"nodeType":"ParameterList","parameters":[],"src":"2320:0:2"},"scope":1623,"src":"2248:122:2","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":1621,"nodeType":"Block","src":"2767:63:2","statements":[{"expression":{"components":[{"expression":{"baseExpression":{"id":1611,"name":"loans","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1534,"src":"2785:5:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_Loan_$1541_storage_$","typeString":"mapping(address => struct GlobalLedger.Loan storage ref)"}},"id":1613,"indexExpression":{"id":1612,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1603,"src":"2791:4:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2785:11:2","typeDescriptions":{"typeIdentifier":"t_struct$_Loan_$1541_storage","typeString":"struct GlobalLedger.Loan storage ref"}},"id":1614,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2797:6:2","memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":1537,"src":"2785:18:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"baseExpression":{"id":1615,"name":"loans","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1534,"src":"2805:5:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_Loan_$1541_storage_$","typeString":"mapping(address => struct GlobalLedger.Loan storage ref)"}},"id":1617,"indexExpression":{"id":1616,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1603,"src":"2811:4:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2805:11:2","typeDescriptions":{"typeIdentifier":"t_struct$_Loan_$1541_storage","typeString":"struct GlobalLedger.Loan storage ref"}},"id":1618,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2817:5:2","memberName":"token","nodeType":"MemberAccess","referencedDeclaration":1540,"src":"2805:17:2","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}}],"id":1619,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2784:39:2","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_userDefinedValueType$_TokenId_$3_$","typeString":"tuple(uint256,TokenId)"}},"functionReturnParameters":1610,"id":1620,"nodeType":"Return","src":"2777:46:2"}]},"documentation":{"id":1601,"nodeType":"StructuredDocumentation","src":"2376:295:2","text":"@notice Retrieves a user's loan details.\n @dev Returns the loan amount and the token used for the loan.\n @param user The address of the user whose loan details are being fetched.\n @return uint256 The loan amount.\n @return TokenId The token type used for the loan."},"functionSelector":"e8a7da8e","id":1622,"implemented":true,"kind":"function","modifiers":[],"name":"getLoanDetails","nameLocation":"2685:14:2","nodeType":"FunctionDefinition","parameters":{"id":1604,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1603,"mutability":"mutable","name":"user","nameLocation":"2717:4:2","nodeType":"VariableDeclaration","scope":1622,"src":"2709:12:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1602,"name":"address","nodeType":"ElementaryTypeName","src":"2709:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2699:28:2"},"returnParameters":{"id":1610,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1606,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1622,"src":"2749:7:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1605,"name":"uint256","nodeType":"ElementaryTypeName","src":"2749:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1609,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1622,"src":"2758:7:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"},"typeName":{"id":1608,"nodeType":"UserDefinedTypeName","pathNode":{"id":1607,"name":"TokenId","nameLocations":["2758:7:2"],"nodeType":"IdentifierPath","referencedDeclaration":3,"src":"2758:7:2"},"referencedDeclaration":3,"src":"2758:7:2","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"visibility":"internal"}],"src":"2748:18:2"},"scope":1623,"src":"2676:154:2","stateMutability":"view","virtual":false,"visibility":"public"}],"scope":1624,"src":"424:2408:2","usedErrors":[],"usedEvents":[]}],"src":"39:2794:2"},"id":2},"contracts/InterestManager.sol":{"ast":{"absolutePath":"contracts/InterestManager.sol","exportedSymbols":{"InterestManager":[1638],"Nil":[885],"NilBase":[970],"NilBounceable":[978],"NilConfigAbi":[1130],"NilTokenBase":[1515],"TokenId":[3],"__Precompile__":[1115],"tokenIdEqual":[1152],"tokenIdGreater":[1218],"tokenIdGreaterOrEqual":[1262],"tokenIdLess":[1196],"tokenIdLessOrEqual":[1240],"tokenIdNotEqual":[1174]},"id":1639,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":1625,"literals":["solidity","^","0.8",".28"],"nodeType":"PragmaDirective","src":"39:24:3"},{"absolutePath":"@nilfoundation/smart-contracts/contracts/Nil.sol","file":"@nilfoundation/smart-contracts/contracts/Nil.sol","id":1626,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1639,"sourceUnit":1263,"src":"65:58:3","symbolAliases":[],"unitAlias":""},{"absolutePath":"@nilfoundation/smart-contracts/contracts/NilTokenBase.sol","file":"@nilfoundation/smart-contracts/contracts/NilTokenBase.sol","id":1627,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1639,"sourceUnit":1516,"src":"124:67:3","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"InterestManager","contractDependencies":[],"contractKind":"contract","documentation":{"id":1628,"nodeType":"StructuredDocumentation","src":"193:148:3","text":"@title InterestManager\n @dev The InterestManager contract is responsible for providing the interest rate to be used in the lending protocol."},"fullyImplemented":true,"id":1638,"linearizedBaseContracts":[1638],"name":"InterestManager","nameLocation":"350:15:3","nodeType":"ContractDefinition","nodes":[{"body":{"id":1636,"nodeType":"Block","src":"755:25:3","statements":[{"expression":{"hexValue":"35","id":1634,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"772:1:3","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"functionReturnParameters":1633,"id":1635,"nodeType":"Return","src":"765:8:3"}]},"documentation":{"id":1629,"nodeType":"StructuredDocumentation","src":"372:321:3","text":"@notice Fetches the current interest rate.\n @dev In this basic implementation, the interest rate is fixed at 5%.\n In a real-world scenario, this could be replaced with a dynamic calculation based on market conditions or other factors.\n @return uint256 The current interest rate (5% in this case)."},"functionSelector":"5257b566","id":1637,"implemented":true,"kind":"function","modifiers":[],"name":"getInterestRate","nameLocation":"707:15:3","nodeType":"FunctionDefinition","parameters":{"id":1630,"nodeType":"ParameterList","parameters":[],"src":"722:2:3"},"returnParameters":{"id":1633,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1632,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1637,"src":"746:7:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1631,"name":"uint256","nodeType":"ElementaryTypeName","src":"746:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"745:9:3"},"scope":1638,"src":"698:82:3","stateMutability":"pure","virtual":false,"visibility":"public"}],"scope":1639,"src":"341:441:3","usedErrors":[],"usedEvents":[]}],"src":"39:744:3"},"id":3},"contracts/LendingPool.sol":{"ast":{"absolutePath":"contracts/LendingPool.sol","exportedSymbols":{"LendingPool":[2385],"Nil":[885],"NilBase":[970],"NilBounceable":[978],"NilConfigAbi":[1130],"NilTokenBase":[1515],"TokenId":[3],"__Precompile__":[1115],"tokenIdEqual":[1152],"tokenIdGreater":[1218],"tokenIdGreaterOrEqual":[1262],"tokenIdLess":[1196],"tokenIdLessOrEqual":[1240],"tokenIdNotEqual":[1174]},"id":2386,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":1640,"literals":["solidity","^","0.8",".28"],"nodeType":"PragmaDirective","src":"39:24:4"},{"absolutePath":"@nilfoundation/smart-contracts/contracts/Nil.sol","file":"@nilfoundation/smart-contracts/contracts/Nil.sol","id":1641,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2386,"sourceUnit":1263,"src":"65:58:4","symbolAliases":[],"unitAlias":""},{"absolutePath":"@nilfoundation/smart-contracts/contracts/NilTokenBase.sol","file":"@nilfoundation/smart-contracts/contracts/NilTokenBase.sol","id":1642,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2386,"sourceUnit":1516,"src":"124:67:4","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":1644,"name":"NilBase","nameLocations":["513:7:4"],"nodeType":"IdentifierPath","referencedDeclaration":970,"src":"513:7:4"},"id":1645,"nodeType":"InheritanceSpecifier","src":"513:7:4"},{"baseName":{"id":1646,"name":"NilTokenBase","nameLocations":["522:12:4"],"nodeType":"IdentifierPath","referencedDeclaration":1515,"src":"522:12:4"},"id":1647,"nodeType":"InheritanceSpecifier","src":"522:12:4"}],"canonicalName":"LendingPool","contractDependencies":[],"contractKind":"contract","documentation":{"id":1643,"nodeType":"StructuredDocumentation","src":"193:296:4","text":"@title LendingPool\n @dev The LendingPool contract facilitates lending and borrowing of tokens and handles collateral management.\n It interacts with other contracts such as GlobalLedger, InterestManager, and Oracle for tracking deposits, calculating interest, and fetching token prices."},"fullyImplemented":true,"id":2385,"linearizedBaseContracts":[2385,1515,970],"name":"LendingPool","nameLocation":"498:11:4","nodeType":"ContractDefinition","nodes":[{"constant":false,"functionSelector":"10401774","id":1649,"mutability":"mutable","name":"globalLedger","nameLocation":"556:12:4","nodeType":"VariableDeclaration","scope":2385,"src":"541:27:4","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1648,"name":"address","nodeType":"ElementaryTypeName","src":"541:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"constant":false,"functionSelector":"ee065e11","id":1651,"mutability":"mutable","name":"interestManager","nameLocation":"589:15:4","nodeType":"VariableDeclaration","scope":2385,"src":"574:30:4","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1650,"name":"address","nodeType":"ElementaryTypeName","src":"574:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"constant":false,"functionSelector":"7dc0d1d0","id":1653,"mutability":"mutable","name":"oracle","nameLocation":"625:6:4","nodeType":"VariableDeclaration","scope":2385,"src":"610:21:4","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1652,"name":"address","nodeType":"ElementaryTypeName","src":"610:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"constant":false,"functionSelector":"2f48ab7d","id":1656,"mutability":"mutable","name":"usdt","nameLocation":"652:4:4","nodeType":"VariableDeclaration","scope":2385,"src":"637:19:4","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"},"typeName":{"id":1655,"nodeType":"UserDefinedTypeName","pathNode":{"id":1654,"name":"TokenId","nameLocations":["637:7:4"],"nodeType":"IdentifierPath","referencedDeclaration":3,"src":"637:7:4"},"referencedDeclaration":3,"src":"637:7:4","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"visibility":"public"},{"constant":false,"functionSelector":"8c7c9e0c","id":1659,"mutability":"mutable","name":"eth","nameLocation":"677:3:4","nodeType":"VariableDeclaration","scope":2385,"src":"662:18:4","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"},"typeName":{"id":1658,"nodeType":"UserDefinedTypeName","pathNode":{"id":1657,"name":"TokenId","nameLocations":["662:7:4"],"nodeType":"IdentifierPath","referencedDeclaration":3,"src":"662:7:4"},"referencedDeclaration":3,"src":"662:7:4","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"visibility":"public"},{"body":{"id":1695,"nodeType":"Block","src":"1337:157:4","statements":[{"expression":{"id":1677,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1675,"name":"globalLedger","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1649,"src":"1347:12:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":1676,"name":"_globalLedger","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1662,"src":"1362:13:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1347:28:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1678,"nodeType":"ExpressionStatement","src":"1347:28:4"},{"expression":{"id":1681,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1679,"name":"interestManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1651,"src":"1385:15:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":1680,"name":"_interestManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1664,"src":"1403:16:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1385:34:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1682,"nodeType":"ExpressionStatement","src":"1385:34:4"},{"expression":{"id":1685,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1683,"name":"oracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1653,"src":"1429:6:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":1684,"name":"_oracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1666,"src":"1438:7:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1429:16:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1686,"nodeType":"ExpressionStatement","src":"1429:16:4"},{"expression":{"id":1689,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1687,"name":"usdt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1656,"src":"1455:4:4","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":1688,"name":"_usdt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1669,"src":"1462:5:4","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"src":"1455:12:4","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"id":1690,"nodeType":"ExpressionStatement","src":"1455:12:4"},{"expression":{"id":1693,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1691,"name":"eth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1659,"src":"1477:3:4","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":1692,"name":"_eth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1672,"src":"1483:4:4","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"src":"1477:10:4","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"id":1694,"nodeType":"ExpressionStatement","src":"1477:10:4"}]},"documentation":{"id":1660,"nodeType":"StructuredDocumentation","src":"687:492:4","text":"@notice Constructor to initialize the LendingPool contract with addresses for dependencies.\n @dev Sets the contract addresses for GlobalLedger, InterestManager, Oracle, USDT, and ETH tokens.\n @param _globalLedger The address of the GlobalLedger contract.\n @param _interestManager The address of the InterestManager contract.\n @param _oracle The address of the Oracle contract.\n @param _usdt The TokenId for USDT.\n @param _eth The TokenId for ETH."},"id":1696,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":1673,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1662,"mutability":"mutable","name":"_globalLedger","nameLocation":"1213:13:4","nodeType":"VariableDeclaration","scope":1696,"src":"1205:21:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1661,"name":"address","nodeType":"ElementaryTypeName","src":"1205:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1664,"mutability":"mutable","name":"_interestManager","nameLocation":"1244:16:4","nodeType":"VariableDeclaration","scope":1696,"src":"1236:24:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1663,"name":"address","nodeType":"ElementaryTypeName","src":"1236:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1666,"mutability":"mutable","name":"_oracle","nameLocation":"1278:7:4","nodeType":"VariableDeclaration","scope":1696,"src":"1270:15:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1665,"name":"address","nodeType":"ElementaryTypeName","src":"1270:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1669,"mutability":"mutable","name":"_usdt","nameLocation":"1303:5:4","nodeType":"VariableDeclaration","scope":1696,"src":"1295:13:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"},"typeName":{"id":1668,"nodeType":"UserDefinedTypeName","pathNode":{"id":1667,"name":"TokenId","nameLocations":["1295:7:4"],"nodeType":"IdentifierPath","referencedDeclaration":3,"src":"1295:7:4"},"referencedDeclaration":3,"src":"1295:7:4","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"visibility":"internal"},{"constant":false,"id":1672,"mutability":"mutable","name":"_eth","nameLocation":"1326:4:4","nodeType":"VariableDeclaration","scope":1696,"src":"1318:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"},"typeName":{"id":1671,"nodeType":"UserDefinedTypeName","pathNode":{"id":1670,"name":"TokenId","nameLocations":["1318:7:4"],"nodeType":"IdentifierPath","referencedDeclaration":3,"src":"1318:7:4"},"referencedDeclaration":3,"src":"1318:7:4","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"visibility":"internal"}],"src":"1195:141:4"},"returnParameters":{"id":1674,"nodeType":"ParameterList","parameters":[],"src":"1337:0:4"},"scope":2385,"src":"1184:310:4","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":1740,"nodeType":"Block","src":"1701:943:4","statements":[{"assignments":[1705],"declarations":[{"constant":false,"id":1705,"mutability":"mutable","name":"tokens","nameLocation":"1792:6:4","nodeType":"VariableDeclaration","scope":1740,"src":"1773:25:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Token_$120_memory_ptr_$dyn_memory_ptr","typeString":"struct Nil.Token[]"},"typeName":{"baseType":{"id":1703,"nodeType":"UserDefinedTypeName","pathNode":{"id":1702,"name":"Nil.Token","nameLocations":["1773:3:4","1777:5:4"],"nodeType":"IdentifierPath","referencedDeclaration":120,"src":"1773:9:4"},"referencedDeclaration":120,"src":"1773:9:4","typeDescriptions":{"typeIdentifier":"t_struct$_Token_$120_storage_ptr","typeString":"struct Nil.Token"}},"id":1704,"nodeType":"ArrayTypeName","src":"1773:11:4","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Token_$120_storage_$dyn_storage_ptr","typeString":"struct Nil.Token[]"}},"visibility":"internal"}],"documentation":"Retrieve the tokens being sent in the transaction","id":1709,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":1706,"name":"Nil","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":885,"src":"1801:3:4","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Nil_$885_$","typeString":"type(library Nil)"}},"id":1707,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1805:9:4","memberName":"txnTokens","nodeType":"MemberAccess","referencedDeclaration":569,"src":"1801:13:4","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$_t_array$_t_struct$_Token_$120_memory_ptr_$dyn_memory_ptr_$","typeString":"function () returns (struct Nil.Token memory[] memory)"}},"id":1708,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1801:15:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Token_$120_memory_ptr_$dyn_memory_ptr","typeString":"struct Nil.Token memory[] memory"}},"nodeType":"VariableDeclarationStatement","src":"1773:43:4"},{"assignments":[1712],"declarations":[{"constant":false,"id":1712,"mutability":"mutable","name":"callData","nameLocation":"2119:8:4","nodeType":"VariableDeclaration","scope":1740,"src":"2106:21:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1711,"name":"bytes","nodeType":"ElementaryTypeName","src":"2106:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"documentation":"@notice Encoding the call to the GlobalLedger to record the deposit\n @dev The deposit details (user address, token type, and amount) are encoded for GlobalLedger.\n @param callData The encoded call data for recording the deposit in GlobalLedger.","id":1727,"initialValue":{"arguments":[{"hexValue":"7265636f72644465706f73697428616464726573732c616464726573732c75696e7432353629","id":1715,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2167:40:4","typeDescriptions":{"typeIdentifier":"t_stringliteral_e85993074eabc93859b68d342c4c6d0694bd710445932101a4e4b74e8065dec4","typeString":"literal_string \"recordDeposit(address,address,uint256)\""},"value":"recordDeposit(address,address,uint256)"},{"expression":{"id":1716,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2221:3:4","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":1717,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2225:6:4","memberName":"sender","nodeType":"MemberAccess","src":"2221:10:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"baseExpression":{"id":1718,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1705,"src":"2245:6:4","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Token_$120_memory_ptr_$dyn_memory_ptr","typeString":"struct Nil.Token memory[] memory"}},"id":1720,"indexExpression":{"hexValue":"30","id":1719,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2252:1:4","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2245:9:4","typeDescriptions":{"typeIdentifier":"t_struct$_Token_$120_memory_ptr","typeString":"struct Nil.Token memory"}},"id":1721,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2255:2:4","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":117,"src":"2245:12:4","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},{"expression":{"baseExpression":{"id":1722,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1705,"src":"2314:6:4","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Token_$120_memory_ptr_$dyn_memory_ptr","typeString":"struct Nil.Token memory[] memory"}},"id":1724,"indexExpression":{"hexValue":"30","id":1723,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2321:1:4","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2314:9:4","typeDescriptions":{"typeIdentifier":"t_struct$_Token_$120_memory_ptr","typeString":"struct Nil.Token memory"}},"id":1725,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2324:6:4","memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":119,"src":"2314:16:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_e85993074eabc93859b68d342c4c6d0694bd710445932101a4e4b74e8065dec4","typeString":"literal_string \"recordDeposit(address,address,uint256)\""},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":1713,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2130:3:4","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":1714,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2134:19:4","memberName":"encodeWithSignature","nodeType":"MemberAccess","src":"2130:23:4","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (string memory) pure returns (bytes memory)"}},"id":1726,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2130:253:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"2106:277:4"},{"documentation":"@notice Making an asynchronous call to the GlobalLedger to record the deposit\n @dev This ensures that the user's deposit is recorded in GlobalLedger asynchronously.","expression":{"arguments":[{"id":1731,"name":"globalLedger","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1649,"src":"2596:12:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":1734,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2618:4:4","typeDescriptions":{"typeIdentifier":"t_contract$_LendingPool_$2385","typeString":"contract LendingPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_LendingPool_$2385","typeString":"contract LendingPool"}],"id":1733,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2610:7:4","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1732,"name":"address","nodeType":"ElementaryTypeName","src":"2610:7:4","typeDescriptions":{}}},"id":1735,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2610:13:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":1736,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2625:1:4","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":1737,"name":"callData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1712,"src":"2628:8:4","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":1728,"name":"Nil","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":885,"src":"2582:3:4","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Nil_$885_$","typeString":"type(library Nil)"}},"id":1730,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2586:9:4","memberName":"asyncCall","nodeType":"MemberAccess","referencedDeclaration":242,"src":"2582:13:4","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,uint256,bytes memory)"}},"id":1738,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2582:55:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1739,"nodeType":"ExpressionStatement","src":"2582:55:4"}]},"documentation":{"id":1697,"nodeType":"StructuredDocumentation","src":"1500:162:4","text":"@notice Deposit function to deposit tokens into the lending pool.\n @dev The deposited tokens are recorded in the GlobalLedger via an asynchronous call."},"functionSelector":"d0e30db0","id":1741,"implemented":true,"kind":"function","modifiers":[],"name":"deposit","nameLocation":"1676:7:4","nodeType":"FunctionDefinition","parameters":{"id":1698,"nodeType":"ParameterList","parameters":[],"src":"1683:2:4"},"returnParameters":{"id":1699,"nodeType":"ParameterList","parameters":[],"src":"1701:0:4"},"scope":2385,"src":"1667:977:4","stateMutability":"payable","virtual":false,"visibility":"public"},{"body":{"id":1821,"nodeType":"Block","src":"3071:1886:4","statements":[{"documentation":"@notice Ensure the token being borrowed is either USDT or ETH\n @dev Prevents invalid token types from being borrowed.","expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":1757,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"},"function":1152,"id":1753,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1751,"name":"borrowToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1747,"src":"3230:11:4","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":1752,"name":"usdt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1656,"src":"3245:4:4","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"src":"3230:19:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"},"function":1152,"id":1756,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1754,"name":"borrowToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1747,"src":"3253:11:4","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":1755,"name":"eth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1659,"src":"3268:3:4","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"src":"3253:18:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3230:41:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"496e76616c696420746f6b656e","id":1758,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3273:15:4","typeDescriptions":{"typeIdentifier":"t_stringliteral_5e70ebd1d4072d337a7fabaa7bda70fa2633d6e3f89d5cb725a16b10d07e54c6","typeString":"literal_string \"Invalid token\""},"value":"Invalid token"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5e70ebd1d4072d337a7fabaa7bda70fa2633d6e3f89d5cb725a16b10d07e54c6","typeString":"literal_string \"Invalid token\""}],"id":1750,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"3222:7:4","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1759,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3222:67:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1760,"nodeType":"ExpressionStatement","src":"3222:67:4"},{"documentation":"@notice Ensure that the LendingPool has enough liquidity of the requested borrow token\n @dev Checks the LendingPool's balance to confirm it has enough tokens to fulfill the borrow request.","expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1771,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":1766,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3558:4:4","typeDescriptions":{"typeIdentifier":"t_contract$_LendingPool_$2385","typeString":"contract LendingPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_LendingPool_$2385","typeString":"contract LendingPool"}],"id":1765,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3550:7:4","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1764,"name":"address","nodeType":"ElementaryTypeName","src":"3550:7:4","typeDescriptions":{}}},"id":1767,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3550:13:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1768,"name":"borrowToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1747,"src":"3565:11:4","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}],"expression":{"id":1762,"name":"Nil","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":885,"src":"3533:3:4","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Nil_$885_$","typeString":"type(library Nil)"}},"id":1763,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3537:12:4","memberName":"tokenBalance","nodeType":"MemberAccess","referencedDeclaration":554,"src":"3533:16:4","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_userDefinedValueType$_TokenId_$3_$returns$_t_uint256_$","typeString":"function (address,TokenId) view returns (uint256)"}},"id":1769,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3533:44:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":1770,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1744,"src":"3581:6:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3533:54:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"496e73756666696369656e742066756e6473","id":1772,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3601:20:4","typeDescriptions":{"typeIdentifier":"t_stringliteral_63452317cb6d597bef833f023ed2962a84dbd24c571e27629ed1e3056d6cfd8d","typeString":"literal_string \"Insufficient funds\""},"value":"Insufficient funds"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_63452317cb6d597bef833f023ed2962a84dbd24c571e27629ed1e3056d6cfd8d","typeString":"literal_string \"Insufficient funds\""}],"id":1761,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"3512:7:4","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1773,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3512:119:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1774,"nodeType":"ExpressionStatement","src":"3512:119:4"},{"assignments":[1778],"declarations":[{"constant":false,"id":1778,"mutability":"mutable","name":"collateralToken","nameLocation":"3827:15:4","nodeType":"VariableDeclaration","scope":1821,"src":"3819:23:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"},"typeName":{"id":1777,"nodeType":"UserDefinedTypeName","pathNode":{"id":1776,"name":"TokenId","nameLocations":["3819:7:4"],"nodeType":"IdentifierPath","referencedDeclaration":3,"src":"3819:7:4"},"referencedDeclaration":3,"src":"3819:7:4","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"visibility":"internal"}],"documentation":"@notice Determine which collateral token will be used (opposite of the borrow token)\n @dev Identifies the collateral token by comparing the borrow token.","id":1786,"initialValue":{"condition":{"components":[{"commonType":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"},"function":1152,"id":1781,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1779,"name":"borrowToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1747,"src":"3846:11:4","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":1780,"name":"usdt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1656,"src":"3861:4:4","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"src":"3846:19:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":1782,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3845:21:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":1784,"name":"usdt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1656,"src":"3875:4:4","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"id":1785,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"3845:34:4","trueExpression":{"id":1783,"name":"eth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1659,"src":"3869:3:4","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"nodeType":"VariableDeclarationStatement","src":"3819:60:4"},{"assignments":[1789],"declarations":[{"constant":false,"id":1789,"mutability":"mutable","name":"callData","nameLocation":"4169:8:4","nodeType":"VariableDeclaration","scope":1821,"src":"4156:21:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1788,"name":"bytes","nodeType":"ElementaryTypeName","src":"4156:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"documentation":"@notice Prepare a call to the Oracle to get the price of the borrow token\n @dev The price of the borrow token is fetched from the Oracle to calculate collateral.\n @param callData The encoded data to fetch the price from the Oracle.","id":1795,"initialValue":{"arguments":[{"hexValue":"6765745072696365286164647265737329","id":1792,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4217:19:4","typeDescriptions":{"typeIdentifier":"t_stringliteral_41976e0924e084835685c91898001f69cccb35bc0c6e18e30ce86f3869f2a8a4","typeString":"literal_string \"getPrice(address)\""},"value":"getPrice(address)"},{"id":1793,"name":"borrowToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1747,"src":"4250:11:4","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_41976e0924e084835685c91898001f69cccb35bc0c6e18e30ce86f3869f2a8a4","typeString":"literal_string \"getPrice(address)\""},{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}],"expression":{"id":1790,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4180:3:4","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":1791,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4184:19:4","memberName":"encodeWithSignature","nodeType":"MemberAccess","src":"4180:23:4","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (string memory) pure returns (bytes memory)"}},"id":1794,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4180:91:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"4156:115:4"},{"assignments":[1798],"declarations":[{"constant":false,"id":1798,"mutability":"mutable","name":"context","nameLocation":"4496:7:4","nodeType":"VariableDeclaration","scope":1821,"src":"4483:20:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1797,"name":"bytes","nodeType":"ElementaryTypeName","src":"4483:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"documentation":"@notice Encoding the context to process the loan after the price is fetched\n @dev The context contains the borrower’s details, loan amount, borrow token, and collateral token.","id":1810,"initialValue":{"arguments":[{"expression":{"expression":{"id":1801,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4542:4:4","typeDescriptions":{"typeIdentifier":"t_contract$_LendingPool_$2385","typeString":"contract LendingPool"}},"id":1802,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4547:11:4","memberName":"processLoan","nodeType":"MemberAccess","referencedDeclaration":1922,"src":"4542:16:4","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_bool_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bool,bytes memory,bytes memory) payable external"}},"id":1803,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4559:8:4","memberName":"selector","nodeType":"MemberAccess","src":"4542:25:4","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"expression":{"id":1804,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4581:3:4","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":1805,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4585:6:4","memberName":"sender","nodeType":"MemberAccess","src":"4581:10:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1806,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1744,"src":"4605:6:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1807,"name":"borrowToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1747,"src":"4625:11:4","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},{"id":1808,"name":"collateralToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1778,"src":"4650:15:4","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"},{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}],"expression":{"id":1799,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4506:3:4","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":1800,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4510:18:4","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"4506:22:4","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":1809,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4506:169:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"4483:192:4"},{"documentation":"@notice Send a request to the Oracle to get the price of the borrow token.\n @dev This request is processed with a fee for the transaction, allowing the system to fetch the token price.","expression":{"arguments":[{"id":1814,"name":"oracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1653,"src":"4910:6:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":1815,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4918:1:4","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"395f3030305f303030","id":1816,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4921:9:4","typeDescriptions":{"typeIdentifier":"t_rational_9000000_by_1","typeString":"int_const 9000000"},"value":"9_000_000"},{"id":1817,"name":"context","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1798,"src":"4932:7:4","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":1818,"name":"callData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1789,"src":"4941:8:4","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_9000000_by_1","typeString":"int_const 9000000"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":1811,"name":"Nil","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":885,"src":"4894:3:4","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Nil_$885_$","typeString":"type(library Nil)"}},"id":1813,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4898:11:4","memberName":"sendRequest","nodeType":"MemberAccess","referencedDeclaration":426,"src":"4894:15:4","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,uint256,uint256,bytes memory,bytes memory)"}},"id":1819,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4894:56:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1820,"nodeType":"ExpressionStatement","src":"4894:56:4"}]},"documentation":{"id":1742,"nodeType":"StructuredDocumentation","src":"2650:348:4","text":"@notice Borrow function allows a user to borrow tokens (either USDT or ETH).\n @dev Ensures sufficient liquidity, checks collateral, and processes the loan after fetching the price from the Oracle.\n @param amount The amount of the token to borrow.\n @param borrowToken The token the user wants to borrow (either USDT or ETH)."},"functionSelector":"4b3fd148","id":1822,"implemented":true,"kind":"function","modifiers":[],"name":"borrow","nameLocation":"3012:6:4","nodeType":"FunctionDefinition","parameters":{"id":1748,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1744,"mutability":"mutable","name":"amount","nameLocation":"3027:6:4","nodeType":"VariableDeclaration","scope":1822,"src":"3019:14:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1743,"name":"uint256","nodeType":"ElementaryTypeName","src":"3019:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1747,"mutability":"mutable","name":"borrowToken","nameLocation":"3043:11:4","nodeType":"VariableDeclaration","scope":1822,"src":"3035:19:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"},"typeName":{"id":1746,"nodeType":"UserDefinedTypeName","pathNode":{"id":1745,"name":"TokenId","nameLocations":["3035:7:4"],"nodeType":"IdentifierPath","referencedDeclaration":3,"src":"3035:7:4"},"referencedDeclaration":3,"src":"3035:7:4","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"visibility":"internal"}],"src":"3018:37:4"},"returnParameters":{"id":1749,"nodeType":"ParameterList","parameters":[],"src":"3071:0:4"},"scope":2385,"src":"3003:1954:4","stateMutability":"payable","virtual":false,"visibility":"public"},{"body":{"id":1921,"nodeType":"Block","src":"5550:2387:4","statements":[{"documentation":"@notice Ensure the Oracle call was successful\n @dev Verifies that the price data was successfully retrieved from the Oracle.","expression":{"arguments":[{"id":1833,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1825,"src":"5716:7:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f7261636c652063616c6c206661696c6564","id":1834,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5725:20:4","typeDescriptions":{"typeIdentifier":"t_stringliteral_d1fb6772e68e95398f9681498a29c640959f41ec4eb6144ec9e8af5127237ec1","typeString":"literal_string \"Oracle call failed\""},"value":"Oracle call failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_d1fb6772e68e95398f9681498a29c640959f41ec4eb6144ec9e8af5127237ec1","typeString":"literal_string \"Oracle call failed\""}],"id":1832,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"5708:7:4","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1835,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5708:38:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1836,"nodeType":"ExpressionStatement","src":"5708:38:4"},{"assignments":[1838,1840,1843,1846],"declarations":[{"constant":false,"id":1838,"mutability":"mutable","name":"borrower","nameLocation":"5978:8:4","nodeType":"VariableDeclaration","scope":1921,"src":"5970:16:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1837,"name":"address","nodeType":"ElementaryTypeName","src":"5970:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1840,"mutability":"mutable","name":"amount","nameLocation":"6008:6:4","nodeType":"VariableDeclaration","scope":1921,"src":"6000:14:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1839,"name":"uint256","nodeType":"ElementaryTypeName","src":"6000:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1843,"mutability":"mutable","name":"borrowToken","nameLocation":"6036:11:4","nodeType":"VariableDeclaration","scope":1921,"src":"6028:19:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"},"typeName":{"id":1842,"nodeType":"UserDefinedTypeName","pathNode":{"id":1841,"name":"TokenId","nameLocations":["6028:7:4"],"nodeType":"IdentifierPath","referencedDeclaration":3,"src":"6028:7:4"},"referencedDeclaration":3,"src":"6028:7:4","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"visibility":"internal"},{"constant":false,"id":1846,"mutability":"mutable","name":"collateralToken","nameLocation":"6069:15:4","nodeType":"VariableDeclaration","scope":1921,"src":"6061:23:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"},"typeName":{"id":1845,"nodeType":"UserDefinedTypeName","pathNode":{"id":1844,"name":"TokenId","nameLocations":["6061:7:4"],"nodeType":"IdentifierPath","referencedDeclaration":3,"src":"6061:7:4"},"referencedDeclaration":3,"src":"6061:7:4","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"visibility":"internal"}],"documentation":"@notice Decode the context to extract borrower details, loan amount, and collateral token\n @dev Decodes the context passed from the borrow function to retrieve necessary data.","id":1858,"initialValue":{"arguments":[{"id":1849,"name":"context","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1829,"src":"6108:7:4","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":1851,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6118:7:4","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1850,"name":"address","nodeType":"ElementaryTypeName","src":"6118:7:4","typeDescriptions":{}}},{"id":1853,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6127:7:4","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":1852,"name":"uint256","nodeType":"ElementaryTypeName","src":"6127:7:4","typeDescriptions":{}}},{"id":1854,"name":"TokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3,"src":"6136:7:4","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_TokenId_$3_$","typeString":"type(TokenId)"}},{"id":1855,"name":"TokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3,"src":"6145:7:4","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_TokenId_$3_$","typeString":"type(TokenId)"}}],"id":1856,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"6117:36:4","typeDescriptions":{"typeIdentifier":"t_tuple$_t_type$_t_address_$_$_t_type$_t_uint256_$_$_t_type$_t_userDefinedValueType$_TokenId_$3_$_$_t_type$_t_userDefinedValueType$_TokenId_$3_$_$","typeString":"tuple(type(address),type(uint256),type(TokenId),type(TokenId))"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_tuple$_t_type$_t_address_$_$_t_type$_t_uint256_$_$_t_type$_t_userDefinedValueType$_TokenId_$3_$_$_t_type$_t_userDefinedValueType$_TokenId_$3_$_$","typeString":"tuple(type(address),type(uint256),type(TokenId),type(TokenId))"}],"expression":{"id":1847,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"6097:3:4","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":1848,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6101:6:4","memberName":"decode","nodeType":"MemberAccess","src":"6097:10:4","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":1857,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6097:57:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_payable_$_t_uint256_$_t_userDefinedValueType$_TokenId_$3_$_t_userDefinedValueType$_TokenId_$3_$","typeString":"tuple(address payable,uint256,TokenId,TokenId)"}},"nodeType":"VariableDeclarationStatement","src":"5956:198:4"},{"assignments":[1861],"declarations":[{"constant":false,"id":1861,"mutability":"mutable","name":"borrowTokenPrice","nameLocation":"6325:16:4","nodeType":"VariableDeclaration","scope":1921,"src":"6317:24:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1860,"name":"uint256","nodeType":"ElementaryTypeName","src":"6317:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"documentation":"@notice Decode the price data returned from the Oracle\n @dev The returned price data is used to calculate the loan value in USD.","id":1869,"initialValue":{"arguments":[{"id":1864,"name":"returnData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1827,"src":"6355:10:4","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":1866,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6368:7:4","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":1865,"name":"uint256","nodeType":"ElementaryTypeName","src":"6368:7:4","typeDescriptions":{}}}],"id":1867,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"6367:9:4","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"expression":{"id":1862,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"6344:3:4","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":1863,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6348:6:4","memberName":"decode","nodeType":"MemberAccess","src":"6344:10:4","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":1868,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6344:33:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6317:60:4"},{"assignments":[1872],"declarations":[{"constant":false,"id":1872,"mutability":"mutable","name":"loanValueInUSD","nameLocation":"6542:14:4","nodeType":"VariableDeclaration","scope":1921,"src":"6534:22:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1871,"name":"uint256","nodeType":"ElementaryTypeName","src":"6534:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"documentation":"@notice Calculate the loan value in USD\n @dev Multiplies the amount by the borrow token price to get the loan value in USD.","id":1876,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1875,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1873,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1840,"src":"6559:6:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":1874,"name":"borrowTokenPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1861,"src":"6568:16:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6559:25:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6534:50:4"},{"assignments":[1879],"declarations":[{"constant":false,"id":1879,"mutability":"mutable","name":"requiredCollateral","nameLocation":"6771:18:4","nodeType":"VariableDeclaration","scope":1921,"src":"6763:26:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1878,"name":"uint256","nodeType":"ElementaryTypeName","src":"6763:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"documentation":"@notice Calculate the required collateral (120% of the loan value)\n @dev The collateral is calculated as 120% of the loan value to mitigate risk.","id":1886,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1885,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1882,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1880,"name":"loanValueInUSD","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1872,"src":"6793:14:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"313230","id":1881,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6810:3:4","typeDescriptions":{"typeIdentifier":"t_rational_120_by_1","typeString":"int_const 120"},"value":"120"},"src":"6793:20:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1883,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6792:22:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"313030","id":1884,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6817:3:4","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"6792:28:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6763:57:4"},{"assignments":[1889],"declarations":[{"constant":false,"id":1889,"mutability":"mutable","name":"ledgerCallData","nameLocation":"7046:14:4","nodeType":"VariableDeclaration","scope":1921,"src":"7033:27:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1888,"name":"bytes","nodeType":"ElementaryTypeName","src":"7033:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"documentation":"@notice Prepare a call to GlobalLedger to check the user's collateral balance\n @dev Fetches the collateral balance from the GlobalLedger contract to ensure sufficient collateral.","id":1896,"initialValue":{"arguments":[{"hexValue":"6765744465706f73697428616464726573732c6164647265737329","id":1892,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7100:29:4","typeDescriptions":{"typeIdentifier":"t_stringliteral_c35082a910e89822aaee90556d18753ace117c1ebe772c2bd572ea1f680fa375","typeString":"literal_string \"getDeposit(address,address)\""},"value":"getDeposit(address,address)"},{"id":1893,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1838,"src":"7143:8:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1894,"name":"collateralToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1846,"src":"7165:15:4","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c35082a910e89822aaee90556d18753ace117c1ebe772c2bd572ea1f680fa375","typeString":"literal_string \"getDeposit(address,address)\""},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}],"expression":{"id":1890,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"7063:3:4","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":1891,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7067:19:4","memberName":"encodeWithSignature","nodeType":"MemberAccess","src":"7063:23:4","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (string memory) pure returns (bytes memory)"}},"id":1895,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7063:127:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"7033:157:4"},{"assignments":[1899],"declarations":[{"constant":false,"id":1899,"mutability":"mutable","name":"ledgerContext","nameLocation":"7405:13:4","nodeType":"VariableDeclaration","scope":1921,"src":"7392:26:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1898,"name":"bytes","nodeType":"ElementaryTypeName","src":"7392:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"documentation":"@notice Encoding the context to finalize the loan once the collateral is validated\n @dev Once the collateral balance is validated, the loan is finalized and processed.","id":1910,"initialValue":{"arguments":[{"expression":{"expression":{"id":1902,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"7457:4:4","typeDescriptions":{"typeIdentifier":"t_contract$_LendingPool_$2385","typeString":"contract LendingPool"}},"id":1903,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7462:12:4","memberName":"finalizeLoan","nodeType":"MemberAccess","referencedDeclaration":2007,"src":"7457:17:4","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_bool_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bool,bytes memory,bytes memory) payable external"}},"id":1904,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7475:8:4","memberName":"selector","nodeType":"MemberAccess","src":"7457:26:4","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":1905,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1838,"src":"7497:8:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1906,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1840,"src":"7519:6:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1907,"name":"borrowToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1843,"src":"7539:11:4","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},{"id":1908,"name":"requiredCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1879,"src":"7564:18:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":1900,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"7421:3:4","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":1901,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7425:18:4","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"7421:22:4","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":1909,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7421:171:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"7392:200:4"},{"documentation":"@notice Send request to GlobalLedger to get the user's collateral\n @dev The fee for this request is retained for processing the collateral validation response.","expression":{"arguments":[{"id":1914,"name":"globalLedger","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1649,"src":"7815:12:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":1915,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7841:1:4","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"365f3030305f303030","id":1916,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7856:9:4","typeDescriptions":{"typeIdentifier":"t_rational_6000000_by_1","typeString":"int_const 6000000"},"value":"6_000_000"},{"id":1917,"name":"ledgerContext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1899,"src":"7879:13:4","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":1918,"name":"ledgerCallData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1889,"src":"7906:14:4","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_6000000_by_1","typeString":"int_const 6000000"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":1911,"name":"Nil","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":885,"src":"7786:3:4","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Nil_$885_$","typeString":"type(library Nil)"}},"id":1913,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7790:11:4","memberName":"sendRequest","nodeType":"MemberAccess","referencedDeclaration":426,"src":"7786:15:4","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,uint256,uint256,bytes memory,bytes memory)"}},"id":1919,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7786:144:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1920,"nodeType":"ExpressionStatement","src":"7786:144:4"}]},"documentation":{"id":1823,"nodeType":"StructuredDocumentation","src":"4963:455:4","text":"@notice Callback function to process the loan after the price data is retrieved from Oracle.\n @dev Ensures that the borrower has enough collateral, calculates the loan value, and initiates loan processing.\n @param success Indicates if the Oracle call was successful.\n @param returnData The price data returned from the Oracle.\n @param context The context data containing borrower details, loan amount, and collateral token."},"functionSelector":"46fe5431","id":1922,"implemented":true,"kind":"function","modifiers":[],"name":"processLoan","nameLocation":"5432:11:4","nodeType":"FunctionDefinition","parameters":{"id":1830,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1825,"mutability":"mutable","name":"success","nameLocation":"5458:7:4","nodeType":"VariableDeclaration","scope":1922,"src":"5453:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1824,"name":"bool","nodeType":"ElementaryTypeName","src":"5453:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1827,"mutability":"mutable","name":"returnData","nameLocation":"5488:10:4","nodeType":"VariableDeclaration","scope":1922,"src":"5475:23:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1826,"name":"bytes","nodeType":"ElementaryTypeName","src":"5475:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":1829,"mutability":"mutable","name":"context","nameLocation":"5521:7:4","nodeType":"VariableDeclaration","scope":1922,"src":"5508:20:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1828,"name":"bytes","nodeType":"ElementaryTypeName","src":"5508:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5443:91:4"},"returnParameters":{"id":1831,"nodeType":"ParameterList","parameters":[],"src":"5550:0:4"},"scope":2385,"src":"5423:2514:4","stateMutability":"payable","virtual":false,"visibility":"public"},{"body":{"id":2006,"nodeType":"Block","src":"8519:1743:4","statements":[{"documentation":"@notice Ensure the collateral check was successful\n @dev Verifies the collateral validation result from GlobalLedger.","expression":{"arguments":[{"id":1933,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1925,"src":"8678:7:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4c65646765722063616c6c206661696c6564","id":1934,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8687:20:4","typeDescriptions":{"typeIdentifier":"t_stringliteral_861cdec3fee07786a90682ca21e94fa9e6a46623c12c0129da5d0ea5d324081c","typeString":"literal_string \"Ledger call failed\""},"value":"Ledger call failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_861cdec3fee07786a90682ca21e94fa9e6a46623c12c0129da5d0ea5d324081c","typeString":"literal_string \"Ledger call failed\""}],"id":1932,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"8670:7:4","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1935,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8670:38:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1936,"nodeType":"ExpressionStatement","src":"8670:38:4"},{"assignments":[1938,1940,1943,1945],"declarations":[{"constant":false,"id":1938,"mutability":"mutable","name":"borrower","nameLocation":"8901:8:4","nodeType":"VariableDeclaration","scope":2006,"src":"8893:16:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1937,"name":"address","nodeType":"ElementaryTypeName","src":"8893:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1940,"mutability":"mutable","name":"amount","nameLocation":"8931:6:4","nodeType":"VariableDeclaration","scope":2006,"src":"8923:14:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1939,"name":"uint256","nodeType":"ElementaryTypeName","src":"8923:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1943,"mutability":"mutable","name":"borrowToken","nameLocation":"8959:11:4","nodeType":"VariableDeclaration","scope":2006,"src":"8951:19:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"},"typeName":{"id":1942,"nodeType":"UserDefinedTypeName","pathNode":{"id":1941,"name":"TokenId","nameLocations":["8951:7:4"],"nodeType":"IdentifierPath","referencedDeclaration":3,"src":"8951:7:4"},"referencedDeclaration":3,"src":"8951:7:4","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"visibility":"internal"},{"constant":false,"id":1945,"mutability":"mutable","name":"requiredCollateral","nameLocation":"8992:18:4","nodeType":"VariableDeclaration","scope":2006,"src":"8984:26:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1944,"name":"uint256","nodeType":"ElementaryTypeName","src":"8984:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"documentation":"@notice Decode the context to extract loan details\n @dev Decodes the context passed from the processLoan function to retrieve loan data.","id":1958,"initialValue":{"arguments":[{"id":1948,"name":"context","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1929,"src":"9034:7:4","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":1950,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9044:7:4","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1949,"name":"address","nodeType":"ElementaryTypeName","src":"9044:7:4","typeDescriptions":{}}},{"id":1952,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9053:7:4","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":1951,"name":"uint256","nodeType":"ElementaryTypeName","src":"9053:7:4","typeDescriptions":{}}},{"id":1953,"name":"TokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3,"src":"9062:7:4","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_TokenId_$3_$","typeString":"type(TokenId)"}},{"id":1955,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9071:7:4","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":1954,"name":"uint256","nodeType":"ElementaryTypeName","src":"9071:7:4","typeDescriptions":{}}}],"id":1956,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"9043:36:4","typeDescriptions":{"typeIdentifier":"t_tuple$_t_type$_t_address_$_$_t_type$_t_uint256_$_$_t_type$_t_userDefinedValueType$_TokenId_$3_$_$_t_type$_t_uint256_$_$","typeString":"tuple(type(address),type(uint256),type(TokenId),type(uint256))"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_tuple$_t_type$_t_address_$_$_t_type$_t_uint256_$_$_t_type$_t_userDefinedValueType$_TokenId_$3_$_$_t_type$_t_uint256_$_$","typeString":"tuple(type(address),type(uint256),type(TokenId),type(uint256))"}],"expression":{"id":1946,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"9023:3:4","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":1947,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9027:6:4","memberName":"decode","nodeType":"MemberAccess","src":"9023:10:4","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":1957,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9023:57:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_payable_$_t_uint256_$_t_userDefinedValueType$_TokenId_$3_$_t_uint256_$","typeString":"tuple(address payable,uint256,TokenId,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"8879:201:4"},{"assignments":[1961],"declarations":[{"constant":false,"id":1961,"mutability":"mutable","name":"userCollateral","nameLocation":"9297:14:4","nodeType":"VariableDeclaration","scope":2006,"src":"9289:22:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1960,"name":"uint256","nodeType":"ElementaryTypeName","src":"9289:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"documentation":"@notice Decode the user's collateral balance from GlobalLedger\n @dev Retrieves the user's collateral balance from the GlobalLedger to compare it with the required collateral.","id":1969,"initialValue":{"arguments":[{"id":1964,"name":"returnData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1927,"src":"9325:10:4","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":1966,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9338:7:4","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":1965,"name":"uint256","nodeType":"ElementaryTypeName","src":"9338:7:4","typeDescriptions":{}}}],"id":1967,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"9337:9:4","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"expression":{"id":1962,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"9314:3:4","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":1963,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9318:6:4","memberName":"decode","nodeType":"MemberAccess","src":"9314:10:4","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":1968,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9314:33:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9289:58:4"},{"documentation":"@notice Check if the user has enough collateral to cover the loan\n @dev Ensures the borrower has sufficient collateral before proceeding with the loan.","expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1973,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1971,"name":"userCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1961,"src":"9554:14:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":1972,"name":"requiredCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1945,"src":"9572:18:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9554:36:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"496e73756666696369656e7420636f6c6c61746572616c","id":1974,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9604:25:4","typeDescriptions":{"typeIdentifier":"t_stringliteral_c9a6548b8b08f3e884692ff4b4c5cb58e1633771e97667c355d207e48aa0a8aa","typeString":"literal_string \"Insufficient collateral\""},"value":"Insufficient collateral"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_c9a6548b8b08f3e884692ff4b4c5cb58e1633771e97667c355d207e48aa0a8aa","typeString":"literal_string \"Insufficient collateral\""}],"id":1970,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"9533:7:4","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1975,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9533:106:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1976,"nodeType":"ExpressionStatement","src":"9533:106:4"},{"assignments":[1979],"declarations":[{"constant":false,"id":1979,"mutability":"mutable","name":"recordLoanCallData","nameLocation":"9792:18:4","nodeType":"VariableDeclaration","scope":2006,"src":"9779:31:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1978,"name":"bytes","nodeType":"ElementaryTypeName","src":"9779:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"documentation":"@notice Record the loan in GlobalLedger\n @dev The loan details are recorded in the GlobalLedger contract.","id":1987,"initialValue":{"arguments":[{"hexValue":"7265636f72644c6f616e28616464726573732c616464726573732c75696e7432353629","id":1982,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9850:37:4","typeDescriptions":{"typeIdentifier":"t_stringliteral_dd6e8c20720fd44575a6bb08f17be69262615c8b1ba9e8e12148801d9b953481","typeString":"literal_string \"recordLoan(address,address,uint256)\""},"value":"recordLoan(address,address,uint256)"},{"id":1983,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1938,"src":"9901:8:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1984,"name":"borrowToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1943,"src":"9923:11:4","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},{"id":1985,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1940,"src":"9948:6:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_dd6e8c20720fd44575a6bb08f17be69262615c8b1ba9e8e12148801d9b953481","typeString":"literal_string \"recordLoan(address,address,uint256)\""},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":1980,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"9813:3:4","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":1981,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9817:19:4","memberName":"encodeWithSignature","nodeType":"MemberAccess","src":"9813:23:4","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (string memory) pure returns (bytes memory)"}},"id":1986,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9813:151:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"9779:185:4"},{"expression":{"arguments":[{"id":1991,"name":"globalLedger","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1649,"src":"9988:12:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":1994,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"10010:4:4","typeDescriptions":{"typeIdentifier":"t_contract$_LendingPool_$2385","typeString":"contract LendingPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_LendingPool_$2385","typeString":"contract LendingPool"}],"id":1993,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10002:7:4","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1992,"name":"address","nodeType":"ElementaryTypeName","src":"10002:7:4","typeDescriptions":{}}},"id":1995,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10002:13:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":1996,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10017:1:4","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":1997,"name":"recordLoanCallData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1979,"src":"10020:18:4","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":1988,"name":"Nil","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":885,"src":"9974:3:4","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Nil_$885_$","typeString":"type(library Nil)"}},"id":1990,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9978:9:4","memberName":"asyncCall","nodeType":"MemberAccess","referencedDeclaration":242,"src":"9974:13:4","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,uint256,bytes memory)"}},"id":1998,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9974:65:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1999,"nodeType":"ExpressionStatement","src":"9974:65:4"},{"documentation":"@notice Send the borrowed tokens to the borrower\n @dev Transfers the loan amount to the borrower's address after finalizing the loan.","expression":{"arguments":[{"id":2001,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1938,"src":"10225:8:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2002,"name":"borrowToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1943,"src":"10235:11:4","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},{"id":2003,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1940,"src":"10248:6:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2000,"name":"sendTokenInternal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1498,"src":"10207:17:4","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_userDefinedValueType$_TokenId_$3_$_t_uint256_$returns$__$","typeString":"function (address,TokenId,uint256)"}},"id":2004,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10207:48:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2005,"nodeType":"ExpressionStatement","src":"10207:48:4"}]},"documentation":{"id":1923,"nodeType":"StructuredDocumentation","src":"7943:443:4","text":"@notice Finalize the loan by ensuring sufficient collateral and recording the loan in GlobalLedger.\n @dev Verifies that the user has enough collateral, processes the loan, and sends the borrowed tokens to the borrower.\n @param success Indicates if the collateral check was successful.\n @param returnData The collateral balance returned from the GlobalLedger.\n @param context The context containing loan details."},"functionSelector":"4761a3ee","id":2007,"implemented":true,"kind":"function","modifiers":[],"name":"finalizeLoan","nameLocation":"8400:12:4","nodeType":"FunctionDefinition","parameters":{"id":1930,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1925,"mutability":"mutable","name":"success","nameLocation":"8427:7:4","nodeType":"VariableDeclaration","scope":2007,"src":"8422:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1924,"name":"bool","nodeType":"ElementaryTypeName","src":"8422:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1927,"mutability":"mutable","name":"returnData","nameLocation":"8457:10:4","nodeType":"VariableDeclaration","scope":2007,"src":"8444:23:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1926,"name":"bytes","nodeType":"ElementaryTypeName","src":"8444:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":1929,"mutability":"mutable","name":"context","nameLocation":"8490:7:4","nodeType":"VariableDeclaration","scope":2007,"src":"8477:20:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1928,"name":"bytes","nodeType":"ElementaryTypeName","src":"8477:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"8412:91:4"},"returnParameters":{"id":1931,"nodeType":"ParameterList","parameters":[],"src":"8519:0:4"},"scope":2385,"src":"8391:1871:4","stateMutability":"payable","virtual":false,"visibility":"public"},{"body":{"id":2057,"nodeType":"Block","src":"10479:1067:4","statements":[{"assignments":[2016],"declarations":[{"constant":false,"id":2016,"mutability":"mutable","name":"tokens","nameLocation":"10643:6:4","nodeType":"VariableDeclaration","scope":2057,"src":"10624:25:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Token_$120_memory_ptr_$dyn_memory_ptr","typeString":"struct Nil.Token[]"},"typeName":{"baseType":{"id":2014,"nodeType":"UserDefinedTypeName","pathNode":{"id":2013,"name":"Nil.Token","nameLocations":["10624:3:4","10628:5:4"],"nodeType":"IdentifierPath","referencedDeclaration":120,"src":"10624:9:4"},"referencedDeclaration":120,"src":"10624:9:4","typeDescriptions":{"typeIdentifier":"t_struct$_Token_$120_storage_ptr","typeString":"struct Nil.Token"}},"id":2015,"nodeType":"ArrayTypeName","src":"10624:11:4","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Token_$120_storage_$dyn_storage_ptr","typeString":"struct Nil.Token[]"}},"visibility":"internal"}],"documentation":"@notice Retrieve the tokens being sent in the transaction\n @dev Retrieves the tokens involved in the repayment.","id":2020,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":2017,"name":"Nil","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":885,"src":"10652:3:4","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Nil_$885_$","typeString":"type(library Nil)"}},"id":2018,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10656:9:4","memberName":"txnTokens","nodeType":"MemberAccess","referencedDeclaration":569,"src":"10652:13:4","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$_t_array$_t_struct$_Token_$120_memory_ptr_$dyn_memory_ptr_$","typeString":"function () returns (struct Nil.Token memory[] memory)"}},"id":2019,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10652:15:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Token_$120_memory_ptr_$dyn_memory_ptr","typeString":"struct Nil.Token memory[] memory"}},"nodeType":"VariableDeclarationStatement","src":"10624:43:4"},{"assignments":[2023],"declarations":[{"constant":false,"id":2023,"mutability":"mutable","name":"callData","nameLocation":"10848:8:4","nodeType":"VariableDeclaration","scope":2057,"src":"10835:21:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2022,"name":"bytes","nodeType":"ElementaryTypeName","src":"10835:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"documentation":"@notice Prepare to query the loan details from GlobalLedger\n @dev Fetches the loan details of the borrower to proceed with repayment.","id":2030,"initialValue":{"arguments":[{"hexValue":"6765744c6f616e44657461696c73286164647265737329","id":2026,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10896:25:4","typeDescriptions":{"typeIdentifier":"t_stringliteral_e8a7da8e823e4229724295d542392e91ab2c19e09403cf5ec93067f0d220f6a4","typeString":"literal_string \"getLoanDetails(address)\""},"value":"getLoanDetails(address)"},{"expression":{"id":2027,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"10935:3:4","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2028,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10939:6:4","memberName":"sender","nodeType":"MemberAccess","src":"10935:10:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_e8a7da8e823e4229724295d542392e91ab2c19e09403cf5ec93067f0d220f6a4","typeString":"literal_string \"getLoanDetails(address)\""},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":2024,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"10859:3:4","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2025,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10863:19:4","memberName":"encodeWithSignature","nodeType":"MemberAccess","src":"10859:23:4","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (string memory) pure returns (bytes memory)"}},"id":2029,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10859:96:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"10835:120:4"},{"assignments":[2033],"declarations":[{"constant":false,"id":2033,"mutability":"mutable","name":"context","nameLocation":"11160:7:4","nodeType":"VariableDeclaration","scope":2057,"src":"11147:20:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2032,"name":"bytes","nodeType":"ElementaryTypeName","src":"11147:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"documentation":"@notice Encoding the context to handle repayment after loan details are fetched\n @dev Once the loan details are retrieved, the repayment amount is processed.","id":2046,"initialValue":{"arguments":[{"expression":{"expression":{"id":2036,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"11206:4:4","typeDescriptions":{"typeIdentifier":"t_contract$_LendingPool_$2385","typeString":"contract LendingPool"}},"id":2037,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11211:15:4","memberName":"handleRepayment","nodeType":"MemberAccess","referencedDeclaration":2140,"src":"11206:20:4","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_bool_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bool,bytes memory,bytes memory) payable external"}},"id":2038,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11227:8:4","memberName":"selector","nodeType":"MemberAccess","src":"11206:29:4","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"expression":{"id":2039,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"11249:3:4","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2040,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11253:6:4","memberName":"sender","nodeType":"MemberAccess","src":"11249:10:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"baseExpression":{"id":2041,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2016,"src":"11273:6:4","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Token_$120_memory_ptr_$dyn_memory_ptr","typeString":"struct Nil.Token memory[] memory"}},"id":2043,"indexExpression":{"hexValue":"30","id":2042,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11280:1:4","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11273:9:4","typeDescriptions":{"typeIdentifier":"t_struct$_Token_$120_memory_ptr","typeString":"struct Nil.Token memory"}},"id":2044,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11283:6:4","memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":119,"src":"11273:16:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":2034,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"11170:3:4","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2035,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11174:18:4","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"11170:22:4","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":2045,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11170:129:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"11147:152:4"},{"documentation":"@notice Send request to GlobalLedger to fetch loan details\n @dev Retrieves the borrower’s loan details before proceeding with the repayment.","expression":{"arguments":[{"id":2050,"name":"globalLedger","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1649,"src":"11492:12:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":2051,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11506:1:4","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"31315f3030305f303030","id":2052,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11509:10:4","typeDescriptions":{"typeIdentifier":"t_rational_11000000_by_1","typeString":"int_const 11000000"},"value":"11_000_000"},{"id":2053,"name":"context","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2033,"src":"11521:7:4","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":2054,"name":"callData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2023,"src":"11530:8:4","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_11000000_by_1","typeString":"int_const 11000000"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":2047,"name":"Nil","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":885,"src":"11476:3:4","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Nil_$885_$","typeString":"type(library Nil)"}},"id":2049,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11480:11:4","memberName":"sendRequest","nodeType":"MemberAccess","referencedDeclaration":426,"src":"11476:15:4","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,uint256,uint256,bytes memory,bytes memory)"}},"id":2055,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11476:63:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2056,"nodeType":"ExpressionStatement","src":"11476:63:4"}]},"documentation":{"id":2008,"nodeType":"StructuredDocumentation","src":"10268:170:4","text":"@notice Repay loan function called by the borrower to repay their loan.\n @dev Initiates the repayment process by retrieving the loan details from GlobalLedger."},"functionSelector":"f966ade7","id":2058,"implemented":true,"kind":"function","modifiers":[],"name":"repayLoan","nameLocation":"10452:9:4","nodeType":"FunctionDefinition","parameters":{"id":2009,"nodeType":"ParameterList","parameters":[],"src":"10461:2:4"},"returnParameters":{"id":2010,"nodeType":"ParameterList","parameters":[],"src":"10479:0:4"},"scope":2385,"src":"10443:1103:4","stateMutability":"payable","virtual":false,"visibility":"public"},{"body":{"id":2139,"nodeType":"Block","src":"12119:1642:4","statements":[{"documentation":"@notice Ensure the GlobalLedger call was successful\n @dev Verifies that the loan details were successfully retrieved from the GlobalLedger.","expression":{"arguments":[{"id":2069,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2061,"src":"12300:7:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4c65646765722063616c6c206661696c6564","id":2070,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12309:20:4","typeDescriptions":{"typeIdentifier":"t_stringliteral_861cdec3fee07786a90682ca21e94fa9e6a46623c12c0129da5d0ea5d324081c","typeString":"literal_string \"Ledger call failed\""},"value":"Ledger call failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_861cdec3fee07786a90682ca21e94fa9e6a46623c12c0129da5d0ea5d324081c","typeString":"literal_string \"Ledger call failed\""}],"id":2068,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"12292:7:4","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2071,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12292:38:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2072,"nodeType":"ExpressionStatement","src":"12292:38:4"},{"assignments":[2074,2076],"declarations":[{"constant":false,"id":2074,"mutability":"mutable","name":"borrower","nameLocation":"12500:8:4","nodeType":"VariableDeclaration","scope":2139,"src":"12492:16:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2073,"name":"address","nodeType":"ElementaryTypeName","src":"12492:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2076,"mutability":"mutable","name":"sentAmount","nameLocation":"12518:10:4","nodeType":"VariableDeclaration","scope":2139,"src":"12510:18:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2075,"name":"uint256","nodeType":"ElementaryTypeName","src":"12510:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"documentation":"@notice Decode context and loan details\n @dev Decodes the context and the return data to retrieve the borrower's loan details.","id":2086,"initialValue":{"arguments":[{"id":2079,"name":"context","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2065,"src":"12556:7:4","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":2081,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12578:7:4","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2080,"name":"address","nodeType":"ElementaryTypeName","src":"12578:7:4","typeDescriptions":{}}},{"id":2083,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12587:7:4","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":2082,"name":"uint256","nodeType":"ElementaryTypeName","src":"12587:7:4","typeDescriptions":{}}}],"id":2084,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"12577:18:4","typeDescriptions":{"typeIdentifier":"t_tuple$_t_type$_t_address_$_$_t_type$_t_uint256_$_$","typeString":"tuple(type(address),type(uint256))"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_tuple$_t_type$_t_address_$_$_t_type$_t_uint256_$_$","typeString":"tuple(type(address),type(uint256))"}],"expression":{"id":2077,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"12532:3:4","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2078,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12536:6:4","memberName":"decode","nodeType":"MemberAccess","src":"12532:10:4","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":2085,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12532:73:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_payable_$_t_uint256_$","typeString":"tuple(address payable,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"12491:114:4"},{"assignments":[2088,2091],"declarations":[{"constant":false,"id":2088,"mutability":"mutable","name":"amount","nameLocation":"12624:6:4","nodeType":"VariableDeclaration","scope":2139,"src":"12616:14:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2087,"name":"uint256","nodeType":"ElementaryTypeName","src":"12616:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2091,"mutability":"mutable","name":"token","nameLocation":"12640:5:4","nodeType":"VariableDeclaration","scope":2139,"src":"12632:13:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"},"typeName":{"id":2090,"nodeType":"UserDefinedTypeName","pathNode":{"id":2089,"name":"TokenId","nameLocations":["12632:7:4"],"nodeType":"IdentifierPath","referencedDeclaration":3,"src":"12632:7:4"},"referencedDeclaration":3,"src":"12632:7:4","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"visibility":"internal"}],"id":2100,"initialValue":{"arguments":[{"id":2094,"name":"returnData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2063,"src":"12673:10:4","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":2096,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12698:7:4","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":2095,"name":"uint256","nodeType":"ElementaryTypeName","src":"12698:7:4","typeDescriptions":{}}},{"id":2097,"name":"TokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3,"src":"12707:7:4","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_TokenId_$3_$","typeString":"type(TokenId)"}}],"id":2098,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"12697:18:4","typeDescriptions":{"typeIdentifier":"t_tuple$_t_type$_t_uint256_$_$_t_type$_t_userDefinedValueType$_TokenId_$3_$_$","typeString":"tuple(type(uint256),type(TokenId))"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_tuple$_t_type$_t_uint256_$_$_t_type$_t_userDefinedValueType$_TokenId_$3_$_$","typeString":"tuple(type(uint256),type(TokenId))"}],"expression":{"id":2092,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"12649:3:4","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2093,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12653:6:4","memberName":"decode","nodeType":"MemberAccess","src":"12649:10:4","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":2099,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12649:76:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_userDefinedValueType$_TokenId_$3_$","typeString":"tuple(uint256,TokenId)"}},"nodeType":"VariableDeclarationStatement","src":"12615:110:4"},{"documentation":"@notice Ensure the borrower has an active loan\n @dev Ensures the borrower has an outstanding loan before proceeding with repayment.","expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2104,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2102,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2088,"src":"12899:6:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":2103,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12908:1:4","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12899:10:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4e6f20616374697665206c6f616e","id":2105,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12911:16:4","typeDescriptions":{"typeIdentifier":"t_stringliteral_5d763a4fa76dcd5af45b10ebcfff84ed4476e04c563aef69c0eaf01d8a5ccfba","typeString":"literal_string \"No active loan\""},"value":"No active loan"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5d763a4fa76dcd5af45b10ebcfff84ed4476e04c563aef69c0eaf01d8a5ccfba","typeString":"literal_string \"No active loan\""}],"id":2101,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"12891:7:4","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2106,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12891:37:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2107,"nodeType":"ExpressionStatement","src":"12891:37:4"},{"assignments":[2110],"declarations":[{"constant":false,"id":2110,"mutability":"mutable","name":"interestCallData","nameLocation":"13122:16:4","nodeType":"VariableDeclaration","scope":2139,"src":"13109:29:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2109,"name":"bytes","nodeType":"ElementaryTypeName","src":"13109:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"documentation":"@notice Request the interest rate from the InterestManager\n @dev Fetches the current interest rate for the loan from the InterestManager contract.","id":2115,"initialValue":{"arguments":[{"hexValue":"676574496e746572657374526174652829","id":2113,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"13178:19:4","typeDescriptions":{"typeIdentifier":"t_stringliteral_5257b566e07ddd0bcc5699fc55de7c75cdef64a94f2d6da4e9b983a1a8c5c0f5","typeString":"literal_string \"getInterestRate()\""},"value":"getInterestRate()"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_5257b566e07ddd0bcc5699fc55de7c75cdef64a94f2d6da4e9b983a1a8c5c0f5","typeString":"literal_string \"getInterestRate()\""}],"expression":{"id":2111,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"13141:3:4","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2112,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"13145:19:4","memberName":"encodeWithSignature","nodeType":"MemberAccess","src":"13141:23:4","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (string memory) pure returns (bytes memory)"}},"id":2114,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13141:66:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"13109:98:4"},{"assignments":[2117],"declarations":[{"constant":false,"id":2117,"mutability":"mutable","name":"interestContext","nameLocation":"13230:15:4","nodeType":"VariableDeclaration","scope":2139,"src":"13217:28:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2116,"name":"bytes","nodeType":"ElementaryTypeName","src":"13217:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":2128,"initialValue":{"arguments":[{"expression":{"expression":{"id":2120,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"13284:4:4","typeDescriptions":{"typeIdentifier":"t_contract$_LendingPool_$2385","typeString":"contract LendingPool"}},"id":2121,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13289:16:4","memberName":"processRepayment","nodeType":"MemberAccess","referencedDeclaration":2241,"src":"13284:21:4","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_bool_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bool,bytes memory,bytes memory) payable external"}},"id":2122,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"13306:8:4","memberName":"selector","nodeType":"MemberAccess","src":"13284:30:4","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":2123,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2074,"src":"13328:8:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2124,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2088,"src":"13350:6:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2125,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2091,"src":"13370:5:4","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},{"id":2126,"name":"sentAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2076,"src":"13389:10:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":2118,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"13248:3:4","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2119,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"13252:18:4","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"13248:22:4","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":2127,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13248:161:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"13217:192:4"},{"documentation":"@notice Send request to InterestManager to fetch interest rate\n @dev This request fetches the interest rate that will be used to calculate the total repayment.","expression":{"arguments":[{"id":2132,"name":"interestManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1651,"src":"13632:15:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":2133,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13661:1:4","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"385f3030305f303030","id":2134,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13676:9:4","typeDescriptions":{"typeIdentifier":"t_rational_8000000_by_1","typeString":"int_const 8000000"},"value":"8_000_000"},{"id":2135,"name":"interestContext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2117,"src":"13699:15:4","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":2136,"name":"interestCallData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2110,"src":"13728:16:4","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_8000000_by_1","typeString":"int_const 8000000"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":2129,"name":"Nil","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":885,"src":"13603:3:4","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Nil_$885_$","typeString":"type(library Nil)"}},"id":2131,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13607:11:4","memberName":"sendRequest","nodeType":"MemberAccess","referencedDeclaration":426,"src":"13603:15:4","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,uint256,uint256,bytes memory,bytes memory)"}},"id":2137,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13603:151:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2138,"nodeType":"ExpressionStatement","src":"13603:151:4"}]},"documentation":{"id":2059,"nodeType":"StructuredDocumentation","src":"11552:431:4","text":"@notice Handle the loan repayment, calculate the interest, and update GlobalLedger.\n @dev Calculates the total repayment (principal + interest) and updates the loan status in GlobalLedger.\n @param success Indicates if the loan details retrieval was successful.\n @param returnData The loan details returned from the GlobalLedger.\n @param context The context containing borrower and repayment details."},"functionSelector":"659dbf99","id":2140,"implemented":true,"kind":"function","modifiers":[],"name":"handleRepayment","nameLocation":"11997:15:4","nodeType":"FunctionDefinition","parameters":{"id":2066,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2061,"mutability":"mutable","name":"success","nameLocation":"12027:7:4","nodeType":"VariableDeclaration","scope":2140,"src":"12022:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2060,"name":"bool","nodeType":"ElementaryTypeName","src":"12022:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2063,"mutability":"mutable","name":"returnData","nameLocation":"12057:10:4","nodeType":"VariableDeclaration","scope":2140,"src":"12044:23:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2062,"name":"bytes","nodeType":"ElementaryTypeName","src":"12044:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2065,"mutability":"mutable","name":"context","nameLocation":"12090:7:4","nodeType":"VariableDeclaration","scope":2140,"src":"12077:20:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2064,"name":"bytes","nodeType":"ElementaryTypeName","src":"12077:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"12012:91:4"},"returnParameters":{"id":2067,"nodeType":"ParameterList","parameters":[],"src":"12119:0:4"},"scope":2385,"src":"11988:1773:4","stateMutability":"payable","virtual":false,"visibility":"public"},{"body":{"id":2240,"nodeType":"Block","src":"14299:2162:4","statements":[{"documentation":"@notice Ensure the interest rate call was successful\n @dev Verifies that the interest rate retrieval was successful.","expression":{"arguments":[{"id":2151,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2143,"src":"14457:7:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"496e74657265737420726174652063616c6c206661696c6564","id":2152,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"14466:27:4","typeDescriptions":{"typeIdentifier":"t_stringliteral_d85130d46c1a2de46bb75a2f735268866acff84e6f303d37b747d39d90cd5ce1","typeString":"literal_string \"Interest rate call failed\""},"value":"Interest rate call failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_d85130d46c1a2de46bb75a2f735268866acff84e6f303d37b747d39d90cd5ce1","typeString":"literal_string \"Interest rate call failed\""}],"id":2150,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"14449:7:4","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2153,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14449:45:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2154,"nodeType":"ExpressionStatement","src":"14449:45:4"},{"assignments":[2156,2158,2161,2163],"declarations":[{"constant":false,"id":2156,"mutability":"mutable","name":"borrower","nameLocation":"14697:8:4","nodeType":"VariableDeclaration","scope":2240,"src":"14689:16:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2155,"name":"address","nodeType":"ElementaryTypeName","src":"14689:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2158,"mutability":"mutable","name":"amount","nameLocation":"14727:6:4","nodeType":"VariableDeclaration","scope":2240,"src":"14719:14:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2157,"name":"uint256","nodeType":"ElementaryTypeName","src":"14719:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2161,"mutability":"mutable","name":"token","nameLocation":"14755:5:4","nodeType":"VariableDeclaration","scope":2240,"src":"14747:13:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"},"typeName":{"id":2160,"nodeType":"UserDefinedTypeName","pathNode":{"id":2159,"name":"TokenId","nameLocations":["14747:7:4"],"nodeType":"IdentifierPath","referencedDeclaration":3,"src":"14747:7:4"},"referencedDeclaration":3,"src":"14747:7:4","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"visibility":"internal"},{"constant":false,"id":2163,"mutability":"mutable","name":"sentAmount","nameLocation":"14782:10:4","nodeType":"VariableDeclaration","scope":2240,"src":"14774:18:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2162,"name":"uint256","nodeType":"ElementaryTypeName","src":"14774:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"documentation":"@notice Decode the repayment details and the interest rate\n @dev Decodes the repayment context and retrieves the interest rate for loan repayment.","id":2176,"initialValue":{"arguments":[{"id":2166,"name":"context","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2147,"src":"14816:7:4","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":2168,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14826:7:4","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2167,"name":"address","nodeType":"ElementaryTypeName","src":"14826:7:4","typeDescriptions":{}}},{"id":2170,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14835:7:4","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":2169,"name":"uint256","nodeType":"ElementaryTypeName","src":"14835:7:4","typeDescriptions":{}}},{"id":2171,"name":"TokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3,"src":"14844:7:4","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_TokenId_$3_$","typeString":"type(TokenId)"}},{"id":2173,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14853:7:4","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":2172,"name":"uint256","nodeType":"ElementaryTypeName","src":"14853:7:4","typeDescriptions":{}}}],"id":2174,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"14825:36:4","typeDescriptions":{"typeIdentifier":"t_tuple$_t_type$_t_address_$_$_t_type$_t_uint256_$_$_t_type$_t_userDefinedValueType$_TokenId_$3_$_$_t_type$_t_uint256_$_$","typeString":"tuple(type(address),type(uint256),type(TokenId),type(uint256))"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_tuple$_t_type$_t_address_$_$_t_type$_t_uint256_$_$_t_type$_t_userDefinedValueType$_TokenId_$3_$_$_t_type$_t_uint256_$_$","typeString":"tuple(type(address),type(uint256),type(TokenId),type(uint256))"}],"expression":{"id":2164,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"14805:3:4","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2165,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14809:6:4","memberName":"decode","nodeType":"MemberAccess","src":"14805:10:4","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":2175,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14805:57:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_payable_$_t_uint256_$_t_userDefinedValueType$_TokenId_$3_$_t_uint256_$","typeString":"tuple(address payable,uint256,TokenId,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"14675:187:4"},{"assignments":[2179],"declarations":[{"constant":false,"id":2179,"mutability":"mutable","name":"interestRate","nameLocation":"15031:12:4","nodeType":"VariableDeclaration","scope":2240,"src":"15023:20:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2178,"name":"uint256","nodeType":"ElementaryTypeName","src":"15023:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"documentation":"@notice Decode the interest rate from the response\n @dev Decodes the interest rate received from the InterestManager contract.","id":2187,"initialValue":{"arguments":[{"id":2182,"name":"returnData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2145,"src":"15057:10:4","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":2184,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15070:7:4","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":2183,"name":"uint256","nodeType":"ElementaryTypeName","src":"15070:7:4","typeDescriptions":{}}}],"id":2185,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"15069:9:4","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"expression":{"id":2180,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"15046:3:4","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2181,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15050:6:4","memberName":"decode","nodeType":"MemberAccess","src":"15046:10:4","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":2186,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15046:33:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"15023:56:4"},{"assignments":[2190],"declarations":[{"constant":false,"id":2190,"mutability":"mutable","name":"totalRepayment","nameLocation":"15267:14:4","nodeType":"VariableDeclaration","scope":2240,"src":"15259:22:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2189,"name":"uint256","nodeType":"ElementaryTypeName","src":"15259:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"documentation":"@notice Calculate the total repayment amount (principal + interest)\n @dev Adds the interest to the principal to calculate the total repayment due.","id":2200,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2199,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2191,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2158,"src":"15284:6:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2197,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2194,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2192,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2158,"src":"15295:6:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":2193,"name":"interestRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2179,"src":"15304:12:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15295:21:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2195,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"15294:23:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"313030","id":2196,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15320:3:4","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"15294:29:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2198,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"15293:31:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15284:40:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"15259:65:4"},{"documentation":"@notice Ensure the borrower has sent sufficient funds for the repayment\n @dev Verifies that the borrower has provided enough funds to repay the loan in full.","expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2204,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2202,"name":"sentAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2163,"src":"15524:10:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":2203,"name":"totalRepayment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2190,"src":"15538:14:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15524:28:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"496e73756666696369656e742066756e6473","id":2205,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"15554:20:4","typeDescriptions":{"typeIdentifier":"t_stringliteral_63452317cb6d597bef833f023ed2962a84dbd24c571e27629ed1e3056d6cfd8d","typeString":"literal_string \"Insufficient funds\""},"value":"Insufficient funds"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_63452317cb6d597bef833f023ed2962a84dbd24c571e27629ed1e3056d6cfd8d","typeString":"literal_string \"Insufficient funds\""}],"id":2201,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"15516:7:4","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2206,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15516:59:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2207,"nodeType":"ExpressionStatement","src":"15516:59:4"},{"assignments":[2210],"declarations":[{"constant":false,"id":2210,"mutability":"mutable","name":"clearLoanCallData","nameLocation":"15760:17:4","nodeType":"VariableDeclaration","scope":2240,"src":"15747:30:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2209,"name":"bytes","nodeType":"ElementaryTypeName","src":"15747:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"documentation":"@notice Clear the loan and release collateral\n @dev Marks the loan as repaid and releases any associated collateral back to the borrower.","id":2218,"initialValue":{"arguments":[{"hexValue":"7265636f72644c6f616e28616464726573732c616464726573732c75696e7432353629","id":2213,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"15817:37:4","typeDescriptions":{"typeIdentifier":"t_stringliteral_dd6e8c20720fd44575a6bb08f17be69262615c8b1ba9e8e12148801d9b953481","typeString":"literal_string \"recordLoan(address,address,uint256)\""},"value":"recordLoan(address,address,uint256)"},{"id":2214,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2156,"src":"15868:8:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2215,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2161,"src":"15890:5:4","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},{"hexValue":"30","id":2216,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15909:1:4","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_dd6e8c20720fd44575a6bb08f17be69262615c8b1ba9e8e12148801d9b953481","typeString":"literal_string \"recordLoan(address,address,uint256)\""},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":2211,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"15780:3:4","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2212,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15784:19:4","memberName":"encodeWithSignature","nodeType":"MemberAccess","src":"15780:23:4","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (string memory) pure returns (bytes memory)"}},"id":2217,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15780:167:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"15747:200:4"},{"assignments":[2220],"declarations":[{"constant":false,"id":2220,"mutability":"mutable","name":"releaseCollateralContext","nameLocation":"15970:24:4","nodeType":"VariableDeclaration","scope":2240,"src":"15957:37:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2219,"name":"bytes","nodeType":"ElementaryTypeName","src":"15957:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":2229,"initialValue":{"arguments":[{"expression":{"expression":{"id":2223,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"16033:4:4","typeDescriptions":{"typeIdentifier":"t_contract$_LendingPool_$2385","typeString":"contract LendingPool"}},"id":2224,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16038:17:4","memberName":"releaseCollateral","nodeType":"MemberAccess","referencedDeclaration":2317,"src":"16033:22:4","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_bool_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bool,bytes memory,bytes memory) payable external"}},"id":2225,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"16056:8:4","memberName":"selector","nodeType":"MemberAccess","src":"16033:31:4","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":2226,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2156,"src":"16078:8:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2227,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2161,"src":"16100:5:4","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}],"expression":{"id":2221,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"15997:3:4","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2222,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"16001:18:4","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"15997:22:4","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":2228,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15997:118:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"15957:158:4"},{"documentation":"@notice Send request to GlobalLedger to update the loan status\n @dev Updates the loan status to indicate repayment completion in the GlobalLedger.","expression":{"arguments":[{"id":2233,"name":"globalLedger","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1649,"src":"16325:12:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":2234,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16351:1:4","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"365f3030305f303030","id":2235,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16366:9:4","typeDescriptions":{"typeIdentifier":"t_rational_6000000_by_1","typeString":"int_const 6000000"},"value":"6_000_000"},{"id":2236,"name":"releaseCollateralContext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2220,"src":"16389:24:4","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":2237,"name":"clearLoanCallData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2210,"src":"16427:17:4","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_6000000_by_1","typeString":"int_const 6000000"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":2230,"name":"Nil","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":885,"src":"16296:3:4","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Nil_$885_$","typeString":"type(library Nil)"}},"id":2232,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16300:11:4","memberName":"sendRequest","nodeType":"MemberAccess","referencedDeclaration":426,"src":"16296:15:4","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,uint256,uint256,bytes memory,bytes memory)"}},"id":2238,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16296:158:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2239,"nodeType":"ExpressionStatement","src":"16296:158:4"}]},"documentation":{"id":2141,"nodeType":"StructuredDocumentation","src":"13767:395:4","text":"@notice Process the repayment, calculate the total repayment including interest.\n @dev Finalizes the loan repayment, ensuring the borrower has sent sufficient funds.\n @param success Indicates if the interest rate call was successful.\n @param returnData The interest rate returned from the InterestManager.\n @param context The context containing repayment details."},"functionSelector":"eeaf7d8e","id":2241,"implemented":true,"kind":"function","modifiers":[],"name":"processRepayment","nameLocation":"14176:16:4","nodeType":"FunctionDefinition","parameters":{"id":2148,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2143,"mutability":"mutable","name":"success","nameLocation":"14207:7:4","nodeType":"VariableDeclaration","scope":2241,"src":"14202:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2142,"name":"bool","nodeType":"ElementaryTypeName","src":"14202:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2145,"mutability":"mutable","name":"returnData","nameLocation":"14237:10:4","nodeType":"VariableDeclaration","scope":2241,"src":"14224:23:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2144,"name":"bytes","nodeType":"ElementaryTypeName","src":"14224:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2147,"mutability":"mutable","name":"context","nameLocation":"14270:7:4","nodeType":"VariableDeclaration","scope":2241,"src":"14257:20:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2146,"name":"bytes","nodeType":"ElementaryTypeName","src":"14257:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"14192:91:4"},"returnParameters":{"id":2149,"nodeType":"ParameterList","parameters":[],"src":"14299:0:4"},"scope":2385,"src":"14167:2294:4","stateMutability":"payable","virtual":false,"visibility":"public"},{"body":{"id":2316,"nodeType":"Block","src":"16988:1901:4","statements":[{"documentation":"@notice Ensure the loan clearing was successful\n @dev Verifies the result of clearing the loan in the GlobalLedger.","expression":{"arguments":[{"id":2252,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2244,"src":"17145:7:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4c6f616e20636c656172696e67206661696c6564","id":2253,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"17154:22:4","typeDescriptions":{"typeIdentifier":"t_stringliteral_3090b48de596e766df5262496c061409737d77dae8337809e181eb7a5fbee32b","typeString":"literal_string \"Loan clearing failed\""},"value":"Loan clearing failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3090b48de596e766df5262496c061409737d77dae8337809e181eb7a5fbee32b","typeString":"literal_string \"Loan clearing failed\""}],"id":2251,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"17137:7:4","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2254,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17137:40:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2255,"nodeType":"ExpressionStatement","src":"17137:40:4"},{"documentation":"@notice Silence unused variable warning\n @dev A placeholder for unused variables to avoid compiler warnings.","expression":{"id":2256,"name":"returnData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2246,"src":"17320:10:4","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":2257,"nodeType":"ExpressionStatement","src":"17320:10:4"},{"assignments":[2259,2262],"declarations":[{"constant":false,"id":2259,"mutability":"mutable","name":"borrower","nameLocation":"17531:8:4","nodeType":"VariableDeclaration","scope":2316,"src":"17523:16:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2258,"name":"address","nodeType":"ElementaryTypeName","src":"17523:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2262,"mutability":"mutable","name":"borrowToken","nameLocation":"17549:11:4","nodeType":"VariableDeclaration","scope":2316,"src":"17541:19:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"},"typeName":{"id":2261,"nodeType":"UserDefinedTypeName","pathNode":{"id":2260,"name":"TokenId","nameLocations":["17541:7:4"],"nodeType":"IdentifierPath","referencedDeclaration":3,"src":"17541:7:4"},"referencedDeclaration":3,"src":"17541:7:4","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"visibility":"internal"}],"documentation":"@notice Decode context for borrower and collateral token\n @dev Decodes the context passed from the loan clearing function to retrieve the borrower's details.","id":2271,"initialValue":{"arguments":[{"id":2265,"name":"context","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2248,"src":"17588:7:4","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":2267,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17610:7:4","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2266,"name":"address","nodeType":"ElementaryTypeName","src":"17610:7:4","typeDescriptions":{}}},{"id":2268,"name":"TokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3,"src":"17619:7:4","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_TokenId_$3_$","typeString":"type(TokenId)"}}],"id":2269,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"17609:18:4","typeDescriptions":{"typeIdentifier":"t_tuple$_t_type$_t_address_$_$_t_type$_t_userDefinedValueType$_TokenId_$3_$_$","typeString":"tuple(type(address),type(TokenId))"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_tuple$_t_type$_t_address_$_$_t_type$_t_userDefinedValueType$_TokenId_$3_$_$","typeString":"tuple(type(address),type(TokenId))"}],"expression":{"id":2263,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"17564:3:4","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2264,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"17568:6:4","memberName":"decode","nodeType":"MemberAccess","src":"17564:10:4","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":2270,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17564:73:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_payable_$_t_userDefinedValueType$_TokenId_$3_$","typeString":"tuple(address payable,TokenId)"}},"nodeType":"VariableDeclarationStatement","src":"17522:115:4"},{"assignments":[2275],"declarations":[{"constant":false,"id":2275,"mutability":"mutable","name":"collateralToken","nameLocation":"17824:15:4","nodeType":"VariableDeclaration","scope":2316,"src":"17816:23:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"},"typeName":{"id":2274,"nodeType":"UserDefinedTypeName","pathNode":{"id":2273,"name":"TokenId","nameLocations":["17816:7:4"],"nodeType":"IdentifierPath","referencedDeclaration":3,"src":"17816:7:4"},"referencedDeclaration":3,"src":"17816:7:4","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"visibility":"internal"}],"documentation":"@notice Determine the collateral token (opposite of borrow token)\n @dev Identifies the token being used as collateral based on the borrow token.","id":2283,"initialValue":{"condition":{"components":[{"commonType":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"},"function":1152,"id":2278,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2276,"name":"borrowToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2262,"src":"17843:11:4","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":2277,"name":"usdt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1656,"src":"17858:4:4","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"src":"17843:19:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":2279,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17842:21:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":2281,"name":"usdt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1656,"src":"17872:4:4","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"id":2282,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"17842:34:4","trueExpression":{"id":2280,"name":"eth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1659,"src":"17866:3:4","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"nodeType":"VariableDeclarationStatement","src":"17816:60:4"},{"assignments":[2286],"declarations":[{"constant":false,"id":2286,"mutability":"mutable","name":"getCollateralCallData","nameLocation":"18068:21:4","nodeType":"VariableDeclaration","scope":2316,"src":"18055:34:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2285,"name":"bytes","nodeType":"ElementaryTypeName","src":"18055:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"documentation":"@notice Request collateral amount from GlobalLedger\n @dev Retrieves the amount of collateral associated with the borrower from the GlobalLedger.","id":2293,"initialValue":{"arguments":[{"hexValue":"6765744465706f73697428616464726573732c6164647265737329","id":2289,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"18129:29:4","typeDescriptions":{"typeIdentifier":"t_stringliteral_c35082a910e89822aaee90556d18753ace117c1ebe772c2bd572ea1f680fa375","typeString":"literal_string \"getDeposit(address,address)\""},"value":"getDeposit(address,address)"},{"id":2290,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2259,"src":"18172:8:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2291,"name":"collateralToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2275,"src":"18194:15:4","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c35082a910e89822aaee90556d18753ace117c1ebe772c2bd572ea1f680fa375","typeString":"literal_string \"getDeposit(address,address)\""},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}],"expression":{"id":2287,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"18092:3:4","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2288,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"18096:19:4","memberName":"encodeWithSignature","nodeType":"MemberAccess","src":"18092:23:4","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (string memory) pure returns (bytes memory)"}},"id":2292,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18092:127:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"18055:164:4"},{"assignments":[2296],"declarations":[{"constant":false,"id":2296,"mutability":"mutable","name":"sendCollateralContext","nameLocation":"18396:21:4","nodeType":"VariableDeclaration","scope":2316,"src":"18383:34:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2295,"name":"bytes","nodeType":"ElementaryTypeName","src":"18383:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"documentation":"@notice Context to send collateral to the borrower\n @dev After confirming the collateral balance, it is returned to the borrower.","id":2305,"initialValue":{"arguments":[{"expression":{"expression":{"id":2299,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"18456:4:4","typeDescriptions":{"typeIdentifier":"t_contract$_LendingPool_$2385","typeString":"contract LendingPool"}},"id":2300,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18461:14:4","memberName":"sendCollateral","nodeType":"MemberAccess","referencedDeclaration":2384,"src":"18456:19:4","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_bool_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bool,bytes memory,bytes memory) payable external"}},"id":2301,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"18476:8:4","memberName":"selector","nodeType":"MemberAccess","src":"18456:28:4","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":2302,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2259,"src":"18498:8:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2303,"name":"collateralToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2275,"src":"18520:15:4","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}],"expression":{"id":2297,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"18420:3:4","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2298,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"18424:18:4","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"18420:22:4","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":2304,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18420:125:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"18383:162:4"},{"documentation":"@notice Send request to GlobalLedger to retrieve the collateral\n @dev This request ensures that the correct collateral is available for release.","expression":{"arguments":[{"id":2309,"name":"globalLedger","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1649,"src":"18753:12:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":2310,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18779:1:4","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"335f35305f303030","id":2311,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18794:8:4","typeDescriptions":{"typeIdentifier":"t_rational_350000_by_1","typeString":"int_const 350000"},"value":"3_50_000"},{"id":2312,"name":"sendCollateralContext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2296,"src":"18816:21:4","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":2313,"name":"getCollateralCallData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2286,"src":"18851:21:4","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_350000_by_1","typeString":"int_const 350000"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":2306,"name":"Nil","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":885,"src":"18724:3:4","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Nil_$885_$","typeString":"type(library Nil)"}},"id":2308,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18728:11:4","memberName":"sendRequest","nodeType":"MemberAccess","referencedDeclaration":426,"src":"18724:15:4","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,uint256,uint256,bytes memory,bytes memory)"}},"id":2314,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18724:158:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2315,"nodeType":"ExpressionStatement","src":"18724:158:4"}]},"documentation":{"id":2242,"nodeType":"StructuredDocumentation","src":"16467:383:4","text":"@notice Release the collateral after the loan is repaid.\n @dev Sends the collateral back to the borrower after confirming the loan is fully repaid.\n @param success Indicates if the loan clearing was successful.\n @param returnData The collateral data returned from the GlobalLedger.\n @param context The context containing borrower and collateral token."},"functionSelector":"c513a8f5","id":2317,"implemented":true,"kind":"function","modifiers":[],"name":"releaseCollateral","nameLocation":"16864:17:4","nodeType":"FunctionDefinition","parameters":{"id":2249,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2244,"mutability":"mutable","name":"success","nameLocation":"16896:7:4","nodeType":"VariableDeclaration","scope":2317,"src":"16891:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2243,"name":"bool","nodeType":"ElementaryTypeName","src":"16891:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2246,"mutability":"mutable","name":"returnData","nameLocation":"16926:10:4","nodeType":"VariableDeclaration","scope":2317,"src":"16913:23:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2245,"name":"bytes","nodeType":"ElementaryTypeName","src":"16913:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2248,"mutability":"mutable","name":"context","nameLocation":"16959:7:4","nodeType":"VariableDeclaration","scope":2317,"src":"16946:20:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2247,"name":"bytes","nodeType":"ElementaryTypeName","src":"16946:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"16881:91:4"},"returnParameters":{"id":2250,"nodeType":"ParameterList","parameters":[],"src":"16988:0:4"},"scope":2385,"src":"16855:2034:4","stateMutability":"payable","virtual":false,"visibility":"public"},{"body":{"id":2383,"nodeType":"Block","src":"19405:1336:4","statements":[{"documentation":"@notice Ensure the collateral retrieval was successful\n @dev Verifies that the request to retrieve the collateral was successful.","expression":{"arguments":[{"id":2328,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2320,"src":"19576:7:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4661696c656420746f20726574726965766520636f6c6c61746572616c","id":2329,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"19585:31:4","typeDescriptions":{"typeIdentifier":"t_stringliteral_aa64c7155a2d7617a67fe6eae393f9fd480470e1d8eff68c6bed6fc1a8340de0","typeString":"literal_string \"Failed to retrieve collateral\""},"value":"Failed to retrieve collateral"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_aa64c7155a2d7617a67fe6eae393f9fd480470e1d8eff68c6bed6fc1a8340de0","typeString":"literal_string \"Failed to retrieve collateral\""}],"id":2327,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"19568:7:4","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2330,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19568:49:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2331,"nodeType":"ExpressionStatement","src":"19568:49:4"},{"assignments":[2333,2336],"declarations":[{"constant":false,"id":2333,"mutability":"mutable","name":"borrower","nameLocation":"19799:8:4","nodeType":"VariableDeclaration","scope":2383,"src":"19791:16:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2332,"name":"address","nodeType":"ElementaryTypeName","src":"19791:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2336,"mutability":"mutable","name":"collateralToken","nameLocation":"19817:15:4","nodeType":"VariableDeclaration","scope":2383,"src":"19809:23:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"},"typeName":{"id":2335,"nodeType":"UserDefinedTypeName","pathNode":{"id":2334,"name":"TokenId","nameLocations":["19809:7:4"],"nodeType":"IdentifierPath","referencedDeclaration":3,"src":"19809:7:4"},"referencedDeclaration":3,"src":"19809:7:4","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"visibility":"internal"}],"documentation":"@notice Decode the collateral details\n @dev Decodes the context passed from the releaseCollateral function to retrieve collateral details.","id":2345,"initialValue":{"arguments":[{"id":2339,"name":"context","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2324,"src":"19860:7:4","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":2341,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"19882:7:4","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2340,"name":"address","nodeType":"ElementaryTypeName","src":"19882:7:4","typeDescriptions":{}}},{"id":2342,"name":"TokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3,"src":"19891:7:4","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_TokenId_$3_$","typeString":"type(TokenId)"}}],"id":2343,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"19881:18:4","typeDescriptions":{"typeIdentifier":"t_tuple$_t_type$_t_address_$_$_t_type$_t_userDefinedValueType$_TokenId_$3_$_$","typeString":"tuple(type(address),type(TokenId))"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_tuple$_t_type$_t_address_$_$_t_type$_t_userDefinedValueType$_TokenId_$3_$_$","typeString":"tuple(type(address),type(TokenId))"}],"expression":{"id":2337,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"19836:3:4","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2338,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"19840:6:4","memberName":"decode","nodeType":"MemberAccess","src":"19836:10:4","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":2344,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19836:73:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_payable_$_t_userDefinedValueType$_TokenId_$3_$","typeString":"tuple(address payable,TokenId)"}},"nodeType":"VariableDeclarationStatement","src":"19790:119:4"},{"assignments":[2347],"declarations":[{"constant":false,"id":2347,"mutability":"mutable","name":"collateralAmount","nameLocation":"19927:16:4","nodeType":"VariableDeclaration","scope":2383,"src":"19919:24:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2346,"name":"uint256","nodeType":"ElementaryTypeName","src":"19919:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2355,"initialValue":{"arguments":[{"id":2350,"name":"returnData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2322,"src":"19957:10:4","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":2352,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"19970:7:4","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":2351,"name":"uint256","nodeType":"ElementaryTypeName","src":"19970:7:4","typeDescriptions":{}}}],"id":2353,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"19969:9:4","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"expression":{"id":2348,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"19946:3:4","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2349,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"19950:6:4","memberName":"decode","nodeType":"MemberAccess","src":"19946:10:4","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":2354,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19946:33:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"19919:60:4"},{"documentation":"@notice Ensure there's collateral to release\n @dev Verifies that there is enough collateral to be released.","expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2359,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2357,"name":"collateralAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2347,"src":"20129:16:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":2358,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20148:1:4","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"20129:20:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4e6f20636f6c6c61746572616c20746f2072656c65617365","id":2360,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"20151:26:4","typeDescriptions":{"typeIdentifier":"t_stringliteral_3fd7beff18bd69e51dd8b129356cbb5ad8f81fac6b37646ce614eaa3646b61ed","typeString":"literal_string \"No collateral to release\""},"value":"No collateral to release"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3fd7beff18bd69e51dd8b129356cbb5ad8f81fac6b37646ce614eaa3646b61ed","typeString":"literal_string \"No collateral to release\""}],"id":2356,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"20121:7:4","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2361,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20121:57:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2362,"nodeType":"ExpressionStatement","src":"20121:57:4"},{"documentation":"@notice Ensure sufficient balance in the LendingPool to send collateral\n @dev Verifies that the LendingPool has enough collateral to send to the borrower.","expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2373,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":2368,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"20413:4:4","typeDescriptions":{"typeIdentifier":"t_contract$_LendingPool_$2385","typeString":"contract LendingPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_LendingPool_$2385","typeString":"contract LendingPool"}],"id":2367,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"20405:7:4","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2366,"name":"address","nodeType":"ElementaryTypeName","src":"20405:7:4","typeDescriptions":{}}},"id":2369,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20405:13:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2370,"name":"collateralToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2336,"src":"20420:15:4","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}],"expression":{"id":2364,"name":"Nil","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":885,"src":"20388:3:4","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Nil_$885_$","typeString":"type(library Nil)"}},"id":2365,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20392:12:4","memberName":"tokenBalance","nodeType":"MemberAccess","referencedDeclaration":554,"src":"20388:16:4","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_userDefinedValueType$_TokenId_$3_$returns$_t_uint256_$","typeString":"function (address,TokenId) view returns (uint256)"}},"id":2371,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20388:48:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":2372,"name":"collateralAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2347,"src":"20456:16:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20388:84:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"496e73756666696369656e742066756e6473","id":2374,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"20486:20:4","typeDescriptions":{"typeIdentifier":"t_stringliteral_63452317cb6d597bef833f023ed2962a84dbd24c571e27629ed1e3056d6cfd8d","typeString":"literal_string \"Insufficient funds\""},"value":"Insufficient funds"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_63452317cb6d597bef833f023ed2962a84dbd24c571e27629ed1e3056d6cfd8d","typeString":"literal_string \"Insufficient funds\""}],"id":2363,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"20367:7:4","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2375,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20367:149:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2376,"nodeType":"ExpressionStatement","src":"20367:149:4"},{"documentation":"@notice Send the collateral tokens to the borrower\n @dev Executes the transfer of collateral tokens back to the borrower.","expression":{"arguments":[{"id":2378,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2333,"src":"20690:8:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2379,"name":"collateralToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2336,"src":"20700:15:4","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},{"id":2380,"name":"collateralAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2347,"src":"20717:16:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2377,"name":"sendTokenInternal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1498,"src":"20672:17:4","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_userDefinedValueType$_TokenId_$3_$_t_uint256_$returns$__$","typeString":"function (address,TokenId,uint256)"}},"id":2381,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20672:62:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2382,"nodeType":"ExpressionStatement","src":"20672:62:4"}]},"documentation":{"id":2318,"nodeType":"StructuredDocumentation","src":"18895:375:4","text":"@notice Send the collateral back to the borrower.\n @dev Ensures there is enough collateral to release and then sends the funds back to the borrower.\n @param success Indicates if the collateral retrieval was successful.\n @param returnData The amount of collateral available.\n @param context The context containing borrower and collateral token."},"functionSelector":"c59e1c8f","id":2384,"implemented":true,"kind":"function","modifiers":[],"name":"sendCollateral","nameLocation":"19284:14:4","nodeType":"FunctionDefinition","parameters":{"id":2325,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2320,"mutability":"mutable","name":"success","nameLocation":"19313:7:4","nodeType":"VariableDeclaration","scope":2384,"src":"19308:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2319,"name":"bool","nodeType":"ElementaryTypeName","src":"19308:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2322,"mutability":"mutable","name":"returnData","nameLocation":"19343:10:4","nodeType":"VariableDeclaration","scope":2384,"src":"19330:23:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2321,"name":"bytes","nodeType":"ElementaryTypeName","src":"19330:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2324,"mutability":"mutable","name":"context","nameLocation":"19376:7:4","nodeType":"VariableDeclaration","scope":2384,"src":"19363:20:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2323,"name":"bytes","nodeType":"ElementaryTypeName","src":"19363:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"19298:91:4"},"returnParameters":{"id":2326,"nodeType":"ParameterList","parameters":[],"src":"19405:0:4"},"scope":2385,"src":"19275:1466:4","stateMutability":"payable","virtual":false,"visibility":"public"}],"scope":2386,"src":"489:20254:4","usedErrors":[],"usedEvents":[]}],"src":"39:20705:4"},"id":4},"contracts/Oracle.sol":{"ast":{"absolutePath":"contracts/Oracle.sol","exportedSymbols":{"Nil":[885],"NilBase":[970],"NilBounceable":[978],"NilConfigAbi":[1130],"NilTokenBase":[1515],"Oracle":[2429],"TokenId":[3],"__Precompile__":[1115],"tokenIdEqual":[1152],"tokenIdGreater":[1218],"tokenIdGreaterOrEqual":[1262],"tokenIdLess":[1196],"tokenIdLessOrEqual":[1240],"tokenIdNotEqual":[1174]},"id":2430,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":2387,"literals":["solidity","^","0.8",".28"],"nodeType":"PragmaDirective","src":"39:24:5"},{"absolutePath":"@nilfoundation/smart-contracts/contracts/Nil.sol","file":"@nilfoundation/smart-contracts/contracts/Nil.sol","id":2388,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2430,"sourceUnit":1263,"src":"65:58:5","symbolAliases":[],"unitAlias":""},{"absolutePath":"@nilfoundation/smart-contracts/contracts/NilTokenBase.sol","file":"@nilfoundation/smart-contracts/contracts/NilTokenBase.sol","id":2389,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2430,"sourceUnit":1516,"src":"124:67:5","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":2391,"name":"NilBase","nameLocations":["429:7:5"],"nodeType":"IdentifierPath","referencedDeclaration":970,"src":"429:7:5"},"id":2392,"nodeType":"InheritanceSpecifier","src":"429:7:5"}],"canonicalName":"Oracle","contractDependencies":[],"contractKind":"contract","documentation":{"id":2390,"nodeType":"StructuredDocumentation","src":"193:217:5","text":"@title Oracle\n @dev The Oracle contract provides token price data to the lending protocol.\n It is used to fetch the price of tokens (e.g., USDT, ETH) used for collateral calculations in the lending process."},"fullyImplemented":true,"id":2429,"linearizedBaseContracts":[2429,970],"name":"Oracle","nameLocation":"419:6:5","nodeType":"ContractDefinition","nodes":[{"constant":false,"documentation":{"id":2393,"nodeType":"StructuredDocumentation","src":"443:69:5","text":"@dev Mapping to store the price of each token (TokenId => price)."},"functionSelector":"a8734f0b","id":2398,"mutability":"mutable","name":"rates","nameLocation":"552:5:5","nodeType":"VariableDeclaration","scope":2429,"src":"517:40:5","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_userDefinedValueType$_TokenId_$3_$_t_uint256_$","typeString":"mapping(TokenId => uint256)"},"typeName":{"id":2397,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":2395,"nodeType":"UserDefinedTypeName","pathNode":{"id":2394,"name":"TokenId","nameLocations":["525:7:5"],"nodeType":"IdentifierPath","referencedDeclaration":3,"src":"525:7:5"},"referencedDeclaration":3,"src":"525:7:5","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"nodeType":"Mapping","src":"517:27:5","typeDescriptions":{"typeIdentifier":"t_mapping$_t_userDefinedValueType$_TokenId_$3_$_t_uint256_$","typeString":"mapping(TokenId => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":2396,"name":"uint256","nodeType":"ElementaryTypeName","src":"536:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"public"},{"body":{"id":2413,"nodeType":"Block","src":"966:195:5","statements":[{"documentation":"@notice Store the price of the token in the rates mapping.\n @dev This updates the price of the specified token in the Oracle contract.","expression":{"id":2411,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":2407,"name":"rates","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2398,"src":"1134:5:5","typeDescriptions":{"typeIdentifier":"t_mapping$_t_userDefinedValueType$_TokenId_$3_$_t_uint256_$","typeString":"mapping(TokenId => uint256)"}},"id":2409,"indexExpression":{"id":2408,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2402,"src":"1140:5:5","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1134:12:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2410,"name":"price","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2404,"src":"1149:5:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1134:20:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2412,"nodeType":"ExpressionStatement","src":"1134:20:5"}]},"documentation":{"id":2399,"nodeType":"StructuredDocumentation","src":"564:342:5","text":"@notice Set the price of a token.\n @dev This function allows the price of tokens to be updated in the Oracle contract.\n Only authorized entities (e.g., the contract owner or admin) should be able to set the price.\n @param token The token whose price is being set.\n @param price The new price of the token."},"functionSelector":"00e4768b","id":2414,"implemented":true,"kind":"function","modifiers":[],"name":"setPrice","nameLocation":"920:8:5","nodeType":"FunctionDefinition","parameters":{"id":2405,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2402,"mutability":"mutable","name":"token","nameLocation":"937:5:5","nodeType":"VariableDeclaration","scope":2414,"src":"929:13:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"},"typeName":{"id":2401,"nodeType":"UserDefinedTypeName","pathNode":{"id":2400,"name":"TokenId","nameLocations":["929:7:5"],"nodeType":"IdentifierPath","referencedDeclaration":3,"src":"929:7:5"},"referencedDeclaration":3,"src":"929:7:5","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"visibility":"internal"},{"constant":false,"id":2404,"mutability":"mutable","name":"price","nameLocation":"952:5:5","nodeType":"VariableDeclaration","scope":2414,"src":"944:13:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2403,"name":"uint256","nodeType":"ElementaryTypeName","src":"944:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"928:30:5"},"returnParameters":{"id":2406,"nodeType":"ParameterList","parameters":[],"src":"966:0:5"},"scope":2429,"src":"911:250:5","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":2427,"nodeType":"Block","src":"1505:198:5","statements":[{"documentation":"@notice Return the price of the specified token.\n @dev This function provides the price stored in the `rates` mapping for the given token.","expression":{"baseExpression":{"id":2423,"name":"rates","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2398,"src":"1684:5:5","typeDescriptions":{"typeIdentifier":"t_mapping$_t_userDefinedValueType$_TokenId_$3_$_t_uint256_$","typeString":"mapping(TokenId => uint256)"}},"id":2425,"indexExpression":{"id":2424,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2418,"src":"1690:5:5","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1684:12:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2422,"id":2426,"nodeType":"Return","src":"1677:19:5"}]},"documentation":{"id":2415,"nodeType":"StructuredDocumentation","src":"1167:270:5","text":"@notice Retrieve the price of a token.\n @dev This function allows other contracts (like LendingPool) to access the current price of a token.\n @param token The token whose price is being fetched.\n @return uint256 The price of the specified token."},"functionSelector":"41976e09","id":2428,"implemented":true,"kind":"function","modifiers":[],"name":"getPrice","nameLocation":"1451:8:5","nodeType":"FunctionDefinition","parameters":{"id":2419,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2418,"mutability":"mutable","name":"token","nameLocation":"1468:5:5","nodeType":"VariableDeclaration","scope":2428,"src":"1460:13:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"},"typeName":{"id":2417,"nodeType":"UserDefinedTypeName","pathNode":{"id":2416,"name":"TokenId","nameLocations":["1460:7:5"],"nodeType":"IdentifierPath","referencedDeclaration":3,"src":"1460:7:5"},"referencedDeclaration":3,"src":"1460:7:5","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenId_$3","typeString":"TokenId"}},"visibility":"internal"}],"src":"1459:15:5"},"returnParameters":{"id":2422,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2421,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2428,"src":"1496:7:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2420,"name":"uint256","nodeType":"ElementaryTypeName","src":"1496:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1495:9:5"},"scope":2429,"src":"1442:261:5","stateMutability":"view","virtual":false,"visibility":"public"}],"scope":2430,"src":"410:1295:5","usedErrors":[],"usedEvents":[]}],"src":"39:1667:5"},"id":5}},"contracts":{"@nilfoundation/smart-contracts/contracts/Nil.sol":{"Nil":{"abi":[{"inputs":[],"name":"ASYNC_REQUEST_MIN_GAS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FORWARD_NONE","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FORWARD_PERCENTAGE","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FORWARD_REMAINING","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FORWARD_VALUE","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"IS_INTERNAL_TRANSACTION","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"IS_RESPONSE_TRANSACTION","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LOG","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MANAGE_TOKEN","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VERIFY_SIGNATURE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"608080604052346019576101ad908161001f823930815050f35b600080fdfe608080604052600436101561001357600080fd5b60003560e01c9081631816a5e114610162575080633840cdae1461014b57806342e6d4d714610134578063434b4d631461011d578063620c9317146101065780639bc465a0146100ef578063a167fd5f146100d8578063cbb1c30a146100c0578063d2ec13b2146100a95763df09b8eb1461008d57600080fd5b60003660031901126100a457602060405160038152f35b600080fd5b60003660031901126100a457602060405160028152f35b60003660031901126100a457602060405161c3508152f35b60003660031901126100a457602060405160fe8152f35b60003660031901126100a457602060405160018152f35b60003660031901126100a457602060405160d08152f35b60003660031901126100a457602060405160ff8152f35b60003660031901126100a457602060405160008152f35b60003660031901126100a457602060405160d98152f35b60003660031901126100a4578060da60209252f3fea2646970667358221220898ff60cb7b50b285a30b44445cb43751c54ff66d8e3a54d31e96850b7d3118564736f6c634300081c0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x19 JUMPI PUSH2 0x1AD SWAP1 DUP2 PUSH2 0x1F DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT INVALID PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x13 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x1816A5E1 EQ PUSH2 0x162 JUMPI POP DUP1 PUSH4 0x3840CDAE EQ PUSH2 0x14B JUMPI DUP1 PUSH4 0x42E6D4D7 EQ PUSH2 0x134 JUMPI DUP1 PUSH4 0x434B4D63 EQ PUSH2 0x11D JUMPI DUP1 PUSH4 0x620C9317 EQ PUSH2 0x106 JUMPI DUP1 PUSH4 0x9BC465A0 EQ PUSH2 0xEF JUMPI DUP1 PUSH4 0xA167FD5F EQ PUSH2 0xD8 JUMPI DUP1 PUSH4 0xCBB1C30A EQ PUSH2 0xC0 JUMPI DUP1 PUSH4 0xD2EC13B2 EQ PUSH2 0xA9 JUMPI PUSH4 0xDF09B8EB EQ PUSH2 0x8D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0xA4 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x3 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0xA4 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x2 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0xA4 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH2 0xC350 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0xA4 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0xFE DUP2 MSTORE RETURN JUMPDEST PUSH1 0x0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0xA4 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0xA4 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0xD0 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0xA4 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0xFF DUP2 MSTORE RETURN JUMPDEST PUSH1 0x0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0xA4 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0xA4 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0xD9 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0xA4 JUMPI DUP1 PUSH1 0xDA PUSH1 0x20 SWAP3 MSTORE RETURN INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP10 DUP16 0xF6 0xC 0xB7 0xB5 SIGNEXTEND 0x28 GAS ADDRESS 0xB4 PREVRANDAO GASLIMIT 0xCB NUMBER PUSH22 0x1C54FF66D8E3A54D31E96850B7D3118564736F6C6343 STOP ADDMOD SHR STOP CALLER ","sourceMap":"338:17070:0:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"608080604052600436101561001357600080fd5b60003560e01c9081631816a5e114610162575080633840cdae1461014b57806342e6d4d714610134578063434b4d631461011d578063620c9317146101065780639bc465a0146100ef578063a167fd5f146100d8578063cbb1c30a146100c0578063d2ec13b2146100a95763df09b8eb1461008d57600080fd5b60003660031901126100a457602060405160038152f35b600080fd5b60003660031901126100a457602060405160028152f35b60003660031901126100a457602060405161c3508152f35b60003660031901126100a457602060405160fe8152f35b60003660031901126100a457602060405160018152f35b60003660031901126100a457602060405160d08152f35b60003660031901126100a457602060405160ff8152f35b60003660031901126100a457602060405160008152f35b60003660031901126100a457602060405160d98152f35b60003660031901126100a4578060da60209252f3fea2646970667358221220898ff60cb7b50b285a30b44445cb43751c54ff66d8e3a54d31e96850b7d3118564736f6c634300081c0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x13 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x1816A5E1 EQ PUSH2 0x162 JUMPI POP DUP1 PUSH4 0x3840CDAE EQ PUSH2 0x14B JUMPI DUP1 PUSH4 0x42E6D4D7 EQ PUSH2 0x134 JUMPI DUP1 PUSH4 0x434B4D63 EQ PUSH2 0x11D JUMPI DUP1 PUSH4 0x620C9317 EQ PUSH2 0x106 JUMPI DUP1 PUSH4 0x9BC465A0 EQ PUSH2 0xEF JUMPI DUP1 PUSH4 0xA167FD5F EQ PUSH2 0xD8 JUMPI DUP1 PUSH4 0xCBB1C30A EQ PUSH2 0xC0 JUMPI DUP1 PUSH4 0xD2EC13B2 EQ PUSH2 0xA9 JUMPI PUSH4 0xDF09B8EB EQ PUSH2 0x8D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0xA4 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x3 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0xA4 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x2 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0xA4 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH2 0xC350 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0xA4 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0xFE DUP2 MSTORE RETURN JUMPDEST PUSH1 0x0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0xA4 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0xA4 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0xD0 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0xA4 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0xFF DUP2 MSTORE RETURN JUMPDEST PUSH1 0x0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0xA4 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0xA4 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0xD9 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0xA4 JUMPI DUP1 PUSH1 0xDA PUSH1 0x20 SWAP3 MSTORE RETURN INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP10 DUP16 0xF6 0xC 0xB7 0xB5 SIGNEXTEND 0x28 GAS ADDRESS 0xB4 PREVRANDAO GASLIMIT 0xCB NUMBER PUSH22 0x1C54FF66D8E3A54D31E96850B7D3118564736F6C6343 STOP ADDMOD SHR STOP CALLER ","sourceMap":"338:17070:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;338:17070:0;;;;;;;2058:1;338:17070;;;;;;;;;;-1:-1:-1;;338:17070:0;;;;;;;1927:1;338:17070;;;;;;-1:-1:-1;;338:17070:0;;;;;;;2177:6;338:17070;;;;;;-1:-1:-1;;338:17070:0;;;;;;;515:4;338:17070;;;;;;-1:-1:-1;;338:17070:0;;;;;;;1829:1;338:17070;;;;;;-1:-1:-1;;338:17070:0;;;;;;;642:4;338:17070;;;;;;-1:-1:-1;;338:17070:0;;;;;;;584:4;338:17070;;;;;;-1:-1:-1;;338:17070:0;;;;;;;;;;;;;;-1:-1:-1;;338:17070:0;;;;;;;1205:4;338:17070;;;;;;-1:-1:-1;;338:17070:0;;;;;1254:4;338:17070;;;"},"methodIdentifiers":{"ASYNC_REQUEST_MIN_GAS()":"cbb1c30a","FORWARD_NONE()":"df09b8eb","FORWARD_PERCENTAGE()":"9bc465a0","FORWARD_REMAINING()":"42e6d4d7","FORWARD_VALUE()":"d2ec13b2","IS_INTERNAL_TRANSACTION()":"434b4d63","IS_RESPONSE_TRANSACTION()":"3840cdae","LOG()":"1816a5e1","MANAGE_TOKEN()":"620c9317","VERIFY_SIGNATURE()":"a167fd5f"}},"metadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ASYNC_REQUEST_MIN_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FORWARD_NONE\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FORWARD_PERCENTAGE\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FORWARD_REMAINING\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FORWARD_VALUE\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"IS_INTERNAL_TRANSACTION\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"IS_RESPONSE_TRANSACTION\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"LOG\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MANAGE_TOKEN\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VERIFY_SIGNATURE\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@nilfoundation/smart-contracts/contracts/Nil.sol\":\"Nil\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@nilfoundation/smart-contracts/contracts/Nil.sol\":{\"keccak256\":\"0x21257091b205b27932c0d13a507a9fb21222c59faa8ac896a4f00962e307855d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://dcead2113e9cfc853c80709793b363b8146c8582b423951cd96b24015159f2e9\",\"dweb:/ipfs/QmSmNk1vNsCxZp3EfxqhvjLWYpNdGY8ChVzfBu2JtDwKQX\"]}},\"version\":1}"},"NilBase":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60808060405234601357603a908160198239f35b600080fdfe600080fdfea2646970667358221220e7dfbc6c34530a3c5329951b301754ec88b3b8605b2fc482d6564aae4461711764736f6c634300081c0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x13 JUMPI PUSH1 0x3A SWAP1 DUP2 PUSH1 0x19 DUP3 CODECOPY RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT INVALID PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE7 0xDF 0xBC PUSH13 0x34530A3C5329951B301754EC88 0xB3 0xB8 PUSH1 0x5B 0x2F 0xC4 DUP3 0xD6 JUMP BLOBBASEFEE 0xAE PREVRANDAO PUSH2 0x7117 PUSH5 0x736F6C6343 STOP ADDMOD SHR STOP CALLER ","sourceMap":"17525:1332:0:-:0;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"600080fdfea2646970667358221220e7dfbc6c34530a3c5329951b301754ec88b3b8605b2fc482d6564aae4461711764736f6c634300081c0033","opcodes":"PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE7 0xDF 0xBC PUSH13 0x34530A3C5329951B301754EC88 0xB3 0xB8 PUSH1 0x5B 0x2F 0xC4 DUP3 0xD6 JUMP BLOBBASEFEE 0xAE PREVRANDAO PUSH2 0x7117 PUSH5 0x736F6C6343 STOP ADDMOD SHR STOP CALLER ","sourceMap":"17525:1332:0:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@nilfoundation/smart-contracts/contracts/Nil.sol\":\"NilBase\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@nilfoundation/smart-contracts/contracts/Nil.sol\":{\"keccak256\":\"0x21257091b205b27932c0d13a507a9fb21222c59faa8ac896a4f00962e307855d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://dcead2113e9cfc853c80709793b363b8146c8582b423951cd96b24015159f2e9\",\"dweb:/ipfs/QmSmNk1vNsCxZp3EfxqhvjLWYpNdGY8ChVzfBu2JtDwKQX\"]}},\"version\":1}"},"NilBounceable":{"abi":[{"inputs":[{"internalType":"string","name":"err","type":"string"}],"name":"bounce","outputs":[],"stateMutability":"payable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"bounce(string)":"e2f5df8c"}},"metadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"err\",\"type\":\"string\"}],\"name\":\"bounce\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@nilfoundation/smart-contracts/contracts/Nil.sol\":\"NilBounceable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@nilfoundation/smart-contracts/contracts/Nil.sol\":{\"keccak256\":\"0x21257091b205b27932c0d13a507a9fb21222c59faa8ac896a4f00962e307855d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://dcead2113e9cfc853c80709793b363b8146c8582b423951cd96b24015159f2e9\",\"dweb:/ipfs/QmSmNk1vNsCxZp3EfxqhvjLWYpNdGY8ChVzfBu2JtDwKQX\"]}},\"version\":1}"},"NilConfigAbi":{"abi":[{"inputs":[{"components":[{"components":[{"internalType":"uint8[33]","name":"PublicKey","type":"uint8[33]"},{"internalType":"address","name":"WithdrawalAddress","type":"address"}],"internalType":"struct Nil.ValidatorInfo[]","name":"list","type":"tuple[]"}],"internalType":"struct Nil.ParamValidators","name":"","type":"tuple"}],"name":"curr_validators","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"gasPriceScale","type":"uint256"},{"internalType":"uint256[]","name":"shards","type":"uint256[]"}],"internalType":"struct Nil.ParamGasPrice","name":"","type":"tuple"}],"name":"gas_price","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"608080604052346015576102e6908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c8063978384d1146100f15763e52108f91461003257600080fd5b346100ec5760203660031901126100ec5760043567ffffffffffffffff81116100ec57604060031982360301126100ec5761006b610252565b908060040135825260248101359067ffffffffffffffff82116100ec570190366023830112156100ec576004820135916100ac6100a784610298565b610272565b92602060048186848152019260051b84010101913683116100ec57602401905b8282106100dc5760208401859052005b81358152602091820191016100cc565b600080fd5b346100ec5760203660031901126100ec5760043567ffffffffffffffff81116100ec57602060031982360301126100ec57604051906020820182811067ffffffffffffffff82111761023c5760405280600401359067ffffffffffffffff82116100ec570190366023830112156100ec5760048201356101736100a782610298565b9260206004610440828786815201940283010101903682116100ec57602401915b8183106101a15750505052005b610440833603126100ec576101b4610252565b9036601f850112156100ec57604051610420810181811067ffffffffffffffff82111761023c57604052806104208601913683116100ec5786905b838210610222575050835235906001600160a01b03821682036100ec578260209283610440950152815201920191610194565b813560ff811681036100ec578152602091820191016101ef565b634e487b7160e01b600052604160045260246000fd5b604051906040820182811067ffffffffffffffff82111761023c57604052565b6040519190601f01601f1916820167ffffffffffffffff81118382101761023c57604052565b67ffffffffffffffff811161023c5760051b6020019056fea2646970667358221220de34a4264d612b8581fb95f30d06b59679e1b3558fe1177cfdb313384bf5fd7064736f6c634300081c0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x15 JUMPI PUSH2 0x2E6 SWAP1 DUP2 PUSH2 0x1B DUP3 CODECOPY RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x978384D1 EQ PUSH2 0xF1 JUMPI PUSH4 0xE52108F9 EQ PUSH2 0x32 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xEC JUMPI PUSH1 0x20 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0xEC JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xEC JUMPI PUSH1 0x40 PUSH1 0x3 NOT DUP3 CALLDATASIZE SUB ADD SLT PUSH2 0xEC JUMPI PUSH2 0x6B PUSH2 0x252 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x4 ADD CALLDATALOAD DUP3 MSTORE PUSH1 0x24 DUP2 ADD CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0xEC JUMPI ADD SWAP1 CALLDATASIZE PUSH1 0x23 DUP4 ADD SLT ISZERO PUSH2 0xEC JUMPI PUSH1 0x4 DUP3 ADD CALLDATALOAD SWAP2 PUSH2 0xAC PUSH2 0xA7 DUP5 PUSH2 0x298 JUMP JUMPDEST PUSH2 0x272 JUMP JUMPDEST SWAP3 PUSH1 0x20 PUSH1 0x4 DUP2 DUP7 DUP5 DUP2 MSTORE ADD SWAP3 PUSH1 0x5 SHL DUP5 ADD ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0xEC JUMPI PUSH1 0x24 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xDC JUMPI PUSH1 0x20 DUP5 ADD DUP6 SWAP1 MSTORE STOP JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xCC JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xEC JUMPI PUSH1 0x20 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0xEC JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xEC JUMPI PUSH1 0x20 PUSH1 0x3 NOT DUP3 CALLDATASIZE SUB ADD SLT PUSH2 0xEC JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH1 0x20 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x23C JUMPI PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 ADD CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0xEC JUMPI ADD SWAP1 CALLDATASIZE PUSH1 0x23 DUP4 ADD SLT ISZERO PUSH2 0xEC JUMPI PUSH1 0x4 DUP3 ADD CALLDATALOAD PUSH2 0x173 PUSH2 0xA7 DUP3 PUSH2 0x298 JUMP JUMPDEST SWAP3 PUSH1 0x20 PUSH1 0x4 PUSH2 0x440 DUP3 DUP8 DUP7 DUP2 MSTORE ADD SWAP5 MUL DUP4 ADD ADD ADD SWAP1 CALLDATASIZE DUP3 GT PUSH2 0xEC JUMPI PUSH1 0x24 ADD SWAP2 JUMPDEST DUP2 DUP4 LT PUSH2 0x1A1 JUMPI POP POP POP MSTORE STOP JUMPDEST PUSH2 0x440 DUP4 CALLDATASIZE SUB SLT PUSH2 0xEC JUMPI PUSH2 0x1B4 PUSH2 0x252 JUMP JUMPDEST SWAP1 CALLDATASIZE PUSH1 0x1F DUP6 ADD SLT ISZERO PUSH2 0xEC JUMPI PUSH1 0x40 MLOAD PUSH2 0x420 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x23C JUMPI PUSH1 0x40 MSTORE DUP1 PUSH2 0x420 DUP7 ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0xEC JUMPI DUP7 SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x222 JUMPI POP POP DUP4 MSTORE CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0xEC JUMPI DUP3 PUSH1 0x20 SWAP3 DUP4 PUSH2 0x440 SWAP6 ADD MSTORE DUP2 MSTORE ADD SWAP3 ADD SWAP2 PUSH2 0x194 JUMP JUMPDEST DUP2 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 SUB PUSH2 0xEC JUMPI DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1EF JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH1 0x40 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x23C JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 SWAP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP4 DUP3 LT OR PUSH2 0x23C JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x23C JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDE CALLVALUE LOG4 0x26 0x4D PUSH2 0x2B85 DUP2 0xFB SWAP6 RETURN 0xD MOD 0xB5 SWAP7 PUSH26 0xE1B3558FE1177CFDB313384BF5FD7064736F6C634300081C0033 ","sourceMap":"20239:151:0:-:0;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"allocate_memory":{"entryPoint":626,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_memory_2261":{"entryPoint":594,"id":null,"parameterSlots":0,"returnSlots":1},"array_allocation_size_array_struct_ValidatorInfo_dyn":{"entryPoint":664,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"6080604052600436101561001257600080fd5b60003560e01c8063978384d1146100f15763e52108f91461003257600080fd5b346100ec5760203660031901126100ec5760043567ffffffffffffffff81116100ec57604060031982360301126100ec5761006b610252565b908060040135825260248101359067ffffffffffffffff82116100ec570190366023830112156100ec576004820135916100ac6100a784610298565b610272565b92602060048186848152019260051b84010101913683116100ec57602401905b8282106100dc5760208401859052005b81358152602091820191016100cc565b600080fd5b346100ec5760203660031901126100ec5760043567ffffffffffffffff81116100ec57602060031982360301126100ec57604051906020820182811067ffffffffffffffff82111761023c5760405280600401359067ffffffffffffffff82116100ec570190366023830112156100ec5760048201356101736100a782610298565b9260206004610440828786815201940283010101903682116100ec57602401915b8183106101a15750505052005b610440833603126100ec576101b4610252565b9036601f850112156100ec57604051610420810181811067ffffffffffffffff82111761023c57604052806104208601913683116100ec5786905b838210610222575050835235906001600160a01b03821682036100ec578260209283610440950152815201920191610194565b813560ff811681036100ec578152602091820191016101ef565b634e487b7160e01b600052604160045260246000fd5b604051906040820182811067ffffffffffffffff82111761023c57604052565b6040519190601f01601f1916820167ffffffffffffffff81118382101761023c57604052565b67ffffffffffffffff811161023c5760051b6020019056fea2646970667358221220de34a4264d612b8581fb95f30d06b59679e1b3558fe1177cfdb313384bf5fd7064736f6c634300081c0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x978384D1 EQ PUSH2 0xF1 JUMPI PUSH4 0xE52108F9 EQ PUSH2 0x32 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xEC JUMPI PUSH1 0x20 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0xEC JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xEC JUMPI PUSH1 0x40 PUSH1 0x3 NOT DUP3 CALLDATASIZE SUB ADD SLT PUSH2 0xEC JUMPI PUSH2 0x6B PUSH2 0x252 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x4 ADD CALLDATALOAD DUP3 MSTORE PUSH1 0x24 DUP2 ADD CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0xEC JUMPI ADD SWAP1 CALLDATASIZE PUSH1 0x23 DUP4 ADD SLT ISZERO PUSH2 0xEC JUMPI PUSH1 0x4 DUP3 ADD CALLDATALOAD SWAP2 PUSH2 0xAC PUSH2 0xA7 DUP5 PUSH2 0x298 JUMP JUMPDEST PUSH2 0x272 JUMP JUMPDEST SWAP3 PUSH1 0x20 PUSH1 0x4 DUP2 DUP7 DUP5 DUP2 MSTORE ADD SWAP3 PUSH1 0x5 SHL DUP5 ADD ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0xEC JUMPI PUSH1 0x24 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xDC JUMPI PUSH1 0x20 DUP5 ADD DUP6 SWAP1 MSTORE STOP JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xCC JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xEC JUMPI PUSH1 0x20 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0xEC JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xEC JUMPI PUSH1 0x20 PUSH1 0x3 NOT DUP3 CALLDATASIZE SUB ADD SLT PUSH2 0xEC JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH1 0x20 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x23C JUMPI PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 ADD CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0xEC JUMPI ADD SWAP1 CALLDATASIZE PUSH1 0x23 DUP4 ADD SLT ISZERO PUSH2 0xEC JUMPI PUSH1 0x4 DUP3 ADD CALLDATALOAD PUSH2 0x173 PUSH2 0xA7 DUP3 PUSH2 0x298 JUMP JUMPDEST SWAP3 PUSH1 0x20 PUSH1 0x4 PUSH2 0x440 DUP3 DUP8 DUP7 DUP2 MSTORE ADD SWAP5 MUL DUP4 ADD ADD ADD SWAP1 CALLDATASIZE DUP3 GT PUSH2 0xEC JUMPI PUSH1 0x24 ADD SWAP2 JUMPDEST DUP2 DUP4 LT PUSH2 0x1A1 JUMPI POP POP POP MSTORE STOP JUMPDEST PUSH2 0x440 DUP4 CALLDATASIZE SUB SLT PUSH2 0xEC JUMPI PUSH2 0x1B4 PUSH2 0x252 JUMP JUMPDEST SWAP1 CALLDATASIZE PUSH1 0x1F DUP6 ADD SLT ISZERO PUSH2 0xEC JUMPI PUSH1 0x40 MLOAD PUSH2 0x420 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x23C JUMPI PUSH1 0x40 MSTORE DUP1 PUSH2 0x420 DUP7 ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0xEC JUMPI DUP7 SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x222 JUMPI POP POP DUP4 MSTORE CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0xEC JUMPI DUP3 PUSH1 0x20 SWAP3 DUP4 PUSH2 0x440 SWAP6 ADD MSTORE DUP2 MSTORE ADD SWAP3 ADD SWAP2 PUSH2 0x194 JUMP JUMPDEST DUP2 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 SUB PUSH2 0xEC JUMPI DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1EF JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH1 0x40 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x23C JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 SWAP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP4 DUP3 LT OR PUSH2 0x23C JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x23C JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDE CALLVALUE LOG4 0x26 0x4D PUSH2 0x2B85 DUP2 0xFB SWAP6 RETURN 0xD MOD 0xB5 SWAP7 PUSH26 0xE1B3558FE1177CFDB313384BF5FD7064736F6C634300081C0033 ","sourceMap":"20239:151:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20239:151:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20239:151:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;20239:151:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20239:151:0;;;;-1:-1:-1;;;;;20239:151:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;20239:151:0;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o"},"methodIdentifiers":{"curr_validators(((uint8[33],address)[]))":"978384d1","gas_price((uint256,uint256[]))":"e52108f9"}},"metadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint8[33]\",\"name\":\"PublicKey\",\"type\":\"uint8[33]\"},{\"internalType\":\"address\",\"name\":\"WithdrawalAddress\",\"type\":\"address\"}],\"internalType\":\"struct Nil.ValidatorInfo[]\",\"name\":\"list\",\"type\":\"tuple[]\"}],\"internalType\":\"struct Nil.ParamValidators\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"curr_validators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"gasPriceScale\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"shards\",\"type\":\"uint256[]\"}],\"internalType\":\"struct Nil.ParamGasPrice\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"gas_price\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@nilfoundation/smart-contracts/contracts/Nil.sol\":\"NilConfigAbi\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@nilfoundation/smart-contracts/contracts/Nil.sol\":{\"keccak256\":\"0x21257091b205b27932c0d13a507a9fb21222c59faa8ac896a4f00962e307855d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://dcead2113e9cfc853c80709793b363b8146c8582b423951cd96b24015159f2e9\",\"dweb:/ipfs/QmSmNk1vNsCxZp3EfxqhvjLWYpNdGY8ChVzfBu2JtDwKQX\"]}},\"version\":1}"},"__Precompile__":{"abi":[{"inputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"components":[{"internalType":"TokenId","name":"id","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct Nil.Token[]","name":"","type":"tuple[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"precompileAsyncCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"precompileAwaitCall","outputs":[{"internalType":"bytes","name":"","type":"bytes"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bool","name":"isSet","type":"bool"},{"internalType":"string","name":"name","type":"string"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"precompileConfigParam","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"precompileGetGasPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"precompileGetPoseidonHash","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"TokenId","name":"id","type":"address"},{"internalType":"address","name":"addr","type":"address"}],"name":"precompileGetTokenBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"precompileGetTransactionTokens","outputs":[{"components":[{"internalType":"TokenId","name":"id","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct Nil.Token[]","name":"","type":"tuple[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"transaction","type":"string"},{"internalType":"int256[]","name":"data","type":"int256[]"}],"name":"precompileLog","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"mint","type":"bool"}],"name":"precompileManageToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"components":[{"internalType":"TokenId","name":"id","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct Nil.Token[]","name":"","type":"tuple[]"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"precompileSendRequest","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"components":[{"internalType":"TokenId","name":"id","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct Nil.Token[]","name":"","type":"tuple[]"}],"name":"precompileSendTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"608080604052346015576106b4908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c806303cfdb76146103e757806340225e941461037357806359777fc21461035a57806378312c6b1461032a578063802db0e0146102c05780638c4b00361461020d5780639614ddaf146101eb5780639ef8d0fa14610177578063a6c085bf1461015b578063d6ff6d2e146101225763f69756531461009557600080fd5b61010036600319011261011d576100aa610642565b5060243560ff81160361011d576100bf610467565b506100c861047d565b506100d1610493565b5060c4356001600160401b03811161011d576100f1903690600401610599565b5060e4356001600160401b03811161011d57610111903690600401610525565b50602060405160008152f35b600080fd5b3461011d57604036600319011261011d5761013b61043b565b506024356001600160401b03811161011d57610111903690600401610599565b3461011d57602036600319011261011d57602060405160008152f35b3461011d57606036600319011261011d57610190610642565b506024356001600160401b03811161011d576101b0903690600401610651565b50506044356001600160401b03811161011d576101d1903690600401610651565b505060405160208152806101e760208201610543565b0390f35b3461011d57604036600319011261011d5761020461043b565b50610111610451565b3461011d57604036600319011261011d576004356001600160401b03811161011d573660238201121561011d5761024e9036906024816004013591016104e4565b506024356001600160401b03811161011d573660238201121561011d578060040135906024602061028661028185610582565b6104a9565b848152019260051b8201019036821161011d57602401915b8183106102b057602060405160008152f35b823581526020928301920161029e565b3461011d57600036600319011261011d57604051806020810160208252606051809152604082019060809060005b8181106102fc575050500390f35b825180516001600160a01b0316855260209081015181860152869550604090940193909201916001016102ee565b3461011d57602036600319011261011d576004356001600160401b03811161011d57610111903690600401610525565b3461011d57604036600319011261011d57610111610633565b60a036600319011261011d5761038761043b565b506024356001600160401b03811161011d576103a7903690600401610599565b506064356001600160401b03811161011d576103c7903690600401610525565b506084356001600160401b03811161011d57610111903690600401610525565b606036600319011261011d576103fb61043b565b506044356001600160401b03811161011d5761041b903690600401610525565b50604051604081528061043060408201610543565b600060208301520390f35b600435906001600160a01b038216820361011d57565b602435906001600160a01b038216820361011d57565b604435906001600160a01b038216820361011d57565b606435906001600160a01b038216820361011d57565b608435906001600160a01b038216820361011d57565b6040519190601f01601f191682016001600160401b038111838210176104ce57604052565b634e487b7160e01b600052604160045260246000fd5b9291926001600160401b0382116104ce57610508601f8301601f19166020016104a9565b938285528282011161011d57816000926020928387013784010152565b9080601f8301121561011d57816020610540933591016104e4565b90565b906060519182815260005b83811061056e5750826000602080949584010152601f8019910116010190565b80608060209201518282850101520161054e565b6001600160401b0381116104ce5760051b60200190565b81601f8201121561011d578035906105b361028183610582565b9260208085858152019360061b8301019181831161011d57602001925b8284106105de575050505090565b60408483031261011d5760405190604082018281106001600160401b038211176104ce576040528435906001600160a01b038216820361011d57826020926040945282870135838201528152019301926105d0565b60243590811515820361011d57565b60043590811515820361011d57565b9181601f8401121561011d578235916001600160401b03831161011d576020838186019501011161011d5756fea2646970667358221220ab42df288db8856dbc9140e7ca40ead038c4f87b8cffbd7bf84cbfc2ebb6515364736f6c634300081c0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x15 JUMPI PUSH2 0x6B4 SWAP1 DUP2 PUSH2 0x1B DUP3 CODECOPY RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3CFDB76 EQ PUSH2 0x3E7 JUMPI DUP1 PUSH4 0x40225E94 EQ PUSH2 0x373 JUMPI DUP1 PUSH4 0x59777FC2 EQ PUSH2 0x35A JUMPI DUP1 PUSH4 0x78312C6B EQ PUSH2 0x32A JUMPI DUP1 PUSH4 0x802DB0E0 EQ PUSH2 0x2C0 JUMPI DUP1 PUSH4 0x8C4B0036 EQ PUSH2 0x20D JUMPI DUP1 PUSH4 0x9614DDAF EQ PUSH2 0x1EB JUMPI DUP1 PUSH4 0x9EF8D0FA EQ PUSH2 0x177 JUMPI DUP1 PUSH4 0xA6C085BF EQ PUSH2 0x15B JUMPI DUP1 PUSH4 0xD6FF6D2E EQ PUSH2 0x122 JUMPI PUSH4 0xF6975653 EQ PUSH2 0x95 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x100 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x11D JUMPI PUSH2 0xAA PUSH2 0x642 JUMP JUMPDEST POP PUSH1 0x24 CALLDATALOAD PUSH1 0xFF DUP2 AND SUB PUSH2 0x11D JUMPI PUSH2 0xBF PUSH2 0x467 JUMP JUMPDEST POP PUSH2 0xC8 PUSH2 0x47D JUMP JUMPDEST POP PUSH2 0xD1 PUSH2 0x493 JUMP JUMPDEST POP PUSH1 0xC4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x11D JUMPI PUSH2 0xF1 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x599 JUMP JUMPDEST POP PUSH1 0xE4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x11D JUMPI PUSH2 0x111 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x525 JUMP JUMPDEST POP PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x11D JUMPI PUSH1 0x40 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x11D JUMPI PUSH2 0x13B PUSH2 0x43B JUMP JUMPDEST POP PUSH1 0x24 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x11D JUMPI PUSH2 0x111 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x599 JUMP JUMPDEST CALLVALUE PUSH2 0x11D JUMPI PUSH1 0x20 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x11D JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x11D JUMPI PUSH1 0x60 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x11D JUMPI PUSH2 0x190 PUSH2 0x642 JUMP JUMPDEST POP PUSH1 0x24 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x11D JUMPI PUSH2 0x1B0 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x651 JUMP JUMPDEST POP POP PUSH1 0x44 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x11D JUMPI PUSH2 0x1D1 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x651 JUMP JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 MSTORE DUP1 PUSH2 0x1E7 PUSH1 0x20 DUP3 ADD PUSH2 0x543 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST CALLVALUE PUSH2 0x11D JUMPI PUSH1 0x40 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x11D JUMPI PUSH2 0x204 PUSH2 0x43B JUMP JUMPDEST POP PUSH2 0x111 PUSH2 0x451 JUMP JUMPDEST CALLVALUE PUSH2 0x11D JUMPI PUSH1 0x40 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x11D JUMPI PUSH1 0x4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x11D JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0x11D JUMPI PUSH2 0x24E SWAP1 CALLDATASIZE SWAP1 PUSH1 0x24 DUP2 PUSH1 0x4 ADD CALLDATALOAD SWAP2 ADD PUSH2 0x4E4 JUMP JUMPDEST POP PUSH1 0x24 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x11D JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0x11D JUMPI DUP1 PUSH1 0x4 ADD CALLDATALOAD SWAP1 PUSH1 0x24 PUSH1 0x20 PUSH2 0x286 PUSH2 0x281 DUP6 PUSH2 0x582 JUMP JUMPDEST PUSH2 0x4A9 JUMP JUMPDEST DUP5 DUP2 MSTORE ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP1 CALLDATASIZE DUP3 GT PUSH2 0x11D JUMPI PUSH1 0x24 ADD SWAP2 JUMPDEST DUP2 DUP4 LT PUSH2 0x2B0 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLDATALOAD DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0x29E JUMP JUMPDEST CALLVALUE PUSH2 0x11D JUMPI PUSH1 0x0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x11D JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 DUP2 ADD PUSH1 0x20 DUP3 MSTORE PUSH1 0x60 MLOAD DUP1 SWAP2 MSTORE PUSH1 0x40 DUP3 ADD SWAP1 PUSH1 0x80 SWAP1 PUSH1 0x0 JUMPDEST DUP2 DUP2 LT PUSH2 0x2FC JUMPI POP POP POP SUB SWAP1 RETURN JUMPDEST DUP3 MLOAD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 MSTORE PUSH1 0x20 SWAP1 DUP2 ADD MLOAD DUP2 DUP7 ADD MSTORE DUP7 SWAP6 POP PUSH1 0x40 SWAP1 SWAP5 ADD SWAP4 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x2EE JUMP JUMPDEST CALLVALUE PUSH2 0x11D JUMPI PUSH1 0x20 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x11D JUMPI PUSH1 0x4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x11D JUMPI PUSH2 0x111 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x525 JUMP JUMPDEST CALLVALUE PUSH2 0x11D JUMPI PUSH1 0x40 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x11D JUMPI PUSH2 0x111 PUSH2 0x633 JUMP JUMPDEST PUSH1 0xA0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x11D JUMPI PUSH2 0x387 PUSH2 0x43B JUMP JUMPDEST POP PUSH1 0x24 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x11D JUMPI PUSH2 0x3A7 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x599 JUMP JUMPDEST POP PUSH1 0x64 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x11D JUMPI PUSH2 0x3C7 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x525 JUMP JUMPDEST POP PUSH1 0x84 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x11D JUMPI PUSH2 0x111 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x525 JUMP JUMPDEST PUSH1 0x60 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x11D JUMPI PUSH2 0x3FB PUSH2 0x43B JUMP JUMPDEST POP PUSH1 0x44 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x11D JUMPI PUSH2 0x41B SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x525 JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0x40 DUP2 MSTORE DUP1 PUSH2 0x430 PUSH1 0x40 DUP3 ADD PUSH2 0x543 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP4 ADD MSTORE SUB SWAP1 RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x11D JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x11D JUMPI JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x11D JUMPI JUMP JUMPDEST PUSH1 0x64 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x11D JUMPI JUMP JUMPDEST PUSH1 0x84 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x11D JUMPI JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 SWAP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP4 DUP3 LT OR PUSH2 0x4CE JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP3 SWAP2 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x4CE JUMPI PUSH2 0x508 PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD PUSH2 0x4A9 JUMP JUMPDEST SWAP4 DUP3 DUP6 MSTORE DUP3 DUP3 ADD GT PUSH2 0x11D JUMPI DUP2 PUSH1 0x0 SWAP3 PUSH1 0x20 SWAP3 DUP4 DUP8 ADD CALLDATACOPY DUP5 ADD ADD MSTORE JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x11D JUMPI DUP2 PUSH1 0x20 PUSH2 0x540 SWAP4 CALLDATALOAD SWAP2 ADD PUSH2 0x4E4 JUMP JUMPDEST SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x60 MLOAD SWAP2 DUP3 DUP2 MSTORE PUSH1 0x0 JUMPDEST DUP4 DUP2 LT PUSH2 0x56E JUMPI POP DUP3 PUSH1 0x0 PUSH1 0x20 DUP1 SWAP5 SWAP6 DUP5 ADD ADD MSTORE PUSH1 0x1F DUP1 NOT SWAP2 ADD AND ADD ADD SWAP1 JUMP JUMPDEST DUP1 PUSH1 0x80 PUSH1 0x20 SWAP3 ADD MLOAD DUP3 DUP3 DUP6 ADD ADD MSTORE ADD PUSH2 0x54E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x4CE JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x11D JUMPI DUP1 CALLDATALOAD SWAP1 PUSH2 0x5B3 PUSH2 0x281 DUP4 PUSH2 0x582 JUMP JUMPDEST SWAP3 PUSH1 0x20 DUP1 DUP6 DUP6 DUP2 MSTORE ADD SWAP4 PUSH1 0x6 SHL DUP4 ADD ADD SWAP2 DUP2 DUP4 GT PUSH2 0x11D JUMPI PUSH1 0x20 ADD SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x5DE JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP5 DUP4 SUB SLT PUSH2 0x11D JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH1 0x40 DUP3 ADD DUP3 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR PUSH2 0x4CE JUMPI PUSH1 0x40 MSTORE DUP5 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x11D JUMPI DUP3 PUSH1 0x20 SWAP3 PUSH1 0x40 SWAP5 MSTORE DUP3 DUP8 ADD CALLDATALOAD DUP4 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP4 ADD SWAP3 PUSH2 0x5D0 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x11D JUMPI JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x11D JUMPI JUMP JUMPDEST SWAP2 DUP2 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x11D JUMPI DUP3 CALLDATALOAD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT PUSH2 0x11D JUMPI PUSH1 0x20 DUP4 DUP2 DUP7 ADD SWAP6 ADD ADD GT PUSH2 0x11D JUMPI JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAB TIMESTAMP 0xDF 0x28 DUP14 0xB8 DUP6 PUSH14 0xBC9140E7CA40EAD038C4F87B8CFF 0xBD PUSH28 0xF84CBFC2EBB6515364736F6C634300081C0033000000000000000000 ","sourceMap":"19032:1205:0:-:0;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":1083,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_3361":{"entryPoint":1105,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_3366":{"entryPoint":1127,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_3367":{"entryPoint":1149,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_3368":{"entryPoint":1171,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_array_struct_Token_dyn":{"entryPoint":1433,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_available_length_bytes":{"entryPoint":1252,"id":null,"parameterSlots":3,"returnSlots":1},"abi_decode_bool":{"entryPoint":1602,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_bool_3359":{"entryPoint":1587,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_bytes":{"entryPoint":1317,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_string_calldata":{"entryPoint":1617,"id":null,"parameterSlots":2,"returnSlots":2},"abi_encode_bytes":{"entryPoint":1347,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_memory":{"entryPoint":1193,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_array_struct_Token_dyn":{"entryPoint":1410,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"6080604052600436101561001257600080fd5b60003560e01c806303cfdb76146103e757806340225e941461037357806359777fc21461035a57806378312c6b1461032a578063802db0e0146102c05780638c4b00361461020d5780639614ddaf146101eb5780639ef8d0fa14610177578063a6c085bf1461015b578063d6ff6d2e146101225763f69756531461009557600080fd5b61010036600319011261011d576100aa610642565b5060243560ff81160361011d576100bf610467565b506100c861047d565b506100d1610493565b5060c4356001600160401b03811161011d576100f1903690600401610599565b5060e4356001600160401b03811161011d57610111903690600401610525565b50602060405160008152f35b600080fd5b3461011d57604036600319011261011d5761013b61043b565b506024356001600160401b03811161011d57610111903690600401610599565b3461011d57602036600319011261011d57602060405160008152f35b3461011d57606036600319011261011d57610190610642565b506024356001600160401b03811161011d576101b0903690600401610651565b50506044356001600160401b03811161011d576101d1903690600401610651565b505060405160208152806101e760208201610543565b0390f35b3461011d57604036600319011261011d5761020461043b565b50610111610451565b3461011d57604036600319011261011d576004356001600160401b03811161011d573660238201121561011d5761024e9036906024816004013591016104e4565b506024356001600160401b03811161011d573660238201121561011d578060040135906024602061028661028185610582565b6104a9565b848152019260051b8201019036821161011d57602401915b8183106102b057602060405160008152f35b823581526020928301920161029e565b3461011d57600036600319011261011d57604051806020810160208252606051809152604082019060809060005b8181106102fc575050500390f35b825180516001600160a01b0316855260209081015181860152869550604090940193909201916001016102ee565b3461011d57602036600319011261011d576004356001600160401b03811161011d57610111903690600401610525565b3461011d57604036600319011261011d57610111610633565b60a036600319011261011d5761038761043b565b506024356001600160401b03811161011d576103a7903690600401610599565b506064356001600160401b03811161011d576103c7903690600401610525565b506084356001600160401b03811161011d57610111903690600401610525565b606036600319011261011d576103fb61043b565b506044356001600160401b03811161011d5761041b903690600401610525565b50604051604081528061043060408201610543565b600060208301520390f35b600435906001600160a01b038216820361011d57565b602435906001600160a01b038216820361011d57565b604435906001600160a01b038216820361011d57565b606435906001600160a01b038216820361011d57565b608435906001600160a01b038216820361011d57565b6040519190601f01601f191682016001600160401b038111838210176104ce57604052565b634e487b7160e01b600052604160045260246000fd5b9291926001600160401b0382116104ce57610508601f8301601f19166020016104a9565b938285528282011161011d57816000926020928387013784010152565b9080601f8301121561011d57816020610540933591016104e4565b90565b906060519182815260005b83811061056e5750826000602080949584010152601f8019910116010190565b80608060209201518282850101520161054e565b6001600160401b0381116104ce5760051b60200190565b81601f8201121561011d578035906105b361028183610582565b9260208085858152019360061b8301019181831161011d57602001925b8284106105de575050505090565b60408483031261011d5760405190604082018281106001600160401b038211176104ce576040528435906001600160a01b038216820361011d57826020926040945282870135838201528152019301926105d0565b60243590811515820361011d57565b60043590811515820361011d57565b9181601f8401121561011d578235916001600160401b03831161011d576020838186019501011161011d5756fea2646970667358221220ab42df288db8856dbc9140e7ca40ead038c4f87b8cffbd7bf84cbfc2ebb6515364736f6c634300081c0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3CFDB76 EQ PUSH2 0x3E7 JUMPI DUP1 PUSH4 0x40225E94 EQ PUSH2 0x373 JUMPI DUP1 PUSH4 0x59777FC2 EQ PUSH2 0x35A JUMPI DUP1 PUSH4 0x78312C6B EQ PUSH2 0x32A JUMPI DUP1 PUSH4 0x802DB0E0 EQ PUSH2 0x2C0 JUMPI DUP1 PUSH4 0x8C4B0036 EQ PUSH2 0x20D JUMPI DUP1 PUSH4 0x9614DDAF EQ PUSH2 0x1EB JUMPI DUP1 PUSH4 0x9EF8D0FA EQ PUSH2 0x177 JUMPI DUP1 PUSH4 0xA6C085BF EQ PUSH2 0x15B JUMPI DUP1 PUSH4 0xD6FF6D2E EQ PUSH2 0x122 JUMPI PUSH4 0xF6975653 EQ PUSH2 0x95 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x100 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x11D JUMPI PUSH2 0xAA PUSH2 0x642 JUMP JUMPDEST POP PUSH1 0x24 CALLDATALOAD PUSH1 0xFF DUP2 AND SUB PUSH2 0x11D JUMPI PUSH2 0xBF PUSH2 0x467 JUMP JUMPDEST POP PUSH2 0xC8 PUSH2 0x47D JUMP JUMPDEST POP PUSH2 0xD1 PUSH2 0x493 JUMP JUMPDEST POP PUSH1 0xC4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x11D JUMPI PUSH2 0xF1 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x599 JUMP JUMPDEST POP PUSH1 0xE4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x11D JUMPI PUSH2 0x111 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x525 JUMP JUMPDEST POP PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x11D JUMPI PUSH1 0x40 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x11D JUMPI PUSH2 0x13B PUSH2 0x43B JUMP JUMPDEST POP PUSH1 0x24 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x11D JUMPI PUSH2 0x111 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x599 JUMP JUMPDEST CALLVALUE PUSH2 0x11D JUMPI PUSH1 0x20 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x11D JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x11D JUMPI PUSH1 0x60 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x11D JUMPI PUSH2 0x190 PUSH2 0x642 JUMP JUMPDEST POP PUSH1 0x24 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x11D JUMPI PUSH2 0x1B0 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x651 JUMP JUMPDEST POP POP PUSH1 0x44 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x11D JUMPI PUSH2 0x1D1 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x651 JUMP JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 MSTORE DUP1 PUSH2 0x1E7 PUSH1 0x20 DUP3 ADD PUSH2 0x543 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST CALLVALUE PUSH2 0x11D JUMPI PUSH1 0x40 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x11D JUMPI PUSH2 0x204 PUSH2 0x43B JUMP JUMPDEST POP PUSH2 0x111 PUSH2 0x451 JUMP JUMPDEST CALLVALUE PUSH2 0x11D JUMPI PUSH1 0x40 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x11D JUMPI PUSH1 0x4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x11D JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0x11D JUMPI PUSH2 0x24E SWAP1 CALLDATASIZE SWAP1 PUSH1 0x24 DUP2 PUSH1 0x4 ADD CALLDATALOAD SWAP2 ADD PUSH2 0x4E4 JUMP JUMPDEST POP PUSH1 0x24 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x11D JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0x11D JUMPI DUP1 PUSH1 0x4 ADD CALLDATALOAD SWAP1 PUSH1 0x24 PUSH1 0x20 PUSH2 0x286 PUSH2 0x281 DUP6 PUSH2 0x582 JUMP JUMPDEST PUSH2 0x4A9 JUMP JUMPDEST DUP5 DUP2 MSTORE ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP1 CALLDATASIZE DUP3 GT PUSH2 0x11D JUMPI PUSH1 0x24 ADD SWAP2 JUMPDEST DUP2 DUP4 LT PUSH2 0x2B0 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLDATALOAD DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0x29E JUMP JUMPDEST CALLVALUE PUSH2 0x11D JUMPI PUSH1 0x0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x11D JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 DUP2 ADD PUSH1 0x20 DUP3 MSTORE PUSH1 0x60 MLOAD DUP1 SWAP2 MSTORE PUSH1 0x40 DUP3 ADD SWAP1 PUSH1 0x80 SWAP1 PUSH1 0x0 JUMPDEST DUP2 DUP2 LT PUSH2 0x2FC JUMPI POP POP POP SUB SWAP1 RETURN JUMPDEST DUP3 MLOAD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 MSTORE PUSH1 0x20 SWAP1 DUP2 ADD MLOAD DUP2 DUP7 ADD MSTORE DUP7 SWAP6 POP PUSH1 0x40 SWAP1 SWAP5 ADD SWAP4 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x2EE JUMP JUMPDEST CALLVALUE PUSH2 0x11D JUMPI PUSH1 0x20 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x11D JUMPI PUSH1 0x4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x11D JUMPI PUSH2 0x111 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x525 JUMP JUMPDEST CALLVALUE PUSH2 0x11D JUMPI PUSH1 0x40 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x11D JUMPI PUSH2 0x111 PUSH2 0x633 JUMP JUMPDEST PUSH1 0xA0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x11D JUMPI PUSH2 0x387 PUSH2 0x43B JUMP JUMPDEST POP PUSH1 0x24 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x11D JUMPI PUSH2 0x3A7 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x599 JUMP JUMPDEST POP PUSH1 0x64 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x11D JUMPI PUSH2 0x3C7 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x525 JUMP JUMPDEST POP PUSH1 0x84 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x11D JUMPI PUSH2 0x111 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x525 JUMP JUMPDEST PUSH1 0x60 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x11D JUMPI PUSH2 0x3FB PUSH2 0x43B JUMP JUMPDEST POP PUSH1 0x44 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x11D JUMPI PUSH2 0x41B SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x525 JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0x40 DUP2 MSTORE DUP1 PUSH2 0x430 PUSH1 0x40 DUP3 ADD PUSH2 0x543 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP4 ADD MSTORE SUB SWAP1 RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x11D JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x11D JUMPI JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x11D JUMPI JUMP JUMPDEST PUSH1 0x64 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x11D JUMPI JUMP JUMPDEST PUSH1 0x84 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x11D JUMPI JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 SWAP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP4 DUP3 LT OR PUSH2 0x4CE JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP3 SWAP2 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x4CE JUMPI PUSH2 0x508 PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD PUSH2 0x4A9 JUMP JUMPDEST SWAP4 DUP3 DUP6 MSTORE DUP3 DUP3 ADD GT PUSH2 0x11D JUMPI DUP2 PUSH1 0x0 SWAP3 PUSH1 0x20 SWAP3 DUP4 DUP8 ADD CALLDATACOPY DUP5 ADD ADD MSTORE JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x11D JUMPI DUP2 PUSH1 0x20 PUSH2 0x540 SWAP4 CALLDATALOAD SWAP2 ADD PUSH2 0x4E4 JUMP JUMPDEST SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x60 MLOAD SWAP2 DUP3 DUP2 MSTORE PUSH1 0x0 JUMPDEST DUP4 DUP2 LT PUSH2 0x56E JUMPI POP DUP3 PUSH1 0x0 PUSH1 0x20 DUP1 SWAP5 SWAP6 DUP5 ADD ADD MSTORE PUSH1 0x1F DUP1 NOT SWAP2 ADD AND ADD ADD SWAP1 JUMP JUMPDEST DUP1 PUSH1 0x80 PUSH1 0x20 SWAP3 ADD MLOAD DUP3 DUP3 DUP6 ADD ADD MSTORE ADD PUSH2 0x54E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x4CE JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x11D JUMPI DUP1 CALLDATALOAD SWAP1 PUSH2 0x5B3 PUSH2 0x281 DUP4 PUSH2 0x582 JUMP JUMPDEST SWAP3 PUSH1 0x20 DUP1 DUP6 DUP6 DUP2 MSTORE ADD SWAP4 PUSH1 0x6 SHL DUP4 ADD ADD SWAP2 DUP2 DUP4 GT PUSH2 0x11D JUMPI PUSH1 0x20 ADD SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x5DE JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP5 DUP4 SUB SLT PUSH2 0x11D JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH1 0x40 DUP3 ADD DUP3 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR PUSH2 0x4CE JUMPI PUSH1 0x40 MSTORE DUP5 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x11D JUMPI DUP3 PUSH1 0x20 SWAP3 PUSH1 0x40 SWAP5 MSTORE DUP3 DUP8 ADD CALLDATALOAD DUP4 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP4 ADD SWAP3 PUSH2 0x5D0 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x11D JUMPI JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x11D JUMPI JUMP JUMPDEST SWAP2 DUP2 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x11D JUMPI DUP3 CALLDATALOAD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT PUSH2 0x11D JUMPI PUSH1 0x20 DUP4 DUP2 DUP7 ADD SWAP6 ADD ADD GT PUSH2 0x11D JUMPI JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAB TIMESTAMP 0xDF 0x28 DUP14 0xB8 DUP6 PUSH14 0xBC9140E7CA40EAD038C4F87B8CFF 0xBD PUSH28 0xF84CBFC2EBB6515364736F6C634300081C0033000000000000000000 ","sourceMap":"19032:1205:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19032:1205:0;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;:::i;:::-;;;;-1:-1:-1;;;;;19032:1205:0;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;19032:1205:0;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19032:1205:0;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;19032:1205:0;;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;19032:1205:0;;;;;;;;;;;;;;;;;-1:-1:-1;;19032:1205:0;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;19032:1205:0;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;19032:1205:0;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;19032:1205:0;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;-1:-1:-1;;19032:1205:0;;;;;;-1:-1:-1;;;;;19032:1205:0;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;19032:1205:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19032:1205:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19032:1205:0;;;;;;;;;;;;;;-1:-1:-1;19032:1205:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19032:1205:0;;;;;;-1:-1:-1;;;;;19032:1205:0;;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;19032:1205:0;;;;;;:::i;:::-;;;-1:-1:-1;;19032:1205:0;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;19032:1205:0;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;19032:1205:0;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;19032:1205:0;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;19032:1205:0;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;19032:1205:0;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;19032:1205:0;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;19032:1205:0;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;19032:1205:0;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;19032:1205:0;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;19032:1205:0;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;19032:1205:0;;;-1:-1:-1;;;;;19032:1205:0;;;;;;;;;;:::o;:::-;;;;-1:-1:-1;19032:1205:0;;;;;-1:-1:-1;19032:1205:0;;;;;-1:-1:-1;;;;;19032:1205:0;;;;;;;;-1:-1:-1;;19032:1205:0;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;-1:-1:-1;19032:1205:0;;;;;;;;-1:-1:-1;19032:1205:0;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19032:1205:0;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19032:1205:0;;;;;;;;;;-1:-1:-1;;;;;19032:1205:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;19032:1205:0;;;;;;;;;;;;;;;:::o"},"methodIdentifiers":{"precompileAsyncCall(bool,uint8,address,address,address,uint256,(address,uint256)[],bytes)":"f6975653","precompileAwaitCall(address,uint256,bytes)":"03cfdb76","precompileConfigParam(bool,string,bytes)":"9ef8d0fa","precompileGetGasPrice(uint256)":"a6c085bf","precompileGetPoseidonHash(bytes)":"78312c6b","precompileGetTokenBalance(address,address)":"9614ddaf","precompileGetTransactionTokens()":"802db0e0","precompileLog(string,int256[])":"8c4b0036","precompileManageToken(uint256,bool)":"59777fc2","precompileSendRequest(address,(address,uint256)[],uint256,bytes,bytes)":"40225e94","precompileSendTokens(address,(address,uint256)[])":"d6ff6d2e"}},"metadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"TokenId\",\"name\":\"id\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"struct Nil.Token[]\",\"name\":\"\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"precompileAsyncCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"precompileAwaitCall\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"isSet\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"precompileConfigParam\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"precompileGetGasPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"precompileGetPoseidonHash\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"TokenId\",\"name\":\"id\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"precompileGetTokenBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"precompileGetTransactionTokens\",\"outputs\":[{\"components\":[{\"internalType\":\"TokenId\",\"name\":\"id\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"struct Nil.Token[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"transaction\",\"type\":\"string\"},{\"internalType\":\"int256[]\",\"name\":\"data\",\"type\":\"int256[]\"}],\"name\":\"precompileLog\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"mint\",\"type\":\"bool\"}],\"name\":\"precompileManageToken\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"TokenId\",\"name\":\"id\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"struct Nil.Token[]\",\"name\":\"\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"precompileSendRequest\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"TokenId\",\"name\":\"id\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"struct Nil.Token[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"name\":\"precompileSendTokens\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@nilfoundation/smart-contracts/contracts/Nil.sol\":\"__Precompile__\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@nilfoundation/smart-contracts/contracts/Nil.sol\":{\"keccak256\":\"0x21257091b205b27932c0d13a507a9fb21222c59faa8ac896a4f00962e307855d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://dcead2113e9cfc853c80709793b363b8146c8582b423951cd96b24015159f2e9\",\"dweb:/ipfs/QmSmNk1vNsCxZp3EfxqhvjLWYpNdGY8ChVzfBu2JtDwKQX\"]}},\"version\":1}"}},"@nilfoundation/smart-contracts/contracts/NilTokenBase.sol":{"NilTokenBase":{"abi":[{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getOwnTokenBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getTokenBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenId","outputs":[{"internalType":"TokenId","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"TokenId","name":"tokenId","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sendToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"}],"name":"setTokenName","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"burnToken(uint256)":"7b47ec1a","getOwnTokenBalance()":"d19b9b75","getTokenBalanceOf(address)":"83894548","getTokenId()":"010a38f5","getTokenName()":"862b092b","getTokenTotalSupply()":"57df844b","mintToken(uint256)":"c634d032","sendToken(address,address,uint256)":"2fdcfbd2","setTokenName(string)":"a4f29aad"}},"metadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burnToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOwnTokenBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getTokenBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTokenId\",\"outputs\":[{\"internalType\":\"TokenId\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTokenName\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTokenTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mintToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"TokenId\",\"name\":\"tokenId\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sendToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"setTokenName\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Abstract contract that provides functionality for token processing. Methods with \\\"Internal\\\" suffix are internal, which means that they can be called only from the derived contract itself. But there are default wrapper methods that provide the account owner access to internal methods. They are virtual, so the main contract can disable them by overriding them. Then only logic of the contract can use internal methods.\",\"kind\":\"dev\",\"methods\":{\"burnToken(uint256)\":{\"details\":\"Burns a specified amount of token using external call. It is wrapper over `burnTokenInternal` method to provide access to the owner of the account.\",\"params\":{\"amount\":\"The amount of token to burn.\"}},\"getOwnTokenBalance()\":{\"details\":\"Returns the balance of the token owned by this contract.\",\"returns\":{\"_0\":\"The balance of the token owned by this contract.\"}},\"getTokenBalanceOf(address)\":{\"details\":\"Returns the balance of the token for a given address.\",\"params\":{\"account\":\"The address to check the balance for.\"},\"returns\":{\"_0\":\"The balance of the token for the given address.\"}},\"getTokenId()\":{\"details\":\"Returns the unique identifier of the token owned by this contract.\",\"returns\":{\"_0\":\"The unique identifier of the token owned by this contract.\"}},\"getTokenName()\":{\"details\":\"Returns the name of the token.\",\"returns\":{\"_0\":\"The name of the token.\"}},\"getTokenTotalSupply()\":{\"details\":\"Returns the total supply of the token.\",\"returns\":{\"_0\":\"The total supply of the token.\"}},\"mintToken(uint256)\":{\"details\":\"Mints a specified amount of token using external call. It is wrapper over `mintTokenInternal` method to provide access to the owner of the account.\",\"params\":{\"amount\":\"The amount of token to mint.\"}},\"sendToken(address,address,uint256)\":{\"details\":\"Sends a specified amount of arbitrary token to a given address. It is wrapper over `sendTokenInternal` method to provide access to the owner of the account.\",\"params\":{\"amount\":\"The amount of token to mint.\"}},\"setTokenName(string)\":{\"details\":\"Set the name of the token.\",\"params\":{\"name\":\"The name of the token.\"}}},\"title\":\"NilTokenBase\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@nilfoundation/smart-contracts/contracts/NilTokenBase.sol\":\"NilTokenBase\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@nilfoundation/smart-contracts/contracts/Nil.sol\":{\"keccak256\":\"0x21257091b205b27932c0d13a507a9fb21222c59faa8ac896a4f00962e307855d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://dcead2113e9cfc853c80709793b363b8146c8582b423951cd96b24015159f2e9\",\"dweb:/ipfs/QmSmNk1vNsCxZp3EfxqhvjLWYpNdGY8ChVzfBu2JtDwKQX\"]},\"@nilfoundation/smart-contracts/contracts/NilTokenBase.sol\":{\"keccak256\":\"0x8239fbd2fce629de2e6b56619194c15be96c823d33d055e71b2fabe002553cc4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4af5cb28280bdfa49e1e4555e172a47c1c971992ad745d22d2087f030ad98a0c\",\"dweb:/ipfs/QmRNCBCdVo9yawrBHF7qYkoZtAnHQHpbqAA4VoPYmDULmt\"]}},\"version\":1}"}},"contracts/CollateralManager.sol":{"GlobalLedger":{"abi":[{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"TokenId","name":"","type":"address"}],"name":"deposits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"TokenId","name":"token","type":"address"}],"name":"getDeposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getLoanDetails","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"TokenId","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"loans","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"TokenId","name":"token","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"TokenId","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"recordDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"TokenId","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"recordLoan","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"608080604052346015576102d4908161001b8239f35b600080fdfe608080604052600436101561001357600080fd5b60003560e01c90816373b4086b146101ea575080638f601f661461019b578063c35082a91461019b578063dd6e8c2014610110578063e8599307146100b35763e8a7da8e1461006157600080fd5b346100ae5760203660031901126100ae576001600160a01b03610082610238565b16600090815260016020818152604092839020805492015483519283526001600160a01b031690820152f35b600080fd5b346100ae576100c136610264565b9160018060a01b0316600052600060205260406000209060018060a01b0316600052602052604060002080549182018092116100fa5755005b634e487b7160e01b600052601160045260246000fd5b346100ae5761011e36610264565b909160405190604082019282841067ffffffffffffffff85111761018557604093845282526001600160a01b039384166020808401918252918516600090815260019283905293909320915182559151910180546001600160a01b03191691909216179055005b634e487b7160e01b600052604160045260246000fd5b346100ae5760403660031901126100ae576101b4610238565b6101bc61024e565b6001600160a01b03918216600090815260208181526040808320949093168252928352819020549051908152f35b346100ae5760203660031901126100ae576001600160a01b0361020b610238565b1660009081526001602081815260409283902080549201549184526001600160a01b039091169083015290f35b600435906001600160a01b03821682036100ae57565b602435906001600160a01b03821682036100ae57565b60609060031901126100ae576004356001600160a01b03811681036100ae57906024356001600160a01b03811681036100ae57906044359056fea2646970667358221220497129af11ef0f4a622acb3fc51e064f61e90d013a476c0b7f5b3433315d534a64736f6c634300081c0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x15 JUMPI PUSH2 0x2D4 SWAP1 DUP2 PUSH2 0x1B DUP3 CODECOPY RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT INVALID PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x13 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x73B4086B EQ PUSH2 0x1EA JUMPI POP DUP1 PUSH4 0x8F601F66 EQ PUSH2 0x19B JUMPI DUP1 PUSH4 0xC35082A9 EQ PUSH2 0x19B JUMPI DUP1 PUSH4 0xDD6E8C20 EQ PUSH2 0x110 JUMPI DUP1 PUSH4 0xE8599307 EQ PUSH2 0xB3 JUMPI PUSH4 0xE8A7DA8E EQ PUSH2 0x61 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xAE JUMPI PUSH1 0x20 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0xAE JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x82 PUSH2 0x238 JUMP JUMPDEST AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 DUP1 SLOAD SWAP3 ADD SLOAD DUP4 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP3 ADD MSTORE RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xAE JUMPI PUSH2 0xC1 CALLDATASIZE PUSH2 0x264 JUMP JUMPDEST SWAP2 PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 DUP1 SLOAD SWAP2 DUP3 ADD DUP1 SWAP3 GT PUSH2 0xFA JUMPI SSTORE STOP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST CALLVALUE PUSH2 0xAE JUMPI PUSH2 0x11E CALLDATASIZE PUSH2 0x264 JUMP JUMPDEST SWAP1 SWAP2 PUSH1 0x40 MLOAD SWAP1 PUSH1 0x40 DUP3 ADD SWAP3 DUP3 DUP5 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP6 GT OR PUSH2 0x185 JUMPI PUSH1 0x40 SWAP4 DUP5 MSTORE DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 DUP3 MSTORE SWAP2 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 SWAP3 DUP4 SWAP1 MSTORE SWAP4 SWAP1 SWAP4 KECCAK256 SWAP2 MLOAD DUP3 SSTORE SWAP2 MLOAD SWAP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP2 SWAP1 SWAP3 AND OR SWAP1 SSTORE STOP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST CALLVALUE PUSH2 0xAE JUMPI PUSH1 0x40 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0xAE JUMPI PUSH2 0x1B4 PUSH2 0x238 JUMP JUMPDEST PUSH2 0x1BC PUSH2 0x24E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP4 AND DUP3 MSTORE SWAP3 DUP4 MSTORE DUP2 SWAP1 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xAE JUMPI PUSH1 0x20 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0xAE JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x20B PUSH2 0x238 JUMP JUMPDEST AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 DUP1 SLOAD SWAP3 ADD SLOAD SWAP2 DUP5 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP4 ADD MSTORE SWAP1 RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0xAE JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0xAE JUMPI JUMP JUMPDEST PUSH1 0x60 SWAP1 PUSH1 0x3 NOT ADD SLT PUSH2 0xAE JUMPI PUSH1 0x4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0xAE JUMPI SWAP1 PUSH1 0x24 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0xAE JUMPI SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 BLOBHASH PUSH18 0x29AF11EF0F4A622ACB3FC51E064F61E90D01 GASPRICE SELFBALANCE PUSH13 0xB7F5B3433315D534A64736F6C PUSH4 0x4300081C STOP CALLER ","sourceMap":"424:2408:2:-:0;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":590,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_1855":{"entryPoint":568,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_addresst_userDefinedValueType_TokenIdt_uint256":{"entryPoint":612,"id":null,"parameterSlots":1,"returnSlots":3},"abi_encode_uint256_userDefinedValueType_TokenId":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1}},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"608080604052600436101561001357600080fd5b60003560e01c90816373b4086b146101ea575080638f601f661461019b578063c35082a91461019b578063dd6e8c2014610110578063e8599307146100b35763e8a7da8e1461006157600080fd5b346100ae5760203660031901126100ae576001600160a01b03610082610238565b16600090815260016020818152604092839020805492015483519283526001600160a01b031690820152f35b600080fd5b346100ae576100c136610264565b9160018060a01b0316600052600060205260406000209060018060a01b0316600052602052604060002080549182018092116100fa5755005b634e487b7160e01b600052601160045260246000fd5b346100ae5761011e36610264565b909160405190604082019282841067ffffffffffffffff85111761018557604093845282526001600160a01b039384166020808401918252918516600090815260019283905293909320915182559151910180546001600160a01b03191691909216179055005b634e487b7160e01b600052604160045260246000fd5b346100ae5760403660031901126100ae576101b4610238565b6101bc61024e565b6001600160a01b03918216600090815260208181526040808320949093168252928352819020549051908152f35b346100ae5760203660031901126100ae576001600160a01b0361020b610238565b1660009081526001602081815260409283902080549201549184526001600160a01b039091169083015290f35b600435906001600160a01b03821682036100ae57565b602435906001600160a01b03821682036100ae57565b60609060031901126100ae576004356001600160a01b03811681036100ae57906024356001600160a01b03811681036100ae57906044359056fea2646970667358221220497129af11ef0f4a622acb3fc51e064f61e90d013a476c0b7f5b3433315d534a64736f6c634300081c0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x13 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x73B4086B EQ PUSH2 0x1EA JUMPI POP DUP1 PUSH4 0x8F601F66 EQ PUSH2 0x19B JUMPI DUP1 PUSH4 0xC35082A9 EQ PUSH2 0x19B JUMPI DUP1 PUSH4 0xDD6E8C20 EQ PUSH2 0x110 JUMPI DUP1 PUSH4 0xE8599307 EQ PUSH2 0xB3 JUMPI PUSH4 0xE8A7DA8E EQ PUSH2 0x61 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xAE JUMPI PUSH1 0x20 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0xAE JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x82 PUSH2 0x238 JUMP JUMPDEST AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 DUP1 SLOAD SWAP3 ADD SLOAD DUP4 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP3 ADD MSTORE RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xAE JUMPI PUSH2 0xC1 CALLDATASIZE PUSH2 0x264 JUMP JUMPDEST SWAP2 PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 DUP1 SLOAD SWAP2 DUP3 ADD DUP1 SWAP3 GT PUSH2 0xFA JUMPI SSTORE STOP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST CALLVALUE PUSH2 0xAE JUMPI PUSH2 0x11E CALLDATASIZE PUSH2 0x264 JUMP JUMPDEST SWAP1 SWAP2 PUSH1 0x40 MLOAD SWAP1 PUSH1 0x40 DUP3 ADD SWAP3 DUP3 DUP5 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP6 GT OR PUSH2 0x185 JUMPI PUSH1 0x40 SWAP4 DUP5 MSTORE DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 DUP3 MSTORE SWAP2 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 SWAP3 DUP4 SWAP1 MSTORE SWAP4 SWAP1 SWAP4 KECCAK256 SWAP2 MLOAD DUP3 SSTORE SWAP2 MLOAD SWAP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP2 SWAP1 SWAP3 AND OR SWAP1 SSTORE STOP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST CALLVALUE PUSH2 0xAE JUMPI PUSH1 0x40 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0xAE JUMPI PUSH2 0x1B4 PUSH2 0x238 JUMP JUMPDEST PUSH2 0x1BC PUSH2 0x24E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP4 AND DUP3 MSTORE SWAP3 DUP4 MSTORE DUP2 SWAP1 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xAE JUMPI PUSH1 0x20 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0xAE JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x20B PUSH2 0x238 JUMP JUMPDEST AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 DUP1 SLOAD SWAP3 ADD SLOAD SWAP2 DUP5 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP4 ADD MSTORE SWAP1 RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0xAE JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0xAE JUMPI JUMP JUMPDEST PUSH1 0x60 SWAP1 PUSH1 0x3 NOT ADD SLT PUSH2 0xAE JUMPI PUSH1 0x4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0xAE JUMPI SWAP1 PUSH1 0x24 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0xAE JUMPI SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 BLOBHASH PUSH18 0x29AF11EF0F4A622ACB3FC51E064F61E90D01 GASPRICE SELFBALANCE PUSH13 0xB7F5B3433315D534A64736F6C PUSH4 0x4300081C STOP CALLER ","sourceMap":"424:2408:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;424:2408:2;;;;-1:-1:-1;;;;;424:2408:2;;:::i;:::-;;;;;;2785:5;424:2408;;;;;;;;;;;2805:17;;424:2408;;;;;;-1:-1:-1;;;;;424:2408:2;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;1296:21;424:2408;;;;;;-1:-1:-1;424:2408:2;;;;-1:-1:-1;424:2408:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;424:2408:2;;;2344:19;;;;424:2408;;;;;;-1:-1:-1;424:2408:2;;;2330:5;424:2408;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;424:2408:2;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;424:2408:2;;;;;;:::i;:::-;;;:::i;:::-;-1:-1:-1;;;;;424:2408:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;424:2408:2;;;;-1:-1:-1;;;;;424:2408:2;;:::i;:::-;;;;;;688:37;424:2408;;;;;;;;;;;688:37;;424:2408;;;;-1:-1:-1;;;;;424:2408:2;;;;;;;;;;;;;-1:-1:-1;;;;;424:2408:2;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;424:2408:2;;;;;;:::o;:::-;;;;;;;;;;;-1:-1:-1;;;;;424:2408:2;;;;;;;;;-1:-1:-1;;;;;424:2408:2;;;;;;;;;;:::o"},"methodIdentifiers":{"deposits(address,address)":"8f601f66","getDeposit(address,address)":"c35082a9","getLoanDetails(address)":"e8a7da8e","loans(address)":"73b4086b","recordDeposit(address,address,uint256)":"e8599307","recordLoan(address,address,uint256)":"dd6e8c20"}},"metadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"TokenId\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"deposits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"TokenId\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getLoanDetails\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"TokenId\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"loans\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"TokenId\",\"name\":\"token\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"TokenId\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"recordDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"TokenId\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"recordLoan\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The GlobalLedger contract is responsible for tracking user deposits and loans in the lending protocol. It stores the deposit balances for users and keeps track of the loans each user has taken.\",\"kind\":\"dev\",\"methods\":{\"getDeposit(address,address)\":{\"details\":\"Returns the amount of the token deposited by the user.\",\"params\":{\"token\":\"The token type for which the balance is being fetched.\",\"user\":\"The address of the user whose deposit balance is being fetched.\"},\"returns\":{\"_0\":\"uint256 The deposit amount for the given user and token.\"}},\"getLoanDetails(address)\":{\"details\":\"Returns the loan amount and the token used for the loan.\",\"params\":{\"user\":\"The address of the user whose loan details are being fetched.\"},\"returns\":{\"_0\":\"uint256 The loan amount.\",\"_1\":\"TokenId The token type used for the loan.\"}},\"recordDeposit(address,address,uint256)\":{\"details\":\"Increases the deposit balance for the user for the specified token.\",\"params\":{\"amount\":\"The amount of the token being deposited.\",\"token\":\"The token type being deposited (e.g., USDT, ETH).\",\"user\":\"The address of the user making the deposit.\"}},\"recordLoan(address,address,uint256)\":{\"details\":\"Stores the amount of the loan and the token type used for the loan.\",\"params\":{\"amount\":\"The amount of the loan being taken.\",\"token\":\"The token type used for the loan (e.g., USDT, ETH).\",\"user\":\"The address of the user taking the loan.\"}}},\"stateVariables\":{\"deposits\":{\"details\":\"Mapping of user addresses to their token deposits (token -> amount).\"},\"loans\":{\"details\":\"Mapping of user addresses to their loans (loan amount and loan token).\"}},\"title\":\"GlobalLedger\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getDeposit(address,address)\":{\"notice\":\"Fetches a user's deposit balance for a specific token.\"},\"getLoanDetails(address)\":{\"notice\":\"Retrieves a user's loan details.\"},\"recordDeposit(address,address,uint256)\":{\"notice\":\"Records a user's deposit into the ledger.\"},\"recordLoan(address,address,uint256)\":{\"notice\":\"Records a user's loan in the ledger.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/CollateralManager.sol\":\"GlobalLedger\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@nilfoundation/smart-contracts/contracts/Nil.sol\":{\"keccak256\":\"0x21257091b205b27932c0d13a507a9fb21222c59faa8ac896a4f00962e307855d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://dcead2113e9cfc853c80709793b363b8146c8582b423951cd96b24015159f2e9\",\"dweb:/ipfs/QmSmNk1vNsCxZp3EfxqhvjLWYpNdGY8ChVzfBu2JtDwKQX\"]},\"@nilfoundation/smart-contracts/contracts/NilTokenBase.sol\":{\"keccak256\":\"0x8239fbd2fce629de2e6b56619194c15be96c823d33d055e71b2fabe002553cc4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4af5cb28280bdfa49e1e4555e172a47c1c971992ad745d22d2087f030ad98a0c\",\"dweb:/ipfs/QmRNCBCdVo9yawrBHF7qYkoZtAnHQHpbqAA4VoPYmDULmt\"]},\"contracts/CollateralManager.sol\":{\"keccak256\":\"0x079e3d40d1f9ddf56058850755b6cdc9bccff82f497df05da7eca4211fc35010\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://76a49d226997682a2b5eb503a7bbd96cf02a17157c968c687c81e29e89470780\",\"dweb:/ipfs/QmeixhrwuFjJPMooDAobe8KShWdQn7QgW8JQk29p79SNyr\"]}},\"version\":1}"}},"contracts/InterestManager.sol":{"InterestManager":{"abi":[{"inputs":[],"name":"getInterestRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"608080604052346013576079908160198239f35b600080fdfe6080806040526004361015601257600080fd5b60003560e01c635257b56614602657600080fd5b34603e576000366003190112603e5780600560209252f35b600080fdfea2646970667358221220721c2ca29cd023f923ed7120652ec8a5739f48f49297866036ebf180918ff81664736f6c634300081c0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x13 JUMPI PUSH1 0x79 SWAP1 DUP2 PUSH1 0x19 DUP3 CODECOPY RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT INVALID PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH1 0x12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR PUSH4 0x5257B566 EQ PUSH1 0x26 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE PUSH1 0x3E JUMPI PUSH1 0x0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH1 0x3E JUMPI DUP1 PUSH1 0x5 PUSH1 0x20 SWAP3 MSTORE RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH19 0x1C2CA29CD023F923ED7120652EC8A5739F48F4 SWAP3 SWAP8 DUP7 PUSH1 0x36 0xEB CALL DUP1 SWAP2 DUP16 0xF8 AND PUSH5 0x736F6C6343 STOP ADDMOD SHR STOP CALLER ","sourceMap":"341:441:3:-:0;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"6080806040526004361015601257600080fd5b60003560e01c635257b56614602657600080fd5b34603e576000366003190112603e5780600560209252f35b600080fdfea2646970667358221220721c2ca29cd023f923ed7120652ec8a5739f48f49297866036ebf180918ff81664736f6c634300081c0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH1 0x12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR PUSH4 0x5257B566 EQ PUSH1 0x26 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE PUSH1 0x3E JUMPI PUSH1 0x0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH1 0x3E JUMPI DUP1 PUSH1 0x5 PUSH1 0x20 SWAP3 MSTORE RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH19 0x1C2CA29CD023F923ED7120652EC8A5739F48F4 SWAP3 SWAP8 DUP7 PUSH1 0x36 0xEB CALL DUP1 SWAP2 DUP16 0xF8 AND PUSH5 0x736F6C6343 STOP ADDMOD SHR STOP CALLER ","sourceMap":"341:441:3:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;341:441:3;;;;;772:1;341:441;;;;;;;"},"methodIdentifiers":{"getInterestRate()":"5257b566"}},"metadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getInterestRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The InterestManager contract is responsible for providing the interest rate to be used in the lending protocol.\",\"kind\":\"dev\",\"methods\":{\"getInterestRate()\":{\"details\":\"In this basic implementation, the interest rate is fixed at 5%. In a real-world scenario, this could be replaced with a dynamic calculation based on market conditions or other factors.\",\"returns\":{\"_0\":\"uint256 The current interest rate (5% in this case).\"}}},\"title\":\"InterestManager\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getInterestRate()\":{\"notice\":\"Fetches the current interest rate.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/InterestManager.sol\":\"InterestManager\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@nilfoundation/smart-contracts/contracts/Nil.sol\":{\"keccak256\":\"0x21257091b205b27932c0d13a507a9fb21222c59faa8ac896a4f00962e307855d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://dcead2113e9cfc853c80709793b363b8146c8582b423951cd96b24015159f2e9\",\"dweb:/ipfs/QmSmNk1vNsCxZp3EfxqhvjLWYpNdGY8ChVzfBu2JtDwKQX\"]},\"@nilfoundation/smart-contracts/contracts/NilTokenBase.sol\":{\"keccak256\":\"0x8239fbd2fce629de2e6b56619194c15be96c823d33d055e71b2fabe002553cc4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4af5cb28280bdfa49e1e4555e172a47c1c971992ad745d22d2087f030ad98a0c\",\"dweb:/ipfs/QmRNCBCdVo9yawrBHF7qYkoZtAnHQHpbqAA4VoPYmDULmt\"]},\"contracts/InterestManager.sol\":{\"keccak256\":\"0xc50d9429b5b414b1ff1f71b45cc6c54b5707efaabad9825310d163c75da2feed\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://4c6ffa4d7f30493ec5a95e40a3b4314937fcfc57eb5f8470809c65dd5f7022f1\",\"dweb:/ipfs/QmSvdRm6hHYWGJbD9ofHovCJK3n5HCQwc56D3zoau1L2mQ\"]}},\"version\":1}"}},"contracts/LendingPool.sol":{"LendingPool":{"abi":[{"inputs":[{"internalType":"address","name":"_globalLedger","type":"address"},{"internalType":"address","name":"_interestManager","type":"address"},{"internalType":"address","name":"_oracle","type":"address"},{"internalType":"TokenId","name":"_usdt","type":"address"},{"internalType":"TokenId","name":"_eth","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"TokenId","name":"borrowToken","type":"address"}],"name":"borrow","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"eth","outputs":[{"internalType":"TokenId","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"bytes","name":"returnData","type":"bytes"},{"internalType":"bytes","name":"context","type":"bytes"}],"name":"finalizeLoan","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getOwnTokenBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getTokenBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenId","outputs":[{"internalType":"TokenId","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"globalLedger","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"bytes","name":"returnData","type":"bytes"},{"internalType":"bytes","name":"context","type":"bytes"}],"name":"handleRepayment","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"interestManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"oracle","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"bytes","name":"returnData","type":"bytes"},{"internalType":"bytes","name":"context","type":"bytes"}],"name":"processLoan","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"bytes","name":"returnData","type":"bytes"},{"internalType":"bytes","name":"context","type":"bytes"}],"name":"processRepayment","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"bytes","name":"returnData","type":"bytes"},{"internalType":"bytes","name":"context","type":"bytes"}],"name":"releaseCollateral","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"repayLoan","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"bytes","name":"returnData","type":"bytes"},{"internalType":"bytes","name":"context","type":"bytes"}],"name":"sendCollateral","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"TokenId","name":"tokenId","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sendToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"}],"name":"setTokenName","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"usdt","outputs":[{"internalType":"TokenId","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"abi_decode_address_fromMemory":{"entryPoint":257,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"6080346100e657601f611b3338819003918201601f19168301916001600160401b038311848410176100eb5780849260a0946040528339810103126100e65761004781610101565b9061005460208201610101565b61006060408301610101565b90610079608061007260608601610101565b9401610101565b600280546001600160a01b03199081166001600160a01b0397881617909155600380548216938716939093179092556004805483169386169390931790925560058054821693851693909317909255600680549092169216919091179055604051611a1d90816101168239f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b03821682036100e65756fe608080604052600436101561001357600080fd5b60003560e01c908163010a38f51461110c5750806310401774146110e35780632f48ab7d146110ba5780632fdcfbd21461108257806346fe543114610f395780634761a3ee14610e5e5780634b3fd14814610cf557806357df844b14610cd7578063659dbf9914610b845780637b47ec1a14610a625780637dc0d1d014610a395780638389454814610a14578063862b092b146109405780638c7c9e0c14610917578063a4f29aad1461077a578063c513a8f514610618578063c59e1c8f14610520578063c634d0321461045c578063d0e30db0146103d8578063d19b9b75146103b3578063ee065e111461038a578063eeaf7d8e1461024b5763f966ade71461011c57600080fd5b6000366003190112610246576101ea6020610135611842565b8161016360405192637453ed4760e11b838501523360248501526024845261015e60448561116d565b611438565b510151906040519163659dbf9960e01b8484015233602484015260448301526044825261019160648361116d565b60025460405163100897a560e21b81526001600160a01b03909116600482015260a0602482015293849283926101fc9290916101cf60a486016116b8565b62a7d8c0604487015285810360031901606487015290611258565b83810360031901608485015290611258565b0381600060d85af1801561023a5761021057005b6102319060203d602011610233575b610229818361116d565b810190611468565b005b503d61021f565b6040513d6000823e3d90fd5b600080fd5b61025436611200565b909115610345578060208061026e93518301019101611373565b84516020868101966001600160a01b03909616959394939182019190910312610246576102af6102b69260646102a861023198518361131f565b049061145b565b11156113a3565b6040516306eb746160e51b6020820152602481018390526001600160a01b03821660448201526000606480830191909152815291610334906102f960848561116d565b60405163c513a8f560e01b60208201526001600160a01b0391821660248201529216604483015281606481015b03601f19810183528261116d565b6002546001600160a01b031661174a565b60405162461bcd60e51b815260206004820152601960248201527f496e74657265737420726174652063616c6c206661696c6564000000000000006044820152606490fd5b34610246576000366003190112610246576003546040516001600160a01b039091168152602090f35b346102465760003660031901126102465760206103d030306117d3565b604051908152f35b6000366003190112610246576102316103ef611842565b61044960206104116001600160a01b0361040885611438565b51511693611438565b51015160405163e859930760e01b60208201523360248201526001600160a01b03909316604484015260648301528160848101610326565b60025430906001600160a01b031661194d565b346102465760203660031901126102465760043561048161047b611480565b15611299565b604051632cbbbfe160e11b81526004810182905260016024820152602081604481600060d05af190811561023a57600091610501575b50156104ce576104c99060005461145b565b600055005b60405162461bcd60e51b815260206004820152600b60248201526a135a5b9d0819985a5b195960aa1b6044820152606490fd5b61051a915060203d60201161023357610229818361116d565b826104b7565b61052936611200565b9091156105d35761054481602080809451830101910161141e565b919092818151818301938491600094010103126105d057505190811561058b576102319261057d8361057684306117d3565b10156113a3565b6001600160a01b031661157d565b60405162461bcd60e51b815260206004820152601860248201527f4e6f20636f6c6c61746572616c20746f2072656c6561736500000000000000006044820152606490fd5b80fd5b60405162461bcd60e51b815260206004820152601d60248201527f4661696c656420746f20726574726965766520636f6c6c61746572616c0000006044820152606490fd5b61062136611200565b9190501561073e5760206106408282806101ea9551830101910161141e565b6005546001600160a01b03928316929081169116810361073857506006546001600160a01b0316905b60405163c35082a960e01b848201526001600160a01b03828116602483015283166044808301919091528152906106df906106a560648461116d565b60405163c59e1c8f60e01b868201526001600160a01b0391821660248201529316604484015282606481015b03601f19810184528361116d565b60025460405163100897a560e21b81526001600160a01b03909116600482015260a0602482015293849283926101fc92909161071d60a486016116b8565b62055730604487015285810360031901606487015290611258565b90610669565b60405162461bcd60e51b8152602060048201526014602482015273131bd85b8818db19585c9a5b99c819985a5b195960621b6044820152606490fd5b346102465760203660031901126102465760043567ffffffffffffffff81116102465736602382011215610246576107bc9036906024816004013591016111ab565b6107c761047b611480565b805167ffffffffffffffff8111610901576107e36001546113e4565b601f8111610894575b50602091601f82116001146108285791819260009261081d575b5050600019600383901b1c1916600191821b179055005b015190508280610806565b601f1982169260016000526000805160206119c88339815191529160005b85811061087c57508360019510610863575b505050811b01600155005b015160001960f88460031b161c19169055828080610858565b91926020600181928685015181550194019201610846565b6001600052601f820160051c6000805160206119c88339815191520190602083106108eb575b601f0160051c6000805160206119c883398151915201905b8181106108df57506107ec565b600081556001016108d2565b6000805160206119c883398151915291506108ba565b634e487b7160e01b600052604160045260246000fd5b34610246576000366003190112610246576006546040516001600160a01b039091168152602090f35b34610246576000366003190112610246576040516000600154610962816113e4565b80845290600181169081156109f057506001146109a2575b61099e8361098a8185038261116d565b604051918291602083526020830190611258565b0390f35b91905060016000526000805160206119c8833981519152916000905b8082106109d65750909150810160200161098a61097a565b9192600181602092548385880101520191019092916109be565b60ff191660208086019190915291151560051b8401909101915061098a905061097a565b346102465760203660031901126102465760206103d0610a32611125565b30906117d3565b34610246576000366003190112610246576004546040516001600160a01b039091168152602090f35b3461024657602036600319011261024657600435610a8161047b611480565b8060005410610b3f57604051632cbbbfe160e11b815281600482015260006024820152602081604481600060d05af190811561023a57600091610b20575b5015610aed57600054908103908111610ad757600055005b634e487b7160e01b600052601160045260246000fd5b60405162461bcd60e51b815260206004820152600b60248201526a109d5c9b8819985a5b195960aa1b6044820152606490fd5b610b39915060203d60201161023357610229818361116d565b82610abf565b60405162461bcd60e51b815260206004820152601e60248201527f4275726e206661696c65643a206e6f7420656e6f75676820746f6b656e7300006044820152606490fd5b610b99610b9036611200565b91929092611332565b604081805181010312610246576040610bb46020830161130b565b9101519160408180518101031261024657610bd660406020830151920161130b565b8115610ca157610c486020936106d16101ea966040519463292bdab360e11b8887015260048652610c0860248761116d565b604051637757bec760e11b898201526001600160a01b039485166024820152604481019790975290921660648601526084850191909152839060a4820190565b60035460405163100897a560e21b81526001600160a01b03909116600482015260a0602482015293849283926101fc929091610c8660a486016116b8565b627a1200604487015285810360031901606487015290611258565b60405162461bcd60e51b815260206004820152600e60248201526d27379030b1ba34bb32903637b0b760911b6044820152606490fd5b34610246576000366003190112610246576020600054604051908152f35b604036600319011261024657600435610d0c61113b565b6005546001600160a01b038281169116818114939190848015610e4a575b15610e15576101ea94610d4384610576602097306117d3565b15610e1057506006546001600160a01b03165b6040516341976e0960e01b858201526024808201849052815291610d7b60448461116d565b6040516346fe543160e01b86820152336024820152604481019490945260648401526001600160a01b03166084808401919091528252610dbc60a48361116d565b6101fc60018060a01b036004541691604051958694859463100897a560e21b8652600486015260a06024860152610df560a486016116b8565b62895440604487015285810360031901606487015290611258565b610d56565b60405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2103a37b5b2b760991b6044820152606490fd5b506006546001600160a01b03168214610d2a565b610e76610e85610e6d36611200565b91939093611332565b60208082518301019101611373565b90919260018060a01b03169360208151918180820193849201010312610246575110610ef4576040516306eb746160e51b60208201526001600160a01b03808516602483015282166044820152606481018390526102319390610eef906104498160848101610326565b61157d565b60405162461bcd60e51b815260206004820152601760248201527f496e73756666696369656e7420636f6c6c61746572616c0000000000000000006044820152606490fd5b610f4236611200565b91156110485760808280518101031261024657610f616020830161130b565b916040810151610f7f6080610f786060850161130b565b930161130b565b835190946001600160a01b0316936020808201928201919091031261024657610fa990518261131f565b607881029080820460781490151715610ad75760405163c35082a960e01b60208201526001600160a01b038581166024830152959095166044808701919091528552610231949360649361033493610326929190611007878961116d565b6040516323b0d1f760e11b60208201526001600160a01b039384166024820152604481019190915291166064820152939091046084840152829060a4820190565b60405162461bcd60e51b815260206004820152601260248201527113dc9858db194818d85b1b0819985a5b195960721b6044820152606490fd5b346102465760603660031901126102465761023161109e611125565b6110a661113b565b6110b161047b611480565b6044359161157d565b34610246576000366003190112610246576005546040516001600160a01b039091168152602090f35b34610246576000366003190112610246576002546040516001600160a01b039091168152602090f35b3461024657600036600319011261024657602090308152f35b600435906001600160a01b038216820361024657565b602435906001600160a01b038216820361024657565b6040810190811067ffffffffffffffff82111761090157604052565b90601f8019910116810190811067ffffffffffffffff82111761090157604052565b67ffffffffffffffff811161090157601f01601f191660200190565b9291926111b78261118f565b916111c5604051938461116d565b829481845281830111610246578281602093846000960137010152565b9080601f83011215610246578160206111fd933591016111ab565b90565b6060600319820112610246576004358015158103610246579160243567ffffffffffffffff81116102465782611238916004016111e2565b916044359067ffffffffffffffff8211610246576111fd916004016111e2565b919082519283825260005b848110611284575050826000602080949584010152601f8019910116010190565b80602080928401015182828601015201611263565b156112a057565b60405162461bcd60e51b815260206004820152603a60248201527f547279696e6720746f2063616c6c2065787465726e616c2066756e6374696f6e60448201527f207769746820696e7465726e616c207472616e73616374696f6e0000000000006064820152608490fd5b51906001600160a01b038216820361024657565b81810292918115918404141715610ad757565b1561133957565b60405162461bcd60e51b815260206004820152601260248201527113195919d95c8818d85b1b0819985a5b195960721b6044820152606490fd5b9190826080910312610246576113888261130b565b91602081015191606061139d6040840161130b565b92015190565b156113aa57565b60405162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e742066756e647360701b6044820152606490fd5b90600182811c92168015611414575b60208310146113fe57565b634e487b7160e01b600052602260045260246000fd5b91607f16916113f3565b9190826040910312610246576111fd6020610f788461130b565b8051156114455760200190565b634e487b7160e01b600052603260045260246000fd5b91908201809211610ad757565b90816020910312610246575180151581036102465790565b600080606051608060ff5afa3d15611575573d9061149d8261118f565b916114ab604051938461116d565b82523d6000602084013e5b15611531578051156114d557806020806111fd93518301019101611468565b60405162461bcd60e51b815260206004820152602e60248201527f2749535f494e5445524e414c5f5452414e53414354494f4e272072657475726e60448201526d7320696e76616c6964206461746160901b6064820152608490fd5b606460405162461bcd60e51b815260206004820152602060248201527f507265636f6d70696c656420636f6e74726163742063616c6c206661696c65646044820152fd5b6060906114b6565b929192604090815192611590838561116d565b60018452601f19830160005b8181106116945750506116479394958351916115b783611151565b6001600160a01b0316825260208201526115d085611438565b526115da84611438565b50602093849161165984516115ef858261116d565b600081528551968794859463f697565360e01b8652600060048701526000602487015260018060a01b031660448601526000606486015260006084860152600060a486015261010060c4860152610104850190611701565b8381036003190160e485015290611258565b0381600060fd5af190811561168a5750611671575050565b8161168792903d1061023357610229818361116d565b50565b513d6000823e3d90fd5b60209085516116a281611151565b600081526000838201528282890101520161159c565b602060605191828152019060809060005b8181106116d65750505090565b825180516001600160a01b0316855260209081015181860152604090940193909201916001016116c9565b906020808351928381520192019060005b81811061171f5750505090565b825180516001600160a01b031685526020908101518186015260409094019390920191600101611712565b60405163100897a560e21b81526001600160a01b03909116600482015260a0602482015291602091839182916117a691906101ea9061178b60a486016116b8565b625b8d80604487015285810360031901606487015290611258565b0381600060d85af1801561023a576117bb5750565b6116879060203d60201161023357610229818361116d565b604051639614ddaf60e01b81526001600160a01b0392831660048201529116602482015260208160448160d15afa90811561023a57600091611813575090565b90506020813d60201161183a575b8161182e6020938361116d565b81010312610246575190565b3d9150611821565b6040516304016d8760e51b81526000816004818360d35af190811561023a5760009161186c575090565b903d8082843e61187c818461116d565b8201916020818403126119495780519067ffffffffffffffff8211611931570182601f820112156119495780519167ffffffffffffffff83116119355760208360051b01936118ce604051958661116d565b83855260208086019460061b8401019281841161193157602001935b8385106118f957505050505090565b604085830312611931576020604091825161191381611151565b61191c8861130b565b815282880151838201528152019401936118ea565b8280fd5b634e487b7160e01b81526041600452602490fd5b5080fd5b60405163f697565360e01b8152600060048201819052602482018190526001600160a01b0392831660448301526064820181905291909216608483015260a482015261010060c482015290602090829081906119b29061164761010484016060611701565b0381600060fd5af1801561023a576117bb575056feb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6a2646970667358221220fda4dbad26fa6e6d4c7ced4ba187c950c9df544d54a762a1f43f43cbeed8936c64736f6c634300081c0033","opcodes":"PUSH1 0x80 CALLVALUE PUSH2 0xE6 JUMPI PUSH1 0x1F PUSH2 0x1B33 CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0xEB JUMPI DUP1 DUP5 SWAP3 PUSH1 0xA0 SWAP5 PUSH1 0x40 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0xE6 JUMPI PUSH2 0x47 DUP2 PUSH2 0x101 JUMP JUMPDEST SWAP1 PUSH2 0x54 PUSH1 0x20 DUP3 ADD PUSH2 0x101 JUMP JUMPDEST PUSH2 0x60 PUSH1 0x40 DUP4 ADD PUSH2 0x101 JUMP JUMPDEST SWAP1 PUSH2 0x79 PUSH1 0x80 PUSH2 0x72 PUSH1 0x60 DUP7 ADD PUSH2 0x101 JUMP JUMPDEST SWAP5 ADD PUSH2 0x101 JUMP JUMPDEST PUSH1 0x2 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP8 DUP9 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x3 DUP1 SLOAD DUP3 AND SWAP4 DUP8 AND SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP3 SSTORE PUSH1 0x4 DUP1 SLOAD DUP4 AND SWAP4 DUP7 AND SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP3 SSTORE PUSH1 0x5 DUP1 SLOAD DUP3 AND SWAP4 DUP6 AND SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP3 SSTORE PUSH1 0x6 DUP1 SLOAD SWAP1 SWAP3 AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH2 0x1A1D SWAP1 DUP2 PUSH2 0x116 DUP3 CODECOPY RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0xE6 JUMPI JUMP INVALID PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x13 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x10A38F5 EQ PUSH2 0x110C JUMPI POP DUP1 PUSH4 0x10401774 EQ PUSH2 0x10E3 JUMPI DUP1 PUSH4 0x2F48AB7D EQ PUSH2 0x10BA JUMPI DUP1 PUSH4 0x2FDCFBD2 EQ PUSH2 0x1082 JUMPI DUP1 PUSH4 0x46FE5431 EQ PUSH2 0xF39 JUMPI DUP1 PUSH4 0x4761A3EE EQ PUSH2 0xE5E JUMPI DUP1 PUSH4 0x4B3FD148 EQ PUSH2 0xCF5 JUMPI DUP1 PUSH4 0x57DF844B EQ PUSH2 0xCD7 JUMPI DUP1 PUSH4 0x659DBF99 EQ PUSH2 0xB84 JUMPI DUP1 PUSH4 0x7B47EC1A EQ PUSH2 0xA62 JUMPI DUP1 PUSH4 0x7DC0D1D0 EQ PUSH2 0xA39 JUMPI DUP1 PUSH4 0x83894548 EQ PUSH2 0xA14 JUMPI DUP1 PUSH4 0x862B092B EQ PUSH2 0x940 JUMPI DUP1 PUSH4 0x8C7C9E0C EQ PUSH2 0x917 JUMPI DUP1 PUSH4 0xA4F29AAD EQ PUSH2 0x77A JUMPI DUP1 PUSH4 0xC513A8F5 EQ PUSH2 0x618 JUMPI DUP1 PUSH4 0xC59E1C8F EQ PUSH2 0x520 JUMPI DUP1 PUSH4 0xC634D032 EQ PUSH2 0x45C JUMPI DUP1 PUSH4 0xD0E30DB0 EQ PUSH2 0x3D8 JUMPI DUP1 PUSH4 0xD19B9B75 EQ PUSH2 0x3B3 JUMPI DUP1 PUSH4 0xEE065E11 EQ PUSH2 0x38A JUMPI DUP1 PUSH4 0xEEAF7D8E EQ PUSH2 0x24B JUMPI PUSH4 0xF966ADE7 EQ PUSH2 0x11C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x246 JUMPI PUSH2 0x1EA PUSH1 0x20 PUSH2 0x135 PUSH2 0x1842 JUMP JUMPDEST DUP2 PUSH2 0x163 PUSH1 0x40 MLOAD SWAP3 PUSH4 0x7453ED47 PUSH1 0xE1 SHL DUP4 DUP6 ADD MSTORE CALLER PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0x24 DUP5 MSTORE PUSH2 0x15E PUSH1 0x44 DUP6 PUSH2 0x116D JUMP JUMPDEST PUSH2 0x1438 JUMP JUMPDEST MLOAD ADD MLOAD SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH4 0x659DBF99 PUSH1 0xE0 SHL DUP5 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x44 DUP3 MSTORE PUSH2 0x191 PUSH1 0x64 DUP4 PUSH2 0x116D JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x40 MLOAD PUSH4 0x100897A5 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA0 PUSH1 0x24 DUP3 ADD MSTORE SWAP4 DUP5 SWAP3 DUP4 SWAP3 PUSH2 0x1FC SWAP3 SWAP1 SWAP2 PUSH2 0x1CF PUSH1 0xA4 DUP7 ADD PUSH2 0x16B8 JUMP JUMPDEST PUSH3 0xA7D8C0 PUSH1 0x44 DUP8 ADD MSTORE DUP6 DUP2 SUB PUSH1 0x3 NOT ADD PUSH1 0x64 DUP8 ADD MSTORE SWAP1 PUSH2 0x1258 JUMP JUMPDEST DUP4 DUP2 SUB PUSH1 0x3 NOT ADD PUSH1 0x84 DUP6 ADD MSTORE SWAP1 PUSH2 0x1258 JUMP JUMPDEST SUB DUP2 PUSH1 0x0 PUSH1 0xD8 GAS CALL DUP1 ISZERO PUSH2 0x23A JUMPI PUSH2 0x210 JUMPI STOP JUMPDEST PUSH2 0x231 SWAP1 PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x233 JUMPI JUMPDEST PUSH2 0x229 DUP2 DUP4 PUSH2 0x116D JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x1468 JUMP JUMPDEST STOP JUMPDEST POP RETURNDATASIZE PUSH2 0x21F JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x254 CALLDATASIZE PUSH2 0x1200 JUMP JUMPDEST SWAP1 SWAP2 ISZERO PUSH2 0x345 JUMPI DUP1 PUSH1 0x20 DUP1 PUSH2 0x26E SWAP4 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x1373 JUMP JUMPDEST DUP5 MLOAD PUSH1 0x20 DUP7 DUP2 ADD SWAP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP7 AND SWAP6 SWAP4 SWAP5 SWAP4 SWAP2 DUP3 ADD SWAP2 SWAP1 SWAP2 SUB SLT PUSH2 0x246 JUMPI PUSH2 0x2AF PUSH2 0x2B6 SWAP3 PUSH1 0x64 PUSH2 0x2A8 PUSH2 0x231 SWAP9 MLOAD DUP4 PUSH2 0x131F JUMP JUMPDEST DIV SWAP1 PUSH2 0x145B JUMP JUMPDEST GT ISZERO PUSH2 0x13A3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x6EB7461 PUSH1 0xE5 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x64 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MSTORE SWAP2 PUSH2 0x334 SWAP1 PUSH2 0x2F9 PUSH1 0x84 DUP6 PUSH2 0x116D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xC513A8F5 PUSH1 0xE0 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x24 DUP3 ADD MSTORE SWAP3 AND PUSH1 0x44 DUP4 ADD MSTORE DUP2 PUSH1 0x64 DUP2 ADD JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x116D JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x174A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E74657265737420726174652063616C6C206661696C656400000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 SWAP1 REVERT JUMPDEST CALLVALUE PUSH2 0x246 JUMPI PUSH1 0x0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x246 JUMPI PUSH1 0x3 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 SWAP1 RETURN JUMPDEST CALLVALUE PUSH2 0x246 JUMPI PUSH1 0x0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x246 JUMPI PUSH1 0x20 PUSH2 0x3D0 ADDRESS ADDRESS PUSH2 0x17D3 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x246 JUMPI PUSH2 0x231 PUSH2 0x3EF PUSH2 0x1842 JUMP JUMPDEST PUSH2 0x449 PUSH1 0x20 PUSH2 0x411 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x408 DUP6 PUSH2 0x1438 JUMP JUMPDEST MLOAD MLOAD AND SWAP4 PUSH2 0x1438 JUMP JUMPDEST MLOAD ADD MLOAD PUSH1 0x40 MLOAD PUSH4 0xE8599307 PUSH1 0xE0 SHL PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP4 AND PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x64 DUP4 ADD MSTORE DUP2 PUSH1 0x84 DUP2 ADD PUSH2 0x326 JUMP JUMPDEST PUSH1 0x2 SLOAD ADDRESS SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x194D JUMP JUMPDEST CALLVALUE PUSH2 0x246 JUMPI PUSH1 0x20 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x246 JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x481 PUSH2 0x47B PUSH2 0x1480 JUMP JUMPDEST ISZERO PUSH2 0x1299 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x2CBBBFE1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0x44 DUP2 PUSH1 0x0 PUSH1 0xD0 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x23A JUMPI PUSH1 0x0 SWAP2 PUSH2 0x501 JUMPI JUMPDEST POP ISZERO PUSH2 0x4CE JUMPI PUSH2 0x4C9 SWAP1 PUSH1 0x0 SLOAD PUSH2 0x145B JUMP JUMPDEST PUSH1 0x0 SSTORE STOP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x135A5B9D0819985A5B1959 PUSH1 0xAA SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 SWAP1 REVERT JUMPDEST PUSH2 0x51A SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x233 JUMPI PUSH2 0x229 DUP2 DUP4 PUSH2 0x116D JUMP JUMPDEST DUP3 PUSH2 0x4B7 JUMP JUMPDEST PUSH2 0x529 CALLDATASIZE PUSH2 0x1200 JUMP JUMPDEST SWAP1 SWAP2 ISZERO PUSH2 0x5D3 JUMPI PUSH2 0x544 DUP2 PUSH1 0x20 DUP1 DUP1 SWAP5 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x141E JUMP JUMPDEST SWAP2 SWAP1 SWAP3 DUP2 DUP2 MLOAD DUP2 DUP4 ADD SWAP4 DUP5 SWAP2 PUSH1 0x0 SWAP5 ADD ADD SUB SLT PUSH2 0x5D0 JUMPI POP MLOAD SWAP1 DUP2 ISZERO PUSH2 0x58B JUMPI PUSH2 0x231 SWAP3 PUSH2 0x57D DUP4 PUSH2 0x576 DUP5 ADDRESS PUSH2 0x17D3 JUMP JUMPDEST LT ISZERO PUSH2 0x13A3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x157D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E6F20636F6C6C61746572616C20746F2072656C656173650000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 SWAP1 REVERT JUMPDEST DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4661696C656420746F20726574726965766520636F6C6C61746572616C000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 SWAP1 REVERT JUMPDEST PUSH2 0x621 CALLDATASIZE PUSH2 0x1200 JUMP JUMPDEST SWAP2 SWAP1 POP ISZERO PUSH2 0x73E JUMPI PUSH1 0x20 PUSH2 0x640 DUP3 DUP3 DUP1 PUSH2 0x1EA SWAP6 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x141E JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP3 SWAP1 DUP2 AND SWAP2 AND DUP2 SUB PUSH2 0x738 JUMPI POP PUSH1 0x6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xC35082A9 PUSH1 0xE0 SHL DUP5 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP4 AND PUSH1 0x44 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MSTORE SWAP1 PUSH2 0x6DF SWAP1 PUSH2 0x6A5 PUSH1 0x64 DUP5 PUSH2 0x116D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xC59E1C8F PUSH1 0xE0 SHL DUP7 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x24 DUP3 ADD MSTORE SWAP4 AND PUSH1 0x44 DUP5 ADD MSTORE DUP3 PUSH1 0x64 DUP2 ADD JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP5 MSTORE DUP4 PUSH2 0x116D JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x40 MLOAD PUSH4 0x100897A5 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA0 PUSH1 0x24 DUP3 ADD MSTORE SWAP4 DUP5 SWAP3 DUP4 SWAP3 PUSH2 0x1FC SWAP3 SWAP1 SWAP2 PUSH2 0x71D PUSH1 0xA4 DUP7 ADD PUSH2 0x16B8 JUMP JUMPDEST PUSH3 0x55730 PUSH1 0x44 DUP8 ADD MSTORE DUP6 DUP2 SUB PUSH1 0x3 NOT ADD PUSH1 0x64 DUP8 ADD MSTORE SWAP1 PUSH2 0x1258 JUMP JUMPDEST SWAP1 PUSH2 0x669 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x131BD85B8818DB19585C9A5B99C819985A5B1959 PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 SWAP1 REVERT JUMPDEST CALLVALUE PUSH2 0x246 JUMPI PUSH1 0x20 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x246 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x246 JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0x246 JUMPI PUSH2 0x7BC SWAP1 CALLDATASIZE SWAP1 PUSH1 0x24 DUP2 PUSH1 0x4 ADD CALLDATALOAD SWAP2 ADD PUSH2 0x11AB JUMP JUMPDEST PUSH2 0x7C7 PUSH2 0x47B PUSH2 0x1480 JUMP JUMPDEST DUP1 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x901 JUMPI PUSH2 0x7E3 PUSH1 0x1 SLOAD PUSH2 0x13E4 JUMP JUMPDEST PUSH1 0x1F DUP2 GT PUSH2 0x894 JUMPI JUMPDEST POP PUSH1 0x20 SWAP2 PUSH1 0x1F DUP3 GT PUSH1 0x1 EQ PUSH2 0x828 JUMPI SWAP2 DUP2 SWAP3 PUSH1 0x0 SWAP3 PUSH2 0x81D JUMPI JUMPDEST POP POP PUSH1 0x0 NOT PUSH1 0x3 DUP4 SWAP1 SHL SHR NOT AND PUSH1 0x1 SWAP2 DUP3 SHL OR SWAP1 SSTORE STOP JUMPDEST ADD MLOAD SWAP1 POP DUP3 DUP1 PUSH2 0x806 JUMP JUMPDEST PUSH1 0x1F NOT DUP3 AND SWAP3 PUSH1 0x1 PUSH1 0x0 MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x19C8 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP2 PUSH1 0x0 JUMPDEST DUP6 DUP2 LT PUSH2 0x87C JUMPI POP DUP4 PUSH1 0x1 SWAP6 LT PUSH2 0x863 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH1 0x1 SSTORE STOP JUMPDEST ADD MLOAD PUSH1 0x0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE DUP3 DUP1 DUP1 PUSH2 0x858 JUMP JUMPDEST SWAP2 SWAP3 PUSH1 0x20 PUSH1 0x1 DUP2 SWAP3 DUP7 DUP6 ADD MLOAD DUP2 SSTORE ADD SWAP5 ADD SWAP3 ADD PUSH2 0x846 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 MSTORE PUSH1 0x1F DUP3 ADD PUSH1 0x5 SHR PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x19C8 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE ADD SWAP1 PUSH1 0x20 DUP4 LT PUSH2 0x8EB JUMPI JUMPDEST PUSH1 0x1F ADD PUSH1 0x5 SHR PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x19C8 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE ADD SWAP1 JUMPDEST DUP2 DUP2 LT PUSH2 0x8DF JUMPI POP PUSH2 0x7EC JUMP JUMPDEST PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x8D2 JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x19C8 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP2 POP PUSH2 0x8BA JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST CALLVALUE PUSH2 0x246 JUMPI PUSH1 0x0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x246 JUMPI PUSH1 0x6 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 SWAP1 RETURN JUMPDEST CALLVALUE PUSH2 0x246 JUMPI PUSH1 0x0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x246 JUMPI PUSH1 0x40 MLOAD PUSH1 0x0 PUSH1 0x1 SLOAD PUSH2 0x962 DUP2 PUSH2 0x13E4 JUMP JUMPDEST DUP1 DUP5 MSTORE SWAP1 PUSH1 0x1 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x9F0 JUMPI POP PUSH1 0x1 EQ PUSH2 0x9A2 JUMPI JUMPDEST PUSH2 0x99E DUP4 PUSH2 0x98A DUP2 DUP6 SUB DUP3 PUSH2 0x116D JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x1258 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST SWAP2 SWAP1 POP PUSH1 0x1 PUSH1 0x0 MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x19C8 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP2 PUSH1 0x0 SWAP1 JUMPDEST DUP1 DUP3 LT PUSH2 0x9D6 JUMPI POP SWAP1 SWAP2 POP DUP2 ADD PUSH1 0x20 ADD PUSH2 0x98A PUSH2 0x97A JUMP JUMPDEST SWAP2 SWAP3 PUSH1 0x1 DUP2 PUSH1 0x20 SWAP3 SLOAD DUP4 DUP6 DUP9 ADD ADD MSTORE ADD SWAP2 ADD SWAP1 SWAP3 SWAP2 PUSH2 0x9BE JUMP JUMPDEST PUSH1 0xFF NOT AND PUSH1 0x20 DUP1 DUP7 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 ISZERO ISZERO PUSH1 0x5 SHL DUP5 ADD SWAP1 SWAP2 ADD SWAP2 POP PUSH2 0x98A SWAP1 POP PUSH2 0x97A JUMP JUMPDEST CALLVALUE PUSH2 0x246 JUMPI PUSH1 0x20 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x246 JUMPI PUSH1 0x20 PUSH2 0x3D0 PUSH2 0xA32 PUSH2 0x1125 JUMP JUMPDEST ADDRESS SWAP1 PUSH2 0x17D3 JUMP JUMPDEST CALLVALUE PUSH2 0x246 JUMPI PUSH1 0x0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x246 JUMPI PUSH1 0x4 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 SWAP1 RETURN JUMPDEST CALLVALUE PUSH2 0x246 JUMPI PUSH1 0x20 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x246 JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0xA81 PUSH2 0x47B PUSH2 0x1480 JUMP JUMPDEST DUP1 PUSH1 0x0 SLOAD LT PUSH2 0xB3F JUMPI PUSH1 0x40 MLOAD PUSH4 0x2CBBBFE1 PUSH1 0xE1 SHL DUP2 MSTORE DUP2 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0x44 DUP2 PUSH1 0x0 PUSH1 0xD0 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x23A JUMPI PUSH1 0x0 SWAP2 PUSH2 0xB20 JUMPI JUMPDEST POP ISZERO PUSH2 0xAED JUMPI PUSH1 0x0 SLOAD SWAP1 DUP2 SUB SWAP1 DUP2 GT PUSH2 0xAD7 JUMPI PUSH1 0x0 SSTORE STOP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x109D5C9B8819985A5B1959 PUSH1 0xAA SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 SWAP1 REVERT JUMPDEST PUSH2 0xB39 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x233 JUMPI PUSH2 0x229 DUP2 DUP4 PUSH2 0x116D JUMP JUMPDEST DUP3 PUSH2 0xABF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4275726E206661696C65643A206E6F7420656E6F75676820746F6B656E730000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 SWAP1 REVERT JUMPDEST PUSH2 0xB99 PUSH2 0xB90 CALLDATASIZE PUSH2 0x1200 JUMP JUMPDEST SWAP2 SWAP3 SWAP1 SWAP3 PUSH2 0x1332 JUMP JUMPDEST PUSH1 0x40 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0x246 JUMPI PUSH1 0x40 PUSH2 0xBB4 PUSH1 0x20 DUP4 ADD PUSH2 0x130B JUMP JUMPDEST SWAP2 ADD MLOAD SWAP2 PUSH1 0x40 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0x246 JUMPI PUSH2 0xBD6 PUSH1 0x40 PUSH1 0x20 DUP4 ADD MLOAD SWAP3 ADD PUSH2 0x130B JUMP JUMPDEST DUP2 ISZERO PUSH2 0xCA1 JUMPI PUSH2 0xC48 PUSH1 0x20 SWAP4 PUSH2 0x6D1 PUSH2 0x1EA SWAP7 PUSH1 0x40 MLOAD SWAP5 PUSH4 0x292BDAB3 PUSH1 0xE1 SHL DUP9 DUP8 ADD MSTORE PUSH1 0x4 DUP7 MSTORE PUSH2 0xC08 PUSH1 0x24 DUP8 PUSH2 0x116D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x7757BEC7 PUSH1 0xE1 SHL DUP10 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP8 SWAP1 SWAP8 MSTORE SWAP1 SWAP3 AND PUSH1 0x64 DUP7 ADD MSTORE PUSH1 0x84 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP4 SWAP1 PUSH1 0xA4 DUP3 ADD SWAP1 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 MLOAD PUSH4 0x100897A5 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA0 PUSH1 0x24 DUP3 ADD MSTORE SWAP4 DUP5 SWAP3 DUP4 SWAP3 PUSH2 0x1FC SWAP3 SWAP1 SWAP2 PUSH2 0xC86 PUSH1 0xA4 DUP7 ADD PUSH2 0x16B8 JUMP JUMPDEST PUSH3 0x7A1200 PUSH1 0x44 DUP8 ADD MSTORE DUP6 DUP2 SUB PUSH1 0x3 NOT ADD PUSH1 0x64 DUP8 ADD MSTORE SWAP1 PUSH2 0x1258 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x27379030B1BA34BB32903637B0B7 PUSH1 0x91 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 SWAP1 REVERT JUMPDEST CALLVALUE PUSH2 0x246 JUMPI PUSH1 0x0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x246 JUMPI PUSH1 0x20 PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x40 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x246 JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0xD0C PUSH2 0x113B JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND DUP2 DUP2 EQ SWAP4 SWAP2 SWAP1 DUP5 DUP1 ISZERO PUSH2 0xE4A JUMPI JUMPDEST ISZERO PUSH2 0xE15 JUMPI PUSH2 0x1EA SWAP5 PUSH2 0xD43 DUP5 PUSH2 0x576 PUSH1 0x20 SWAP8 ADDRESS PUSH2 0x17D3 JUMP JUMPDEST ISZERO PUSH2 0xE10 JUMPI POP PUSH1 0x6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x41976E09 PUSH1 0xE0 SHL DUP6 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP2 MSTORE SWAP2 PUSH2 0xD7B PUSH1 0x44 DUP5 PUSH2 0x116D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x46FE5431 PUSH1 0xE0 SHL DUP7 DUP3 ADD MSTORE CALLER PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x64 DUP5 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x84 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP3 MSTORE PUSH2 0xDBC PUSH1 0xA4 DUP4 PUSH2 0x116D JUMP JUMPDEST PUSH2 0x1FC PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB PUSH1 0x4 SLOAD AND SWAP2 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP5 PUSH4 0x100897A5 PUSH1 0xE2 SHL DUP7 MSTORE PUSH1 0x4 DUP7 ADD MSTORE PUSH1 0xA0 PUSH1 0x24 DUP7 ADD MSTORE PUSH2 0xDF5 PUSH1 0xA4 DUP7 ADD PUSH2 0x16B8 JUMP JUMPDEST PUSH3 0x895440 PUSH1 0x44 DUP8 ADD MSTORE DUP6 DUP2 SUB PUSH1 0x3 NOT ADD PUSH1 0x64 DUP8 ADD MSTORE SWAP1 PUSH2 0x1258 JUMP JUMPDEST PUSH2 0xD56 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x24B73B30B634B2103A37B5B2B7 PUSH1 0x99 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 SWAP1 REVERT JUMPDEST POP PUSH1 0x6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 EQ PUSH2 0xD2A JUMP JUMPDEST PUSH2 0xE76 PUSH2 0xE85 PUSH2 0xE6D CALLDATASIZE PUSH2 0x1200 JUMP JUMPDEST SWAP2 SWAP4 SWAP1 SWAP4 PUSH2 0x1332 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x1373 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB AND SWAP4 PUSH1 0x20 DUP2 MLOAD SWAP2 DUP2 DUP1 DUP3 ADD SWAP4 DUP5 SWAP3 ADD ADD SUB SLT PUSH2 0x246 JUMPI MLOAD LT PUSH2 0xEF4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EB7461 PUSH1 0xE5 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x24 DUP4 ADD MSTORE DUP3 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP4 SWAP1 MSTORE PUSH2 0x231 SWAP4 SWAP1 PUSH2 0xEEF SWAP1 PUSH2 0x449 DUP2 PUSH1 0x84 DUP2 ADD PUSH2 0x326 JUMP JUMPDEST PUSH2 0x157D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E73756666696369656E7420636F6C6C61746572616C000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 SWAP1 REVERT JUMPDEST PUSH2 0xF42 CALLDATASIZE PUSH2 0x1200 JUMP JUMPDEST SWAP2 ISZERO PUSH2 0x1048 JUMPI PUSH1 0x80 DUP3 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0x246 JUMPI PUSH2 0xF61 PUSH1 0x20 DUP4 ADD PUSH2 0x130B JUMP JUMPDEST SWAP2 PUSH1 0x40 DUP2 ADD MLOAD PUSH2 0xF7F PUSH1 0x80 PUSH2 0xF78 PUSH1 0x60 DUP6 ADD PUSH2 0x130B JUMP JUMPDEST SWAP4 ADD PUSH2 0x130B JUMP JUMPDEST DUP4 MLOAD SWAP1 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP4 PUSH1 0x20 DUP1 DUP3 ADD SWAP3 DUP3 ADD SWAP2 SWAP1 SWAP2 SUB SLT PUSH2 0x246 JUMPI PUSH2 0xFA9 SWAP1 MLOAD DUP3 PUSH2 0x131F JUMP JUMPDEST PUSH1 0x78 DUP2 MUL SWAP1 DUP1 DUP3 DIV PUSH1 0x78 EQ SWAP1 ISZERO OR ISZERO PUSH2 0xAD7 JUMPI PUSH1 0x40 MLOAD PUSH4 0xC35082A9 PUSH1 0xE0 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE SWAP6 SWAP1 SWAP6 AND PUSH1 0x44 DUP1 DUP8 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP6 MSTORE PUSH2 0x231 SWAP5 SWAP4 PUSH1 0x64 SWAP4 PUSH2 0x334 SWAP4 PUSH2 0x326 SWAP3 SWAP2 SWAP1 PUSH2 0x1007 DUP8 DUP10 PUSH2 0x116D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x23B0D1F7 PUSH1 0xE1 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 AND PUSH1 0x64 DUP3 ADD MSTORE SWAP4 SWAP1 SWAP2 DIV PUSH1 0x84 DUP5 ADD MSTORE DUP3 SWAP1 PUSH1 0xA4 DUP3 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x13DC9858DB194818D85B1B0819985A5B1959 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 SWAP1 REVERT JUMPDEST CALLVALUE PUSH2 0x246 JUMPI PUSH1 0x60 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x246 JUMPI PUSH2 0x231 PUSH2 0x109E PUSH2 0x1125 JUMP JUMPDEST PUSH2 0x10A6 PUSH2 0x113B JUMP JUMPDEST PUSH2 0x10B1 PUSH2 0x47B PUSH2 0x1480 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP2 PUSH2 0x157D JUMP JUMPDEST CALLVALUE PUSH2 0x246 JUMPI PUSH1 0x0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x246 JUMPI PUSH1 0x5 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 SWAP1 RETURN JUMPDEST CALLVALUE PUSH2 0x246 JUMPI PUSH1 0x0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x246 JUMPI PUSH1 0x2 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 SWAP1 RETURN JUMPDEST CALLVALUE PUSH2 0x246 JUMPI PUSH1 0x0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x246 JUMPI PUSH1 0x20 SWAP1 ADDRESS DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x246 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x246 JUMPI JUMP JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x901 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F DUP1 NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x901 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x901 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP3 SWAP2 SWAP3 PUSH2 0x11B7 DUP3 PUSH2 0x118F JUMP JUMPDEST SWAP2 PUSH2 0x11C5 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x116D JUMP JUMPDEST DUP3 SWAP5 DUP2 DUP5 MSTORE DUP2 DUP4 ADD GT PUSH2 0x246 JUMPI DUP3 DUP2 PUSH1 0x20 SWAP4 DUP5 PUSH1 0x0 SWAP7 ADD CALLDATACOPY ADD ADD MSTORE JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x246 JUMPI DUP2 PUSH1 0x20 PUSH2 0x11FD SWAP4 CALLDATALOAD SWAP2 ADD PUSH2 0x11AB JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 NOT DUP3 ADD SLT PUSH2 0x246 JUMPI PUSH1 0x4 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x246 JUMPI SWAP2 PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x246 JUMPI DUP3 PUSH2 0x1238 SWAP2 PUSH1 0x4 ADD PUSH2 0x11E2 JUMP JUMPDEST SWAP2 PUSH1 0x44 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x246 JUMPI PUSH2 0x11FD SWAP2 PUSH1 0x4 ADD PUSH2 0x11E2 JUMP JUMPDEST SWAP2 SWAP1 DUP3 MLOAD SWAP3 DUP4 DUP3 MSTORE PUSH1 0x0 JUMPDEST DUP5 DUP2 LT PUSH2 0x1284 JUMPI POP POP DUP3 PUSH1 0x0 PUSH1 0x20 DUP1 SWAP5 SWAP6 DUP5 ADD ADD MSTORE PUSH1 0x1F DUP1 NOT SWAP2 ADD AND ADD ADD SWAP1 JUMP JUMPDEST DUP1 PUSH1 0x20 DUP1 SWAP3 DUP5 ADD ADD MLOAD DUP3 DUP3 DUP7 ADD ADD MSTORE ADD PUSH2 0x1263 JUMP JUMPDEST ISZERO PUSH2 0x12A0 JUMPI JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x547279696E6720746F2063616C6C2065787465726E616C2066756E6374696F6E PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x207769746820696E7465726E616C207472616E73616374696F6E000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 SWAP1 REVERT JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x246 JUMPI JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0xAD7 JUMPI JUMP JUMPDEST ISZERO PUSH2 0x1339 JUMPI JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x13195919D95C8818D85B1B0819985A5B1959 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 SWAP1 REVERT JUMPDEST SWAP2 SWAP1 DUP3 PUSH1 0x80 SWAP2 SUB SLT PUSH2 0x246 JUMPI PUSH2 0x1388 DUP3 PUSH2 0x130B JUMP JUMPDEST SWAP2 PUSH1 0x20 DUP2 ADD MLOAD SWAP2 PUSH1 0x60 PUSH2 0x139D PUSH1 0x40 DUP5 ADD PUSH2 0x130B JUMP JUMPDEST SWAP3 ADD MLOAD SWAP1 JUMP JUMPDEST ISZERO PUSH2 0x13AA JUMPI JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x496E73756666696369656E742066756E6473 PUSH1 0x70 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 SWAP1 REVERT JUMPDEST SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0x1414 JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0x13FE JUMPI JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x13F3 JUMP JUMPDEST SWAP2 SWAP1 DUP3 PUSH1 0x40 SWAP2 SUB SLT PUSH2 0x246 JUMPI PUSH2 0x11FD PUSH1 0x20 PUSH2 0xF78 DUP5 PUSH2 0x130B JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x1445 JUMPI PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0xAD7 JUMPI JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x246 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x246 JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x60 MLOAD PUSH1 0x80 PUSH1 0xFF GAS STATICCALL RETURNDATASIZE ISZERO PUSH2 0x1575 JUMPI RETURNDATASIZE SWAP1 PUSH2 0x149D DUP3 PUSH2 0x118F JUMP JUMPDEST SWAP2 PUSH2 0x14AB PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x116D JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMPDEST ISZERO PUSH2 0x1531 JUMPI DUP1 MLOAD ISZERO PUSH2 0x14D5 JUMPI DUP1 PUSH1 0x20 DUP1 PUSH2 0x11FD SWAP4 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x1468 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x2749535F494E5445524E414C5F5452414E53414354494F4E272072657475726E PUSH1 0x44 DUP3 ADD MSTORE PUSH14 0x7320696E76616C69642064617461 PUSH1 0x90 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 SWAP1 REVERT JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x507265636F6D70696C656420636F6E74726163742063616C6C206661696C6564 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0x60 SWAP1 PUSH2 0x14B6 JUMP JUMPDEST SWAP3 SWAP2 SWAP3 PUSH1 0x40 SWAP1 DUP2 MLOAD SWAP3 PUSH2 0x1590 DUP4 DUP6 PUSH2 0x116D JUMP JUMPDEST PUSH1 0x1 DUP5 MSTORE PUSH1 0x1F NOT DUP4 ADD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT PUSH2 0x1694 JUMPI POP POP PUSH2 0x1647 SWAP4 SWAP5 SWAP6 DUP4 MLOAD SWAP2 PUSH2 0x15B7 DUP4 PUSH2 0x1151 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x15D0 DUP6 PUSH2 0x1438 JUMP JUMPDEST MSTORE PUSH2 0x15DA DUP5 PUSH2 0x1438 JUMP JUMPDEST POP PUSH1 0x20 SWAP4 DUP5 SWAP2 PUSH2 0x1659 DUP5 MLOAD PUSH2 0x15EF DUP6 DUP3 PUSH2 0x116D JUMP JUMPDEST PUSH1 0x0 DUP2 MSTORE DUP6 MLOAD SWAP7 DUP8 SWAP5 DUP6 SWAP5 PUSH4 0xF6975653 PUSH1 0xE0 SHL DUP7 MSTORE PUSH1 0x0 PUSH1 0x4 DUP8 ADD MSTORE PUSH1 0x0 PUSH1 0x24 DUP8 ADD MSTORE PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB AND PUSH1 0x44 DUP7 ADD MSTORE PUSH1 0x0 PUSH1 0x64 DUP7 ADD MSTORE PUSH1 0x0 PUSH1 0x84 DUP7 ADD MSTORE PUSH1 0x0 PUSH1 0xA4 DUP7 ADD MSTORE PUSH2 0x100 PUSH1 0xC4 DUP7 ADD MSTORE PUSH2 0x104 DUP6 ADD SWAP1 PUSH2 0x1701 JUMP JUMPDEST DUP4 DUP2 SUB PUSH1 0x3 NOT ADD PUSH1 0xE4 DUP6 ADD MSTORE SWAP1 PUSH2 0x1258 JUMP JUMPDEST SUB DUP2 PUSH1 0x0 PUSH1 0xFD GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x168A JUMPI POP PUSH2 0x1671 JUMPI POP POP JUMP JUMPDEST DUP2 PUSH2 0x1687 SWAP3 SWAP1 RETURNDATASIZE LT PUSH2 0x233 JUMPI PUSH2 0x229 DUP2 DUP4 PUSH2 0x116D JUMP JUMPDEST POP JUMP JUMPDEST MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x20 SWAP1 DUP6 MLOAD PUSH2 0x16A2 DUP2 PUSH2 0x1151 JUMP JUMPDEST PUSH1 0x0 DUP2 MSTORE PUSH1 0x0 DUP4 DUP3 ADD MSTORE DUP3 DUP3 DUP10 ADD ADD MSTORE ADD PUSH2 0x159C JUMP JUMPDEST PUSH1 0x20 PUSH1 0x60 MLOAD SWAP2 DUP3 DUP2 MSTORE ADD SWAP1 PUSH1 0x80 SWAP1 PUSH1 0x0 JUMPDEST DUP2 DUP2 LT PUSH2 0x16D6 JUMPI POP POP POP SWAP1 JUMP JUMPDEST DUP3 MLOAD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 MSTORE PUSH1 0x20 SWAP1 DUP2 ADD MLOAD DUP2 DUP7 ADD MSTORE PUSH1 0x40 SWAP1 SWAP5 ADD SWAP4 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x16C9 JUMP JUMPDEST SWAP1 PUSH1 0x20 DUP1 DUP4 MLOAD SWAP3 DUP4 DUP2 MSTORE ADD SWAP3 ADD SWAP1 PUSH1 0x0 JUMPDEST DUP2 DUP2 LT PUSH2 0x171F JUMPI POP POP POP SWAP1 JUMP JUMPDEST DUP3 MLOAD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 MSTORE PUSH1 0x20 SWAP1 DUP2 ADD MLOAD DUP2 DUP7 ADD MSTORE PUSH1 0x40 SWAP1 SWAP5 ADD SWAP4 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x1712 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x100897A5 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA0 PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH1 0x20 SWAP2 DUP4 SWAP2 DUP3 SWAP2 PUSH2 0x17A6 SWAP2 SWAP1 PUSH2 0x1EA SWAP1 PUSH2 0x178B PUSH1 0xA4 DUP7 ADD PUSH2 0x16B8 JUMP JUMPDEST PUSH3 0x5B8D80 PUSH1 0x44 DUP8 ADD MSTORE DUP6 DUP2 SUB PUSH1 0x3 NOT ADD PUSH1 0x64 DUP8 ADD MSTORE SWAP1 PUSH2 0x1258 JUMP JUMPDEST SUB DUP2 PUSH1 0x0 PUSH1 0xD8 GAS CALL DUP1 ISZERO PUSH2 0x23A JUMPI PUSH2 0x17BB JUMPI POP JUMP JUMPDEST PUSH2 0x1687 SWAP1 PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x233 JUMPI PUSH2 0x229 DUP2 DUP4 PUSH2 0x116D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x9614DDAF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0x44 DUP2 PUSH1 0xD1 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x23A JUMPI PUSH1 0x0 SWAP2 PUSH2 0x1813 JUMPI POP SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x183A JUMPI JUMPDEST DUP2 PUSH2 0x182E PUSH1 0x20 SWAP4 DUP4 PUSH2 0x116D JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x246 JUMPI MLOAD SWAP1 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x1821 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x4016D87 PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x0 DUP2 PUSH1 0x4 DUP2 DUP4 PUSH1 0xD3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x23A JUMPI PUSH1 0x0 SWAP2 PUSH2 0x186C JUMPI POP SWAP1 JUMP JUMPDEST SWAP1 RETURNDATASIZE DUP1 DUP3 DUP5 RETURNDATACOPY PUSH2 0x187C DUP2 DUP5 PUSH2 0x116D JUMP JUMPDEST DUP3 ADD SWAP2 PUSH1 0x20 DUP2 DUP5 SUB SLT PUSH2 0x1949 JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x1931 JUMPI ADD DUP3 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x1949 JUMPI DUP1 MLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x1935 JUMPI PUSH1 0x20 DUP4 PUSH1 0x5 SHL ADD SWAP4 PUSH2 0x18CE PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x116D JUMP JUMPDEST DUP4 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP5 PUSH1 0x6 SHL DUP5 ADD ADD SWAP3 DUP2 DUP5 GT PUSH2 0x1931 JUMPI PUSH1 0x20 ADD SWAP4 JUMPDEST DUP4 DUP6 LT PUSH2 0x18F9 JUMPI POP POP POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP6 DUP4 SUB SLT PUSH2 0x1931 JUMPI PUSH1 0x20 PUSH1 0x40 SWAP2 DUP3 MLOAD PUSH2 0x1913 DUP2 PUSH2 0x1151 JUMP JUMPDEST PUSH2 0x191C DUP9 PUSH2 0x130B JUMP JUMPDEST DUP2 MSTORE DUP3 DUP9 ADD MLOAD DUP4 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP5 ADD SWAP4 PUSH2 0x18EA JUMP JUMPDEST DUP3 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 SWAP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xF6975653 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x84 DUP4 ADD MSTORE PUSH1 0xA4 DUP3 ADD MSTORE PUSH2 0x100 PUSH1 0xC4 DUP3 ADD MSTORE SWAP1 PUSH1 0x20 SWAP1 DUP3 SWAP1 DUP2 SWAP1 PUSH2 0x19B2 SWAP1 PUSH2 0x1647 PUSH2 0x104 DUP5 ADD PUSH1 0x60 PUSH2 0x1701 JUMP JUMPDEST SUB DUP2 PUSH1 0x0 PUSH1 0xFD GAS CALL DUP1 ISZERO PUSH2 0x23A JUMPI PUSH2 0x17BB JUMPI POP JUMP INVALID 0xB1 0xE 0x2D MSTORE PUSH23 0x12073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2 0xB7 STATICCALL 0xC 0xF6 LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 REVERT LOG4 0xDB 0xAD 0x26 STATICCALL PUSH15 0x6D4C7CED4BA187C950C9DF544D54A7 PUSH3 0xA1F43F NUMBER 0xCB 0xEE 0xD8 SWAP4 PUSH13 0x64736F6C634300081C00330000 ","sourceMap":"489:20254:4:-:0;;;;;;;;;;;;;-1:-1:-1;;489:20254:4;;;;-1:-1:-1;;;;;489:20254:4;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;:::i;:::-;1347:28;489:20254;;-1:-1:-1;;;;;;489:20254:4;;;-1:-1:-1;;;;;489:20254:4;;;;;;;1385:34;489:20254;;;;;;;;;;;;;;1429:16;489:20254;;;;;;;;;;;;;;1455:12;489:20254;;;;;;;;;;;;;;1477:10;489:20254;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;489:20254:4;;;;;;-1:-1:-1;489:20254:4;;;;;-1:-1:-1;489:20254:4;;;;-1:-1:-1;;;;;489:20254:4;;;;;;:::o"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":4411,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_14008":{"entryPoint":4389,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_payable_fromMemory":{"entryPoint":4875,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_address_payablet_uint256t_userDefinedValueType_TokenIdt_uint256_fromMemory":{"entryPoint":4979,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_address_payablet_userDefinedValueType_TokenId_fromMemory":{"entryPoint":5150,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_available_length_bytes":{"entryPoint":4523,"id":null,"parameterSlots":3,"returnSlots":1},"abi_decode_bool_fromMemory":{"entryPoint":5224,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_boolt_bytest_bytes":{"entryPoint":4608,"id":null,"parameterSlots":1,"returnSlots":3},"abi_decode_bytes":{"entryPoint":4578,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_address_uint256_userDefinedValueType_TokenId_uint256":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_address_userDefinedValueType_TokenId":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_address_userDefinedValueType_TokenId_uint256":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_array_struct_Token_dyn":{"entryPoint":5889,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_struct_Token_dyn_14073":{"entryPoint":5816,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_string":{"entryPoint":4696,"id":null,"parameterSlots":2,"returnSlots":1},"array_allocation_size_bytes":{"entryPoint":4495,"id":null,"parameterSlots":1,"returnSlots":1},"checked_add_uint256":{"entryPoint":5211,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_uint256":{"entryPoint":4895,"id":null,"parameterSlots":2,"returnSlots":1},"extract_byte_array_length":{"entryPoint":5092,"id":null,"parameterSlots":1,"returnSlots":1},"finalize_allocation":{"entryPoint":4461,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_14067":{"entryPoint":4433,"id":null,"parameterSlots":1,"returnSlots":0},"fun_asyncCallWithTokens":{"entryPoint":6477,"id":317,"parameterSlots":3,"returnSlots":0},"fun_isInternalTransaction":{"entryPoint":5248,"id":969,"parameterSlots":0,"returnSlots":1},"fun_sendRequest":{"entryPoint":5962,"id":426,"parameterSlots":3,"returnSlots":0},"fun_sendTokenInternal":{"entryPoint":5501,"id":1498,"parameterSlots":3,"returnSlots":0},"fun_tokenBalance":{"entryPoint":6099,"id":554,"parameterSlots":2,"returnSlots":1},"fun_txnTokens":{"entryPoint":6210,"id":569,"parameterSlots":0,"returnSlots":1},"memory_array_index_access_struct_Token_dyn":{"entryPoint":5176,"id":null,"parameterSlots":1,"returnSlots":1},"require_helper_stringliteral":{"entryPoint":5027,"id":null,"parameterSlots":1,"returnSlots":0},"require_helper_stringliteral_861c":{"entryPoint":4914,"id":null,"parameterSlots":1,"returnSlots":0},"require_helper_stringliteral_d705":{"entryPoint":4761,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"608080604052600436101561001357600080fd5b60003560e01c908163010a38f51461110c5750806310401774146110e35780632f48ab7d146110ba5780632fdcfbd21461108257806346fe543114610f395780634761a3ee14610e5e5780634b3fd14814610cf557806357df844b14610cd7578063659dbf9914610b845780637b47ec1a14610a625780637dc0d1d014610a395780638389454814610a14578063862b092b146109405780638c7c9e0c14610917578063a4f29aad1461077a578063c513a8f514610618578063c59e1c8f14610520578063c634d0321461045c578063d0e30db0146103d8578063d19b9b75146103b3578063ee065e111461038a578063eeaf7d8e1461024b5763f966ade71461011c57600080fd5b6000366003190112610246576101ea6020610135611842565b8161016360405192637453ed4760e11b838501523360248501526024845261015e60448561116d565b611438565b510151906040519163659dbf9960e01b8484015233602484015260448301526044825261019160648361116d565b60025460405163100897a560e21b81526001600160a01b03909116600482015260a0602482015293849283926101fc9290916101cf60a486016116b8565b62a7d8c0604487015285810360031901606487015290611258565b83810360031901608485015290611258565b0381600060d85af1801561023a5761021057005b6102319060203d602011610233575b610229818361116d565b810190611468565b005b503d61021f565b6040513d6000823e3d90fd5b600080fd5b61025436611200565b909115610345578060208061026e93518301019101611373565b84516020868101966001600160a01b03909616959394939182019190910312610246576102af6102b69260646102a861023198518361131f565b049061145b565b11156113a3565b6040516306eb746160e51b6020820152602481018390526001600160a01b03821660448201526000606480830191909152815291610334906102f960848561116d565b60405163c513a8f560e01b60208201526001600160a01b0391821660248201529216604483015281606481015b03601f19810183528261116d565b6002546001600160a01b031661174a565b60405162461bcd60e51b815260206004820152601960248201527f496e74657265737420726174652063616c6c206661696c6564000000000000006044820152606490fd5b34610246576000366003190112610246576003546040516001600160a01b039091168152602090f35b346102465760003660031901126102465760206103d030306117d3565b604051908152f35b6000366003190112610246576102316103ef611842565b61044960206104116001600160a01b0361040885611438565b51511693611438565b51015160405163e859930760e01b60208201523360248201526001600160a01b03909316604484015260648301528160848101610326565b60025430906001600160a01b031661194d565b346102465760203660031901126102465760043561048161047b611480565b15611299565b604051632cbbbfe160e11b81526004810182905260016024820152602081604481600060d05af190811561023a57600091610501575b50156104ce576104c99060005461145b565b600055005b60405162461bcd60e51b815260206004820152600b60248201526a135a5b9d0819985a5b195960aa1b6044820152606490fd5b61051a915060203d60201161023357610229818361116d565b826104b7565b61052936611200565b9091156105d35761054481602080809451830101910161141e565b919092818151818301938491600094010103126105d057505190811561058b576102319261057d8361057684306117d3565b10156113a3565b6001600160a01b031661157d565b60405162461bcd60e51b815260206004820152601860248201527f4e6f20636f6c6c61746572616c20746f2072656c6561736500000000000000006044820152606490fd5b80fd5b60405162461bcd60e51b815260206004820152601d60248201527f4661696c656420746f20726574726965766520636f6c6c61746572616c0000006044820152606490fd5b61062136611200565b9190501561073e5760206106408282806101ea9551830101910161141e565b6005546001600160a01b03928316929081169116810361073857506006546001600160a01b0316905b60405163c35082a960e01b848201526001600160a01b03828116602483015283166044808301919091528152906106df906106a560648461116d565b60405163c59e1c8f60e01b868201526001600160a01b0391821660248201529316604484015282606481015b03601f19810184528361116d565b60025460405163100897a560e21b81526001600160a01b03909116600482015260a0602482015293849283926101fc92909161071d60a486016116b8565b62055730604487015285810360031901606487015290611258565b90610669565b60405162461bcd60e51b8152602060048201526014602482015273131bd85b8818db19585c9a5b99c819985a5b195960621b6044820152606490fd5b346102465760203660031901126102465760043567ffffffffffffffff81116102465736602382011215610246576107bc9036906024816004013591016111ab565b6107c761047b611480565b805167ffffffffffffffff8111610901576107e36001546113e4565b601f8111610894575b50602091601f82116001146108285791819260009261081d575b5050600019600383901b1c1916600191821b179055005b015190508280610806565b601f1982169260016000526000805160206119c88339815191529160005b85811061087c57508360019510610863575b505050811b01600155005b015160001960f88460031b161c19169055828080610858565b91926020600181928685015181550194019201610846565b6001600052601f820160051c6000805160206119c88339815191520190602083106108eb575b601f0160051c6000805160206119c883398151915201905b8181106108df57506107ec565b600081556001016108d2565b6000805160206119c883398151915291506108ba565b634e487b7160e01b600052604160045260246000fd5b34610246576000366003190112610246576006546040516001600160a01b039091168152602090f35b34610246576000366003190112610246576040516000600154610962816113e4565b80845290600181169081156109f057506001146109a2575b61099e8361098a8185038261116d565b604051918291602083526020830190611258565b0390f35b91905060016000526000805160206119c8833981519152916000905b8082106109d65750909150810160200161098a61097a565b9192600181602092548385880101520191019092916109be565b60ff191660208086019190915291151560051b8401909101915061098a905061097a565b346102465760203660031901126102465760206103d0610a32611125565b30906117d3565b34610246576000366003190112610246576004546040516001600160a01b039091168152602090f35b3461024657602036600319011261024657600435610a8161047b611480565b8060005410610b3f57604051632cbbbfe160e11b815281600482015260006024820152602081604481600060d05af190811561023a57600091610b20575b5015610aed57600054908103908111610ad757600055005b634e487b7160e01b600052601160045260246000fd5b60405162461bcd60e51b815260206004820152600b60248201526a109d5c9b8819985a5b195960aa1b6044820152606490fd5b610b39915060203d60201161023357610229818361116d565b82610abf565b60405162461bcd60e51b815260206004820152601e60248201527f4275726e206661696c65643a206e6f7420656e6f75676820746f6b656e7300006044820152606490fd5b610b99610b9036611200565b91929092611332565b604081805181010312610246576040610bb46020830161130b565b9101519160408180518101031261024657610bd660406020830151920161130b565b8115610ca157610c486020936106d16101ea966040519463292bdab360e11b8887015260048652610c0860248761116d565b604051637757bec760e11b898201526001600160a01b039485166024820152604481019790975290921660648601526084850191909152839060a4820190565b60035460405163100897a560e21b81526001600160a01b03909116600482015260a0602482015293849283926101fc929091610c8660a486016116b8565b627a1200604487015285810360031901606487015290611258565b60405162461bcd60e51b815260206004820152600e60248201526d27379030b1ba34bb32903637b0b760911b6044820152606490fd5b34610246576000366003190112610246576020600054604051908152f35b604036600319011261024657600435610d0c61113b565b6005546001600160a01b038281169116818114939190848015610e4a575b15610e15576101ea94610d4384610576602097306117d3565b15610e1057506006546001600160a01b03165b6040516341976e0960e01b858201526024808201849052815291610d7b60448461116d565b6040516346fe543160e01b86820152336024820152604481019490945260648401526001600160a01b03166084808401919091528252610dbc60a48361116d565b6101fc60018060a01b036004541691604051958694859463100897a560e21b8652600486015260a06024860152610df560a486016116b8565b62895440604487015285810360031901606487015290611258565b610d56565b60405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2103a37b5b2b760991b6044820152606490fd5b506006546001600160a01b03168214610d2a565b610e76610e85610e6d36611200565b91939093611332565b60208082518301019101611373565b90919260018060a01b03169360208151918180820193849201010312610246575110610ef4576040516306eb746160e51b60208201526001600160a01b03808516602483015282166044820152606481018390526102319390610eef906104498160848101610326565b61157d565b60405162461bcd60e51b815260206004820152601760248201527f496e73756666696369656e7420636f6c6c61746572616c0000000000000000006044820152606490fd5b610f4236611200565b91156110485760808280518101031261024657610f616020830161130b565b916040810151610f7f6080610f786060850161130b565b930161130b565b835190946001600160a01b0316936020808201928201919091031261024657610fa990518261131f565b607881029080820460781490151715610ad75760405163c35082a960e01b60208201526001600160a01b038581166024830152959095166044808701919091528552610231949360649361033493610326929190611007878961116d565b6040516323b0d1f760e11b60208201526001600160a01b039384166024820152604481019190915291166064820152939091046084840152829060a4820190565b60405162461bcd60e51b815260206004820152601260248201527113dc9858db194818d85b1b0819985a5b195960721b6044820152606490fd5b346102465760603660031901126102465761023161109e611125565b6110a661113b565b6110b161047b611480565b6044359161157d565b34610246576000366003190112610246576005546040516001600160a01b039091168152602090f35b34610246576000366003190112610246576002546040516001600160a01b039091168152602090f35b3461024657600036600319011261024657602090308152f35b600435906001600160a01b038216820361024657565b602435906001600160a01b038216820361024657565b6040810190811067ffffffffffffffff82111761090157604052565b90601f8019910116810190811067ffffffffffffffff82111761090157604052565b67ffffffffffffffff811161090157601f01601f191660200190565b9291926111b78261118f565b916111c5604051938461116d565b829481845281830111610246578281602093846000960137010152565b9080601f83011215610246578160206111fd933591016111ab565b90565b6060600319820112610246576004358015158103610246579160243567ffffffffffffffff81116102465782611238916004016111e2565b916044359067ffffffffffffffff8211610246576111fd916004016111e2565b919082519283825260005b848110611284575050826000602080949584010152601f8019910116010190565b80602080928401015182828601015201611263565b156112a057565b60405162461bcd60e51b815260206004820152603a60248201527f547279696e6720746f2063616c6c2065787465726e616c2066756e6374696f6e60448201527f207769746820696e7465726e616c207472616e73616374696f6e0000000000006064820152608490fd5b51906001600160a01b038216820361024657565b81810292918115918404141715610ad757565b1561133957565b60405162461bcd60e51b815260206004820152601260248201527113195919d95c8818d85b1b0819985a5b195960721b6044820152606490fd5b9190826080910312610246576113888261130b565b91602081015191606061139d6040840161130b565b92015190565b156113aa57565b60405162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e742066756e647360701b6044820152606490fd5b90600182811c92168015611414575b60208310146113fe57565b634e487b7160e01b600052602260045260246000fd5b91607f16916113f3565b9190826040910312610246576111fd6020610f788461130b565b8051156114455760200190565b634e487b7160e01b600052603260045260246000fd5b91908201809211610ad757565b90816020910312610246575180151581036102465790565b600080606051608060ff5afa3d15611575573d9061149d8261118f565b916114ab604051938461116d565b82523d6000602084013e5b15611531578051156114d557806020806111fd93518301019101611468565b60405162461bcd60e51b815260206004820152602e60248201527f2749535f494e5445524e414c5f5452414e53414354494f4e272072657475726e60448201526d7320696e76616c6964206461746160901b6064820152608490fd5b606460405162461bcd60e51b815260206004820152602060248201527f507265636f6d70696c656420636f6e74726163742063616c6c206661696c65646044820152fd5b6060906114b6565b929192604090815192611590838561116d565b60018452601f19830160005b8181106116945750506116479394958351916115b783611151565b6001600160a01b0316825260208201526115d085611438565b526115da84611438565b50602093849161165984516115ef858261116d565b600081528551968794859463f697565360e01b8652600060048701526000602487015260018060a01b031660448601526000606486015260006084860152600060a486015261010060c4860152610104850190611701565b8381036003190160e485015290611258565b0381600060fd5af190811561168a5750611671575050565b8161168792903d1061023357610229818361116d565b50565b513d6000823e3d90fd5b60209085516116a281611151565b600081526000838201528282890101520161159c565b602060605191828152019060809060005b8181106116d65750505090565b825180516001600160a01b0316855260209081015181860152604090940193909201916001016116c9565b906020808351928381520192019060005b81811061171f5750505090565b825180516001600160a01b031685526020908101518186015260409094019390920191600101611712565b60405163100897a560e21b81526001600160a01b03909116600482015260a0602482015291602091839182916117a691906101ea9061178b60a486016116b8565b625b8d80604487015285810360031901606487015290611258565b0381600060d85af1801561023a576117bb5750565b6116879060203d60201161023357610229818361116d565b604051639614ddaf60e01b81526001600160a01b0392831660048201529116602482015260208160448160d15afa90811561023a57600091611813575090565b90506020813d60201161183a575b8161182e6020938361116d565b81010312610246575190565b3d9150611821565b6040516304016d8760e51b81526000816004818360d35af190811561023a5760009161186c575090565b903d8082843e61187c818461116d565b8201916020818403126119495780519067ffffffffffffffff8211611931570182601f820112156119495780519167ffffffffffffffff83116119355760208360051b01936118ce604051958661116d565b83855260208086019460061b8401019281841161193157602001935b8385106118f957505050505090565b604085830312611931576020604091825161191381611151565b61191c8861130b565b815282880151838201528152019401936118ea565b8280fd5b634e487b7160e01b81526041600452602490fd5b5080fd5b60405163f697565360e01b8152600060048201819052602482018190526001600160a01b0392831660448301526064820181905291909216608483015260a482015261010060c482015290602090829081906119b29061164761010484016060611701565b0381600060fd5af1801561023a576117bb575056feb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6a2646970667358221220fda4dbad26fa6e6d4c7ced4ba187c950c9df544d54a762a1f43f43cbeed8936c64736f6c634300081c0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x13 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x10A38F5 EQ PUSH2 0x110C JUMPI POP DUP1 PUSH4 0x10401774 EQ PUSH2 0x10E3 JUMPI DUP1 PUSH4 0x2F48AB7D EQ PUSH2 0x10BA JUMPI DUP1 PUSH4 0x2FDCFBD2 EQ PUSH2 0x1082 JUMPI DUP1 PUSH4 0x46FE5431 EQ PUSH2 0xF39 JUMPI DUP1 PUSH4 0x4761A3EE EQ PUSH2 0xE5E JUMPI DUP1 PUSH4 0x4B3FD148 EQ PUSH2 0xCF5 JUMPI DUP1 PUSH4 0x57DF844B EQ PUSH2 0xCD7 JUMPI DUP1 PUSH4 0x659DBF99 EQ PUSH2 0xB84 JUMPI DUP1 PUSH4 0x7B47EC1A EQ PUSH2 0xA62 JUMPI DUP1 PUSH4 0x7DC0D1D0 EQ PUSH2 0xA39 JUMPI DUP1 PUSH4 0x83894548 EQ PUSH2 0xA14 JUMPI DUP1 PUSH4 0x862B092B EQ PUSH2 0x940 JUMPI DUP1 PUSH4 0x8C7C9E0C EQ PUSH2 0x917 JUMPI DUP1 PUSH4 0xA4F29AAD EQ PUSH2 0x77A JUMPI DUP1 PUSH4 0xC513A8F5 EQ PUSH2 0x618 JUMPI DUP1 PUSH4 0xC59E1C8F EQ PUSH2 0x520 JUMPI DUP1 PUSH4 0xC634D032 EQ PUSH2 0x45C JUMPI DUP1 PUSH4 0xD0E30DB0 EQ PUSH2 0x3D8 JUMPI DUP1 PUSH4 0xD19B9B75 EQ PUSH2 0x3B3 JUMPI DUP1 PUSH4 0xEE065E11 EQ PUSH2 0x38A JUMPI DUP1 PUSH4 0xEEAF7D8E EQ PUSH2 0x24B JUMPI PUSH4 0xF966ADE7 EQ PUSH2 0x11C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x246 JUMPI PUSH2 0x1EA PUSH1 0x20 PUSH2 0x135 PUSH2 0x1842 JUMP JUMPDEST DUP2 PUSH2 0x163 PUSH1 0x40 MLOAD SWAP3 PUSH4 0x7453ED47 PUSH1 0xE1 SHL DUP4 DUP6 ADD MSTORE CALLER PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0x24 DUP5 MSTORE PUSH2 0x15E PUSH1 0x44 DUP6 PUSH2 0x116D JUMP JUMPDEST PUSH2 0x1438 JUMP JUMPDEST MLOAD ADD MLOAD SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH4 0x659DBF99 PUSH1 0xE0 SHL DUP5 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x44 DUP3 MSTORE PUSH2 0x191 PUSH1 0x64 DUP4 PUSH2 0x116D JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x40 MLOAD PUSH4 0x100897A5 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA0 PUSH1 0x24 DUP3 ADD MSTORE SWAP4 DUP5 SWAP3 DUP4 SWAP3 PUSH2 0x1FC SWAP3 SWAP1 SWAP2 PUSH2 0x1CF PUSH1 0xA4 DUP7 ADD PUSH2 0x16B8 JUMP JUMPDEST PUSH3 0xA7D8C0 PUSH1 0x44 DUP8 ADD MSTORE DUP6 DUP2 SUB PUSH1 0x3 NOT ADD PUSH1 0x64 DUP8 ADD MSTORE SWAP1 PUSH2 0x1258 JUMP JUMPDEST DUP4 DUP2 SUB PUSH1 0x3 NOT ADD PUSH1 0x84 DUP6 ADD MSTORE SWAP1 PUSH2 0x1258 JUMP JUMPDEST SUB DUP2 PUSH1 0x0 PUSH1 0xD8 GAS CALL DUP1 ISZERO PUSH2 0x23A JUMPI PUSH2 0x210 JUMPI STOP JUMPDEST PUSH2 0x231 SWAP1 PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x233 JUMPI JUMPDEST PUSH2 0x229 DUP2 DUP4 PUSH2 0x116D JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x1468 JUMP JUMPDEST STOP JUMPDEST POP RETURNDATASIZE PUSH2 0x21F JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x254 CALLDATASIZE PUSH2 0x1200 JUMP JUMPDEST SWAP1 SWAP2 ISZERO PUSH2 0x345 JUMPI DUP1 PUSH1 0x20 DUP1 PUSH2 0x26E SWAP4 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x1373 JUMP JUMPDEST DUP5 MLOAD PUSH1 0x20 DUP7 DUP2 ADD SWAP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP7 AND SWAP6 SWAP4 SWAP5 SWAP4 SWAP2 DUP3 ADD SWAP2 SWAP1 SWAP2 SUB SLT PUSH2 0x246 JUMPI PUSH2 0x2AF PUSH2 0x2B6 SWAP3 PUSH1 0x64 PUSH2 0x2A8 PUSH2 0x231 SWAP9 MLOAD DUP4 PUSH2 0x131F JUMP JUMPDEST DIV SWAP1 PUSH2 0x145B JUMP JUMPDEST GT ISZERO PUSH2 0x13A3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x6EB7461 PUSH1 0xE5 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x64 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MSTORE SWAP2 PUSH2 0x334 SWAP1 PUSH2 0x2F9 PUSH1 0x84 DUP6 PUSH2 0x116D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xC513A8F5 PUSH1 0xE0 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x24 DUP3 ADD MSTORE SWAP3 AND PUSH1 0x44 DUP4 ADD MSTORE DUP2 PUSH1 0x64 DUP2 ADD JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x116D JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x174A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E74657265737420726174652063616C6C206661696C656400000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 SWAP1 REVERT JUMPDEST CALLVALUE PUSH2 0x246 JUMPI PUSH1 0x0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x246 JUMPI PUSH1 0x3 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 SWAP1 RETURN JUMPDEST CALLVALUE PUSH2 0x246 JUMPI PUSH1 0x0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x246 JUMPI PUSH1 0x20 PUSH2 0x3D0 ADDRESS ADDRESS PUSH2 0x17D3 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x246 JUMPI PUSH2 0x231 PUSH2 0x3EF PUSH2 0x1842 JUMP JUMPDEST PUSH2 0x449 PUSH1 0x20 PUSH2 0x411 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x408 DUP6 PUSH2 0x1438 JUMP JUMPDEST MLOAD MLOAD AND SWAP4 PUSH2 0x1438 JUMP JUMPDEST MLOAD ADD MLOAD PUSH1 0x40 MLOAD PUSH4 0xE8599307 PUSH1 0xE0 SHL PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP4 AND PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x64 DUP4 ADD MSTORE DUP2 PUSH1 0x84 DUP2 ADD PUSH2 0x326 JUMP JUMPDEST PUSH1 0x2 SLOAD ADDRESS SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x194D JUMP JUMPDEST CALLVALUE PUSH2 0x246 JUMPI PUSH1 0x20 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x246 JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x481 PUSH2 0x47B PUSH2 0x1480 JUMP JUMPDEST ISZERO PUSH2 0x1299 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x2CBBBFE1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0x44 DUP2 PUSH1 0x0 PUSH1 0xD0 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x23A JUMPI PUSH1 0x0 SWAP2 PUSH2 0x501 JUMPI JUMPDEST POP ISZERO PUSH2 0x4CE JUMPI PUSH2 0x4C9 SWAP1 PUSH1 0x0 SLOAD PUSH2 0x145B JUMP JUMPDEST PUSH1 0x0 SSTORE STOP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x135A5B9D0819985A5B1959 PUSH1 0xAA SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 SWAP1 REVERT JUMPDEST PUSH2 0x51A SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x233 JUMPI PUSH2 0x229 DUP2 DUP4 PUSH2 0x116D JUMP JUMPDEST DUP3 PUSH2 0x4B7 JUMP JUMPDEST PUSH2 0x529 CALLDATASIZE PUSH2 0x1200 JUMP JUMPDEST SWAP1 SWAP2 ISZERO PUSH2 0x5D3 JUMPI PUSH2 0x544 DUP2 PUSH1 0x20 DUP1 DUP1 SWAP5 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x141E JUMP JUMPDEST SWAP2 SWAP1 SWAP3 DUP2 DUP2 MLOAD DUP2 DUP4 ADD SWAP4 DUP5 SWAP2 PUSH1 0x0 SWAP5 ADD ADD SUB SLT PUSH2 0x5D0 JUMPI POP MLOAD SWAP1 DUP2 ISZERO PUSH2 0x58B JUMPI PUSH2 0x231 SWAP3 PUSH2 0x57D DUP4 PUSH2 0x576 DUP5 ADDRESS PUSH2 0x17D3 JUMP JUMPDEST LT ISZERO PUSH2 0x13A3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x157D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E6F20636F6C6C61746572616C20746F2072656C656173650000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 SWAP1 REVERT JUMPDEST DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4661696C656420746F20726574726965766520636F6C6C61746572616C000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 SWAP1 REVERT JUMPDEST PUSH2 0x621 CALLDATASIZE PUSH2 0x1200 JUMP JUMPDEST SWAP2 SWAP1 POP ISZERO PUSH2 0x73E JUMPI PUSH1 0x20 PUSH2 0x640 DUP3 DUP3 DUP1 PUSH2 0x1EA SWAP6 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x141E JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP3 SWAP1 DUP2 AND SWAP2 AND DUP2 SUB PUSH2 0x738 JUMPI POP PUSH1 0x6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xC35082A9 PUSH1 0xE0 SHL DUP5 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP4 AND PUSH1 0x44 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MSTORE SWAP1 PUSH2 0x6DF SWAP1 PUSH2 0x6A5 PUSH1 0x64 DUP5 PUSH2 0x116D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xC59E1C8F PUSH1 0xE0 SHL DUP7 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x24 DUP3 ADD MSTORE SWAP4 AND PUSH1 0x44 DUP5 ADD MSTORE DUP3 PUSH1 0x64 DUP2 ADD JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP5 MSTORE DUP4 PUSH2 0x116D JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x40 MLOAD PUSH4 0x100897A5 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA0 PUSH1 0x24 DUP3 ADD MSTORE SWAP4 DUP5 SWAP3 DUP4 SWAP3 PUSH2 0x1FC SWAP3 SWAP1 SWAP2 PUSH2 0x71D PUSH1 0xA4 DUP7 ADD PUSH2 0x16B8 JUMP JUMPDEST PUSH3 0x55730 PUSH1 0x44 DUP8 ADD MSTORE DUP6 DUP2 SUB PUSH1 0x3 NOT ADD PUSH1 0x64 DUP8 ADD MSTORE SWAP1 PUSH2 0x1258 JUMP JUMPDEST SWAP1 PUSH2 0x669 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x131BD85B8818DB19585C9A5B99C819985A5B1959 PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 SWAP1 REVERT JUMPDEST CALLVALUE PUSH2 0x246 JUMPI PUSH1 0x20 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x246 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x246 JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0x246 JUMPI PUSH2 0x7BC SWAP1 CALLDATASIZE SWAP1 PUSH1 0x24 DUP2 PUSH1 0x4 ADD CALLDATALOAD SWAP2 ADD PUSH2 0x11AB JUMP JUMPDEST PUSH2 0x7C7 PUSH2 0x47B PUSH2 0x1480 JUMP JUMPDEST DUP1 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x901 JUMPI PUSH2 0x7E3 PUSH1 0x1 SLOAD PUSH2 0x13E4 JUMP JUMPDEST PUSH1 0x1F DUP2 GT PUSH2 0x894 JUMPI JUMPDEST POP PUSH1 0x20 SWAP2 PUSH1 0x1F DUP3 GT PUSH1 0x1 EQ PUSH2 0x828 JUMPI SWAP2 DUP2 SWAP3 PUSH1 0x0 SWAP3 PUSH2 0x81D JUMPI JUMPDEST POP POP PUSH1 0x0 NOT PUSH1 0x3 DUP4 SWAP1 SHL SHR NOT AND PUSH1 0x1 SWAP2 DUP3 SHL OR SWAP1 SSTORE STOP JUMPDEST ADD MLOAD SWAP1 POP DUP3 DUP1 PUSH2 0x806 JUMP JUMPDEST PUSH1 0x1F NOT DUP3 AND SWAP3 PUSH1 0x1 PUSH1 0x0 MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x19C8 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP2 PUSH1 0x0 JUMPDEST DUP6 DUP2 LT PUSH2 0x87C JUMPI POP DUP4 PUSH1 0x1 SWAP6 LT PUSH2 0x863 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH1 0x1 SSTORE STOP JUMPDEST ADD MLOAD PUSH1 0x0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE DUP3 DUP1 DUP1 PUSH2 0x858 JUMP JUMPDEST SWAP2 SWAP3 PUSH1 0x20 PUSH1 0x1 DUP2 SWAP3 DUP7 DUP6 ADD MLOAD DUP2 SSTORE ADD SWAP5 ADD SWAP3 ADD PUSH2 0x846 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 MSTORE PUSH1 0x1F DUP3 ADD PUSH1 0x5 SHR PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x19C8 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE ADD SWAP1 PUSH1 0x20 DUP4 LT PUSH2 0x8EB JUMPI JUMPDEST PUSH1 0x1F ADD PUSH1 0x5 SHR PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x19C8 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE ADD SWAP1 JUMPDEST DUP2 DUP2 LT PUSH2 0x8DF JUMPI POP PUSH2 0x7EC JUMP JUMPDEST PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x8D2 JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x19C8 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP2 POP PUSH2 0x8BA JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST CALLVALUE PUSH2 0x246 JUMPI PUSH1 0x0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x246 JUMPI PUSH1 0x6 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 SWAP1 RETURN JUMPDEST CALLVALUE PUSH2 0x246 JUMPI PUSH1 0x0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x246 JUMPI PUSH1 0x40 MLOAD PUSH1 0x0 PUSH1 0x1 SLOAD PUSH2 0x962 DUP2 PUSH2 0x13E4 JUMP JUMPDEST DUP1 DUP5 MSTORE SWAP1 PUSH1 0x1 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x9F0 JUMPI POP PUSH1 0x1 EQ PUSH2 0x9A2 JUMPI JUMPDEST PUSH2 0x99E DUP4 PUSH2 0x98A DUP2 DUP6 SUB DUP3 PUSH2 0x116D JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x1258 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST SWAP2 SWAP1 POP PUSH1 0x1 PUSH1 0x0 MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x19C8 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP2 PUSH1 0x0 SWAP1 JUMPDEST DUP1 DUP3 LT PUSH2 0x9D6 JUMPI POP SWAP1 SWAP2 POP DUP2 ADD PUSH1 0x20 ADD PUSH2 0x98A PUSH2 0x97A JUMP JUMPDEST SWAP2 SWAP3 PUSH1 0x1 DUP2 PUSH1 0x20 SWAP3 SLOAD DUP4 DUP6 DUP9 ADD ADD MSTORE ADD SWAP2 ADD SWAP1 SWAP3 SWAP2 PUSH2 0x9BE JUMP JUMPDEST PUSH1 0xFF NOT AND PUSH1 0x20 DUP1 DUP7 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 ISZERO ISZERO PUSH1 0x5 SHL DUP5 ADD SWAP1 SWAP2 ADD SWAP2 POP PUSH2 0x98A SWAP1 POP PUSH2 0x97A JUMP JUMPDEST CALLVALUE PUSH2 0x246 JUMPI PUSH1 0x20 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x246 JUMPI PUSH1 0x20 PUSH2 0x3D0 PUSH2 0xA32 PUSH2 0x1125 JUMP JUMPDEST ADDRESS SWAP1 PUSH2 0x17D3 JUMP JUMPDEST CALLVALUE PUSH2 0x246 JUMPI PUSH1 0x0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x246 JUMPI PUSH1 0x4 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 SWAP1 RETURN JUMPDEST CALLVALUE PUSH2 0x246 JUMPI PUSH1 0x20 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x246 JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0xA81 PUSH2 0x47B PUSH2 0x1480 JUMP JUMPDEST DUP1 PUSH1 0x0 SLOAD LT PUSH2 0xB3F JUMPI PUSH1 0x40 MLOAD PUSH4 0x2CBBBFE1 PUSH1 0xE1 SHL DUP2 MSTORE DUP2 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0x44 DUP2 PUSH1 0x0 PUSH1 0xD0 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x23A JUMPI PUSH1 0x0 SWAP2 PUSH2 0xB20 JUMPI JUMPDEST POP ISZERO PUSH2 0xAED JUMPI PUSH1 0x0 SLOAD SWAP1 DUP2 SUB SWAP1 DUP2 GT PUSH2 0xAD7 JUMPI PUSH1 0x0 SSTORE STOP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x109D5C9B8819985A5B1959 PUSH1 0xAA SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 SWAP1 REVERT JUMPDEST PUSH2 0xB39 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x233 JUMPI PUSH2 0x229 DUP2 DUP4 PUSH2 0x116D JUMP JUMPDEST DUP3 PUSH2 0xABF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4275726E206661696C65643A206E6F7420656E6F75676820746F6B656E730000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 SWAP1 REVERT JUMPDEST PUSH2 0xB99 PUSH2 0xB90 CALLDATASIZE PUSH2 0x1200 JUMP JUMPDEST SWAP2 SWAP3 SWAP1 SWAP3 PUSH2 0x1332 JUMP JUMPDEST PUSH1 0x40 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0x246 JUMPI PUSH1 0x40 PUSH2 0xBB4 PUSH1 0x20 DUP4 ADD PUSH2 0x130B JUMP JUMPDEST SWAP2 ADD MLOAD SWAP2 PUSH1 0x40 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0x246 JUMPI PUSH2 0xBD6 PUSH1 0x40 PUSH1 0x20 DUP4 ADD MLOAD SWAP3 ADD PUSH2 0x130B JUMP JUMPDEST DUP2 ISZERO PUSH2 0xCA1 JUMPI PUSH2 0xC48 PUSH1 0x20 SWAP4 PUSH2 0x6D1 PUSH2 0x1EA SWAP7 PUSH1 0x40 MLOAD SWAP5 PUSH4 0x292BDAB3 PUSH1 0xE1 SHL DUP9 DUP8 ADD MSTORE PUSH1 0x4 DUP7 MSTORE PUSH2 0xC08 PUSH1 0x24 DUP8 PUSH2 0x116D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x7757BEC7 PUSH1 0xE1 SHL DUP10 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP8 SWAP1 SWAP8 MSTORE SWAP1 SWAP3 AND PUSH1 0x64 DUP7 ADD MSTORE PUSH1 0x84 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP4 SWAP1 PUSH1 0xA4 DUP3 ADD SWAP1 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 MLOAD PUSH4 0x100897A5 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA0 PUSH1 0x24 DUP3 ADD MSTORE SWAP4 DUP5 SWAP3 DUP4 SWAP3 PUSH2 0x1FC SWAP3 SWAP1 SWAP2 PUSH2 0xC86 PUSH1 0xA4 DUP7 ADD PUSH2 0x16B8 JUMP JUMPDEST PUSH3 0x7A1200 PUSH1 0x44 DUP8 ADD MSTORE DUP6 DUP2 SUB PUSH1 0x3 NOT ADD PUSH1 0x64 DUP8 ADD MSTORE SWAP1 PUSH2 0x1258 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x27379030B1BA34BB32903637B0B7 PUSH1 0x91 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 SWAP1 REVERT JUMPDEST CALLVALUE PUSH2 0x246 JUMPI PUSH1 0x0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x246 JUMPI PUSH1 0x20 PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x40 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x246 JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0xD0C PUSH2 0x113B JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND DUP2 DUP2 EQ SWAP4 SWAP2 SWAP1 DUP5 DUP1 ISZERO PUSH2 0xE4A JUMPI JUMPDEST ISZERO PUSH2 0xE15 JUMPI PUSH2 0x1EA SWAP5 PUSH2 0xD43 DUP5 PUSH2 0x576 PUSH1 0x20 SWAP8 ADDRESS PUSH2 0x17D3 JUMP JUMPDEST ISZERO PUSH2 0xE10 JUMPI POP PUSH1 0x6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x41976E09 PUSH1 0xE0 SHL DUP6 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP2 MSTORE SWAP2 PUSH2 0xD7B PUSH1 0x44 DUP5 PUSH2 0x116D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x46FE5431 PUSH1 0xE0 SHL DUP7 DUP3 ADD MSTORE CALLER PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x64 DUP5 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x84 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP3 MSTORE PUSH2 0xDBC PUSH1 0xA4 DUP4 PUSH2 0x116D JUMP JUMPDEST PUSH2 0x1FC PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB PUSH1 0x4 SLOAD AND SWAP2 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP5 PUSH4 0x100897A5 PUSH1 0xE2 SHL DUP7 MSTORE PUSH1 0x4 DUP7 ADD MSTORE PUSH1 0xA0 PUSH1 0x24 DUP7 ADD MSTORE PUSH2 0xDF5 PUSH1 0xA4 DUP7 ADD PUSH2 0x16B8 JUMP JUMPDEST PUSH3 0x895440 PUSH1 0x44 DUP8 ADD MSTORE DUP6 DUP2 SUB PUSH1 0x3 NOT ADD PUSH1 0x64 DUP8 ADD MSTORE SWAP1 PUSH2 0x1258 JUMP JUMPDEST PUSH2 0xD56 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x24B73B30B634B2103A37B5B2B7 PUSH1 0x99 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 SWAP1 REVERT JUMPDEST POP PUSH1 0x6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 EQ PUSH2 0xD2A JUMP JUMPDEST PUSH2 0xE76 PUSH2 0xE85 PUSH2 0xE6D CALLDATASIZE PUSH2 0x1200 JUMP JUMPDEST SWAP2 SWAP4 SWAP1 SWAP4 PUSH2 0x1332 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x1373 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB AND SWAP4 PUSH1 0x20 DUP2 MLOAD SWAP2 DUP2 DUP1 DUP3 ADD SWAP4 DUP5 SWAP3 ADD ADD SUB SLT PUSH2 0x246 JUMPI MLOAD LT PUSH2 0xEF4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EB7461 PUSH1 0xE5 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x24 DUP4 ADD MSTORE DUP3 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP4 SWAP1 MSTORE PUSH2 0x231 SWAP4 SWAP1 PUSH2 0xEEF SWAP1 PUSH2 0x449 DUP2 PUSH1 0x84 DUP2 ADD PUSH2 0x326 JUMP JUMPDEST PUSH2 0x157D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E73756666696369656E7420636F6C6C61746572616C000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 SWAP1 REVERT JUMPDEST PUSH2 0xF42 CALLDATASIZE PUSH2 0x1200 JUMP JUMPDEST SWAP2 ISZERO PUSH2 0x1048 JUMPI PUSH1 0x80 DUP3 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0x246 JUMPI PUSH2 0xF61 PUSH1 0x20 DUP4 ADD PUSH2 0x130B JUMP JUMPDEST SWAP2 PUSH1 0x40 DUP2 ADD MLOAD PUSH2 0xF7F PUSH1 0x80 PUSH2 0xF78 PUSH1 0x60 DUP6 ADD PUSH2 0x130B JUMP JUMPDEST SWAP4 ADD PUSH2 0x130B JUMP JUMPDEST DUP4 MLOAD SWAP1 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP4 PUSH1 0x20 DUP1 DUP3 ADD SWAP3 DUP3 ADD SWAP2 SWAP1 SWAP2 SUB SLT PUSH2 0x246 JUMPI PUSH2 0xFA9 SWAP1 MLOAD DUP3 PUSH2 0x131F JUMP JUMPDEST PUSH1 0x78 DUP2 MUL SWAP1 DUP1 DUP3 DIV PUSH1 0x78 EQ SWAP1 ISZERO OR ISZERO PUSH2 0xAD7 JUMPI PUSH1 0x40 MLOAD PUSH4 0xC35082A9 PUSH1 0xE0 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE SWAP6 SWAP1 SWAP6 AND PUSH1 0x44 DUP1 DUP8 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP6 MSTORE PUSH2 0x231 SWAP5 SWAP4 PUSH1 0x64 SWAP4 PUSH2 0x334 SWAP4 PUSH2 0x326 SWAP3 SWAP2 SWAP1 PUSH2 0x1007 DUP8 DUP10 PUSH2 0x116D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x23B0D1F7 PUSH1 0xE1 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 AND PUSH1 0x64 DUP3 ADD MSTORE SWAP4 SWAP1 SWAP2 DIV PUSH1 0x84 DUP5 ADD MSTORE DUP3 SWAP1 PUSH1 0xA4 DUP3 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x13DC9858DB194818D85B1B0819985A5B1959 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 SWAP1 REVERT JUMPDEST CALLVALUE PUSH2 0x246 JUMPI PUSH1 0x60 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x246 JUMPI PUSH2 0x231 PUSH2 0x109E PUSH2 0x1125 JUMP JUMPDEST PUSH2 0x10A6 PUSH2 0x113B JUMP JUMPDEST PUSH2 0x10B1 PUSH2 0x47B PUSH2 0x1480 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP2 PUSH2 0x157D JUMP JUMPDEST CALLVALUE PUSH2 0x246 JUMPI PUSH1 0x0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x246 JUMPI PUSH1 0x5 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 SWAP1 RETURN JUMPDEST CALLVALUE PUSH2 0x246 JUMPI PUSH1 0x0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x246 JUMPI PUSH1 0x2 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 SWAP1 RETURN JUMPDEST CALLVALUE PUSH2 0x246 JUMPI PUSH1 0x0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x246 JUMPI PUSH1 0x20 SWAP1 ADDRESS DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x246 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x246 JUMPI JUMP JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x901 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F DUP1 NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x901 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x901 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP3 SWAP2 SWAP3 PUSH2 0x11B7 DUP3 PUSH2 0x118F JUMP JUMPDEST SWAP2 PUSH2 0x11C5 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x116D JUMP JUMPDEST DUP3 SWAP5 DUP2 DUP5 MSTORE DUP2 DUP4 ADD GT PUSH2 0x246 JUMPI DUP3 DUP2 PUSH1 0x20 SWAP4 DUP5 PUSH1 0x0 SWAP7 ADD CALLDATACOPY ADD ADD MSTORE JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x246 JUMPI DUP2 PUSH1 0x20 PUSH2 0x11FD SWAP4 CALLDATALOAD SWAP2 ADD PUSH2 0x11AB JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 NOT DUP3 ADD SLT PUSH2 0x246 JUMPI PUSH1 0x4 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x246 JUMPI SWAP2 PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x246 JUMPI DUP3 PUSH2 0x1238 SWAP2 PUSH1 0x4 ADD PUSH2 0x11E2 JUMP JUMPDEST SWAP2 PUSH1 0x44 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x246 JUMPI PUSH2 0x11FD SWAP2 PUSH1 0x4 ADD PUSH2 0x11E2 JUMP JUMPDEST SWAP2 SWAP1 DUP3 MLOAD SWAP3 DUP4 DUP3 MSTORE PUSH1 0x0 JUMPDEST DUP5 DUP2 LT PUSH2 0x1284 JUMPI POP POP DUP3 PUSH1 0x0 PUSH1 0x20 DUP1 SWAP5 SWAP6 DUP5 ADD ADD MSTORE PUSH1 0x1F DUP1 NOT SWAP2 ADD AND ADD ADD SWAP1 JUMP JUMPDEST DUP1 PUSH1 0x20 DUP1 SWAP3 DUP5 ADD ADD MLOAD DUP3 DUP3 DUP7 ADD ADD MSTORE ADD PUSH2 0x1263 JUMP JUMPDEST ISZERO PUSH2 0x12A0 JUMPI JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x547279696E6720746F2063616C6C2065787465726E616C2066756E6374696F6E PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x207769746820696E7465726E616C207472616E73616374696F6E000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 SWAP1 REVERT JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x246 JUMPI JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0xAD7 JUMPI JUMP JUMPDEST ISZERO PUSH2 0x1339 JUMPI JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x13195919D95C8818D85B1B0819985A5B1959 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 SWAP1 REVERT JUMPDEST SWAP2 SWAP1 DUP3 PUSH1 0x80 SWAP2 SUB SLT PUSH2 0x246 JUMPI PUSH2 0x1388 DUP3 PUSH2 0x130B JUMP JUMPDEST SWAP2 PUSH1 0x20 DUP2 ADD MLOAD SWAP2 PUSH1 0x60 PUSH2 0x139D PUSH1 0x40 DUP5 ADD PUSH2 0x130B JUMP JUMPDEST SWAP3 ADD MLOAD SWAP1 JUMP JUMPDEST ISZERO PUSH2 0x13AA JUMPI JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x496E73756666696369656E742066756E6473 PUSH1 0x70 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 SWAP1 REVERT JUMPDEST SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0x1414 JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0x13FE JUMPI JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x13F3 JUMP JUMPDEST SWAP2 SWAP1 DUP3 PUSH1 0x40 SWAP2 SUB SLT PUSH2 0x246 JUMPI PUSH2 0x11FD PUSH1 0x20 PUSH2 0xF78 DUP5 PUSH2 0x130B JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x1445 JUMPI PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0xAD7 JUMPI JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x246 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x246 JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x60 MLOAD PUSH1 0x80 PUSH1 0xFF GAS STATICCALL RETURNDATASIZE ISZERO PUSH2 0x1575 JUMPI RETURNDATASIZE SWAP1 PUSH2 0x149D DUP3 PUSH2 0x118F JUMP JUMPDEST SWAP2 PUSH2 0x14AB PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x116D JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMPDEST ISZERO PUSH2 0x1531 JUMPI DUP1 MLOAD ISZERO PUSH2 0x14D5 JUMPI DUP1 PUSH1 0x20 DUP1 PUSH2 0x11FD SWAP4 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x1468 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x2749535F494E5445524E414C5F5452414E53414354494F4E272072657475726E PUSH1 0x44 DUP3 ADD MSTORE PUSH14 0x7320696E76616C69642064617461 PUSH1 0x90 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 SWAP1 REVERT JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x507265636F6D70696C656420636F6E74726163742063616C6C206661696C6564 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0x60 SWAP1 PUSH2 0x14B6 JUMP JUMPDEST SWAP3 SWAP2 SWAP3 PUSH1 0x40 SWAP1 DUP2 MLOAD SWAP3 PUSH2 0x1590 DUP4 DUP6 PUSH2 0x116D JUMP JUMPDEST PUSH1 0x1 DUP5 MSTORE PUSH1 0x1F NOT DUP4 ADD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT PUSH2 0x1694 JUMPI POP POP PUSH2 0x1647 SWAP4 SWAP5 SWAP6 DUP4 MLOAD SWAP2 PUSH2 0x15B7 DUP4 PUSH2 0x1151 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x15D0 DUP6 PUSH2 0x1438 JUMP JUMPDEST MSTORE PUSH2 0x15DA DUP5 PUSH2 0x1438 JUMP JUMPDEST POP PUSH1 0x20 SWAP4 DUP5 SWAP2 PUSH2 0x1659 DUP5 MLOAD PUSH2 0x15EF DUP6 DUP3 PUSH2 0x116D JUMP JUMPDEST PUSH1 0x0 DUP2 MSTORE DUP6 MLOAD SWAP7 DUP8 SWAP5 DUP6 SWAP5 PUSH4 0xF6975653 PUSH1 0xE0 SHL DUP7 MSTORE PUSH1 0x0 PUSH1 0x4 DUP8 ADD MSTORE PUSH1 0x0 PUSH1 0x24 DUP8 ADD MSTORE PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB AND PUSH1 0x44 DUP7 ADD MSTORE PUSH1 0x0 PUSH1 0x64 DUP7 ADD MSTORE PUSH1 0x0 PUSH1 0x84 DUP7 ADD MSTORE PUSH1 0x0 PUSH1 0xA4 DUP7 ADD MSTORE PUSH2 0x100 PUSH1 0xC4 DUP7 ADD MSTORE PUSH2 0x104 DUP6 ADD SWAP1 PUSH2 0x1701 JUMP JUMPDEST DUP4 DUP2 SUB PUSH1 0x3 NOT ADD PUSH1 0xE4 DUP6 ADD MSTORE SWAP1 PUSH2 0x1258 JUMP JUMPDEST SUB DUP2 PUSH1 0x0 PUSH1 0xFD GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x168A JUMPI POP PUSH2 0x1671 JUMPI POP POP JUMP JUMPDEST DUP2 PUSH2 0x1687 SWAP3 SWAP1 RETURNDATASIZE LT PUSH2 0x233 JUMPI PUSH2 0x229 DUP2 DUP4 PUSH2 0x116D JUMP JUMPDEST POP JUMP JUMPDEST MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x20 SWAP1 DUP6 MLOAD PUSH2 0x16A2 DUP2 PUSH2 0x1151 JUMP JUMPDEST PUSH1 0x0 DUP2 MSTORE PUSH1 0x0 DUP4 DUP3 ADD MSTORE DUP3 DUP3 DUP10 ADD ADD MSTORE ADD PUSH2 0x159C JUMP JUMPDEST PUSH1 0x20 PUSH1 0x60 MLOAD SWAP2 DUP3 DUP2 MSTORE ADD SWAP1 PUSH1 0x80 SWAP1 PUSH1 0x0 JUMPDEST DUP2 DUP2 LT PUSH2 0x16D6 JUMPI POP POP POP SWAP1 JUMP JUMPDEST DUP3 MLOAD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 MSTORE PUSH1 0x20 SWAP1 DUP2 ADD MLOAD DUP2 DUP7 ADD MSTORE PUSH1 0x40 SWAP1 SWAP5 ADD SWAP4 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x16C9 JUMP JUMPDEST SWAP1 PUSH1 0x20 DUP1 DUP4 MLOAD SWAP3 DUP4 DUP2 MSTORE ADD SWAP3 ADD SWAP1 PUSH1 0x0 JUMPDEST DUP2 DUP2 LT PUSH2 0x171F JUMPI POP POP POP SWAP1 JUMP JUMPDEST DUP3 MLOAD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 MSTORE PUSH1 0x20 SWAP1 DUP2 ADD MLOAD DUP2 DUP7 ADD MSTORE PUSH1 0x40 SWAP1 SWAP5 ADD SWAP4 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x1712 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x100897A5 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA0 PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH1 0x20 SWAP2 DUP4 SWAP2 DUP3 SWAP2 PUSH2 0x17A6 SWAP2 SWAP1 PUSH2 0x1EA SWAP1 PUSH2 0x178B PUSH1 0xA4 DUP7 ADD PUSH2 0x16B8 JUMP JUMPDEST PUSH3 0x5B8D80 PUSH1 0x44 DUP8 ADD MSTORE DUP6 DUP2 SUB PUSH1 0x3 NOT ADD PUSH1 0x64 DUP8 ADD MSTORE SWAP1 PUSH2 0x1258 JUMP JUMPDEST SUB DUP2 PUSH1 0x0 PUSH1 0xD8 GAS CALL DUP1 ISZERO PUSH2 0x23A JUMPI PUSH2 0x17BB JUMPI POP JUMP JUMPDEST PUSH2 0x1687 SWAP1 PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x233 JUMPI PUSH2 0x229 DUP2 DUP4 PUSH2 0x116D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x9614DDAF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0x44 DUP2 PUSH1 0xD1 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x23A JUMPI PUSH1 0x0 SWAP2 PUSH2 0x1813 JUMPI POP SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x183A JUMPI JUMPDEST DUP2 PUSH2 0x182E PUSH1 0x20 SWAP4 DUP4 PUSH2 0x116D JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x246 JUMPI MLOAD SWAP1 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x1821 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x4016D87 PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x0 DUP2 PUSH1 0x4 DUP2 DUP4 PUSH1 0xD3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x23A JUMPI PUSH1 0x0 SWAP2 PUSH2 0x186C JUMPI POP SWAP1 JUMP JUMPDEST SWAP1 RETURNDATASIZE DUP1 DUP3 DUP5 RETURNDATACOPY PUSH2 0x187C DUP2 DUP5 PUSH2 0x116D JUMP JUMPDEST DUP3 ADD SWAP2 PUSH1 0x20 DUP2 DUP5 SUB SLT PUSH2 0x1949 JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x1931 JUMPI ADD DUP3 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x1949 JUMPI DUP1 MLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x1935 JUMPI PUSH1 0x20 DUP4 PUSH1 0x5 SHL ADD SWAP4 PUSH2 0x18CE PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x116D JUMP JUMPDEST DUP4 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP5 PUSH1 0x6 SHL DUP5 ADD ADD SWAP3 DUP2 DUP5 GT PUSH2 0x1931 JUMPI PUSH1 0x20 ADD SWAP4 JUMPDEST DUP4 DUP6 LT PUSH2 0x18F9 JUMPI POP POP POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP6 DUP4 SUB SLT PUSH2 0x1931 JUMPI PUSH1 0x20 PUSH1 0x40 SWAP2 DUP3 MLOAD PUSH2 0x1913 DUP2 PUSH2 0x1151 JUMP JUMPDEST PUSH2 0x191C DUP9 PUSH2 0x130B JUMP JUMPDEST DUP2 MSTORE DUP3 DUP9 ADD MLOAD DUP4 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP5 ADD SWAP4 PUSH2 0x18EA JUMP JUMPDEST DUP3 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 SWAP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xF6975653 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x84 DUP4 ADD MSTORE PUSH1 0xA4 DUP3 ADD MSTORE PUSH2 0x100 PUSH1 0xC4 DUP3 ADD MSTORE SWAP1 PUSH1 0x20 SWAP1 DUP3 SWAP1 DUP2 SWAP1 PUSH2 0x19B2 SWAP1 PUSH2 0x1647 PUSH2 0x104 DUP5 ADD PUSH1 0x60 PUSH2 0x1701 JUMP JUMPDEST SUB DUP2 PUSH1 0x0 PUSH1 0xFD GAS CALL DUP1 ISZERO PUSH2 0x23A JUMPI PUSH2 0x17BB JUMPI POP JUMP INVALID 0xB1 0xE 0x2D MSTORE PUSH23 0x12073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2 0xB7 STATICCALL 0xC 0xF6 LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 REVERT LOG4 0xDB 0xAD 0x26 STATICCALL PUSH15 0x6D4C7CED4BA187C950C9DF544D54A7 PUSH3 0xA1F43F NUMBER 0xCB 0xEE 0xD8 SWAP4 PUSH13 0x64736F6C634300081C00330000 ","sourceMap":"489:20254:4:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;489:20254:4;;;;1128:13:0;10859:96:4;10652:15;;:::i;:::-;489:20254;11273:9;489:20254;;10859:96;;;;;;;;10935:10;10859:96;;;489:20254;10859:96;;;;;;;:::i;:::-;11273:9;:::i;:::-;;:16;489:20254;;;;;;;;11170:129;;;;10935:10;10859:96;11170:129;;489:20254;10859:96;489:20254;;;10859:96;11170:129;;;;;;:::i;:::-;11492:12;489:20254;;;-1:-1:-1;;;9117:119:0;;-1:-1:-1;;;;;489:20254:4;;;;9117:119:0;;489:20254:4;;10859:96;1128:13:0;;;489:20254:4;;;;;1128:13:0;;489:20254:4;;1128:13:0;;;;;:::i;:::-;11509:10:4;10859:96;1128:13:0;;489:20254:4;1128:13:0;;;-1:-1:-1;;1128:13:0;11170:129:4;1128:13:0;;;;;:::i;:::-;;;;-1:-1:-1;;1128:13:0;;;;;489:20254:4;1128:13:0;:::i;:::-;9117:119;;489:20254:4;1136:4:0;9117:119;;;;;;;;489:20254:4;9117:119:0;;;10859:96:4;9117:119:0;10859:96:4;9117:119:0;;;;;;;;:::i;:::-;;;;;:::i;:::-;489:20254:4;9117:119:0;;;;;;489:20254:4;;1128:13:0;489:20254:4;1128:13:0;;;;;489:20254:4;;;;;;;;:::i;:::-;;;;;;;14805:57;489:20254;14805:57;489:20254;;14805:57;;;;;;:::i;:::-;489:20254;;;15046:33;;;;-1:-1:-1;;;;;489:20254:4;;;;;;;15046:33;;;489:20254;;;;;;;15284:40;15516:59;489:20254;15320:3;15295:21;16296:158;489:20254;;15295:21;;:::i;:::-;489:20254;15284:40;;:::i;:::-;-1:-1:-1;15524:28:4;15516:59;:::i;:::-;489:20254;;-1:-1:-1;;;14805:57:4;15780:167;;;;;;489:20254;;;-1:-1:-1;;;;;489:20254:4;;;;;;-1:-1:-1;15320:3:4;489:20254;;;;;;;15780:167;;489:20254;15997:118;;15780:167;;489:20254;15780:167;:::i;:::-;489:20254;;-1:-1:-1;;;14805:57:4;15997:118;;;-1:-1:-1;;;;;489:20254:4;;;15780:167;15997:118;;489:20254;;;;;;;;;;;15997:118;;489:20254;;15997:118;;;;;;:::i;:::-;16325:12;489:20254;-1:-1:-1;;;;;489:20254:4;16296:158;:::i;489:20254::-;;;-1:-1:-1;;;489:20254:4;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;489:20254:4;;;;574:30;489:20254;;;-1:-1:-1;;;;;489:20254:4;;;;;;;;;;;;;;-1:-1:-1;;489:20254:4;;;;;1077:45:1;1102:4;;1077:45;:::i;:::-;489:20254:4;;;;;;;;;-1:-1:-1;;489:20254:4;;;;5728:8:0;1801:15:4;;:::i;:::-;2130:253;2314:16;:9;-1:-1:-1;;;;;2245:9:4;;;:::i;:::-;;489:20254;;2314:9;;:::i;:::-;;:16;489:20254;;;-1:-1:-1;;;2314:16:4;2130:253;;;2221:10;2130:253;;;489:20254;-1:-1:-1;;;;;489:20254:4;;;;;;;;;;;;;;;2130:253;489:20254;2130:253;2596:12;489:20254;2618:4;;-1:-1:-1;;;;;489:20254:4;5728:8:0;:::i;489:20254:4:-;;;;;;-1:-1:-1;;489:20254:4;;;;;;18263:95:0;18272:23;;:::i;:::-;18271:24;18263:95;:::i;:::-;489:20254:4;;-1:-1:-1;;;3177:68:1;;489:20254:4;3177:68:1;;489:20254:4;;;;634:13:0;;;;489:20254:4;;3177:68:1;489:20254:4;-1:-1:-1;642:4:0;3177:68:1;;;;;;;489:20254:4;3177:68:1;;;489:20254:4;;;;;3296:21:1;489:20254:4;;;3296:21:1;:::i;:::-;489:20254:4;634:13:0;489:20254:4;;;;-1:-1:-1;;;489:20254:4;;;;;;;;634:13:0;489:20254:4;;;-1:-1:-1;;;3177:68:1;489:20254:4;;;;;;3177:68:1;;;;489:20254:4;3177:68:1;489:20254:4;3177:68:1;;;;;;;:::i;:::-;;;;489:20254:4;;;;:::i;:::-;;;;;;19836:73;489:20254;19836:73;489:20254;;;;19836:73;;;;;;:::i;:::-;489:20254;;;;;;19946:33;;;;;;-1:-1:-1;19946:33:4;;;489:20254;;;;;;20129:20;;;489:20254;;20717:16;20413:4;20367:149;20413:4;20388:48;20413:4;;20388:48;:::i;:::-;:84;;20367:149;:::i;:::-;-1:-1:-1;;;;;489:20254:4;20717:16;:::i;489:20254::-;;;-1:-1:-1;;;489:20254:4;;19836:73;489:20254;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;489:20254:4;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;17564:73;;489:20254;;;1128:13:0;489:20254:4;;17564:73;;;;;;:::i;:::-;17858:4;489:20254;-1:-1:-1;;;;;489:20254:4;;;;;;;;;20469:38:0;;17842:34:4;;-1:-1:-1;17866:3:4;489:20254;-1:-1:-1;;;;;489:20254:4;;17842:34;489:20254;;-1:-1:-1;;;18092:127:4;;;;-1:-1:-1;;;;;489:20254:4;;;18092:127;;;489:20254;;;;;;;;;;;18092:127;;489:20254;18420:125;;18092:127;489:20254;;18092:127;:::i;:::-;489:20254;;-1:-1:-1;;;18420:125:4;;;;-1:-1:-1;;;;;489:20254:4;;;18092:127;18420:125;;489:20254;;;;;;;;;;;18420:125;;489:20254;;18420:125;;;;;;:::i;:::-;18753:12;489:20254;;;-1:-1:-1;;;9117:119:0;;-1:-1:-1;;;;;489:20254:4;;;;9117:119:0;;489:20254:4;;18092:127;1128:13:0;;;489:20254:4;;;;;1128:13:0;;489:20254:4;;1128:13:0;;;;;:::i;:::-;18794:8:4;1128:13:0;;;489:20254:4;1128:13:0;;;-1:-1:-1;;1128:13:0;;;;;;;:::i;17842:34:4:-;;;;489:20254;;;-1:-1:-1;;;489:20254:4;;;;;;;;;;;;-1:-1:-1;;;489:20254:4;;;;;;;;;;;;;-1:-1:-1;;489:20254:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18263:95:0;18272:23;;:::i;18263:95::-;489:20254:4;;;;;;;;1784:16:1;489:20254:4;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;489:20254:4;;;;;;;1784:16:1;489:20254:4;;;;;;;;;;;-1:-1:-1;489:20254:4;;;;;;;;;;1784:16:1;489:20254:4;;-1:-1:-1;;;;;;;;;;;489:20254:4;;;;;;;;;;1784:16:1;489:20254:4;;;;;-1:-1:-1;;;489:20254:4;;;1784:16:1;489:20254:4;;;;;;;;;;;;;;;;;;;;;;;;;;1784:16:1;489:20254:4;;;;;;;;;;;;;;;;1784:16:1;489:20254:4;;;;;;;-1:-1:-1;;;;;;;;;;;489:20254:4;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;489:20254:4;;;;;;;;;;;;;;;1784:16:1;489:20254:4;;;;-1:-1:-1;;;;;;;;;;;489:20254:4;-1:-1:-1;489:20254:4;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;489:20254:4;;;;662:18;489:20254;;;-1:-1:-1;;;;;489:20254:4;;;;;;;;;;;;;;-1:-1:-1;;489:20254:4;;;;;;;1585:9:1;489:20254:4;;;;:::i;:::-;;;;;1585:9:1;489:20254:4;;;1585:9:1;;;;489:20254:4;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;1585:9:1;489:20254:4;;-1:-1:-1;;;;;;;;;;;489:20254:4;;;;;;;;;-1:-1:-1;489:20254:4;;-1:-1:-1;489:20254:4;;;;;;;;;;1585:9:1;489:20254:4;;;;;;;;;;;;;;;;;;;-1:-1:-1;;489:20254:4;;;;;;;;;;;;;;;;;;;;-1:-1:-1;489:20254:4;;-1:-1:-1;489:20254:4;;;;;;;;-1:-1:-1;;489:20254:4;;;;;4677:39:1;489:20254:4;;:::i;:::-;1393:4:1;4677:39;;:::i;489:20254:4:-;;;;;;-1:-1:-1;;489:20254:4;;;;;;;;-1:-1:-1;;;;;489:20254:4;;;;;;;;;;;;;;-1:-1:-1;;489:20254:4;;;;;;18263:95:0;18272:23;;:::i;18263:95::-;489:20254:4;;;3604:21:1;489:20254:4;;;;;;;3685:69:1;;;489:20254:4;3685:69:1;;489:20254:4;;634:13:0;;;;489:20254:4;3685:69:1;;;489:20254:4;642:4:0;3685:69:1;;;;;;;489:20254:4;3685:69:1;;;489:20254:4;634:13:0;;;;489:20254:4;;634:13:0;;;;;;;;489:20254:4;634:13:0;489:20254:4;634:13:0;489:20254:4;;;;;;;;634:13:0;489:20254:4;;634:13:0;489:20254:4;;-1:-1:-1;;;634:13:0;;489:20254:4;;634:13:0;;;;;;;489:20254:4;-1:-1:-1;;;3685:69:1;489:20254:4;;634:13:0;;;;3685:69:1;;;;489:20254:4;3685:69:1;489:20254:4;3685:69:1;;;;;;;:::i;:::-;;;;489:20254:4;;;-1:-1:-1;;;489:20254:4;;;;;;;;;;;;;;;;;;;;;12292:38;489:20254;;;:::i;:::-;12292:38;;;;;:::i;:::-;489:20254;;;;12532:73;;489:20254;;;;;;12532:73;;;489:20254;:::i;:::-;;;;;;;;;12649:76;;489:20254;;;;;;12532:73;12649:76;;489:20254;;;;:::i;:::-;12899:10;;489:20254;;13248:161;12532:73;489:20254;13248:161;1128:13:0;489:20254:4;;;13141:66;;;;;;;;489:20254;13141:66;;;;;;:::i;:::-;489:20254;;-1:-1:-1;;;13248:161:4;;;;-1:-1:-1;;;;;489:20254:4;;;13141:66;13248:161;;489:20254;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13248:161;13632:15;489:20254;;;-1:-1:-1;;;9117:119:0;;-1:-1:-1;;;;;489:20254:4;;;;9117:119:0;;489:20254:4;;13141:66;1128:13:0;;;489:20254:4;;;;;1128:13:0;;489:20254:4;;1128:13:0;;;;;:::i;:::-;13676:9:4;1128:13:0;;;489:20254:4;1128:13:0;;;-1:-1:-1;;1128:13:0;;;;;;;:::i;489:20254:4:-;;;-1:-1:-1;;;489:20254:4;;12532:73;489:20254;;;;;;;;;-1:-1:-1;;;489:20254:4;;;;;;;;;;;;;-1:-1:-1;;489:20254:4;;;;;;;;;;;;;;;;-1:-1:-1;;489:20254:4;;;;;;;;:::i;:::-;3245:4;489:20254;-1:-1:-1;;;;;489:20254:4;;;;;20469:38:0;;;;3230:19:4;489:20254;20469:38:0;3230:41:4;;;;489:20254;;;;1128:13:0;3558:4:4;3512:119;3558:4;3533:44;489:20254;3558:4;;3533:44;:::i;3512:119::-;3845:34;;;-1:-1:-1;3869:3:4;489:20254;-1:-1:-1;;;;;489:20254:4;3845:34;489:20254;;-1:-1:-1;;;4180:91:4;;;;489:20254;4180:91;;;489:20254;;;4180:91;;489:20254;4180:91;;489:20254;4180:91;:::i;:::-;489:20254;;-1:-1:-1;;;4506:169:4;;;;4581:10;489:20254;4506:169;;489:20254;4180:91;489:20254;;;;;;;;;;-1:-1:-1;;;;;489:20254:4;;;;;;;;;4506:169;;;;489:20254;4506:169;:::i;:::-;1128:13:0;489:20254:4;;;;;;;;;;;;;;;;;;;9117:119:0;;489:20254:4;9117:119:0;;489:20254:4;1128:13:0;489:20254:4;1128:13:0;;;;4506:169:4;1128:13:0;;;:::i;:::-;4921:9:4;4180:91;1128:13:0;;489:20254:4;1128:13:0;;;-1:-1:-1;;1128:13:0;489:20254:4;1128:13:0;;;;;:::i;3845:34:4:-;;;489:20254;;;-1:-1:-1;;;489:20254:4;;;;;;;;;;;;-1:-1:-1;;;489:20254:4;;;;;;;3230:41;-1:-1:-1;3268:3:4;489:20254;-1:-1:-1;;;;;489:20254:4;20469:38:0;;3230:41:4;;489:20254;8670:38;9023:57;489:20254;;;:::i;:::-;8670:38;;;;;:::i;:::-;9023:57;489:20254;;;9023:57;;;;;;:::i;:::-;489:20254;;;;;;;;;;;;;9314:33;;;;;;;;;;489:20254;;;;;9554:36;489:20254;;;;-1:-1:-1;;;9023:57:4;9813:151;;;-1:-1:-1;;;;;489:20254:4;;;9813:151;;;489:20254;;;;;;;;;;;;;10248:6;;489:20254;5728:8:0;;9813:151:4;489:20254;;;;9813:151;489:20254;5728:8:0;10248:6:4;:::i;489:20254::-;;;-1:-1:-1;;;489:20254:4;;9023:57;489:20254;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;6097:57;;489:20254;;;;;6097:57;;;489:20254;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;-1:-1:-1;;;;;489:20254:4;;;6344:33;;;;;;489:20254;;;;;;;6559:25;489:20254;;6559:25;;:::i;:::-;6810:3;489:20254;;;;;;6810:3;489:20254;;;;;;;;;-1:-1:-1;;;6097:57:4;7063:127;;;-1:-1:-1;;;;;489:20254:4;;;7063:127;;;489:20254;;;;;;;;;;;;;7063:127;;7786:144;;489:20254;6817:3;;7421:171;;;;489:20254;6817:3;7063:127;6817:3;489:20254;7063:127;:::i;:::-;489:20254;;-1:-1:-1;;;6097:57:4;7421:171;;;-1:-1:-1;;;;;489:20254:4;;;7063:127;7421:171;;489:20254;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;489:20254:4;;;;;;;;;;;;-1:-1:-1;;;489:20254:4;;;;;;;;;;;;;-1:-1:-1;;489:20254:4;;;;2876:6:1;489:20254:4;;:::i;:::-;;;:::i;:::-;18263:95:0;18272:23;;:::i;18263:95::-;489:20254:4;;2876:6:1;;:::i;489:20254:4:-;;;;;;-1:-1:-1;;489:20254:4;;;;637:19;489:20254;;;-1:-1:-1;;;;;489:20254:4;;;;;;;;;;;;;;-1:-1:-1;;489:20254:4;;;;541:27;489:20254;;;-1:-1:-1;;;;;489:20254:4;;;;;;;;;;;;;;-1:-1:-1;;489:20254:4;;;;;1393:4:1;;489:20254:4;;;;;;;-1:-1:-1;;;;;489:20254:4;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;489:20254:4;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;-1:-1:-1;;489:20254:4;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;489:20254:4;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;-1:-1:-1;;489:20254:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;489:20254:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;489:20254:4;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::o;:::-;;;;:::o;:::-;;;-1:-1:-1;;;489:20254:4;;;;;;;;;;;;-1:-1:-1;;;489:20254:4;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;:::o;:::-;;;-1:-1:-1;;;489:20254:4;;;;;;;;;;;;-1:-1:-1;;;489:20254:4;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;:::o;576:13:0:-;;;;;;;;;;489:20254:4;;;;;;;576:13:0;:::o;18464:391::-;-1:-1:-1;18605:44:0;489:20254:4;18605:44:0;;584:4;18605:44;;576:13;;;;;;;;;:::i;:::-;489:20254:4;;;;;;;:::i;:::-;576:13:0;;;-1:-1:-1;18605:44:0;576:13;;;;;;;489:20254:4;;18729:21:0;576:13;;489:20254:4;18605:44:0;489:20254:4;18818:30:0;489:20254:4;;18818:30:0;;;;;;:::i;576:13::-;489:20254:4;;-1:-1:-1;;;576:13:0;;18605:44;576:13;;;;;;;;489:20254:4;576:13:0;489:20254:4;;;576:13:0;-1:-1:-1;;;576:13:0;;;;;;;;;489:20254:4;;;;;576:13:0;;18605:44;576:13;;;;18605:44;576:13;;;489:20254:4;576:13:0;489:20254:4;;;576:13:0;;;489:20254:4;576:13:0;;;4079:297:1;;;;489:20254:4;;;;;;;;;:::i;:::-;4215:1:1;489:20254:4;;-1:-1:-1;;489:20254:4;;-1:-1:-1;489:20254:4;;;;;;;;445:13:0;489:20254:4;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;489:20254:4;;;;4240:26:1;;489:20254:4;4227:39:1;;;:::i;:::-;;;;;:::i;:::-;;489:20254:4;;;;445:13:0;489:20254:4;;;;;;:::i;:::-;-1:-1:-1;576:13:0;;489:20254:4;;;;;;;;;;6534:146:0;;-1:-1:-1;6534:146:0;;;634:13;-1:-1:-1;445:13:0;;;489:20254:4;;;;;;;445:13:0;;;489:20254:4;-1:-1:-1;445:13:0;;;489:20254:4;-1:-1:-1;445:13:0;;;489:20254:4;-1:-1:-1;445:13:0;;;489:20254:4;445:13:0;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;445:13:0;;;;;489:20254:4;445:13:0;:::i;:::-;6534:146;;-1:-1:-1;453:4:0;6534:146;;;;;;;;;;4079:297:1;;:::o;6534:146:0:-;;;;;;-1:-1:-1;6534:146:0;;;;;;:::i;:::-;;4079:297:1:o;6534:146:0:-;489:20254:4;1128:13:0;-1:-1:-1;1128:13:0;;;;;489:20254:4;;;;;;;;:::i;:::-;-1:-1:-1;489:20254:4;;-1:-1:-1;489:20254:4;;;;;;;;;;;;;1128:13:0;489:20254:4;;;;;;;;1128:13:0;;;-1:-1:-1;1128:13:0;;;;;;;;;;:::o;:::-;;;;;-1:-1:-1;;;;;489:20254:4;;;;1128:13:0;;;;;;;489:20254:4;1128:13:0;;;;;;;;;;;;;;;489:20254:4;;;;;;;;;1128:13:0;;;-1:-1:-1;1128:13:0;;;;;;;;;;:::o;:::-;;;;;-1:-1:-1;;;;;489:20254:4;;;;1128:13:0;;;;;;;489:20254:4;1128:13:0;;;;;;;;;;;;;8899:344;489:20254:4;;-1:-1:-1;;;9117:119:0;;-1:-1:-1;;;;;489:20254:4;;;9117:119:0;;;489:20254:4;;1128:13:0;;;;489:20254:4;1128:13:0;;489:20254:4;;;;1128:13:0;;8899:344;1128:13;;;;;;;:::i;:::-;7856:9:4;1128:13:0;;;489:20254:4;1128:13:0;;;-1:-1:-1;;1128:13:0;;;;;;;:::i;:::-;9117:119;;489:20254:4;1136:4:0;9117:119;;;;;;;;8899:344;:::o;9117:119::-;;;1128:13;9117:119;1128:13;9117:119;;;;;;;:::i;12095:172::-;489:20254:4;;-1:-1:-1;;;12191:69:0;;-1:-1:-1;;;;;489:20254:4;;;12191:69:0;;;489:20254:4;;;698:13:0;;;489:20254:4;698:13:0;489:20254:4;12191:69:0;489:20254:4;706:4:0;12191:69;;;;;;;-1:-1:-1;12191:69:0;;;12184:76;12095:172;:::o;12191:69::-;;;698:13;12191:69;;698:13;12191:69;;;;;;489:20254:4;12191:69:0;;;:::i;:::-;;;489:20254:4;;;;;12095:172:0;:::o;12191:69::-;;;-1:-1:-1;12191:69:0;;12407:149;489:20254:4;;-1:-1:-1;;;12478:71:0;;;489:20254:4;12478:71:0;489:20254:4;12478:71:0;837:4;12478:71;;;;;;;;;;;12471:78;12407:149;:::o;12478:71::-;;;;;;;;;;;:::i;:::-;;;829:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;489:20254:4;;;;829:13:0;489:20254:4;;;;;;;;;;;:::i;:::-;829:13:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;12478:71;;;;;12407:149;:::o;829:13::-;489:20254:4;829:13:0;;;;;;;489:20254:4;;;;;;;:::i;:::-;;;;:::i;:::-;829:13:0;;;;;489:20254:4;829:13:0;;;;;;;;;;;;;489:20254:4;;;;-1:-1:-1;;;489:20254:4;;;12478:71:0;489:20254:4;;;;829:13:0;489:20254:4;;;6274:413:0;489:20254:4;;-1:-1:-1;;;6534:146:0;;489:20254:4;6534:146:0;;;634:13;;;445;;;489:20254:4;;;-1:-1:-1;;;;;489:20254:4;;;445:13:0;;;489:20254:4;445:13:0;;;489:20254:4;;;;;;;445:13:0;;;489:20254:4;445:13:0;;;489:20254:4;445:13:0;;;;;489:20254:4;445:13:0;;489:20254:4;;;;445:13:0;;;;;;489:20254:4;445:13:0;:::i;:::-;6534:146;;489:20254:4;453:4:0;6534:146;;;;;;;;6274:413;:::o"},"methodIdentifiers":{"borrow(uint256,address)":"4b3fd148","burnToken(uint256)":"7b47ec1a","deposit()":"d0e30db0","eth()":"8c7c9e0c","finalizeLoan(bool,bytes,bytes)":"4761a3ee","getOwnTokenBalance()":"d19b9b75","getTokenBalanceOf(address)":"83894548","getTokenId()":"010a38f5","getTokenName()":"862b092b","getTokenTotalSupply()":"57df844b","globalLedger()":"10401774","handleRepayment(bool,bytes,bytes)":"659dbf99","interestManager()":"ee065e11","mintToken(uint256)":"c634d032","oracle()":"7dc0d1d0","processLoan(bool,bytes,bytes)":"46fe5431","processRepayment(bool,bytes,bytes)":"eeaf7d8e","releaseCollateral(bool,bytes,bytes)":"c513a8f5","repayLoan()":"f966ade7","sendCollateral(bool,bytes,bytes)":"c59e1c8f","sendToken(address,address,uint256)":"2fdcfbd2","setTokenName(string)":"a4f29aad","usdt()":"2f48ab7d"}},"metadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_globalLedger\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_interestManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_oracle\",\"type\":\"address\"},{\"internalType\":\"TokenId\",\"name\":\"_usdt\",\"type\":\"address\"},{\"internalType\":\"TokenId\",\"name\":\"_eth\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"TokenId\",\"name\":\"borrowToken\",\"type\":\"address\"}],\"name\":\"borrow\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burnToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eth\",\"outputs\":[{\"internalType\":\"TokenId\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"context\",\"type\":\"bytes\"}],\"name\":\"finalizeLoan\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOwnTokenBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getTokenBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTokenId\",\"outputs\":[{\"internalType\":\"TokenId\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTokenName\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTokenTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"globalLedger\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"context\",\"type\":\"bytes\"}],\"name\":\"handleRepayment\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"interestManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mintToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oracle\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"context\",\"type\":\"bytes\"}],\"name\":\"processLoan\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"context\",\"type\":\"bytes\"}],\"name\":\"processRepayment\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"context\",\"type\":\"bytes\"}],\"name\":\"releaseCollateral\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"repayLoan\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"context\",\"type\":\"bytes\"}],\"name\":\"sendCollateral\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"TokenId\",\"name\":\"tokenId\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sendToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"setTokenName\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"usdt\",\"outputs\":[{\"internalType\":\"TokenId\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The LendingPool contract facilitates lending and borrowing of tokens and handles collateral management. It interacts with other contracts such as GlobalLedger, InterestManager, and Oracle for tracking deposits, calculating interest, and fetching token prices.\",\"kind\":\"dev\",\"methods\":{\"borrow(uint256,address)\":{\"details\":\"Ensures sufficient liquidity, checks collateral, and processes the loan after fetching the price from the Oracle.\",\"params\":{\"amount\":\"The amount of the token to borrow.\",\"borrowToken\":\"The token the user wants to borrow (either USDT or ETH).\"}},\"burnToken(uint256)\":{\"details\":\"Burns a specified amount of token using external call. It is wrapper over `burnTokenInternal` method to provide access to the owner of the account.\",\"params\":{\"amount\":\"The amount of token to burn.\"}},\"constructor\":{\"details\":\"Sets the contract addresses for GlobalLedger, InterestManager, Oracle, USDT, and ETH tokens.\",\"params\":{\"_eth\":\"The TokenId for ETH.\",\"_globalLedger\":\"The address of the GlobalLedger contract.\",\"_interestManager\":\"The address of the InterestManager contract.\",\"_oracle\":\"The address of the Oracle contract.\",\"_usdt\":\"The TokenId for USDT.\"}},\"deposit()\":{\"details\":\"The deposited tokens are recorded in the GlobalLedger via an asynchronous call.\"},\"finalizeLoan(bool,bytes,bytes)\":{\"details\":\"Verifies that the user has enough collateral, processes the loan, and sends the borrowed tokens to the borrower.\",\"params\":{\"context\":\"The context containing loan details.\",\"returnData\":\"The collateral balance returned from the GlobalLedger.\",\"success\":\"Indicates if the collateral check was successful.\"}},\"getOwnTokenBalance()\":{\"details\":\"Returns the balance of the token owned by this contract.\",\"returns\":{\"_0\":\"The balance of the token owned by this contract.\"}},\"getTokenBalanceOf(address)\":{\"details\":\"Returns the balance of the token for a given address.\",\"params\":{\"account\":\"The address to check the balance for.\"},\"returns\":{\"_0\":\"The balance of the token for the given address.\"}},\"getTokenId()\":{\"details\":\"Returns the unique identifier of the token owned by this contract.\",\"returns\":{\"_0\":\"The unique identifier of the token owned by this contract.\"}},\"getTokenName()\":{\"details\":\"Returns the name of the token.\",\"returns\":{\"_0\":\"The name of the token.\"}},\"getTokenTotalSupply()\":{\"details\":\"Returns the total supply of the token.\",\"returns\":{\"_0\":\"The total supply of the token.\"}},\"handleRepayment(bool,bytes,bytes)\":{\"details\":\"Calculates the total repayment (principal + interest) and updates the loan status in GlobalLedger.\",\"params\":{\"context\":\"The context containing borrower and repayment details.\",\"returnData\":\"The loan details returned from the GlobalLedger.\",\"success\":\"Indicates if the loan details retrieval was successful.\"}},\"mintToken(uint256)\":{\"details\":\"Mints a specified amount of token using external call. It is wrapper over `mintTokenInternal` method to provide access to the owner of the account.\",\"params\":{\"amount\":\"The amount of token to mint.\"}},\"processLoan(bool,bytes,bytes)\":{\"details\":\"Ensures that the borrower has enough collateral, calculates the loan value, and initiates loan processing.\",\"params\":{\"context\":\"The context data containing borrower details, loan amount, and collateral token.\",\"returnData\":\"The price data returned from the Oracle.\",\"success\":\"Indicates if the Oracle call was successful.\"}},\"processRepayment(bool,bytes,bytes)\":{\"details\":\"Finalizes the loan repayment, ensuring the borrower has sent sufficient funds.\",\"params\":{\"context\":\"The context containing repayment details.\",\"returnData\":\"The interest rate returned from the InterestManager.\",\"success\":\"Indicates if the interest rate call was successful.\"}},\"releaseCollateral(bool,bytes,bytes)\":{\"details\":\"Sends the collateral back to the borrower after confirming the loan is fully repaid.\",\"params\":{\"context\":\"The context containing borrower and collateral token.\",\"returnData\":\"The collateral data returned from the GlobalLedger.\",\"success\":\"Indicates if the loan clearing was successful.\"}},\"repayLoan()\":{\"details\":\"Initiates the repayment process by retrieving the loan details from GlobalLedger.\"},\"sendCollateral(bool,bytes,bytes)\":{\"details\":\"Ensures there is enough collateral to release and then sends the funds back to the borrower.\",\"params\":{\"context\":\"The context containing borrower and collateral token.\",\"returnData\":\"The amount of collateral available.\",\"success\":\"Indicates if the collateral retrieval was successful.\"}},\"sendToken(address,address,uint256)\":{\"details\":\"Sends a specified amount of arbitrary token to a given address. It is wrapper over `sendTokenInternal` method to provide access to the owner of the account.\",\"params\":{\"amount\":\"The amount of token to mint.\"}},\"setTokenName(string)\":{\"details\":\"Set the name of the token.\",\"params\":{\"name\":\"The name of the token.\"}}},\"title\":\"LendingPool\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"borrow(uint256,address)\":{\"notice\":\"Borrow function allows a user to borrow tokens (either USDT or ETH).\"},\"constructor\":{\"notice\":\"Constructor to initialize the LendingPool contract with addresses for dependencies.\"},\"deposit()\":{\"notice\":\"Deposit function to deposit tokens into the lending pool.\"},\"finalizeLoan(bool,bytes,bytes)\":{\"notice\":\"Finalize the loan by ensuring sufficient collateral and recording the loan in GlobalLedger.\"},\"handleRepayment(bool,bytes,bytes)\":{\"notice\":\"Handle the loan repayment, calculate the interest, and update GlobalLedger.\"},\"processLoan(bool,bytes,bytes)\":{\"notice\":\"Callback function to process the loan after the price data is retrieved from Oracle.\"},\"processRepayment(bool,bytes,bytes)\":{\"notice\":\"Process the repayment, calculate the total repayment including interest.\"},\"releaseCollateral(bool,bytes,bytes)\":{\"notice\":\"Release the collateral after the loan is repaid.\"},\"repayLoan()\":{\"notice\":\"Repay loan function called by the borrower to repay their loan.\"},\"sendCollateral(bool,bytes,bytes)\":{\"notice\":\"Send the collateral back to the borrower.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/LendingPool.sol\":\"LendingPool\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@nilfoundation/smart-contracts/contracts/Nil.sol\":{\"keccak256\":\"0x21257091b205b27932c0d13a507a9fb21222c59faa8ac896a4f00962e307855d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://dcead2113e9cfc853c80709793b363b8146c8582b423951cd96b24015159f2e9\",\"dweb:/ipfs/QmSmNk1vNsCxZp3EfxqhvjLWYpNdGY8ChVzfBu2JtDwKQX\"]},\"@nilfoundation/smart-contracts/contracts/NilTokenBase.sol\":{\"keccak256\":\"0x8239fbd2fce629de2e6b56619194c15be96c823d33d055e71b2fabe002553cc4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4af5cb28280bdfa49e1e4555e172a47c1c971992ad745d22d2087f030ad98a0c\",\"dweb:/ipfs/QmRNCBCdVo9yawrBHF7qYkoZtAnHQHpbqAA4VoPYmDULmt\"]},\"contracts/LendingPool.sol\":{\"keccak256\":\"0xfd80dd634afd578871bc57f221b71c22578df28c0af0eb8b438d5c0faae2f427\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://815176516b44f37d03a38db0b3095106ff9db9a67d1da292ce526109a8914cbe\",\"dweb:/ipfs/QmPiRL4CMVKS5kanEQfuRgWmT6FAKUee9QTzdLxJif4Brk\"]}},\"version\":1}"}},"contracts/Oracle.sol":{"Oracle":{"abi":[{"inputs":[{"internalType":"TokenId","name":"token","type":"address"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"TokenId","name":"","type":"address"}],"name":"rates","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"TokenId","name":"token","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460145760f2908161001a8239f35b600080fdfe60806040526004361015601157600080fd5b60003560e01c8062e4768b14607357806341976e091460385763a8734f0b14603857600080fd5b34606e576020366003190112606e576001600160a01b03605560a7565b1660005260006020526020604060002054604051908152f35b600080fd5b34606e576040366003190112606e576001600160a01b03609060a7565b166000526000602052602435604060002055600080f35b600435906001600160a01b0382168203606e5756fea2646970667358221220b0a296da46dc591d34edf7aecfe0dc18fc3291f154a591a488153db31950718f64736f6c634300081c0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x14 JUMPI PUSH1 0xF2 SWAP1 DUP2 PUSH2 0x1A DUP3 CODECOPY RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH1 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH3 0xE4768B EQ PUSH1 0x73 JUMPI DUP1 PUSH4 0x41976E09 EQ PUSH1 0x38 JUMPI PUSH4 0xA8734F0B EQ PUSH1 0x38 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE PUSH1 0x6E JUMPI PUSH1 0x20 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH1 0x6E JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x55 PUSH1 0xA7 JUMP JUMPDEST AND PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE PUSH1 0x6E JUMPI PUSH1 0x40 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH1 0x6E JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x90 PUSH1 0xA7 JUMP JUMPDEST AND PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x20 MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x40 PUSH1 0x0 KECCAK256 SSTORE PUSH1 0x0 DUP1 RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH1 0x6E JUMPI JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB0 LOG2 SWAP7 0xDA CHAINID 0xDC MSIZE SAR CALLVALUE 0xED 0xF7 0xAE 0xCF 0xE0 0xDC XOR 0xFC ORIGIN SWAP2 CALL SLOAD 0xA5 SWAP2 LOG4 DUP9 ISZERO RETURNDATASIZE 0xB3 NOT POP PUSH18 0x8F64736F6C634300081C0033000000000000 ","sourceMap":"410:1295:5:-:0;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"abi_decode_userDefinedValueType_TokenId":{"entryPoint":167,"id":null,"parameterSlots":0,"returnSlots":1}},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"60806040526004361015601157600080fd5b60003560e01c8062e4768b14607357806341976e091460385763a8734f0b14603857600080fd5b34606e576020366003190112606e576001600160a01b03605560a7565b1660005260006020526020604060002054604051908152f35b600080fd5b34606e576040366003190112606e576001600160a01b03609060a7565b166000526000602052602435604060002055600080f35b600435906001600160a01b0382168203606e5756fea2646970667358221220b0a296da46dc591d34edf7aecfe0dc18fc3291f154a591a488153db31950718f64736f6c634300081c0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH1 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH3 0xE4768B EQ PUSH1 0x73 JUMPI DUP1 PUSH4 0x41976E09 EQ PUSH1 0x38 JUMPI PUSH4 0xA8734F0B EQ PUSH1 0x38 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE PUSH1 0x6E JUMPI PUSH1 0x20 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH1 0x6E JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x55 PUSH1 0xA7 JUMP JUMPDEST AND PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE PUSH1 0x6E JUMPI PUSH1 0x40 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH1 0x6E JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x90 PUSH1 0xA7 JUMP JUMPDEST AND PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x20 MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x40 PUSH1 0x0 KECCAK256 SSTORE PUSH1 0x0 DUP1 RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH1 0x6E JUMPI JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB0 LOG2 SWAP7 0xDA CHAINID 0xDC MSIZE SAR CALLVALUE 0xED 0xF7 0xAE 0xCF 0xE0 0xDC XOR 0xFC ORIGIN SWAP2 CALL SLOAD 0xA5 SWAP2 LOG4 DUP9 ISZERO RETURNDATASIZE 0xB3 NOT POP PUSH18 0x8F64736F6C634300081C0033000000000000 ","sourceMap":"410:1295:5:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;410:1295:5;;;;-1:-1:-1;;;;;410:1295:5;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;410:1295:5;;;;-1:-1:-1;;;;;410:1295:5;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;410:1295:5;;;;;;:::o"},"methodIdentifiers":{"getPrice(address)":"41976e09","rates(address)":"a8734f0b","setPrice(address,uint256)":"00e4768b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"TokenId\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"TokenId\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"rates\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"TokenId\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"}],\"name\":\"setPrice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The Oracle contract provides token price data to the lending protocol. It is used to fetch the price of tokens (e.g., USDT, ETH) used for collateral calculations in the lending process.\",\"kind\":\"dev\",\"methods\":{\"getPrice(address)\":{\"details\":\"This function allows other contracts (like LendingPool) to access the current price of a token.\",\"params\":{\"token\":\"The token whose price is being fetched.\"},\"returns\":{\"_0\":\"uint256 The price of the specified token.\"}},\"setPrice(address,uint256)\":{\"details\":\"This function allows the price of tokens to be updated in the Oracle contract. Only authorized entities (e.g., the contract owner or admin) should be able to set the price.\",\"params\":{\"price\":\"The new price of the token.\",\"token\":\"The token whose price is being set.\"}}},\"stateVariables\":{\"rates\":{\"details\":\"Mapping to store the price of each token (TokenId => price).\"}},\"title\":\"Oracle\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getPrice(address)\":{\"notice\":\"Retrieve the price of a token.\"},\"setPrice(address,uint256)\":{\"notice\":\"Set the price of a token.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/Oracle.sol\":\"Oracle\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@nilfoundation/smart-contracts/contracts/Nil.sol\":{\"keccak256\":\"0x21257091b205b27932c0d13a507a9fb21222c59faa8ac896a4f00962e307855d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://dcead2113e9cfc853c80709793b363b8146c8582b423951cd96b24015159f2e9\",\"dweb:/ipfs/QmSmNk1vNsCxZp3EfxqhvjLWYpNdGY8ChVzfBu2JtDwKQX\"]},\"@nilfoundation/smart-contracts/contracts/NilTokenBase.sol\":{\"keccak256\":\"0x8239fbd2fce629de2e6b56619194c15be96c823d33d055e71b2fabe002553cc4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4af5cb28280bdfa49e1e4555e172a47c1c971992ad745d22d2087f030ad98a0c\",\"dweb:/ipfs/QmRNCBCdVo9yawrBHF7qYkoZtAnHQHpbqAA4VoPYmDULmt\"]},\"contracts/Oracle.sol\":{\"keccak256\":\"0xdc276938a1164f94d138cf83960926d5f274c98a60ccf6a334c68994c0612f43\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://9af9fbd38e4f75199eeb587669a1efbaa2f03322eebdea4bdcc7272d84e54f6c\",\"dweb:/ipfs/QmQ3yV9tRsJRrgz7izKDD7X6BuoXwFZYtyAbe5XJDdSNXU\"]}},\"version\":1}"}}}}} \ No newline at end of file diff --git a/academy/lending-protocol/artifacts/contracts/CollateralManager.sol/GlobalLedger.dbg.json b/academy/lending-protocol/artifacts/contracts/CollateralManager.sol/GlobalLedger.dbg.json new file mode 100644 index 000000000..f98af6889 --- /dev/null +++ b/academy/lending-protocol/artifacts/contracts/CollateralManager.sol/GlobalLedger.dbg.json @@ -0,0 +1,4 @@ +{ + "_format": "hh-sol-dbg-1", + "buildInfo": "../../build-info/fb23e4780e5447fac4926540bca38304.json" +} diff --git a/academy/lending-protocol/artifacts/contracts/CollateralManager.sol/GlobalLedger.json b/academy/lending-protocol/artifacts/contracts/CollateralManager.sol/GlobalLedger.json new file mode 100644 index 000000000..6fb39a84a --- /dev/null +++ b/academy/lending-protocol/artifacts/contracts/CollateralManager.sol/GlobalLedger.json @@ -0,0 +1,153 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "GlobalLedger", + "sourceName": "contracts/CollateralManager.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "TokenId", + "name": "", + "type": "address" + } + ], + "name": "deposits", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "TokenId", + "name": "token", + "type": "address" + } + ], + "name": "getDeposit", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getLoanDetails", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "TokenId", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "loans", + "outputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "TokenId", + "name": "token", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "TokenId", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "recordDeposit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "TokenId", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "recordLoan", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x608080604052346015576102d4908161001b8239f35b600080fdfe608080604052600436101561001357600080fd5b60003560e01c90816373b4086b146101ea575080638f601f661461019b578063c35082a91461019b578063dd6e8c2014610110578063e8599307146100b35763e8a7da8e1461006157600080fd5b346100ae5760203660031901126100ae576001600160a01b03610082610238565b16600090815260016020818152604092839020805492015483519283526001600160a01b031690820152f35b600080fd5b346100ae576100c136610264565b9160018060a01b0316600052600060205260406000209060018060a01b0316600052602052604060002080549182018092116100fa5755005b634e487b7160e01b600052601160045260246000fd5b346100ae5761011e36610264565b909160405190604082019282841067ffffffffffffffff85111761018557604093845282526001600160a01b039384166020808401918252918516600090815260019283905293909320915182559151910180546001600160a01b03191691909216179055005b634e487b7160e01b600052604160045260246000fd5b346100ae5760403660031901126100ae576101b4610238565b6101bc61024e565b6001600160a01b03918216600090815260208181526040808320949093168252928352819020549051908152f35b346100ae5760203660031901126100ae576001600160a01b0361020b610238565b1660009081526001602081815260409283902080549201549184526001600160a01b039091169083015290f35b600435906001600160a01b03821682036100ae57565b602435906001600160a01b03821682036100ae57565b60609060031901126100ae576004356001600160a01b03811681036100ae57906024356001600160a01b03811681036100ae57906044359056fea2646970667358221220497129af11ef0f4a622acb3fc51e064f61e90d013a476c0b7f5b3433315d534a64736f6c634300081c0033", + "deployedBytecode": "0x608080604052600436101561001357600080fd5b60003560e01c90816373b4086b146101ea575080638f601f661461019b578063c35082a91461019b578063dd6e8c2014610110578063e8599307146100b35763e8a7da8e1461006157600080fd5b346100ae5760203660031901126100ae576001600160a01b03610082610238565b16600090815260016020818152604092839020805492015483519283526001600160a01b031690820152f35b600080fd5b346100ae576100c136610264565b9160018060a01b0316600052600060205260406000209060018060a01b0316600052602052604060002080549182018092116100fa5755005b634e487b7160e01b600052601160045260246000fd5b346100ae5761011e36610264565b909160405190604082019282841067ffffffffffffffff85111761018557604093845282526001600160a01b039384166020808401918252918516600090815260019283905293909320915182559151910180546001600160a01b03191691909216179055005b634e487b7160e01b600052604160045260246000fd5b346100ae5760403660031901126100ae576101b4610238565b6101bc61024e565b6001600160a01b03918216600090815260208181526040808320949093168252928352819020549051908152f35b346100ae5760203660031901126100ae576001600160a01b0361020b610238565b1660009081526001602081815260409283902080549201549184526001600160a01b039091169083015290f35b600435906001600160a01b03821682036100ae57565b602435906001600160a01b03821682036100ae57565b60609060031901126100ae576004356001600160a01b03811681036100ae57906024356001600160a01b03811681036100ae57906044359056fea2646970667358221220497129af11ef0f4a622acb3fc51e064f61e90d013a476c0b7f5b3433315d534a64736f6c634300081c0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/academy/lending-protocol/artifacts/contracts/InterestManager.sol/InterestManager.dbg.json b/academy/lending-protocol/artifacts/contracts/InterestManager.sol/InterestManager.dbg.json new file mode 100644 index 000000000..f98af6889 --- /dev/null +++ b/academy/lending-protocol/artifacts/contracts/InterestManager.sol/InterestManager.dbg.json @@ -0,0 +1,4 @@ +{ + "_format": "hh-sol-dbg-1", + "buildInfo": "../../build-info/fb23e4780e5447fac4926540bca38304.json" +} diff --git a/academy/lending-protocol/artifacts/contracts/InterestManager.sol/InterestManager.json b/academy/lending-protocol/artifacts/contracts/InterestManager.sol/InterestManager.json new file mode 100644 index 000000000..04ad81c3e --- /dev/null +++ b/academy/lending-protocol/artifacts/contracts/InterestManager.sol/InterestManager.json @@ -0,0 +1,24 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "InterestManager", + "sourceName": "contracts/InterestManager.sol", + "abi": [ + { + "inputs": [], + "name": "getInterestRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + } + ], + "bytecode": "0x608080604052346013576079908160198239f35b600080fdfe6080806040526004361015601257600080fd5b60003560e01c635257b56614602657600080fd5b34603e576000366003190112603e5780600560209252f35b600080fdfea2646970667358221220721c2ca29cd023f923ed7120652ec8a5739f48f49297866036ebf180918ff81664736f6c634300081c0033", + "deployedBytecode": "0x6080806040526004361015601257600080fd5b60003560e01c635257b56614602657600080fd5b34603e576000366003190112603e5780600560209252f35b600080fdfea2646970667358221220721c2ca29cd023f923ed7120652ec8a5739f48f49297866036ebf180918ff81664736f6c634300081c0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/academy/lending-protocol/artifacts/contracts/LendingPool.sol/LendingPool.dbg.json b/academy/lending-protocol/artifacts/contracts/LendingPool.sol/LendingPool.dbg.json new file mode 100644 index 000000000..f98af6889 --- /dev/null +++ b/academy/lending-protocol/artifacts/contracts/LendingPool.sol/LendingPool.dbg.json @@ -0,0 +1,4 @@ +{ + "_format": "hh-sol-dbg-1", + "buildInfo": "../../build-info/fb23e4780e5447fac4926540bca38304.json" +} diff --git a/academy/lending-protocol/artifacts/contracts/LendingPool.sol/LendingPool.json b/academy/lending-protocol/artifacts/contracts/LendingPool.sol/LendingPool.json new file mode 100644 index 000000000..2bc513cc1 --- /dev/null +++ b/academy/lending-protocol/artifacts/contracts/LendingPool.sol/LendingPool.json @@ -0,0 +1,410 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "LendingPool", + "sourceName": "contracts/LendingPool.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_globalLedger", + "type": "address" + }, + { + "internalType": "address", + "name": "_interestManager", + "type": "address" + }, + { + "internalType": "address", + "name": "_oracle", + "type": "address" + }, + { + "internalType": "TokenId", + "name": "_usdt", + "type": "address" + }, + { + "internalType": "TokenId", + "name": "_eth", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "TokenId", + "name": "borrowToken", + "type": "address" + } + ], + "name": "borrow", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burnToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "deposit", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "eth", + "outputs": [ + { + "internalType": "TokenId", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "returnData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "context", + "type": "bytes" + } + ], + "name": "finalizeLoan", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "getOwnTokenBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "getTokenBalanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTokenId", + "outputs": [ + { + "internalType": "TokenId", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTokenName", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTokenTotalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "globalLedger", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "returnData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "context", + "type": "bytes" + } + ], + "name": "handleRepayment", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "interestManager", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "mintToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "oracle", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "returnData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "context", + "type": "bytes" + } + ], + "name": "processLoan", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "returnData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "context", + "type": "bytes" + } + ], + "name": "processRepayment", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "returnData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "context", + "type": "bytes" + } + ], + "name": "releaseCollateral", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "repayLoan", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "returnData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "context", + "type": "bytes" + } + ], + "name": "sendCollateral", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "TokenId", + "name": "tokenId", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "sendToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "name", + "type": "string" + } + ], + "name": "setTokenName", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "usdt", + "outputs": [ + { + "internalType": "TokenId", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x6080346100e657601f611b3338819003918201601f19168301916001600160401b038311848410176100eb5780849260a0946040528339810103126100e65761004781610101565b9061005460208201610101565b61006060408301610101565b90610079608061007260608601610101565b9401610101565b600280546001600160a01b03199081166001600160a01b0397881617909155600380548216938716939093179092556004805483169386169390931790925560058054821693851693909317909255600680549092169216919091179055604051611a1d90816101168239f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b03821682036100e65756fe608080604052600436101561001357600080fd5b60003560e01c908163010a38f51461110c5750806310401774146110e35780632f48ab7d146110ba5780632fdcfbd21461108257806346fe543114610f395780634761a3ee14610e5e5780634b3fd14814610cf557806357df844b14610cd7578063659dbf9914610b845780637b47ec1a14610a625780637dc0d1d014610a395780638389454814610a14578063862b092b146109405780638c7c9e0c14610917578063a4f29aad1461077a578063c513a8f514610618578063c59e1c8f14610520578063c634d0321461045c578063d0e30db0146103d8578063d19b9b75146103b3578063ee065e111461038a578063eeaf7d8e1461024b5763f966ade71461011c57600080fd5b6000366003190112610246576101ea6020610135611842565b8161016360405192637453ed4760e11b838501523360248501526024845261015e60448561116d565b611438565b510151906040519163659dbf9960e01b8484015233602484015260448301526044825261019160648361116d565b60025460405163100897a560e21b81526001600160a01b03909116600482015260a0602482015293849283926101fc9290916101cf60a486016116b8565b62a7d8c0604487015285810360031901606487015290611258565b83810360031901608485015290611258565b0381600060d85af1801561023a5761021057005b6102319060203d602011610233575b610229818361116d565b810190611468565b005b503d61021f565b6040513d6000823e3d90fd5b600080fd5b61025436611200565b909115610345578060208061026e93518301019101611373565b84516020868101966001600160a01b03909616959394939182019190910312610246576102af6102b69260646102a861023198518361131f565b049061145b565b11156113a3565b6040516306eb746160e51b6020820152602481018390526001600160a01b03821660448201526000606480830191909152815291610334906102f960848561116d565b60405163c513a8f560e01b60208201526001600160a01b0391821660248201529216604483015281606481015b03601f19810183528261116d565b6002546001600160a01b031661174a565b60405162461bcd60e51b815260206004820152601960248201527f496e74657265737420726174652063616c6c206661696c6564000000000000006044820152606490fd5b34610246576000366003190112610246576003546040516001600160a01b039091168152602090f35b346102465760003660031901126102465760206103d030306117d3565b604051908152f35b6000366003190112610246576102316103ef611842565b61044960206104116001600160a01b0361040885611438565b51511693611438565b51015160405163e859930760e01b60208201523360248201526001600160a01b03909316604484015260648301528160848101610326565b60025430906001600160a01b031661194d565b346102465760203660031901126102465760043561048161047b611480565b15611299565b604051632cbbbfe160e11b81526004810182905260016024820152602081604481600060d05af190811561023a57600091610501575b50156104ce576104c99060005461145b565b600055005b60405162461bcd60e51b815260206004820152600b60248201526a135a5b9d0819985a5b195960aa1b6044820152606490fd5b61051a915060203d60201161023357610229818361116d565b826104b7565b61052936611200565b9091156105d35761054481602080809451830101910161141e565b919092818151818301938491600094010103126105d057505190811561058b576102319261057d8361057684306117d3565b10156113a3565b6001600160a01b031661157d565b60405162461bcd60e51b815260206004820152601860248201527f4e6f20636f6c6c61746572616c20746f2072656c6561736500000000000000006044820152606490fd5b80fd5b60405162461bcd60e51b815260206004820152601d60248201527f4661696c656420746f20726574726965766520636f6c6c61746572616c0000006044820152606490fd5b61062136611200565b9190501561073e5760206106408282806101ea9551830101910161141e565b6005546001600160a01b03928316929081169116810361073857506006546001600160a01b0316905b60405163c35082a960e01b848201526001600160a01b03828116602483015283166044808301919091528152906106df906106a560648461116d565b60405163c59e1c8f60e01b868201526001600160a01b0391821660248201529316604484015282606481015b03601f19810184528361116d565b60025460405163100897a560e21b81526001600160a01b03909116600482015260a0602482015293849283926101fc92909161071d60a486016116b8565b62055730604487015285810360031901606487015290611258565b90610669565b60405162461bcd60e51b8152602060048201526014602482015273131bd85b8818db19585c9a5b99c819985a5b195960621b6044820152606490fd5b346102465760203660031901126102465760043567ffffffffffffffff81116102465736602382011215610246576107bc9036906024816004013591016111ab565b6107c761047b611480565b805167ffffffffffffffff8111610901576107e36001546113e4565b601f8111610894575b50602091601f82116001146108285791819260009261081d575b5050600019600383901b1c1916600191821b179055005b015190508280610806565b601f1982169260016000526000805160206119c88339815191529160005b85811061087c57508360019510610863575b505050811b01600155005b015160001960f88460031b161c19169055828080610858565b91926020600181928685015181550194019201610846565b6001600052601f820160051c6000805160206119c88339815191520190602083106108eb575b601f0160051c6000805160206119c883398151915201905b8181106108df57506107ec565b600081556001016108d2565b6000805160206119c883398151915291506108ba565b634e487b7160e01b600052604160045260246000fd5b34610246576000366003190112610246576006546040516001600160a01b039091168152602090f35b34610246576000366003190112610246576040516000600154610962816113e4565b80845290600181169081156109f057506001146109a2575b61099e8361098a8185038261116d565b604051918291602083526020830190611258565b0390f35b91905060016000526000805160206119c8833981519152916000905b8082106109d65750909150810160200161098a61097a565b9192600181602092548385880101520191019092916109be565b60ff191660208086019190915291151560051b8401909101915061098a905061097a565b346102465760203660031901126102465760206103d0610a32611125565b30906117d3565b34610246576000366003190112610246576004546040516001600160a01b039091168152602090f35b3461024657602036600319011261024657600435610a8161047b611480565b8060005410610b3f57604051632cbbbfe160e11b815281600482015260006024820152602081604481600060d05af190811561023a57600091610b20575b5015610aed57600054908103908111610ad757600055005b634e487b7160e01b600052601160045260246000fd5b60405162461bcd60e51b815260206004820152600b60248201526a109d5c9b8819985a5b195960aa1b6044820152606490fd5b610b39915060203d60201161023357610229818361116d565b82610abf565b60405162461bcd60e51b815260206004820152601e60248201527f4275726e206661696c65643a206e6f7420656e6f75676820746f6b656e7300006044820152606490fd5b610b99610b9036611200565b91929092611332565b604081805181010312610246576040610bb46020830161130b565b9101519160408180518101031261024657610bd660406020830151920161130b565b8115610ca157610c486020936106d16101ea966040519463292bdab360e11b8887015260048652610c0860248761116d565b604051637757bec760e11b898201526001600160a01b039485166024820152604481019790975290921660648601526084850191909152839060a4820190565b60035460405163100897a560e21b81526001600160a01b03909116600482015260a0602482015293849283926101fc929091610c8660a486016116b8565b627a1200604487015285810360031901606487015290611258565b60405162461bcd60e51b815260206004820152600e60248201526d27379030b1ba34bb32903637b0b760911b6044820152606490fd5b34610246576000366003190112610246576020600054604051908152f35b604036600319011261024657600435610d0c61113b565b6005546001600160a01b038281169116818114939190848015610e4a575b15610e15576101ea94610d4384610576602097306117d3565b15610e1057506006546001600160a01b03165b6040516341976e0960e01b858201526024808201849052815291610d7b60448461116d565b6040516346fe543160e01b86820152336024820152604481019490945260648401526001600160a01b03166084808401919091528252610dbc60a48361116d565b6101fc60018060a01b036004541691604051958694859463100897a560e21b8652600486015260a06024860152610df560a486016116b8565b62895440604487015285810360031901606487015290611258565b610d56565b60405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2103a37b5b2b760991b6044820152606490fd5b506006546001600160a01b03168214610d2a565b610e76610e85610e6d36611200565b91939093611332565b60208082518301019101611373565b90919260018060a01b03169360208151918180820193849201010312610246575110610ef4576040516306eb746160e51b60208201526001600160a01b03808516602483015282166044820152606481018390526102319390610eef906104498160848101610326565b61157d565b60405162461bcd60e51b815260206004820152601760248201527f496e73756666696369656e7420636f6c6c61746572616c0000000000000000006044820152606490fd5b610f4236611200565b91156110485760808280518101031261024657610f616020830161130b565b916040810151610f7f6080610f786060850161130b565b930161130b565b835190946001600160a01b0316936020808201928201919091031261024657610fa990518261131f565b607881029080820460781490151715610ad75760405163c35082a960e01b60208201526001600160a01b038581166024830152959095166044808701919091528552610231949360649361033493610326929190611007878961116d565b6040516323b0d1f760e11b60208201526001600160a01b039384166024820152604481019190915291166064820152939091046084840152829060a4820190565b60405162461bcd60e51b815260206004820152601260248201527113dc9858db194818d85b1b0819985a5b195960721b6044820152606490fd5b346102465760603660031901126102465761023161109e611125565b6110a661113b565b6110b161047b611480565b6044359161157d565b34610246576000366003190112610246576005546040516001600160a01b039091168152602090f35b34610246576000366003190112610246576002546040516001600160a01b039091168152602090f35b3461024657600036600319011261024657602090308152f35b600435906001600160a01b038216820361024657565b602435906001600160a01b038216820361024657565b6040810190811067ffffffffffffffff82111761090157604052565b90601f8019910116810190811067ffffffffffffffff82111761090157604052565b67ffffffffffffffff811161090157601f01601f191660200190565b9291926111b78261118f565b916111c5604051938461116d565b829481845281830111610246578281602093846000960137010152565b9080601f83011215610246578160206111fd933591016111ab565b90565b6060600319820112610246576004358015158103610246579160243567ffffffffffffffff81116102465782611238916004016111e2565b916044359067ffffffffffffffff8211610246576111fd916004016111e2565b919082519283825260005b848110611284575050826000602080949584010152601f8019910116010190565b80602080928401015182828601015201611263565b156112a057565b60405162461bcd60e51b815260206004820152603a60248201527f547279696e6720746f2063616c6c2065787465726e616c2066756e6374696f6e60448201527f207769746820696e7465726e616c207472616e73616374696f6e0000000000006064820152608490fd5b51906001600160a01b038216820361024657565b81810292918115918404141715610ad757565b1561133957565b60405162461bcd60e51b815260206004820152601260248201527113195919d95c8818d85b1b0819985a5b195960721b6044820152606490fd5b9190826080910312610246576113888261130b565b91602081015191606061139d6040840161130b565b92015190565b156113aa57565b60405162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e742066756e647360701b6044820152606490fd5b90600182811c92168015611414575b60208310146113fe57565b634e487b7160e01b600052602260045260246000fd5b91607f16916113f3565b9190826040910312610246576111fd6020610f788461130b565b8051156114455760200190565b634e487b7160e01b600052603260045260246000fd5b91908201809211610ad757565b90816020910312610246575180151581036102465790565b600080606051608060ff5afa3d15611575573d9061149d8261118f565b916114ab604051938461116d565b82523d6000602084013e5b15611531578051156114d557806020806111fd93518301019101611468565b60405162461bcd60e51b815260206004820152602e60248201527f2749535f494e5445524e414c5f5452414e53414354494f4e272072657475726e60448201526d7320696e76616c6964206461746160901b6064820152608490fd5b606460405162461bcd60e51b815260206004820152602060248201527f507265636f6d70696c656420636f6e74726163742063616c6c206661696c65646044820152fd5b6060906114b6565b929192604090815192611590838561116d565b60018452601f19830160005b8181106116945750506116479394958351916115b783611151565b6001600160a01b0316825260208201526115d085611438565b526115da84611438565b50602093849161165984516115ef858261116d565b600081528551968794859463f697565360e01b8652600060048701526000602487015260018060a01b031660448601526000606486015260006084860152600060a486015261010060c4860152610104850190611701565b8381036003190160e485015290611258565b0381600060fd5af190811561168a5750611671575050565b8161168792903d1061023357610229818361116d565b50565b513d6000823e3d90fd5b60209085516116a281611151565b600081526000838201528282890101520161159c565b602060605191828152019060809060005b8181106116d65750505090565b825180516001600160a01b0316855260209081015181860152604090940193909201916001016116c9565b906020808351928381520192019060005b81811061171f5750505090565b825180516001600160a01b031685526020908101518186015260409094019390920191600101611712565b60405163100897a560e21b81526001600160a01b03909116600482015260a0602482015291602091839182916117a691906101ea9061178b60a486016116b8565b625b8d80604487015285810360031901606487015290611258565b0381600060d85af1801561023a576117bb5750565b6116879060203d60201161023357610229818361116d565b604051639614ddaf60e01b81526001600160a01b0392831660048201529116602482015260208160448160d15afa90811561023a57600091611813575090565b90506020813d60201161183a575b8161182e6020938361116d565b81010312610246575190565b3d9150611821565b6040516304016d8760e51b81526000816004818360d35af190811561023a5760009161186c575090565b903d8082843e61187c818461116d565b8201916020818403126119495780519067ffffffffffffffff8211611931570182601f820112156119495780519167ffffffffffffffff83116119355760208360051b01936118ce604051958661116d565b83855260208086019460061b8401019281841161193157602001935b8385106118f957505050505090565b604085830312611931576020604091825161191381611151565b61191c8861130b565b815282880151838201528152019401936118ea565b8280fd5b634e487b7160e01b81526041600452602490fd5b5080fd5b60405163f697565360e01b8152600060048201819052602482018190526001600160a01b0392831660448301526064820181905291909216608483015260a482015261010060c482015290602090829081906119b29061164761010484016060611701565b0381600060fd5af1801561023a576117bb575056feb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6a2646970667358221220fda4dbad26fa6e6d4c7ced4ba187c950c9df544d54a762a1f43f43cbeed8936c64736f6c634300081c0033", + "deployedBytecode": "0x608080604052600436101561001357600080fd5b60003560e01c908163010a38f51461110c5750806310401774146110e35780632f48ab7d146110ba5780632fdcfbd21461108257806346fe543114610f395780634761a3ee14610e5e5780634b3fd14814610cf557806357df844b14610cd7578063659dbf9914610b845780637b47ec1a14610a625780637dc0d1d014610a395780638389454814610a14578063862b092b146109405780638c7c9e0c14610917578063a4f29aad1461077a578063c513a8f514610618578063c59e1c8f14610520578063c634d0321461045c578063d0e30db0146103d8578063d19b9b75146103b3578063ee065e111461038a578063eeaf7d8e1461024b5763f966ade71461011c57600080fd5b6000366003190112610246576101ea6020610135611842565b8161016360405192637453ed4760e11b838501523360248501526024845261015e60448561116d565b611438565b510151906040519163659dbf9960e01b8484015233602484015260448301526044825261019160648361116d565b60025460405163100897a560e21b81526001600160a01b03909116600482015260a0602482015293849283926101fc9290916101cf60a486016116b8565b62a7d8c0604487015285810360031901606487015290611258565b83810360031901608485015290611258565b0381600060d85af1801561023a5761021057005b6102319060203d602011610233575b610229818361116d565b810190611468565b005b503d61021f565b6040513d6000823e3d90fd5b600080fd5b61025436611200565b909115610345578060208061026e93518301019101611373565b84516020868101966001600160a01b03909616959394939182019190910312610246576102af6102b69260646102a861023198518361131f565b049061145b565b11156113a3565b6040516306eb746160e51b6020820152602481018390526001600160a01b03821660448201526000606480830191909152815291610334906102f960848561116d565b60405163c513a8f560e01b60208201526001600160a01b0391821660248201529216604483015281606481015b03601f19810183528261116d565b6002546001600160a01b031661174a565b60405162461bcd60e51b815260206004820152601960248201527f496e74657265737420726174652063616c6c206661696c6564000000000000006044820152606490fd5b34610246576000366003190112610246576003546040516001600160a01b039091168152602090f35b346102465760003660031901126102465760206103d030306117d3565b604051908152f35b6000366003190112610246576102316103ef611842565b61044960206104116001600160a01b0361040885611438565b51511693611438565b51015160405163e859930760e01b60208201523360248201526001600160a01b03909316604484015260648301528160848101610326565b60025430906001600160a01b031661194d565b346102465760203660031901126102465760043561048161047b611480565b15611299565b604051632cbbbfe160e11b81526004810182905260016024820152602081604481600060d05af190811561023a57600091610501575b50156104ce576104c99060005461145b565b600055005b60405162461bcd60e51b815260206004820152600b60248201526a135a5b9d0819985a5b195960aa1b6044820152606490fd5b61051a915060203d60201161023357610229818361116d565b826104b7565b61052936611200565b9091156105d35761054481602080809451830101910161141e565b919092818151818301938491600094010103126105d057505190811561058b576102319261057d8361057684306117d3565b10156113a3565b6001600160a01b031661157d565b60405162461bcd60e51b815260206004820152601860248201527f4e6f20636f6c6c61746572616c20746f2072656c6561736500000000000000006044820152606490fd5b80fd5b60405162461bcd60e51b815260206004820152601d60248201527f4661696c656420746f20726574726965766520636f6c6c61746572616c0000006044820152606490fd5b61062136611200565b9190501561073e5760206106408282806101ea9551830101910161141e565b6005546001600160a01b03928316929081169116810361073857506006546001600160a01b0316905b60405163c35082a960e01b848201526001600160a01b03828116602483015283166044808301919091528152906106df906106a560648461116d565b60405163c59e1c8f60e01b868201526001600160a01b0391821660248201529316604484015282606481015b03601f19810184528361116d565b60025460405163100897a560e21b81526001600160a01b03909116600482015260a0602482015293849283926101fc92909161071d60a486016116b8565b62055730604487015285810360031901606487015290611258565b90610669565b60405162461bcd60e51b8152602060048201526014602482015273131bd85b8818db19585c9a5b99c819985a5b195960621b6044820152606490fd5b346102465760203660031901126102465760043567ffffffffffffffff81116102465736602382011215610246576107bc9036906024816004013591016111ab565b6107c761047b611480565b805167ffffffffffffffff8111610901576107e36001546113e4565b601f8111610894575b50602091601f82116001146108285791819260009261081d575b5050600019600383901b1c1916600191821b179055005b015190508280610806565b601f1982169260016000526000805160206119c88339815191529160005b85811061087c57508360019510610863575b505050811b01600155005b015160001960f88460031b161c19169055828080610858565b91926020600181928685015181550194019201610846565b6001600052601f820160051c6000805160206119c88339815191520190602083106108eb575b601f0160051c6000805160206119c883398151915201905b8181106108df57506107ec565b600081556001016108d2565b6000805160206119c883398151915291506108ba565b634e487b7160e01b600052604160045260246000fd5b34610246576000366003190112610246576006546040516001600160a01b039091168152602090f35b34610246576000366003190112610246576040516000600154610962816113e4565b80845290600181169081156109f057506001146109a2575b61099e8361098a8185038261116d565b604051918291602083526020830190611258565b0390f35b91905060016000526000805160206119c8833981519152916000905b8082106109d65750909150810160200161098a61097a565b9192600181602092548385880101520191019092916109be565b60ff191660208086019190915291151560051b8401909101915061098a905061097a565b346102465760203660031901126102465760206103d0610a32611125565b30906117d3565b34610246576000366003190112610246576004546040516001600160a01b039091168152602090f35b3461024657602036600319011261024657600435610a8161047b611480565b8060005410610b3f57604051632cbbbfe160e11b815281600482015260006024820152602081604481600060d05af190811561023a57600091610b20575b5015610aed57600054908103908111610ad757600055005b634e487b7160e01b600052601160045260246000fd5b60405162461bcd60e51b815260206004820152600b60248201526a109d5c9b8819985a5b195960aa1b6044820152606490fd5b610b39915060203d60201161023357610229818361116d565b82610abf565b60405162461bcd60e51b815260206004820152601e60248201527f4275726e206661696c65643a206e6f7420656e6f75676820746f6b656e7300006044820152606490fd5b610b99610b9036611200565b91929092611332565b604081805181010312610246576040610bb46020830161130b565b9101519160408180518101031261024657610bd660406020830151920161130b565b8115610ca157610c486020936106d16101ea966040519463292bdab360e11b8887015260048652610c0860248761116d565b604051637757bec760e11b898201526001600160a01b039485166024820152604481019790975290921660648601526084850191909152839060a4820190565b60035460405163100897a560e21b81526001600160a01b03909116600482015260a0602482015293849283926101fc929091610c8660a486016116b8565b627a1200604487015285810360031901606487015290611258565b60405162461bcd60e51b815260206004820152600e60248201526d27379030b1ba34bb32903637b0b760911b6044820152606490fd5b34610246576000366003190112610246576020600054604051908152f35b604036600319011261024657600435610d0c61113b565b6005546001600160a01b038281169116818114939190848015610e4a575b15610e15576101ea94610d4384610576602097306117d3565b15610e1057506006546001600160a01b03165b6040516341976e0960e01b858201526024808201849052815291610d7b60448461116d565b6040516346fe543160e01b86820152336024820152604481019490945260648401526001600160a01b03166084808401919091528252610dbc60a48361116d565b6101fc60018060a01b036004541691604051958694859463100897a560e21b8652600486015260a06024860152610df560a486016116b8565b62895440604487015285810360031901606487015290611258565b610d56565b60405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2103a37b5b2b760991b6044820152606490fd5b506006546001600160a01b03168214610d2a565b610e76610e85610e6d36611200565b91939093611332565b60208082518301019101611373565b90919260018060a01b03169360208151918180820193849201010312610246575110610ef4576040516306eb746160e51b60208201526001600160a01b03808516602483015282166044820152606481018390526102319390610eef906104498160848101610326565b61157d565b60405162461bcd60e51b815260206004820152601760248201527f496e73756666696369656e7420636f6c6c61746572616c0000000000000000006044820152606490fd5b610f4236611200565b91156110485760808280518101031261024657610f616020830161130b565b916040810151610f7f6080610f786060850161130b565b930161130b565b835190946001600160a01b0316936020808201928201919091031261024657610fa990518261131f565b607881029080820460781490151715610ad75760405163c35082a960e01b60208201526001600160a01b038581166024830152959095166044808701919091528552610231949360649361033493610326929190611007878961116d565b6040516323b0d1f760e11b60208201526001600160a01b039384166024820152604481019190915291166064820152939091046084840152829060a4820190565b60405162461bcd60e51b815260206004820152601260248201527113dc9858db194818d85b1b0819985a5b195960721b6044820152606490fd5b346102465760603660031901126102465761023161109e611125565b6110a661113b565b6110b161047b611480565b6044359161157d565b34610246576000366003190112610246576005546040516001600160a01b039091168152602090f35b34610246576000366003190112610246576002546040516001600160a01b039091168152602090f35b3461024657600036600319011261024657602090308152f35b600435906001600160a01b038216820361024657565b602435906001600160a01b038216820361024657565b6040810190811067ffffffffffffffff82111761090157604052565b90601f8019910116810190811067ffffffffffffffff82111761090157604052565b67ffffffffffffffff811161090157601f01601f191660200190565b9291926111b78261118f565b916111c5604051938461116d565b829481845281830111610246578281602093846000960137010152565b9080601f83011215610246578160206111fd933591016111ab565b90565b6060600319820112610246576004358015158103610246579160243567ffffffffffffffff81116102465782611238916004016111e2565b916044359067ffffffffffffffff8211610246576111fd916004016111e2565b919082519283825260005b848110611284575050826000602080949584010152601f8019910116010190565b80602080928401015182828601015201611263565b156112a057565b60405162461bcd60e51b815260206004820152603a60248201527f547279696e6720746f2063616c6c2065787465726e616c2066756e6374696f6e60448201527f207769746820696e7465726e616c207472616e73616374696f6e0000000000006064820152608490fd5b51906001600160a01b038216820361024657565b81810292918115918404141715610ad757565b1561133957565b60405162461bcd60e51b815260206004820152601260248201527113195919d95c8818d85b1b0819985a5b195960721b6044820152606490fd5b9190826080910312610246576113888261130b565b91602081015191606061139d6040840161130b565b92015190565b156113aa57565b60405162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e742066756e647360701b6044820152606490fd5b90600182811c92168015611414575b60208310146113fe57565b634e487b7160e01b600052602260045260246000fd5b91607f16916113f3565b9190826040910312610246576111fd6020610f788461130b565b8051156114455760200190565b634e487b7160e01b600052603260045260246000fd5b91908201809211610ad757565b90816020910312610246575180151581036102465790565b600080606051608060ff5afa3d15611575573d9061149d8261118f565b916114ab604051938461116d565b82523d6000602084013e5b15611531578051156114d557806020806111fd93518301019101611468565b60405162461bcd60e51b815260206004820152602e60248201527f2749535f494e5445524e414c5f5452414e53414354494f4e272072657475726e60448201526d7320696e76616c6964206461746160901b6064820152608490fd5b606460405162461bcd60e51b815260206004820152602060248201527f507265636f6d70696c656420636f6e74726163742063616c6c206661696c65646044820152fd5b6060906114b6565b929192604090815192611590838561116d565b60018452601f19830160005b8181106116945750506116479394958351916115b783611151565b6001600160a01b0316825260208201526115d085611438565b526115da84611438565b50602093849161165984516115ef858261116d565b600081528551968794859463f697565360e01b8652600060048701526000602487015260018060a01b031660448601526000606486015260006084860152600060a486015261010060c4860152610104850190611701565b8381036003190160e485015290611258565b0381600060fd5af190811561168a5750611671575050565b8161168792903d1061023357610229818361116d565b50565b513d6000823e3d90fd5b60209085516116a281611151565b600081526000838201528282890101520161159c565b602060605191828152019060809060005b8181106116d65750505090565b825180516001600160a01b0316855260209081015181860152604090940193909201916001016116c9565b906020808351928381520192019060005b81811061171f5750505090565b825180516001600160a01b031685526020908101518186015260409094019390920191600101611712565b60405163100897a560e21b81526001600160a01b03909116600482015260a0602482015291602091839182916117a691906101ea9061178b60a486016116b8565b625b8d80604487015285810360031901606487015290611258565b0381600060d85af1801561023a576117bb5750565b6116879060203d60201161023357610229818361116d565b604051639614ddaf60e01b81526001600160a01b0392831660048201529116602482015260208160448160d15afa90811561023a57600091611813575090565b90506020813d60201161183a575b8161182e6020938361116d565b81010312610246575190565b3d9150611821565b6040516304016d8760e51b81526000816004818360d35af190811561023a5760009161186c575090565b903d8082843e61187c818461116d565b8201916020818403126119495780519067ffffffffffffffff8211611931570182601f820112156119495780519167ffffffffffffffff83116119355760208360051b01936118ce604051958661116d565b83855260208086019460061b8401019281841161193157602001935b8385106118f957505050505090565b604085830312611931576020604091825161191381611151565b61191c8861130b565b815282880151838201528152019401936118ea565b8280fd5b634e487b7160e01b81526041600452602490fd5b5080fd5b60405163f697565360e01b8152600060048201819052602482018190526001600160a01b0392831660448301526064820181905291909216608483015260a482015261010060c482015290602090829081906119b29061164761010484016060611701565b0381600060fd5af1801561023a576117bb575056feb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6a2646970667358221220fda4dbad26fa6e6d4c7ced4ba187c950c9df544d54a762a1f43f43cbeed8936c64736f6c634300081c0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/academy/lending-protocol/artifacts/contracts/Oracle.sol/Oracle.dbg.json b/academy/lending-protocol/artifacts/contracts/Oracle.sol/Oracle.dbg.json new file mode 100644 index 000000000..f98af6889 --- /dev/null +++ b/academy/lending-protocol/artifacts/contracts/Oracle.sol/Oracle.dbg.json @@ -0,0 +1,4 @@ +{ + "_format": "hh-sol-dbg-1", + "buildInfo": "../../build-info/fb23e4780e5447fac4926540bca38304.json" +} diff --git a/academy/lending-protocol/artifacts/contracts/Oracle.sol/Oracle.json b/academy/lending-protocol/artifacts/contracts/Oracle.sol/Oracle.json new file mode 100644 index 000000000..d38520d4a --- /dev/null +++ b/academy/lending-protocol/artifacts/contracts/Oracle.sol/Oracle.json @@ -0,0 +1,67 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "Oracle", + "sourceName": "contracts/Oracle.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "TokenId", + "name": "token", + "type": "address" + } + ], + "name": "getPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "TokenId", + "name": "", + "type": "address" + } + ], + "name": "rates", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "TokenId", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + } + ], + "name": "setPrice", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x6080806040523460145760f2908161001a8239f35b600080fdfe60806040526004361015601157600080fd5b60003560e01c8062e4768b14607357806341976e091460385763a8734f0b14603857600080fd5b34606e576020366003190112606e576001600160a01b03605560a7565b1660005260006020526020604060002054604051908152f35b600080fd5b34606e576040366003190112606e576001600160a01b03609060a7565b166000526000602052602435604060002055600080f35b600435906001600160a01b0382168203606e5756fea2646970667358221220b0a296da46dc591d34edf7aecfe0dc18fc3291f154a591a488153db31950718f64736f6c634300081c0033", + "deployedBytecode": "0x60806040526004361015601157600080fd5b60003560e01c8062e4768b14607357806341976e091460385763a8734f0b14603857600080fd5b34606e576020366003190112606e576001600160a01b03605560a7565b1660005260006020526020604060002054604051908152f35b600080fd5b34606e576040366003190112606e576001600160a01b03609060a7565b166000526000602052602435604060002055600080f35b600435906001600160a01b0382168203606e5756fea2646970667358221220b0a296da46dc591d34edf7aecfe0dc18fc3291f154a591a488153db31950718f64736f6c634300081c0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/academy/lending-protocol/biome.json b/academy/lending-protocol/biome.json new file mode 100644 index 000000000..b1764eaec --- /dev/null +++ b/academy/lending-protocol/biome.json @@ -0,0 +1,33 @@ +{ + "$schema": "https://biomejs.dev/schemas/1.7.3/schema.json", + "organizeImports": { + "enabled": true + }, + "linter": { + "enabled": true, + "rules": { + "recommended": true, + "style": { + "useTemplate": { + "level": "off" + } + } + } + }, + "formatter": { + "enabled": true, + "formatWithErrors": false, + "indentStyle": "space", + "indentWidth": 2, + "lineWidth": 80 + }, + "files": { + "ignore": [ + "node_modules", + "artifacts", + "cache", + "typechain-types", + "ignition/deployments" + ] + } +} diff --git a/academy/lending-protocol/contracts/CollateralManager.sol b/academy/lending-protocol/contracts/CollateralManager.sol new file mode 100644 index 000000000..f7bb4e39d --- /dev/null +++ b/academy/lending-protocol/contracts/CollateralManager.sol @@ -0,0 +1,63 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.28; + +import "@nilfoundation/smart-contracts/contracts/Nil.sol"; +import "@nilfoundation/smart-contracts/contracts/NilTokenBase.sol"; + +/// @title GlobalLedger +/// @dev The GlobalLedger contract is responsible for tracking user deposits and loans in the lending protocol. +/// It stores the deposit balances for users and keeps track of the loans each user has taken. +contract GlobalLedger { + /// @dev Mapping of user addresses to their token deposits (token -> amount). + mapping(address => mapping(TokenId => uint256)) public deposits; + + /// @dev Mapping of user addresses to their loans (loan amount and loan token). + mapping(address => Loan) public loans; + + /// @dev Struct to store loan details: amount and the token type. + struct Loan { + uint256 amount; + TokenId token; + } + + /// @notice Records a user's deposit into the ledger. + /// @dev Increases the deposit balance for the user for the specified token. + /// @param user The address of the user making the deposit. + /// @param token The token type being deposited (e.g., USDT, ETH). + /// @param amount The amount of the token being deposited. + function recordDeposit(address user, TokenId token, uint256 amount) public { + deposits[user][token] += amount; + } + + /// @notice Fetches a user's deposit balance for a specific token. + /// @dev Returns the amount of the token deposited by the user. + /// @param user The address of the user whose deposit balance is being fetched. + /// @param token The token type for which the balance is being fetched. + /// @return uint256 The deposit amount for the given user and token. + function getDeposit( + address user, + TokenId token + ) public view returns (uint256) { + return deposits[user][token]; // Return the deposit amount for the given user and token + } + + /// @notice Records a user's loan in the ledger. + /// @dev Stores the amount of the loan and the token type used for the loan. + /// @param user The address of the user taking the loan. + /// @param token The token type used for the loan (e.g., USDT, ETH). + /// @param amount The amount of the loan being taken. + function recordLoan(address user, TokenId token, uint256 amount) public { + loans[user] = Loan(amount, token); + } + + /// @notice Retrieves a user's loan details. + /// @dev Returns the loan amount and the token used for the loan. + /// @param user The address of the user whose loan details are being fetched. + /// @return uint256 The loan amount. + /// @return TokenId The token type used for the loan. + function getLoanDetails( + address user + ) public view returns (uint256, TokenId) { + return (loans[user].amount, loans[user].token); + } +} diff --git a/academy/lending-protocol/contracts/InterestManager.sol b/academy/lending-protocol/contracts/InterestManager.sol new file mode 100644 index 000000000..3a4d6c23b --- /dev/null +++ b/academy/lending-protocol/contracts/InterestManager.sol @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.28; + +import "@nilfoundation/smart-contracts/contracts/Nil.sol"; +import "@nilfoundation/smart-contracts/contracts/NilTokenBase.sol"; + +/// @title InterestManager +/// @dev The InterestManager contract is responsible for providing the interest rate to be used in the lending protocol. +contract InterestManager { + /// @notice Fetches the current interest rate. + /// @dev In this basic implementation, the interest rate is fixed at 5%. + /// In a real-world scenario, this could be replaced with a dynamic calculation based on market conditions or other factors. + /// @return uint256 The current interest rate (5% in this case). + function getInterestRate() public pure returns (uint256) { + return 5; + } +} diff --git a/academy/lending-protocol/contracts/LendingPool.sol b/academy/lending-protocol/contracts/LendingPool.sol new file mode 100644 index 000000000..6858a757b --- /dev/null +++ b/academy/lending-protocol/contracts/LendingPool.sol @@ -0,0 +1,446 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.28; + +import "@nilfoundation/smart-contracts/contracts/Nil.sol"; +import "@nilfoundation/smart-contracts/contracts/NilTokenBase.sol"; + +/// @title LendingPool +/// @dev The LendingPool contract facilitates lending and borrowing of tokens and handles collateral management. +/// It interacts with other contracts such as GlobalLedger, InterestManager, and Oracle for tracking deposits, calculating interest, and fetching token prices. +contract LendingPool is NilBase, NilTokenBase { + address public globalLedger; + address public interestManager; + address public oracle; + TokenId public usdt; + TokenId public eth; + + /// @notice Constructor to initialize the LendingPool contract with addresses for dependencies. + /// @dev Sets the contract addresses for GlobalLedger, InterestManager, Oracle, USDT, and ETH tokens. + /// @param _globalLedger The address of the GlobalLedger contract. + /// @param _interestManager The address of the InterestManager contract. + /// @param _oracle The address of the Oracle contract. + /// @param _usdt The TokenId for USDT. + /// @param _eth The TokenId for ETH. + constructor( + address _globalLedger, + address _interestManager, + address _oracle, + TokenId _usdt, + TokenId _eth + ) { + globalLedger = _globalLedger; + interestManager = _interestManager; + oracle = _oracle; + usdt = _usdt; + eth = _eth; + } + + /// @notice Deposit function to deposit tokens into the lending pool. + /// @dev The deposited tokens are recorded in the GlobalLedger via an asynchronous call. + function deposit() public payable { + /// Retrieve the tokens being sent in the transaction + Nil.Token[] memory tokens = Nil.txnTokens(); + + /// @notice Encoding the call to the GlobalLedger to record the deposit + /// @dev The deposit details (user address, token type, and amount) are encoded for GlobalLedger. + /// @param callData The encoded call data for recording the deposit in GlobalLedger. + bytes memory callData = abi.encodeWithSignature( + "recordDeposit(address,address,uint256)", + msg.sender, + tokens[0].id, // The token being deposited (usdt or eth) + tokens[0].amount // The amount of the token being deposited + ); + + /// @notice Making an asynchronous call to the GlobalLedger to record the deposit + /// @dev This ensures that the user's deposit is recorded in GlobalLedger asynchronously. + Nil.asyncCall(globalLedger, address(this), 0, callData); + } + + /// @notice Borrow function allows a user to borrow tokens (either USDT or ETH). + /// @dev Ensures sufficient liquidity, checks collateral, and processes the loan after fetching the price from the Oracle. + /// @param amount The amount of the token to borrow. + /// @param borrowToken The token the user wants to borrow (either USDT or ETH). + function borrow(uint256 amount, TokenId borrowToken) public payable { + /// @notice Ensure the token being borrowed is either USDT or ETH + /// @dev Prevents invalid token types from being borrowed. + require(borrowToken == usdt || borrowToken == eth, "Invalid token"); + + /// @notice Ensure that the LendingPool has enough liquidity of the requested borrow token + /// @dev Checks the LendingPool's balance to confirm it has enough tokens to fulfill the borrow request. + require( + Nil.tokenBalance(address(this), borrowToken) >= amount, + "Insufficient funds" + ); + + /// @notice Determine which collateral token will be used (opposite of the borrow token) + /// @dev Identifies the collateral token by comparing the borrow token. + TokenId collateralToken = (borrowToken == usdt) ? eth : usdt; + + /// @notice Prepare a call to the Oracle to get the price of the borrow token + /// @dev The price of the borrow token is fetched from the Oracle to calculate collateral. + /// @param callData The encoded data to fetch the price from the Oracle. + bytes memory callData = abi.encodeWithSignature( + "getPrice(address)", + borrowToken + ); + + /// @notice Encoding the context to process the loan after the price is fetched + /// @dev The context contains the borrower’s details, loan amount, borrow token, and collateral token. + bytes memory context = abi.encodeWithSelector( + this.processLoan.selector, + msg.sender, + amount, + borrowToken, + collateralToken + ); + + /// @notice Send a request to the Oracle to get the price of the borrow token. + /// @dev This request is processed with a fee for the transaction, allowing the system to fetch the token price. + Nil.sendRequest(oracle, 0, 9_000_000, context, callData); + } + + /// @notice Callback function to process the loan after the price data is retrieved from Oracle. + /// @dev Ensures that the borrower has enough collateral, calculates the loan value, and initiates loan processing. + /// @param success Indicates if the Oracle call was successful. + /// @param returnData The price data returned from the Oracle. + /// @param context The context data containing borrower details, loan amount, and collateral token. + function processLoan( + bool success, + bytes memory returnData, + bytes memory context + ) public payable { + /// @notice Ensure the Oracle call was successful + /// @dev Verifies that the price data was successfully retrieved from the Oracle. + require(success, "Oracle call failed"); + + /// @notice Decode the context to extract borrower details, loan amount, and collateral token + /// @dev Decodes the context passed from the borrow function to retrieve necessary data. + ( + address borrower, + uint256 amount, + TokenId borrowToken, + TokenId collateralToken + ) = abi.decode(context, (address, uint256, TokenId, TokenId)); + + /// @notice Decode the price data returned from the Oracle + /// @dev The returned price data is used to calculate the loan value in USD. + uint256 borrowTokenPrice = abi.decode(returnData, (uint256)); + /// @notice Calculate the loan value in USD + /// @dev Multiplies the amount by the borrow token price to get the loan value in USD. + uint256 loanValueInUSD = amount * borrowTokenPrice; + /// @notice Calculate the required collateral (120% of the loan value) + /// @dev The collateral is calculated as 120% of the loan value to mitigate risk. + uint256 requiredCollateral = (loanValueInUSD * 120) / 100; + + /// @notice Prepare a call to GlobalLedger to check the user's collateral balance + /// @dev Fetches the collateral balance from the GlobalLedger contract to ensure sufficient collateral. + bytes memory ledgerCallData = abi.encodeWithSignature( + "getDeposit(address,address)", + borrower, + collateralToken + ); + + /// @notice Encoding the context to finalize the loan once the collateral is validated + /// @dev Once the collateral balance is validated, the loan is finalized and processed. + bytes memory ledgerContext = abi.encodeWithSelector( + this.finalizeLoan.selector, + borrower, + amount, + borrowToken, + requiredCollateral + ); + + /// @notice Send request to GlobalLedger to get the user's collateral + /// @dev The fee for this request is retained for processing the collateral validation response. + Nil.sendRequest( + globalLedger, + 0, + 6_000_000, + ledgerContext, + ledgerCallData + ); + } + + /// @notice Finalize the loan by ensuring sufficient collateral and recording the loan in GlobalLedger. + /// @dev Verifies that the user has enough collateral, processes the loan, and sends the borrowed tokens to the borrower. + /// @param success Indicates if the collateral check was successful. + /// @param returnData The collateral balance returned from the GlobalLedger. + /// @param context The context containing loan details. + function finalizeLoan( + bool success, + bytes memory returnData, + bytes memory context + ) public payable { + /// @notice Ensure the collateral check was successful + /// @dev Verifies the collateral validation result from GlobalLedger. + require(success, "Ledger call failed"); + + /// @notice Decode the context to extract loan details + /// @dev Decodes the context passed from the processLoan function to retrieve loan data. + ( + address borrower, + uint256 amount, + TokenId borrowToken, + uint256 requiredCollateral + ) = abi.decode(context, (address, uint256, TokenId, uint256)); + + /// @notice Decode the user's collateral balance from GlobalLedger + /// @dev Retrieves the user's collateral balance from the GlobalLedger to compare it with the required collateral. + uint256 userCollateral = abi.decode(returnData, (uint256)); + + /// @notice Check if the user has enough collateral to cover the loan + /// @dev Ensures the borrower has sufficient collateral before proceeding with the loan. + require( + userCollateral >= requiredCollateral, + "Insufficient collateral" + ); + + /// @notice Record the loan in GlobalLedger + /// @dev The loan details are recorded in the GlobalLedger contract. + bytes memory recordLoanCallData = abi.encodeWithSignature( + "recordLoan(address,address,uint256)", + borrower, + borrowToken, + amount + ); + Nil.asyncCall(globalLedger, address(this), 0, recordLoanCallData); + + /// @notice Send the borrowed tokens to the borrower + /// @dev Transfers the loan amount to the borrower's address after finalizing the loan. + sendTokenInternal(borrower, borrowToken, amount); + } + + /// @notice Repay loan function called by the borrower to repay their loan. + /// @dev Initiates the repayment process by retrieving the loan details from GlobalLedger. + function repayLoan() public payable { + /// @notice Retrieve the tokens being sent in the transaction + /// @dev Retrieves the tokens involved in the repayment. + Nil.Token[] memory tokens = Nil.txnTokens(); + + /// @notice Prepare to query the loan details from GlobalLedger + /// @dev Fetches the loan details of the borrower to proceed with repayment. + bytes memory callData = abi.encodeWithSignature( + "getLoanDetails(address)", + msg.sender + ); + + /// @notice Encoding the context to handle repayment after loan details are fetched + /// @dev Once the loan details are retrieved, the repayment amount is processed. + bytes memory context = abi.encodeWithSelector( + this.handleRepayment.selector, + msg.sender, + tokens[0].amount + ); + + /// @notice Send request to GlobalLedger to fetch loan details + /// @dev Retrieves the borrower’s loan details before proceeding with the repayment. + Nil.sendRequest(globalLedger, 0, 11_000_000, context, callData); + } + + /// @notice Handle the loan repayment, calculate the interest, and update GlobalLedger. + /// @dev Calculates the total repayment (principal + interest) and updates the loan status in GlobalLedger. + /// @param success Indicates if the loan details retrieval was successful. + /// @param returnData The loan details returned from the GlobalLedger. + /// @param context The context containing borrower and repayment details. + function handleRepayment( + bool success, + bytes memory returnData, + bytes memory context + ) public payable { + /// @notice Ensure the GlobalLedger call was successful + /// @dev Verifies that the loan details were successfully retrieved from the GlobalLedger. + require(success, "Ledger call failed"); + + /// @notice Decode context and loan details + /// @dev Decodes the context and the return data to retrieve the borrower's loan details. + (address borrower, uint256 sentAmount) = abi.decode( + context, + (address, uint256) + ); + (uint256 amount, TokenId token) = abi.decode( + returnData, + (uint256, TokenId) + ); + + /// @notice Ensure the borrower has an active loan + /// @dev Ensures the borrower has an outstanding loan before proceeding with repayment. + require(amount > 0, "No active loan"); + + /// @notice Request the interest rate from the InterestManager + /// @dev Fetches the current interest rate for the loan from the InterestManager contract. + bytes memory interestCallData = abi.encodeWithSignature( + "getInterestRate()" + ); + bytes memory interestContext = abi.encodeWithSelector( + this.processRepayment.selector, + borrower, + amount, + token, + sentAmount + ); + + /// @notice Send request to InterestManager to fetch interest rate + /// @dev This request fetches the interest rate that will be used to calculate the total repayment. + Nil.sendRequest( + interestManager, + 0, + 8_000_000, + interestContext, + interestCallData + ); + } + + /// @notice Process the repayment, calculate the total repayment including interest. + /// @dev Finalizes the loan repayment, ensuring the borrower has sent sufficient funds. + /// @param success Indicates if the interest rate call was successful. + /// @param returnData The interest rate returned from the InterestManager. + /// @param context The context containing repayment details. + function processRepayment( + bool success, + bytes memory returnData, + bytes memory context + ) public payable { + /// @notice Ensure the interest rate call was successful + /// @dev Verifies that the interest rate retrieval was successful. + require(success, "Interest rate call failed"); + + /// @notice Decode the repayment details and the interest rate + /// @dev Decodes the repayment context and retrieves the interest rate for loan repayment. + ( + address borrower, + uint256 amount, + TokenId token, + uint256 sentAmount + ) = abi.decode(context, (address, uint256, TokenId, uint256)); + + /// @notice Decode the interest rate from the response + /// @dev Decodes the interest rate received from the InterestManager contract. + uint256 interestRate = abi.decode(returnData, (uint256)); + /// @notice Calculate the total repayment amount (principal + interest) + /// @dev Adds the interest to the principal to calculate the total repayment due. + uint256 totalRepayment = amount + ((amount * interestRate) / 100); + + /// @notice Ensure the borrower has sent sufficient funds for the repayment + /// @dev Verifies that the borrower has provided enough funds to repay the loan in full. + require(sentAmount >= totalRepayment, "Insufficient funds"); + + /// @notice Clear the loan and release collateral + /// @dev Marks the loan as repaid and releases any associated collateral back to the borrower. + bytes memory clearLoanCallData = abi.encodeWithSignature( + "recordLoan(address,address,uint256)", + borrower, + token, + 0 // Mark the loan as repaid + ); + bytes memory releaseCollateralContext = abi.encodeWithSelector( + this.releaseCollateral.selector, + borrower, + token + ); + + /// @notice Send request to GlobalLedger to update the loan status + /// @dev Updates the loan status to indicate repayment completion in the GlobalLedger. + Nil.sendRequest( + globalLedger, + 0, + 6_000_000, + releaseCollateralContext, + clearLoanCallData + ); + } + + /// @notice Release the collateral after the loan is repaid. + /// @dev Sends the collateral back to the borrower after confirming the loan is fully repaid. + /// @param success Indicates if the loan clearing was successful. + /// @param returnData The collateral data returned from the GlobalLedger. + /// @param context The context containing borrower and collateral token. + function releaseCollateral( + bool success, + bytes memory returnData, + bytes memory context + ) public payable { + /// @notice Ensure the loan clearing was successful + /// @dev Verifies the result of clearing the loan in the GlobalLedger. + require(success, "Loan clearing failed"); + + /// @notice Silence unused variable warning + /// @dev A placeholder for unused variables to avoid compiler warnings. + returnData; + + /// @notice Decode context for borrower and collateral token + /// @dev Decodes the context passed from the loan clearing function to retrieve the borrower's details. + (address borrower, TokenId borrowToken) = abi.decode( + context, + (address, TokenId) + ); + + /// @notice Determine the collateral token (opposite of borrow token) + /// @dev Identifies the token being used as collateral based on the borrow token. + TokenId collateralToken = (borrowToken == usdt) ? eth : usdt; + + /// @notice Request collateral amount from GlobalLedger + /// @dev Retrieves the amount of collateral associated with the borrower from the GlobalLedger. + bytes memory getCollateralCallData = abi.encodeWithSignature( + "getDeposit(address,address)", + borrower, + collateralToken + ); + + /// @notice Context to send collateral to the borrower + /// @dev After confirming the collateral balance, it is returned to the borrower. + bytes memory sendCollateralContext = abi.encodeWithSelector( + this.sendCollateral.selector, + borrower, + collateralToken + ); + + /// @notice Send request to GlobalLedger to retrieve the collateral + /// @dev This request ensures that the correct collateral is available for release. + Nil.sendRequest( + globalLedger, + 0, + 3_50_000, + sendCollateralContext, + getCollateralCallData + ); + } + + /// @notice Send the collateral back to the borrower. + /// @dev Ensures there is enough collateral to release and then sends the funds back to the borrower. + /// @param success Indicates if the collateral retrieval was successful. + /// @param returnData The amount of collateral available. + /// @param context The context containing borrower and collateral token. + function sendCollateral( + bool success, + bytes memory returnData, + bytes memory context + ) public payable { + /// @notice Ensure the collateral retrieval was successful + /// @dev Verifies that the request to retrieve the collateral was successful. + require(success, "Failed to retrieve collateral"); + + /// @notice Decode the collateral details + /// @dev Decodes the context passed from the releaseCollateral function to retrieve collateral details. + (address borrower, TokenId collateralToken) = abi.decode( + context, + (address, TokenId) + ); + uint256 collateralAmount = abi.decode(returnData, (uint256)); + + /// @notice Ensure there's collateral to release + /// @dev Verifies that there is enough collateral to be released. + require(collateralAmount > 0, "No collateral to release"); + + /// @notice Ensure sufficient balance in the LendingPool to send collateral + /// @dev Verifies that the LendingPool has enough collateral to send to the borrower. + require( + Nil.tokenBalance(address(this), collateralToken) >= + collateralAmount, + "Insufficient funds" + ); + + /// @notice Send the collateral tokens to the borrower + /// @dev Executes the transfer of collateral tokens back to the borrower. + sendTokenInternal(borrower, collateralToken, collateralAmount); + } +} diff --git a/academy/lending-protocol/contracts/Oracle.sol b/academy/lending-protocol/contracts/Oracle.sol new file mode 100644 index 000000000..bb5aaf098 --- /dev/null +++ b/academy/lending-protocol/contracts/Oracle.sol @@ -0,0 +1,34 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.28; + +import "@nilfoundation/smart-contracts/contracts/Nil.sol"; +import "@nilfoundation/smart-contracts/contracts/NilTokenBase.sol"; + +/// @title Oracle +/// @dev The Oracle contract provides token price data to the lending protocol. +/// It is used to fetch the price of tokens (e.g., USDT, ETH) used for collateral calculations in the lending process. +contract Oracle is NilBase { + /// @dev Mapping to store the price of each token (TokenId => price). + mapping(TokenId => uint256) public rates; + + /// @notice Set the price of a token. + /// @dev This function allows the price of tokens to be updated in the Oracle contract. + /// Only authorized entities (e.g., the contract owner or admin) should be able to set the price. + /// @param token The token whose price is being set. + /// @param price The new price of the token. + function setPrice(TokenId token, uint256 price) public { + /// @notice Store the price of the token in the rates mapping. + /// @dev This updates the price of the specified token in the Oracle contract. + rates[token] = price; + } + + /// @notice Retrieve the price of a token. + /// @dev This function allows other contracts (like LendingPool) to access the current price of a token. + /// @param token The token whose price is being fetched. + /// @return uint256 The price of the specified token. + function getPrice(TokenId token) public view returns (uint256) { + /// @notice Return the price of the specified token. + /// @dev This function provides the price stored in the `rates` mapping for the given token. + return rates[token]; + } +} diff --git a/academy/lending-protocol/hardhat.config.ts b/academy/lending-protocol/hardhat.config.ts new file mode 100644 index 000000000..7014ee78b --- /dev/null +++ b/academy/lending-protocol/hardhat.config.ts @@ -0,0 +1,36 @@ +import "@nomicfoundation/hardhat-chai-matchers"; +import "@nomicfoundation/hardhat-ignition-ethers"; +import "@nomicfoundation/hardhat-ethers"; +import "@nomicfoundation/hardhat-ignition-ethers"; +import "@typechain/hardhat"; +import * as dotenv from "dotenv"; +import type { HardhatUserConfig } from "hardhat/config"; + +import "./task/run-lending-protocol"; + +dotenv.config(); + +const config: HardhatUserConfig = { + ignition: { + requiredConfirmations: 1, + }, + defaultNetwork: "nil", + solidity: { + version: "0.8.28", // or your desired version + settings: { + viaIR: true, // needed to compile router + optimizer: { + enabled: true, + runs: 200, + }, + }, + }, + networks: { + nil: { + url: process.env.NIL_RPC_ENDPOINT, + accounts: process.env.PRIVATE_KEY ? [process.env.PRIVATE_KEY] : [], + }, + }, +}; + +export default config; diff --git a/academy/lending-protocol/package-lock.json b/academy/lending-protocol/package-lock.json new file mode 100644 index 000000000..745a02a04 --- /dev/null +++ b/academy/lending-protocol/package-lock.json @@ -0,0 +1,6626 @@ +{ + "name": "example-lending-protocol", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "example-lending-protocol", + "dependencies": { + "@nilfoundation/create-nil-hardhat-project": "^1.0.1", + "@nilfoundation/niljs": "0.24.0", + "@nilfoundation/smart-contracts": "^0.5.0", + "@nomicfoundation/hardhat-toolbox": "^5.0.0", + "@openzeppelin/contracts-upgradeable": "^5.2.0", + "viem": "^2.23.4" + }, + "devDependencies": { + "@nomicfoundation/hardhat-toolbox-viem": "^3.0.0", + "hardhat": "^2.22.18" + } + }, + "node_modules/@adraffy/ens-normalize": { + "version": "1.10.1", + "license": "MIT" + }, + "node_modules/@chainsafe/as-sha256": { + "version": "0.4.2", + "license": "Apache-2.0" + }, + "node_modules/@chainsafe/persistent-merkle-tree": { + "version": "0.7.2", + "license": "Apache-2.0", + "dependencies": { + "@chainsafe/as-sha256": "^0.4.2", + "@noble/hashes": "^1.3.0" + } + }, + "node_modules/@chainsafe/ssz": { + "version": "0.16.0", + "license": "Apache-2.0", + "dependencies": { + "@chainsafe/as-sha256": "^0.4.2", + "@chainsafe/persistent-merkle-tree": "^0.7.2" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@ethereumjs/rlp": { + "version": "4.0.1", + "license": "MPL-2.0", + "peer": true, + "bin": { + "rlp": "bin/rlp" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@ethereumjs/util": { + "version": "8.1.0", + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "@ethereumjs/rlp": "^4.0.1", + "ethereum-cryptography": "^2.0.0", + "micro-ftch": "^0.3.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@ethereumjs/util/node_modules/@noble/curves": { + "version": "1.4.2", + "license": "MIT", + "peer": true, + "dependencies": { + "@noble/hashes": "1.4.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@ethereumjs/util/node_modules/@noble/hashes": { + "version": "1.4.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@ethereumjs/util/node_modules/@scure/base": { + "version": "1.1.9", + "license": "MIT", + "peer": true, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@ethereumjs/util/node_modules/@scure/bip32": { + "version": "1.4.0", + "license": "MIT", + "peer": true, + "dependencies": { + "@noble/curves": "~1.4.0", + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@ethereumjs/util/node_modules/@scure/bip39": { + "version": "1.3.0", + "license": "MIT", + "peer": true, + "dependencies": { + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@ethereumjs/util/node_modules/ethereum-cryptography": { + "version": "2.2.1", + "license": "MIT", + "peer": true, + "dependencies": { + "@noble/curves": "1.4.2", + "@noble/hashes": "1.4.0", + "@scure/bip32": "1.4.0", + "@scure/bip39": "1.3.0" + } + }, + "node_modules/@ethersproject/abi": { + "version": "5.8.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@ethersproject/abstract-provider": { + "version": "5.8.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/networks": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/web": "^5.8.0" + } + }, + "node_modules/@ethersproject/abstract-signer": { + "version": "5.8.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0" + } + }, + "node_modules/@ethersproject/address": { + "version": "5.8.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/rlp": "^5.8.0" + } + }, + "node_modules/@ethersproject/base64": { + "version": "5.8.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0" + } + }, + "node_modules/@ethersproject/basex": { + "version": "5.8.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/properties": "^5.8.0" + } + }, + "node_modules/@ethersproject/bignumber": { + "version": "5.8.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "bn.js": "^5.2.1" + } + }, + "node_modules/@ethersproject/bytes": { + "version": "5.8.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/constants": { + "version": "5.8.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.8.0" + } + }, + "node_modules/@ethersproject/contracts": { + "version": "5.8.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/abi": "^5.8.0", + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/transactions": "^5.8.0" + } + }, + "node_modules/@ethersproject/hash": { + "version": "5.8.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/base64": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@ethersproject/hdnode": { + "version": "5.8.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/basex": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/pbkdf2": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/sha2": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0", + "@ethersproject/strings": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/wordlists": "^5.8.0" + } + }, + "node_modules/@ethersproject/json-wallets": { + "version": "5.8.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/hdnode": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/pbkdf2": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/random": "^5.8.0", + "@ethersproject/strings": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "aes-js": "3.0.0", + "scrypt-js": "3.0.1" + } + }, + "node_modules/@ethersproject/json-wallets/node_modules/aes-js": { + "version": "3.0.0", + "license": "MIT", + "peer": true + }, + "node_modules/@ethersproject/keccak256": { + "version": "5.8.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "js-sha3": "0.8.0" + } + }, + "node_modules/@ethersproject/logger": { + "version": "5.8.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT" + }, + "node_modules/@ethersproject/networks": { + "version": "5.8.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/pbkdf2": { + "version": "5.8.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/sha2": "^5.8.0" + } + }, + "node_modules/@ethersproject/properties": { + "version": "5.8.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/providers": { + "version": "5.8.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/base64": "^5.8.0", + "@ethersproject/basex": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/networks": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/random": "^5.8.0", + "@ethersproject/rlp": "^5.8.0", + "@ethersproject/sha2": "^5.8.0", + "@ethersproject/strings": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/web": "^5.8.0", + "bech32": "1.1.4", + "ws": "8.18.0" + } + }, + "node_modules/@ethersproject/providers/node_modules/ws": { + "version": "8.18.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/@ethersproject/random": { + "version": "5.8.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/rlp": { + "version": "5.8.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/sha2": { + "version": "5.8.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "hash.js": "1.1.7" + } + }, + "node_modules/@ethersproject/signing-key": { + "version": "5.8.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "bn.js": "^5.2.1", + "elliptic": "6.6.1", + "hash.js": "1.1.7" + } + }, + "node_modules/@ethersproject/solidity": { + "version": "5.8.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/sha2": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@ethersproject/strings": { + "version": "5.8.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/transactions": { + "version": "5.8.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/rlp": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0" + } + }, + "node_modules/@ethersproject/units": { + "version": "5.8.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/wallet": { + "version": "5.8.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/hdnode": "^5.8.0", + "@ethersproject/json-wallets": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/random": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/wordlists": "^5.8.0" + } + }, + "node_modules/@ethersproject/web": { + "version": "5.8.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/base64": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@ethersproject/wordlists": { + "version": "5.8.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@fastify/busboy": { + "version": "2.1.1", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "license": "MIT", + "peer": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@metamask/eth-sig-util": { + "version": "4.0.1", + "license": "ISC", + "dependencies": { + "ethereumjs-abi": "^0.6.8", + "ethereumjs-util": "^6.2.1", + "ethjs-util": "^0.1.6", + "tweetnacl": "^1.0.3", + "tweetnacl-util": "^0.15.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@metamask/eth-sig-util/node_modules/@types/bn.js": { + "version": "4.11.6", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@metamask/eth-sig-util/node_modules/bn.js": { + "version": "4.12.1", + "license": "MIT" + }, + "node_modules/@metamask/eth-sig-util/node_modules/ethereumjs-util": { + "version": "6.2.1", + "license": "MPL-2.0", + "dependencies": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + }, + "node_modules/@nilfoundation/create-nil-hardhat-project": { + "version": "1.0.2", + "license": "ISC", + "bin": { + "create-nil-hardhat-template": "scripts/cli.js" + } + }, + "node_modules/@nilfoundation/niljs": { + "version": "0.24.0", + "license": "MIT", + "dependencies": { + "@chainsafe/persistent-merkle-tree": "^0.7.2", + "@chainsafe/ssz": "^0.16.0", + "@nilfoundation/smart-contracts": "0.6.0", + "@noble/curves": "^1.4.0", + "@open-rpc/client-js": "^1.8.1", + "@rollup/plugin-json": "^6.1.0", + "@scure/bip39": "^1.3.0", + "@types/isomorphic-fetch": "^0.0.39", + "abitype": "^1.0.2", + "events": "^3.3.0", + "isomorphic-fetch": "^3.0.0", + "poseidon-lite": "^0.3.0", + "tiny-invariant": "^1.3.3", + "ts-essentials": "^10.0.2", + "viem": "^2.16.3", + "zod": "^3.23.8" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@nilfoundation/niljs/node_modules/@nilfoundation/smart-contracts": { + "version": "0.6.0", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, + "node_modules/@nilfoundation/smart-contracts": { + "version": "0.5.0", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, + "node_modules/@noble/curves": { + "version": "1.8.1", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.7.1" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.7.1", + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/secp256k1": { + "version": "1.7.1", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT" + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "license": "MIT", + "peer": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "license": "MIT", + "peer": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nomicfoundation/edr": { + "version": "0.8.0", + "license": "MIT", + "dependencies": { + "@nomicfoundation/edr-darwin-arm64": "0.8.0", + "@nomicfoundation/edr-darwin-x64": "0.8.0", + "@nomicfoundation/edr-linux-arm64-gnu": "0.8.0", + "@nomicfoundation/edr-linux-arm64-musl": "0.8.0", + "@nomicfoundation/edr-linux-x64-gnu": "0.8.0", + "@nomicfoundation/edr-linux-x64-musl": "0.8.0", + "@nomicfoundation/edr-win32-x64-msvc": "0.8.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/edr-darwin-arm64": { + "version": "0.8.0", + "license": "MIT", + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/edr-darwin-x64": { + "version": "0.8.0", + "license": "MIT", + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/edr-linux-arm64-gnu": { + "version": "0.8.0", + "license": "MIT", + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/edr-linux-arm64-musl": { + "version": "0.8.0", + "license": "MIT", + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/edr-linux-x64-gnu": { + "version": "0.8.0", + "license": "MIT", + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/edr-linux-x64-musl": { + "version": "0.8.0", + "license": "MIT", + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/edr-win32-x64-msvc": { + "version": "0.8.0", + "license": "MIT", + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/ethereumjs-common": { + "version": "4.0.4", + "license": "MIT", + "dependencies": { + "@nomicfoundation/ethereumjs-util": "9.0.4" + } + }, + "node_modules/@nomicfoundation/ethereumjs-rlp": { + "version": "5.0.4", + "license": "MPL-2.0", + "bin": { + "rlp": "bin/rlp.cjs" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@nomicfoundation/ethereumjs-tx": { + "version": "5.0.4", + "license": "MPL-2.0", + "dependencies": { + "@nomicfoundation/ethereumjs-common": "4.0.4", + "@nomicfoundation/ethereumjs-rlp": "5.0.4", + "@nomicfoundation/ethereumjs-util": "9.0.4", + "ethereum-cryptography": "0.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "c-kzg": "^2.1.2" + }, + "peerDependenciesMeta": { + "c-kzg": { + "optional": true + } + } + }, + "node_modules/@nomicfoundation/ethereumjs-util": { + "version": "9.0.4", + "license": "MPL-2.0", + "dependencies": { + "@nomicfoundation/ethereumjs-rlp": "5.0.4", + "ethereum-cryptography": "0.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "c-kzg": "^2.1.2" + }, + "peerDependenciesMeta": { + "c-kzg": { + "optional": true + } + } + }, + "node_modules/@nomicfoundation/hardhat-chai-matchers": { + "version": "2.0.8", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/chai-as-promised": "^7.1.3", + "chai-as-promised": "^7.1.1", + "deep-eql": "^4.0.1", + "ordinal": "^1.0.3" + }, + "peerDependencies": { + "@nomicfoundation/hardhat-ethers": "^3.0.0", + "chai": "^4.2.0", + "ethers": "^6.1.0", + "hardhat": "^2.9.4" + } + }, + "node_modules/@nomicfoundation/hardhat-ethers": { + "version": "3.0.8", + "license": "MIT", + "peer": true, + "dependencies": { + "debug": "^4.1.1", + "lodash.isequal": "^4.5.0" + }, + "peerDependencies": { + "ethers": "^6.1.0", + "hardhat": "^2.0.0" + } + }, + "node_modules/@nomicfoundation/hardhat-ignition": { + "version": "0.15.10", + "license": "MIT", + "peer": true, + "dependencies": { + "@nomicfoundation/ignition-core": "^0.15.10", + "@nomicfoundation/ignition-ui": "^0.15.10", + "chalk": "^4.0.0", + "debug": "^4.3.2", + "fs-extra": "^10.0.0", + "json5": "^2.2.3", + "prompts": "^2.4.2" + }, + "peerDependencies": { + "@nomicfoundation/hardhat-verify": "^2.0.1", + "hardhat": "^2.18.0" + } + }, + "node_modules/@nomicfoundation/hardhat-ignition-ethers": { + "version": "0.15.10", + "license": "MIT", + "peer": true, + "peerDependencies": { + "@nomicfoundation/hardhat-ethers": "^3.0.4", + "@nomicfoundation/hardhat-ignition": "^0.15.10", + "@nomicfoundation/ignition-core": "^0.15.10", + "ethers": "^6.7.0", + "hardhat": "^2.18.0" + } + }, + "node_modules/@nomicfoundation/hardhat-ignition-viem": { + "version": "0.15.10", + "dev": true, + "license": "MIT", + "peer": true, + "peerDependencies": { + "@nomicfoundation/hardhat-ignition": "^0.15.10", + "@nomicfoundation/hardhat-viem": "^2.0.0", + "@nomicfoundation/ignition-core": "^0.15.10", + "hardhat": "^2.18.0", + "viem": "^2.7.6" + } + }, + "node_modules/@nomicfoundation/hardhat-network-helpers": { + "version": "1.0.12", + "license": "MIT", + "peer": true, + "dependencies": { + "ethereumjs-util": "^7.1.4" + }, + "peerDependencies": { + "hardhat": "^2.9.5" + } + }, + "node_modules/@nomicfoundation/hardhat-toolbox": { + "version": "5.0.0", + "license": "MIT", + "peerDependencies": { + "@nomicfoundation/hardhat-chai-matchers": "^2.0.0", + "@nomicfoundation/hardhat-ethers": "^3.0.0", + "@nomicfoundation/hardhat-ignition-ethers": "^0.15.0", + "@nomicfoundation/hardhat-network-helpers": "^1.0.0", + "@nomicfoundation/hardhat-verify": "^2.0.0", + "@typechain/ethers-v6": "^0.5.0", + "@typechain/hardhat": "^9.0.0", + "@types/chai": "^4.2.0", + "@types/mocha": ">=9.1.0", + "@types/node": ">=18.0.0", + "chai": "^4.2.0", + "ethers": "^6.4.0", + "hardhat": "^2.11.0", + "hardhat-gas-reporter": "^1.0.8", + "solidity-coverage": "^0.8.1", + "ts-node": ">=8.0.0", + "typechain": "^8.3.0", + "typescript": ">=4.5.0" + } + }, + "node_modules/@nomicfoundation/hardhat-toolbox-viem": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "chai-as-promised": "^7.1.1" + }, + "peerDependencies": { + "@nomicfoundation/hardhat-ignition-viem": "^0.15.0", + "@nomicfoundation/hardhat-network-helpers": "^1.0.0", + "@nomicfoundation/hardhat-verify": "^2.0.0", + "@nomicfoundation/hardhat-viem": "^2.0.0", + "@types/chai": "^4.2.0", + "@types/chai-as-promised": "^7.1.6", + "@types/mocha": ">=9.1.0", + "@types/node": ">=18.0.0", + "chai": "^4.2.0", + "hardhat": "^2.11.0", + "hardhat-gas-reporter": "^1.0.8", + "solidity-coverage": "^0.8.1", + "ts-node": ">=8.0.0", + "typescript": "^5.0.4", + "viem": "^2.7.6" + } + }, + "node_modules/@nomicfoundation/hardhat-verify": { + "version": "2.0.13", + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/abi": "^5.1.2", + "@ethersproject/address": "^5.0.2", + "cbor": "^8.1.0", + "debug": "^4.1.1", + "lodash.clonedeep": "^4.5.0", + "picocolors": "^1.1.0", + "semver": "^6.3.0", + "table": "^6.8.0", + "undici": "^5.14.0" + }, + "peerDependencies": { + "hardhat": "^2.0.4" + } + }, + "node_modules/@nomicfoundation/hardhat-viem": { + "version": "2.0.6", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "abitype": "^0.9.8", + "lodash.memoize": "^4.1.2" + }, + "peerDependencies": { + "hardhat": "^2.17.0", + "viem": "^2.7.6" + } + }, + "node_modules/@nomicfoundation/hardhat-viem/node_modules/abitype": { + "version": "0.9.10", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wagmi-dev" + } + ], + "license": "MIT", + "peer": true, + "peerDependencies": { + "typescript": ">=5.0.4", + "zod": "^3 >=3.22.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "zod": { + "optional": true + } + } + }, + "node_modules/@nomicfoundation/ignition-core": { + "version": "0.15.10", + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/address": "5.6.1", + "@nomicfoundation/solidity-analyzer": "^0.1.1", + "cbor": "^9.0.0", + "debug": "^4.3.2", + "ethers": "^6.7.0", + "fs-extra": "^10.0.0", + "immer": "10.0.2", + "lodash": "4.17.21", + "ndjson": "2.0.0" + } + }, + "node_modules/@nomicfoundation/ignition-core/node_modules/@ethersproject/address": { + "version": "5.6.1", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/rlp": "^5.6.1" + } + }, + "node_modules/@nomicfoundation/ignition-core/node_modules/cbor": { + "version": "9.0.2", + "license": "MIT", + "peer": true, + "dependencies": { + "nofilter": "^3.1.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@nomicfoundation/ignition-ui": { + "version": "0.15.10", + "peer": true + }, + "node_modules/@nomicfoundation/solidity-analyzer": { + "version": "0.1.2", + "license": "MIT", + "engines": { + "node": ">= 12" + }, + "optionalDependencies": { + "@nomicfoundation/solidity-analyzer-darwin-arm64": "0.1.2", + "@nomicfoundation/solidity-analyzer-darwin-x64": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.2", + "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.1.2" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-darwin-arm64": { + "version": "0.1.2", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-darwin-x64": { + "version": "0.1.2", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-gnu": { + "version": "0.1.2", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-musl": { + "version": "0.1.2", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-gnu": { + "version": "0.1.2", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-musl": { + "version": "0.1.2", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-win32-x64-msvc": { + "version": "0.1.2", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@open-rpc/client-js": { + "version": "1.8.1", + "license": "Apache-2.0", + "dependencies": { + "isomorphic-fetch": "^3.0.0", + "isomorphic-ws": "^5.0.0", + "strict-event-emitter-types": "^2.0.0", + "ws": "^7.0.0" + } + }, + "node_modules/@openzeppelin/contracts": { + "version": "5.2.0", + "license": "MIT", + "peer": true + }, + "node_modules/@openzeppelin/contracts-upgradeable": { + "version": "5.2.0", + "license": "MIT", + "peerDependencies": { + "@openzeppelin/contracts": "5.2.0" + } + }, + "node_modules/@rollup/plugin-json": { + "version": "6.1.0", + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.1.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.1.4", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@scure/base": { + "version": "1.2.4", + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32": { + "version": "1.6.2", + "license": "MIT", + "dependencies": { + "@noble/curves": "~1.8.1", + "@noble/hashes": "~1.7.1", + "@scure/base": "~1.2.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39": { + "version": "1.5.4", + "license": "MIT", + "dependencies": { + "@noble/hashes": "~1.7.1", + "@scure/base": "~1.2.4" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@sentry/core": { + "version": "5.30.0", + "license": "BSD-3-Clause", + "dependencies": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/core/node_modules/tslib": { + "version": "1.14.1", + "license": "0BSD" + }, + "node_modules/@sentry/hub": { + "version": "5.30.0", + "license": "BSD-3-Clause", + "dependencies": { + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/hub/node_modules/tslib": { + "version": "1.14.1", + "license": "0BSD" + }, + "node_modules/@sentry/minimal": { + "version": "5.30.0", + "license": "BSD-3-Clause", + "dependencies": { + "@sentry/hub": "5.30.0", + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/minimal/node_modules/tslib": { + "version": "1.14.1", + "license": "0BSD" + }, + "node_modules/@sentry/node": { + "version": "5.30.0", + "license": "BSD-3-Clause", + "dependencies": { + "@sentry/core": "5.30.0", + "@sentry/hub": "5.30.0", + "@sentry/tracing": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "cookie": "^0.4.1", + "https-proxy-agent": "^5.0.0", + "lru_map": "^0.3.3", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/node/node_modules/tslib": { + "version": "1.14.1", + "license": "0BSD" + }, + "node_modules/@sentry/tracing": { + "version": "5.30.0", + "license": "MIT", + "dependencies": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/tracing/node_modules/tslib": { + "version": "1.14.1", + "license": "0BSD" + }, + "node_modules/@sentry/types": { + "version": "5.30.0", + "license": "BSD-3-Clause", + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/utils": { + "version": "5.30.0", + "license": "BSD-3-Clause", + "dependencies": { + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/utils/node_modules/tslib": { + "version": "1.14.1", + "license": "0BSD" + }, + "node_modules/@solidity-parser/parser": { + "version": "0.14.5", + "license": "MIT", + "peer": true, + "dependencies": { + "antlr4ts": "^0.5.0-alpha.4" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.11", + "license": "MIT", + "peer": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "license": "MIT", + "peer": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "license": "MIT", + "peer": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "license": "MIT", + "peer": true + }, + "node_modules/@typechain/ethers-v6": { + "version": "0.5.1", + "license": "MIT", + "peer": true, + "dependencies": { + "lodash": "^4.17.15", + "ts-essentials": "^7.0.1" + }, + "peerDependencies": { + "ethers": "6.x", + "typechain": "^8.3.2", + "typescript": ">=4.7.0" + } + }, + "node_modules/@typechain/ethers-v6/node_modules/ts-essentials": { + "version": "7.0.3", + "license": "MIT", + "peer": true, + "peerDependencies": { + "typescript": ">=3.7.0" + } + }, + "node_modules/@typechain/hardhat": { + "version": "9.1.0", + "license": "MIT", + "peer": true, + "dependencies": { + "fs-extra": "^9.1.0" + }, + "peerDependencies": { + "@typechain/ethers-v6": "^0.5.1", + "ethers": "^6.1.0", + "hardhat": "^2.9.9", + "typechain": "^8.3.2" + } + }, + "node_modules/@typechain/hardhat/node_modules/fs-extra": { + "version": "9.1.0", + "license": "MIT", + "peer": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@types/bn.js": { + "version": "5.1.6", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/chai": { + "version": "4.3.20", + "license": "MIT", + "peer": true + }, + "node_modules/@types/chai-as-promised": { + "version": "7.1.8", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/chai": "*" + } + }, + "node_modules/@types/concat-stream": { + "version": "1.6.1", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.6", + "license": "MIT" + }, + "node_modules/@types/form-data": { + "version": "0.0.33", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/glob": { + "version": "7.2.0", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/@types/isomorphic-fetch": { + "version": "0.0.39", + "license": "MIT" + }, + "node_modules/@types/lru-cache": { + "version": "5.1.1", + "license": "MIT" + }, + "node_modules/@types/minimatch": { + "version": "5.1.2", + "license": "MIT", + "peer": true + }, + "node_modules/@types/mocha": { + "version": "10.0.10", + "license": "MIT", + "peer": true + }, + "node_modules/@types/node": { + "version": "22.13.9", + "license": "MIT", + "dependencies": { + "undici-types": "~6.20.0" + } + }, + "node_modules/@types/pbkdf2": { + "version": "3.1.2", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/prettier": { + "version": "2.7.3", + "license": "MIT", + "peer": true + }, + "node_modules/@types/qs": { + "version": "6.9.18", + "license": "MIT", + "peer": true + }, + "node_modules/@types/secp256k1": { + "version": "4.0.6", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/abbrev": { + "version": "1.0.9", + "license": "ISC", + "peer": true + }, + "node_modules/abitype": { + "version": "1.0.8", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/wevm" + }, + "peerDependencies": { + "typescript": ">=5.0.4", + "zod": "^3 >=3.22.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "zod": { + "optional": true + } + } + }, + "node_modules/acorn": { + "version": "8.14.1", + "license": "MIT", + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "license": "MIT", + "peer": true, + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/adm-zip": { + "version": "0.4.16", + "license": "MIT", + "engines": { + "node": ">=0.3.0" + } + }, + "node_modules/aes-js": { + "version": "4.0.0-beta.5", + "license": "MIT", + "peer": true + }, + "node_modules/agent-base": { + "version": "6.0.2", + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "8.17.1", + "license": "MIT", + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/amdefine": { + "version": "1.0.1", + "license": "BSD-3-Clause OR MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.4.2" + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "license": "ISC", + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/antlr4ts": { + "version": "0.5.0-alpha.4", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/anymatch": { + "version": "3.1.3", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "license": "MIT", + "peer": true + }, + "node_modules/argparse": { + "version": "2.0.1", + "license": "Python-2.0" + }, + "node_modules/array-back": { + "version": "3.1.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array-uniq": { + "version": "1.0.3", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "license": "MIT", + "peer": true + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "license": "MIT", + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "1.5.2", + "license": "MIT", + "peer": true + }, + "node_modules/asynckit": { + "version": "0.4.0", + "license": "MIT", + "peer": true + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "license": "ISC", + "peer": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/axios": { + "version": "1.8.1", + "license": "MIT", + "peer": true, + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/base-x": { + "version": "3.0.10", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/bech32": { + "version": "1.1.4", + "license": "MIT", + "peer": true + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/blakejs": { + "version": "1.2.1", + "license": "MIT" + }, + "node_modules/bn.js": { + "version": "5.2.1", + "license": "MIT" + }, + "node_modules/boxen": { + "version": "5.1.2", + "license": "MIT", + "dependencies": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/type-fest": { + "version": "0.20.2", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brorand": { + "version": "1.1.0", + "license": "MIT" + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "license": "ISC" + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "license": "MIT", + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/bs58": { + "version": "4.0.1", + "license": "MIT", + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/bs58check": { + "version": "2.1.2", + "license": "MIT", + "dependencies": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "license": "MIT" + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "license": "MIT" + }, + "node_modules/bytes": { + "version": "3.1.2", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "license": "MIT", + "peer": true, + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "license": "Apache-2.0", + "peer": true + }, + "node_modules/cbor": { + "version": "8.1.0", + "license": "MIT", + "peer": true, + "dependencies": { + "nofilter": "^3.1.0" + }, + "engines": { + "node": ">=12.19" + } + }, + "node_modules/chai": { + "version": "4.5.0", + "license": "MIT", + "peer": true, + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", + "pathval": "^1.1.1", + "type-detect": "^4.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chai-as-promised": { + "version": "7.1.2", + "license": "WTFPL", + "dependencies": { + "check-error": "^1.0.2" + }, + "peerDependencies": { + "chai": ">= 2.1.2 < 6" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/charenc": { + "version": "0.0.2", + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/check-error": { + "version": "1.0.3", + "license": "MIT", + "dependencies": { + "get-func-name": "^2.0.2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/chokidar": { + "version": "4.0.3", + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ci-info": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/cipher-base": { + "version": "1.0.6", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-boxes": { + "version": "2.2.1", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-table3": { + "version": "0.5.1", + "license": "MIT", + "peer": true, + "dependencies": { + "object-assign": "^4.1.0", + "string-width": "^2.1.1" + }, + "engines": { + "node": ">=6" + }, + "optionalDependencies": { + "colors": "^1.1.2" + } + }, + "node_modules/cli-table3/node_modules/ansi-regex": { + "version": "3.0.1", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/cli-table3/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/cli-table3/node_modules/string-width": { + "version": "2.1.1", + "license": "MIT", + "peer": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cli-table3/node_modules/strip-ansi": { + "version": "4.0.0", + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "license": "MIT" + }, + "node_modules/colors": { + "version": "1.4.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "license": "MIT", + "peer": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/command-exists": { + "version": "1.2.9", + "license": "MIT" + }, + "node_modules/command-line-args": { + "version": "5.2.1", + "license": "MIT", + "peer": true, + "dependencies": { + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/command-line-usage": { + "version": "6.1.3", + "license": "MIT", + "peer": true, + "dependencies": { + "array-back": "^4.0.2", + "chalk": "^2.4.2", + "table-layout": "^1.0.2", + "typical": "^5.2.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/command-line-usage/node_modules/ansi-styles": { + "version": "3.2.1", + "license": "MIT", + "peer": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/array-back": { + "version": "4.0.2", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/command-line-usage/node_modules/chalk": { + "version": "2.4.2", + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/color-convert": { + "version": "1.9.3", + "license": "MIT", + "peer": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/command-line-usage/node_modules/color-name": { + "version": "1.1.3", + "license": "MIT", + "peer": true + }, + "node_modules/command-line-usage/node_modules/escape-string-regexp": { + "version": "1.0.5", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/command-line-usage/node_modules/has-flag": { + "version": "3.0.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/supports-color": { + "version": "5.5.0", + "license": "MIT", + "peer": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/typical": { + "version": "5.2.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/commander": { + "version": "8.3.0", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "license": "MIT", + "peer": true + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "engines": [ + "node >= 0.8" + ], + "license": "MIT", + "peer": true, + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "2.3.8", + "license": "MIT", + "peer": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/concat-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "license": "MIT", + "peer": true + }, + "node_modules/concat-stream/node_modules/string_decoder": { + "version": "1.1.1", + "license": "MIT", + "peer": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/cookie": { + "version": "0.4.2", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "license": "MIT", + "peer": true + }, + "node_modules/create-hash": { + "version": "1.2.0", + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "license": "MIT", + "peer": true + }, + "node_modules/crypt": { + "version": "0.0.2", + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/death": { + "version": "1.1.0", + "peer": true + }, + "node_modules/debug": { + "version": "4.4.0", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-eql": { + "version": "4.1.4", + "license": "MIT", + "peer": true, + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "license": "MIT", + "peer": true + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/diff": { + "version": "5.2.0", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/difflib": { + "version": "0.2.4", + "peer": true, + "dependencies": { + "heap": ">= 0.2.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "license": "MIT", + "peer": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/elliptic": { + "version": "6.6.1", + "license": "MIT", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.1", + "license": "MIT" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "license": "MIT" + }, + "node_modules/enquirer": { + "version": "2.4.1", + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "license": "MIT", + "peer": true, + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "license": "MIT", + "peer": true, + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escodegen": { + "version": "1.8.1", + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "esprima": "^2.7.1", + "estraverse": "^1.9.1", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=0.12.0" + }, + "optionalDependencies": { + "source-map": "~0.2.0" + } + }, + "node_modules/esprima": { + "version": "2.7.3", + "license": "BSD-2-Clause", + "peer": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/estraverse": { + "version": "1.9.3", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "license": "MIT" + }, + "node_modules/esutils": { + "version": "2.0.3", + "license": "BSD-2-Clause", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eth-gas-reporter": { + "version": "0.2.27", + "license": "MIT", + "peer": true, + "dependencies": { + "@solidity-parser/parser": "^0.14.0", + "axios": "^1.5.1", + "cli-table3": "^0.5.0", + "colors": "1.4.0", + "ethereum-cryptography": "^1.0.3", + "ethers": "^5.7.2", + "fs-readdir-recursive": "^1.1.0", + "lodash": "^4.17.14", + "markdown-table": "^1.1.3", + "mocha": "^10.2.0", + "req-cwd": "^2.0.0", + "sha1": "^1.1.1", + "sync-request": "^6.0.0" + }, + "peerDependencies": { + "@codechecks/client": "^0.1.0" + }, + "peerDependenciesMeta": { + "@codechecks/client": { + "optional": true + } + } + }, + "node_modules/eth-gas-reporter/node_modules/@noble/hashes": { + "version": "1.2.0", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "peer": true + }, + "node_modules/eth-gas-reporter/node_modules/@scure/base": { + "version": "1.1.9", + "license": "MIT", + "peer": true, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/eth-gas-reporter/node_modules/@scure/bip32": { + "version": "1.1.5", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@noble/hashes": "~1.2.0", + "@noble/secp256k1": "~1.7.0", + "@scure/base": "~1.1.0" + } + }, + "node_modules/eth-gas-reporter/node_modules/@scure/bip39": { + "version": "1.1.1", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@noble/hashes": "~1.2.0", + "@scure/base": "~1.1.0" + } + }, + "node_modules/eth-gas-reporter/node_modules/ethereum-cryptography": { + "version": "1.2.0", + "license": "MIT", + "peer": true, + "dependencies": { + "@noble/hashes": "1.2.0", + "@noble/secp256k1": "1.7.1", + "@scure/bip32": "1.1.5", + "@scure/bip39": "1.1.1" + } + }, + "node_modules/eth-gas-reporter/node_modules/ethers": { + "version": "5.8.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/abi": "5.8.0", + "@ethersproject/abstract-provider": "5.8.0", + "@ethersproject/abstract-signer": "5.8.0", + "@ethersproject/address": "5.8.0", + "@ethersproject/base64": "5.8.0", + "@ethersproject/basex": "5.8.0", + "@ethersproject/bignumber": "5.8.0", + "@ethersproject/bytes": "5.8.0", + "@ethersproject/constants": "5.8.0", + "@ethersproject/contracts": "5.8.0", + "@ethersproject/hash": "5.8.0", + "@ethersproject/hdnode": "5.8.0", + "@ethersproject/json-wallets": "5.8.0", + "@ethersproject/keccak256": "5.8.0", + "@ethersproject/logger": "5.8.0", + "@ethersproject/networks": "5.8.0", + "@ethersproject/pbkdf2": "5.8.0", + "@ethersproject/properties": "5.8.0", + "@ethersproject/providers": "5.8.0", + "@ethersproject/random": "5.8.0", + "@ethersproject/rlp": "5.8.0", + "@ethersproject/sha2": "5.8.0", + "@ethersproject/signing-key": "5.8.0", + "@ethersproject/solidity": "5.8.0", + "@ethersproject/strings": "5.8.0", + "@ethersproject/transactions": "5.8.0", + "@ethersproject/units": "5.8.0", + "@ethersproject/wallet": "5.8.0", + "@ethersproject/web": "5.8.0", + "@ethersproject/wordlists": "5.8.0" + } + }, + "node_modules/ethereum-bloom-filters": { + "version": "1.2.0", + "license": "MIT", + "peer": true, + "dependencies": { + "@noble/hashes": "^1.4.0" + } + }, + "node_modules/ethereum-cryptography": { + "version": "0.1.3", + "license": "MIT", + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/ethereumjs-abi": { + "version": "0.6.8", + "license": "MIT", + "dependencies": { + "bn.js": "^4.11.8", + "ethereumjs-util": "^6.0.0" + } + }, + "node_modules/ethereumjs-abi/node_modules/@types/bn.js": { + "version": "4.11.6", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/ethereumjs-abi/node_modules/bn.js": { + "version": "4.12.1", + "license": "MIT" + }, + "node_modules/ethereumjs-abi/node_modules/ethereumjs-util": { + "version": "6.2.1", + "license": "MPL-2.0", + "dependencies": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + }, + "node_modules/ethereumjs-util": { + "version": "7.1.5", + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/ethers": { + "version": "6.13.5", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/ethers-io/" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@adraffy/ens-normalize": "1.10.1", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", + "@types/node": "22.7.5", + "aes-js": "4.0.0-beta.5", + "tslib": "2.7.0", + "ws": "8.17.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/ethers/node_modules/@noble/curves": { + "version": "1.2.0", + "license": "MIT", + "peer": true, + "dependencies": { + "@noble/hashes": "1.3.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ethers/node_modules/@noble/hashes": { + "version": "1.3.2", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ethers/node_modules/@types/node": { + "version": "22.7.5", + "license": "MIT", + "peer": true, + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/ethers/node_modules/undici-types": { + "version": "6.19.8", + "license": "MIT", + "peer": true + }, + "node_modules/ethers/node_modules/ws": { + "version": "8.17.1", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/ethjs-unit": { + "version": "0.1.6", + "license": "MIT", + "peer": true, + "dependencies": { + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/ethjs-unit/node_modules/bn.js": { + "version": "4.11.6", + "license": "MIT", + "peer": true + }, + "node_modules/ethjs-util": { + "version": "0.1.6", + "license": "MIT", + "dependencies": { + "is-hex-prefixed": "1.0.0", + "strip-hex-prefix": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "license": "MIT", + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "license": "MIT", + "peer": true + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "license": "MIT", + "peer": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "license": "MIT", + "peer": true + }, + "node_modules/fast-uri": { + "version": "3.0.6", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/fastq": { + "version": "1.19.1", + "license": "ISC", + "peer": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fdir": { + "version": "6.4.3", + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-replace": { + "version": "3.0.0", + "license": "MIT", + "peer": true, + "dependencies": { + "array-back": "^3.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.2", + "license": "MIT", + "peer": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fp-ts": { + "version": "1.19.3", + "license": "MIT" + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "license": "MIT", + "peer": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs-readdir-recursive": { + "version": "1.1.0", + "license": "MIT", + "peer": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "license": "ISC" + }, + "node_modules/function-bind": { + "version": "1.1.2", + "license": "MIT", + "peer": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-func-name": { + "version": "2.0.2", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-port": { + "version": "3.2.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "license": "MIT", + "peer": true, + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ghost-testrpc": { + "version": "0.0.2", + "license": "ISC", + "peer": true, + "dependencies": { + "chalk": "^2.4.2", + "node-emoji": "^1.10.0" + }, + "bin": { + "testrpc-sc": "index.js" + } + }, + "node_modules/ghost-testrpc/node_modules/ansi-styles": { + "version": "3.2.1", + "license": "MIT", + "peer": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ghost-testrpc/node_modules/chalk": { + "version": "2.4.2", + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ghost-testrpc/node_modules/color-convert": { + "version": "1.9.3", + "license": "MIT", + "peer": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/ghost-testrpc/node_modules/color-name": { + "version": "1.1.3", + "license": "MIT", + "peer": true + }, + "node_modules/ghost-testrpc/node_modules/escape-string-regexp": { + "version": "1.0.5", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/ghost-testrpc/node_modules/has-flag": { + "version": "3.0.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ghost-testrpc/node_modules/supports-color": { + "version": "5.5.0", + "license": "MIT", + "peer": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/glob": { + "version": "8.1.0", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/global-modules": { + "version": "2.0.0", + "license": "MIT", + "peer": true, + "dependencies": { + "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix": { + "version": "3.0.0", + "license": "MIT", + "peer": true, + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/globby": { + "version": "10.0.2", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/globby/node_modules/brace-expansion": { + "version": "1.1.11", + "license": "MIT", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/globby/node_modules/glob": { + "version": "7.2.3", + "license": "ISC", + "peer": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globby/node_modules/minimatch": { + "version": "3.1.2", + "license": "ISC", + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "license": "ISC" + }, + "node_modules/handlebars": { + "version": "4.7.8", + "license": "MIT", + "peer": true, + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/handlebars/node_modules/source-map": { + "version": "0.6.1", + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hardhat": { + "version": "2.22.19", + "license": "MIT", + "dependencies": { + "@ethersproject/abi": "^5.1.2", + "@metamask/eth-sig-util": "^4.0.0", + "@nomicfoundation/edr": "^0.8.0", + "@nomicfoundation/ethereumjs-common": "4.0.4", + "@nomicfoundation/ethereumjs-tx": "5.0.4", + "@nomicfoundation/ethereumjs-util": "9.0.4", + "@nomicfoundation/solidity-analyzer": "^0.1.0", + "@sentry/node": "^5.18.1", + "@types/bn.js": "^5.1.0", + "@types/lru-cache": "^5.1.0", + "adm-zip": "^0.4.16", + "aggregate-error": "^3.0.0", + "ansi-escapes": "^4.3.0", + "boxen": "^5.1.2", + "chokidar": "^4.0.0", + "ci-info": "^2.0.0", + "debug": "^4.1.1", + "enquirer": "^2.3.0", + "env-paths": "^2.2.0", + "ethereum-cryptography": "^1.0.3", + "ethereumjs-abi": "^0.6.8", + "find-up": "^5.0.0", + "fp-ts": "1.19.3", + "fs-extra": "^7.0.1", + "immutable": "^4.0.0-rc.12", + "io-ts": "1.10.4", + "json-stream-stringify": "^3.1.4", + "keccak": "^3.0.2", + "lodash": "^4.17.11", + "mnemonist": "^0.38.0", + "mocha": "^10.0.0", + "p-map": "^4.0.0", + "picocolors": "^1.1.0", + "raw-body": "^2.4.1", + "resolve": "1.17.0", + "semver": "^6.3.0", + "solc": "0.8.26", + "source-map-support": "^0.5.13", + "stacktrace-parser": "^0.1.10", + "tinyglobby": "^0.2.6", + "tsort": "0.0.1", + "undici": "^5.14.0", + "uuid": "^8.3.2", + "ws": "^7.4.6" + }, + "bin": { + "hardhat": "internal/cli/bootstrap.js" + }, + "peerDependencies": { + "ts-node": "*", + "typescript": "*" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/hardhat-gas-reporter": { + "version": "1.0.10", + "license": "MIT", + "peer": true, + "dependencies": { + "array-uniq": "1.0.3", + "eth-gas-reporter": "^0.2.25", + "sha1": "^1.1.1" + }, + "peerDependencies": { + "hardhat": "^2.0.2" + } + }, + "node_modules/hardhat/node_modules/@noble/hashes": { + "version": "1.2.0", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT" + }, + "node_modules/hardhat/node_modules/@scure/base": { + "version": "1.1.9", + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/hardhat/node_modules/@scure/bip32": { + "version": "1.1.5", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "dependencies": { + "@noble/hashes": "~1.2.0", + "@noble/secp256k1": "~1.7.0", + "@scure/base": "~1.1.0" + } + }, + "node_modules/hardhat/node_modules/@scure/bip39": { + "version": "1.1.1", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "dependencies": { + "@noble/hashes": "~1.2.0", + "@scure/base": "~1.1.0" + } + }, + "node_modules/hardhat/node_modules/ethereum-cryptography": { + "version": "1.2.0", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.2.0", + "@noble/secp256k1": "1.7.1", + "@scure/bip32": "1.1.5", + "@scure/bip39": "1.1.1" + } + }, + "node_modules/hardhat/node_modules/fs-extra": { + "version": "7.0.1", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/hardhat/node_modules/jsonfile": { + "version": "4.0.0", + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/hardhat/node_modules/universalify": { + "version": "0.1.2", + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "license": "MIT", + "peer": true, + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hash-base": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hash.js": { + "version": "1.1.7", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "license": "MIT", + "peer": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/heap": { + "version": "0.2.7", + "license": "MIT", + "peer": true + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/http-basic": { + "version": "8.1.3", + "license": "MIT", + "peer": true, + "dependencies": { + "caseless": "^0.12.0", + "concat-stream": "^1.6.2", + "http-response-object": "^3.0.1", + "parse-cache-control": "^1.0.1" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-response-object": { + "version": "3.0.2", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/node": "^10.0.3" + } + }, + "node_modules/http-response-object/node_modules/@types/node": { + "version": "10.17.60", + "license": "MIT", + "peer": true + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/immer": { + "version": "10.0.2", + "license": "MIT", + "peer": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/immutable": { + "version": "4.3.7", + "license": "MIT" + }, + "node_modules/indent-string": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "license": "ISC", + "peer": true + }, + "node_modules/interpret": { + "version": "1.4.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/io-ts": { + "version": "1.10.4", + "license": "MIT", + "dependencies": { + "fp-ts": "^1.0.0" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hex-prefixed": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "license": "MIT", + "peer": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "license": "ISC", + "peer": true + }, + "node_modules/isomorphic-fetch": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "node-fetch": "^2.6.1", + "whatwg-fetch": "^3.4.1" + } + }, + "node_modules/isomorphic-ws": { + "version": "5.0.0", + "license": "MIT", + "peerDependencies": { + "ws": "*" + } + }, + "node_modules/isows": { + "version": "1.0.6", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wevm" + } + ], + "license": "MIT", + "peerDependencies": { + "ws": "*" + } + }, + "node_modules/js-sha3": { + "version": "0.8.0", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "license": "MIT", + "peer": true + }, + "node_modules/json-stream-stringify": { + "version": "3.1.6", + "license": "MIT", + "engines": { + "node": ">=7.10.1" + } + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "license": "ISC", + "peer": true + }, + "node_modules/json5": { + "version": "2.2.3", + "license": "MIT", + "peer": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "license": "MIT", + "peer": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonschema": { + "version": "1.5.0", + "license": "MIT", + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/keccak": { + "version": "3.0.4", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.3.0", + "license": "MIT", + "peer": true, + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "license": "MIT" + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "license": "MIT", + "peer": true + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "license": "MIT", + "peer": true + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "license": "MIT", + "peer": true + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "license": "MIT", + "peer": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/loupe": { + "version": "2.3.7", + "license": "MIT", + "peer": true, + "dependencies": { + "get-func-name": "^2.0.1" + } + }, + "node_modules/lru_map": { + "version": "0.3.3", + "license": "MIT" + }, + "node_modules/make-error": { + "version": "1.3.6", + "license": "ISC", + "peer": true + }, + "node_modules/markdown-table": { + "version": "1.1.3", + "license": "MIT", + "peer": true + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/md5.js": { + "version": "1.3.5", + "license": "MIT", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/memorystream": { + "version": "0.3.1", + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micro-ftch": { + "version": "0.3.1", + "license": "MIT", + "peer": true + }, + "node_modules/micromatch": { + "version": "4.0.8", + "license": "MIT", + "peer": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "license": "MIT", + "peer": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "license": "ISC" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/minimatch": { + "version": "5.1.6", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "license": "MIT", + "peer": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "license": "MIT", + "peer": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mnemonist": { + "version": "0.38.5", + "license": "MIT", + "dependencies": { + "obliterator": "^2.0.0" + } + }, + "node_modules/mocha": { + "version": "10.8.2", + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.3", + "browser-stdout": "^1.3.1", + "chokidar": "^3.5.3", + "debug": "^4.3.5", + "diff": "^5.2.0", + "escape-string-regexp": "^4.0.0", + "find-up": "^5.0.0", + "glob": "^8.1.0", + "he": "^1.2.0", + "js-yaml": "^4.1.0", + "log-symbols": "^4.1.0", + "minimatch": "^5.1.6", + "ms": "^2.1.3", + "serialize-javascript": "^6.0.2", + "strip-json-comments": "^3.1.1", + "supports-color": "^8.1.1", + "workerpool": "^6.5.1", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.9", + "yargs-unparser": "^2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/mocha/node_modules/chokidar": { + "version": "3.6.0", + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/mocha/node_modules/picomatch": { + "version": "2.3.1", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mocha/node_modules/readdirp": { + "version": "3.6.0", + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "license": "MIT" + }, + "node_modules/ndjson": { + "version": "2.0.0", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "json-stringify-safe": "^5.0.1", + "minimist": "^1.2.5", + "readable-stream": "^3.6.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + }, + "bin": { + "ndjson": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "license": "MIT", + "peer": true + }, + "node_modules/node-addon-api": { + "version": "2.0.2", + "license": "MIT" + }, + "node_modules/node-emoji": { + "version": "1.11.0", + "license": "MIT", + "peer": true, + "dependencies": { + "lodash": "^4.17.21" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-gyp-build": { + "version": "4.8.4", + "license": "MIT", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/nofilter": { + "version": "3.1.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=12.19" + } + }, + "node_modules/nopt": { + "version": "3.0.6", + "license": "ISC", + "peer": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/number-to-bn": { + "version": "1.7.0", + "license": "MIT", + "peer": true, + "dependencies": { + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/number-to-bn/node_modules/bn.js": { + "version": "4.11.6", + "license": "MIT", + "peer": true + }, + "node_modules/object-assign": { + "version": "4.1.1", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obliterator": { + "version": "2.0.5", + "license": "MIT" + }, + "node_modules/once": { + "version": "1.4.0", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.8.3", + "license": "MIT", + "peer": true, + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ordinal": { + "version": "1.0.3", + "license": "MIT", + "peer": true + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ox": { + "version": "0.6.7", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wevm" + } + ], + "license": "MIT", + "dependencies": { + "@adraffy/ens-normalize": "^1.10.1", + "@noble/curves": "^1.6.0", + "@noble/hashes": "^1.5.0", + "@scure/bip32": "^1.5.0", + "@scure/bip39": "^1.4.0", + "abitype": "^1.0.6", + "eventemitter3": "5.0.1" + }, + "peerDependencies": { + "typescript": ">=5.4.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-cache-control": { + "version": "1.0.1", + "peer": true + }, + "node_modules/path-exists": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "license": "MIT" + }, + "node_modules/path-type": { + "version": "4.0.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pathval": { + "version": "1.1.1", + "license": "MIT", + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/pbkdf2": { + "version": "3.1.2", + "license": "MIT", + "dependencies": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.2", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/poseidon-lite": { + "version": "0.3.0", + "license": "MIT" + }, + "node_modules/prelude-ls": { + "version": "1.1.2", + "peer": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "2.8.8", + "license": "MIT", + "peer": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "license": "MIT", + "peer": true + }, + "node_modules/promise": { + "version": "8.3.0", + "license": "MIT", + "peer": true, + "dependencies": { + "asap": "~2.0.6" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "license": "MIT", + "peer": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "license": "MIT", + "peer": true + }, + "node_modules/qs": { + "version": "6.14.0", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "peer": true + }, + "node_modules/randombytes": { + "version": "2.1.0", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "4.1.2", + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/rechoir": { + "version": "0.6.2", + "peer": true, + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/recursive-readdir": { + "version": "2.2.3", + "license": "MIT", + "peer": true, + "dependencies": { + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/recursive-readdir/node_modules/brace-expansion": { + "version": "1.1.11", + "license": "MIT", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/recursive-readdir/node_modules/minimatch": { + "version": "3.1.2", + "license": "ISC", + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/reduce-flatten": { + "version": "2.0.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/req-cwd": { + "version": "2.0.0", + "license": "MIT", + "peer": true, + "dependencies": { + "req-from": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/req-from": { + "version": "2.0.0", + "license": "MIT", + "peer": true, + "dependencies": { + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.17.0", + "license": "MIT", + "dependencies": { + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "3.0.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "license": "MIT", + "peer": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/ripemd160": { + "version": "2.0.2", + "license": "MIT", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/rlp": { + "version": "2.2.7", + "license": "MPL-2.0", + "dependencies": { + "bn.js": "^5.2.0" + }, + "bin": { + "rlp": "bin/rlp" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "license": "MIT" + }, + "node_modules/sc-istanbul": { + "version": "0.4.6", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "abbrev": "1.0.x", + "async": "1.x", + "escodegen": "1.8.x", + "esprima": "2.7.x", + "glob": "^5.0.15", + "handlebars": "^4.0.1", + "js-yaml": "3.x", + "mkdirp": "0.5.x", + "nopt": "3.x", + "once": "1.x", + "resolve": "1.1.x", + "supports-color": "^3.1.0", + "which": "^1.1.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "istanbul": "lib/cli.js" + } + }, + "node_modules/sc-istanbul/node_modules/argparse": { + "version": "1.0.10", + "license": "MIT", + "peer": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/sc-istanbul/node_modules/brace-expansion": { + "version": "1.1.11", + "license": "MIT", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/sc-istanbul/node_modules/glob": { + "version": "5.0.15", + "license": "ISC", + "peer": true, + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/sc-istanbul/node_modules/has-flag": { + "version": "1.0.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sc-istanbul/node_modules/js-yaml": { + "version": "3.14.1", + "license": "MIT", + "peer": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/sc-istanbul/node_modules/js-yaml/node_modules/esprima": { + "version": "4.0.1", + "license": "BSD-2-Clause", + "peer": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/sc-istanbul/node_modules/minimatch": { + "version": "3.1.2", + "license": "ISC", + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/sc-istanbul/node_modules/resolve": { + "version": "1.1.7", + "license": "MIT", + "peer": true + }, + "node_modules/sc-istanbul/node_modules/supports-color": { + "version": "3.2.3", + "license": "MIT", + "peer": true, + "dependencies": { + "has-flag": "^1.0.0" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/scrypt-js": { + "version": "3.0.1", + "license": "MIT" + }, + "node_modules/secp256k1": { + "version": "4.0.4", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "elliptic": "^6.5.7", + "node-addon-api": "^5.0.0", + "node-gyp-build": "^4.2.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/secp256k1/node_modules/node-addon-api": { + "version": "5.1.0", + "license": "MIT" + }, + "node_modules/semver": { + "version": "6.3.1", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "license": "MIT" + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "license": "ISC" + }, + "node_modules/sha.js": { + "version": "2.4.11", + "license": "(MIT AND BSD-3-Clause)", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/sha1": { + "version": "1.1.1", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "charenc": ">= 0.0.1", + "crypt": ">= 0.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/shelljs": { + "version": "0.8.5", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/shelljs/node_modules/brace-expansion": { + "version": "1.1.11", + "license": "MIT", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/shelljs/node_modules/glob": { + "version": "7.2.3", + "license": "ISC", + "peer": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/shelljs/node_modules/minimatch": { + "version": "3.1.2", + "license": "ISC", + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "license": "MIT", + "peer": true, + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "license": "MIT", + "peer": true, + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "license": "MIT", + "peer": true, + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "license": "MIT", + "peer": true, + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "license": "MIT", + "peer": true + }, + "node_modules/slash": { + "version": "3.0.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/solc": { + "version": "0.8.26", + "license": "MIT", + "dependencies": { + "command-exists": "^1.2.8", + "commander": "^8.1.0", + "follow-redirects": "^1.12.1", + "js-sha3": "0.8.0", + "memorystream": "^0.3.1", + "semver": "^5.5.0", + "tmp": "0.0.33" + }, + "bin": { + "solcjs": "solc.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/solc/node_modules/semver": { + "version": "5.7.2", + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/solidity-coverage": { + "version": "0.8.14", + "license": "ISC", + "peer": true, + "dependencies": { + "@ethersproject/abi": "^5.0.9", + "@solidity-parser/parser": "^0.19.0", + "chalk": "^2.4.2", + "death": "^1.1.0", + "difflib": "^0.2.4", + "fs-extra": "^8.1.0", + "ghost-testrpc": "^0.0.2", + "global-modules": "^2.0.0", + "globby": "^10.0.1", + "jsonschema": "^1.2.4", + "lodash": "^4.17.21", + "mocha": "^10.2.0", + "node-emoji": "^1.10.0", + "pify": "^4.0.1", + "recursive-readdir": "^2.2.2", + "sc-istanbul": "^0.4.5", + "semver": "^7.3.4", + "shelljs": "^0.8.3", + "web3-utils": "^1.3.6" + }, + "bin": { + "solidity-coverage": "plugins/bin.js" + }, + "peerDependencies": { + "hardhat": "^2.11.0" + } + }, + "node_modules/solidity-coverage/node_modules/@solidity-parser/parser": { + "version": "0.19.0", + "license": "MIT", + "peer": true + }, + "node_modules/solidity-coverage/node_modules/ansi-styles": { + "version": "3.2.1", + "license": "MIT", + "peer": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/solidity-coverage/node_modules/chalk": { + "version": "2.4.2", + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/solidity-coverage/node_modules/color-convert": { + "version": "1.9.3", + "license": "MIT", + "peer": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/solidity-coverage/node_modules/color-name": { + "version": "1.1.3", + "license": "MIT", + "peer": true + }, + "node_modules/solidity-coverage/node_modules/escape-string-regexp": { + "version": "1.0.5", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/solidity-coverage/node_modules/fs-extra": { + "version": "8.1.0", + "license": "MIT", + "peer": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/solidity-coverage/node_modules/has-flag": { + "version": "3.0.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/solidity-coverage/node_modules/jsonfile": { + "version": "4.0.0", + "license": "MIT", + "peer": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/solidity-coverage/node_modules/semver": { + "version": "7.7.1", + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/solidity-coverage/node_modules/supports-color": { + "version": "5.5.0", + "license": "MIT", + "peer": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/solidity-coverage/node_modules/universalify": { + "version": "0.1.2", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/source-map": { + "version": "0.2.0", + "optional": true, + "peer": true, + "dependencies": { + "amdefine": ">=0.0.4" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split2": { + "version": "3.2.2", + "license": "ISC", + "peer": true, + "dependencies": { + "readable-stream": "^3.0.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/stacktrace-parser": { + "version": "0.1.11", + "license": "MIT", + "dependencies": { + "type-fest": "^0.7.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/stacktrace-parser/node_modules/type-fest": { + "version": "0.7.1", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/strict-event-emitter-types": { + "version": "2.0.0", + "license": "ISC" + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-format": { + "version": "2.0.0", + "license": "WTFPL OR MIT", + "peer": true + }, + "node_modules/string-width": { + "version": "4.2.3", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-hex-prefix": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "is-hex-prefixed": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sync-request": { + "version": "6.1.0", + "license": "MIT", + "peer": true, + "dependencies": { + "http-response-object": "^3.0.1", + "sync-rpc": "^1.2.1", + "then-request": "^6.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/sync-rpc": { + "version": "1.3.6", + "license": "MIT", + "peer": true, + "dependencies": { + "get-port": "^3.1.0" + } + }, + "node_modules/table": { + "version": "6.9.0", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table-layout": { + "version": "1.0.2", + "license": "MIT", + "peer": true, + "dependencies": { + "array-back": "^4.0.1", + "deep-extend": "~0.6.0", + "typical": "^5.2.0", + "wordwrapjs": "^4.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/table-layout/node_modules/array-back": { + "version": "4.0.2", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/table-layout/node_modules/typical": { + "version": "5.2.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/then-request": { + "version": "6.0.2", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/concat-stream": "^1.6.0", + "@types/form-data": "0.0.33", + "@types/node": "^8.0.0", + "@types/qs": "^6.2.31", + "caseless": "~0.12.0", + "concat-stream": "^1.6.0", + "form-data": "^2.2.0", + "http-basic": "^8.1.1", + "http-response-object": "^3.0.1", + "promise": "^8.0.0", + "qs": "^6.4.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/then-request/node_modules/@types/node": { + "version": "8.10.66", + "license": "MIT", + "peer": true + }, + "node_modules/then-request/node_modules/form-data": { + "version": "2.5.3", + "license": "MIT", + "peer": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "mime-types": "^2.1.35", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/through2": { + "version": "4.0.2", + "license": "MIT", + "peer": true, + "dependencies": { + "readable-stream": "3" + } + }, + "node_modules/tiny-invariant": { + "version": "1.3.3", + "license": "MIT" + }, + "node_modules/tinyglobby": { + "version": "0.2.12", + "license": "MIT", + "dependencies": { + "fdir": "^6.4.3", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tmp": { + "version": "0.0.33", + "license": "MIT", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "license": "MIT" + }, + "node_modules/ts-command-line-args": { + "version": "2.5.1", + "license": "ISC", + "peer": true, + "dependencies": { + "chalk": "^4.1.0", + "command-line-args": "^5.1.1", + "command-line-usage": "^6.1.0", + "string-format": "^2.0.0" + }, + "bin": { + "write-markdown": "dist/write-markdown.js" + } + }, + "node_modules/ts-essentials": { + "version": "10.0.4", + "license": "MIT", + "peerDependencies": { + "typescript": ">=4.5.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/ts-node": { + "version": "10.9.2", + "license": "MIT", + "peer": true, + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.2", + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/tslib": { + "version": "2.7.0", + "license": "0BSD", + "peer": true + }, + "node_modules/tsort": { + "version": "0.0.1", + "license": "MIT" + }, + "node_modules/tweetnacl": { + "version": "1.0.3", + "license": "Unlicense" + }, + "node_modules/tweetnacl-util": { + "version": "0.15.1", + "license": "Unlicense" + }, + "node_modules/type-check": { + "version": "0.3.2", + "license": "MIT", + "peer": true, + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.1.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typechain": { + "version": "8.3.2", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/prettier": "^2.1.1", + "debug": "^4.3.1", + "fs-extra": "^7.0.0", + "glob": "7.1.7", + "js-sha3": "^0.8.0", + "lodash": "^4.17.15", + "mkdirp": "^1.0.4", + "prettier": "^2.3.1", + "ts-command-line-args": "^2.2.0", + "ts-essentials": "^7.0.1" + }, + "bin": { + "typechain": "dist/cli/cli.js" + }, + "peerDependencies": { + "typescript": ">=4.3.0" + } + }, + "node_modules/typechain/node_modules/brace-expansion": { + "version": "1.1.11", + "license": "MIT", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/typechain/node_modules/fs-extra": { + "version": "7.0.1", + "license": "MIT", + "peer": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/typechain/node_modules/glob": { + "version": "7.1.7", + "license": "ISC", + "peer": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/typechain/node_modules/jsonfile": { + "version": "4.0.0", + "license": "MIT", + "peer": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/typechain/node_modules/minimatch": { + "version": "3.1.2", + "license": "ISC", + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/typechain/node_modules/mkdirp": { + "version": "1.0.4", + "license": "MIT", + "peer": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/typechain/node_modules/ts-essentials": { + "version": "7.0.3", + "license": "MIT", + "peer": true, + "peerDependencies": { + "typescript": ">=3.7.0" + } + }, + "node_modules/typechain/node_modules/universalify": { + "version": "0.1.2", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "license": "MIT", + "peer": true + }, + "node_modules/typescript": { + "version": "5.8.2", + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typical": { + "version": "4.0.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/uglify-js": { + "version": "3.19.3", + "license": "BSD-2-Clause", + "optional": true, + "peer": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/undici": { + "version": "5.28.5", + "license": "MIT", + "dependencies": { + "@fastify/busboy": "^2.0.0" + }, + "engines": { + "node": ">=14.0" + } + }, + "node_modules/undici-types": { + "version": "6.20.0", + "license": "MIT" + }, + "node_modules/universalify": { + "version": "2.0.1", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/utf8": { + "version": "3.0.0", + "license": "MIT", + "peer": true + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/uuid": { + "version": "8.3.2", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "license": "MIT", + "peer": true + }, + "node_modules/viem": { + "version": "2.23.6", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wevm" + } + ], + "license": "MIT", + "dependencies": { + "@noble/curves": "1.8.1", + "@noble/hashes": "1.7.1", + "@scure/bip32": "1.6.2", + "@scure/bip39": "1.5.4", + "abitype": "1.0.8", + "isows": "1.0.6", + "ox": "0.6.7", + "ws": "8.18.0" + }, + "peerDependencies": { + "typescript": ">=5.0.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/viem/node_modules/ws": { + "version": "8.18.0", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/web3-utils": { + "version": "1.10.4", + "license": "LGPL-3.0", + "peer": true, + "dependencies": { + "@ethereumjs/util": "^8.1.0", + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereum-cryptography": "^2.1.2", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-utils/node_modules/@noble/curves": { + "version": "1.4.2", + "license": "MIT", + "peer": true, + "dependencies": { + "@noble/hashes": "1.4.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/web3-utils/node_modules/@noble/hashes": { + "version": "1.4.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/web3-utils/node_modules/@scure/base": { + "version": "1.1.9", + "license": "MIT", + "peer": true, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/web3-utils/node_modules/@scure/bip32": { + "version": "1.4.0", + "license": "MIT", + "peer": true, + "dependencies": { + "@noble/curves": "~1.4.0", + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/web3-utils/node_modules/@scure/bip39": { + "version": "1.3.0", + "license": "MIT", + "peer": true, + "dependencies": { + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/web3-utils/node_modules/ethereum-cryptography": { + "version": "2.2.1", + "license": "MIT", + "peer": true, + "dependencies": { + "@noble/curves": "1.4.2", + "@noble/hashes": "1.4.0", + "@scure/bip32": "1.4.0", + "@scure/bip39": "1.3.0" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "license": "BSD-2-Clause" + }, + "node_modules/whatwg-fetch": { + "version": "3.6.20", + "license": "MIT" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "1.3.1", + "license": "ISC", + "peer": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/widest-line": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "license": "MIT", + "peer": true + }, + "node_modules/wordwrapjs": { + "version": "4.0.1", + "license": "MIT", + "peer": true, + "dependencies": { + "reduce-flatten": "^2.0.0", + "typical": "^5.2.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/wordwrapjs/node_modules/typical": { + "version": "5.2.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/workerpool": { + "version": "6.5.1", + "license": "Apache-2.0" + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "license": "ISC" + }, + "node_modules/ws": { + "version": "7.5.10", + "license": "MIT", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "3.24.2", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + } + } +} diff --git a/academy/lending-protocol/package.json b/academy/lending-protocol/package.json new file mode 100644 index 000000000..f23f56f9c --- /dev/null +++ b/academy/lending-protocol/package.json @@ -0,0 +1,22 @@ +{ + "name": "example-lending-protocol", + "description": "This is an example repository to showcase how a lending protocol can be built on top of =nil;", + "devDependencies": { + "@nomicfoundation/hardhat-toolbox-viem": "^3.0.0", + "hardhat": "^2.22.18" + }, + "scripts": { + "compile": "npx hardhat compile", + "format": "biome format ./", + "lint": "biome check ./", + "lint:fix": "biome check --write ." + }, + "dependencies": { + "@nilfoundation/create-nil-hardhat-project": "^1.0.1", + "@nilfoundation/niljs": "0.24.0", + "@nilfoundation/smart-contracts": "^0.5.0", + "@nomicfoundation/hardhat-toolbox": "^5.0.0", + "@openzeppelin/contracts-upgradeable": "^5.2.0", + "viem": "^2.23.4" + } +} diff --git a/academy/lending-protocol/task/run-lending-protocol.ts b/academy/lending-protocol/task/run-lending-protocol.ts new file mode 100644 index 000000000..9bd290bd0 --- /dev/null +++ b/academy/lending-protocol/task/run-lending-protocol.ts @@ -0,0 +1,409 @@ +import { + FaucetClient, + HttpTransport, + PublicClient, + convertEthToWei, + generateSmartAccount, + getContract, + waitTillCompleted, +} from "@nilfoundation/niljs"; + +import { type Abi, decodeFunctionResult, encodeFunctionData } from "viem"; + +import * as dotenv from "dotenv"; +import { task } from "hardhat/config"; +const GlobalLedger = require("../artifacts/contracts/CollateralManager.sol/GlobalLedger.json"); +const InterestManager = require("../artifacts/contracts/InterestManager.sol/InterestManager.json"); +const LendingPool = require("../artifacts/contracts/LendingPool.sol/LendingPool.json"); +const Oracle = require("../artifacts/contracts/Oracle.sol/Oracle.json"); +dotenv.config(); + +task( + "run-lending-protocol", + "End to end test for the interaction page", +).setAction(async () => { + // Initialize the PublicClient to interact with the blockchain + const client = new PublicClient({ + transport: new HttpTransport({ + endpoint: process.env.NIL_RPC_ENDPOINT as string, + }), + }); + + // Initialize the FaucetClient to top up accounts with test tokens + const faucet = new FaucetClient({ + transport: new HttpTransport({ + endpoint: process.env.NIL_RPC_ENDPOINT as string, + }), + }); + + console.log("Faucet client created"); + + // Deploying a new smart account for the deployer + console.log("Deploying Wallet"); + const deployerWallet = await generateSmartAccount({ + shardId: 1, + rpcEndpoint: process.env.NIL_RPC_ENDPOINT as string, + faucetEndpoint: process.env.NIL_RPC_ENDPOINT as string, + }); + + console.log(`Deployer smart account generated at ${deployerWallet.address}`); + + // Top up the deployer's smart account with USDT for contract deployment + const topUpSmartAccount = await faucet.topUpAndWaitUntilCompletion( + { + smartAccountAddress: deployerWallet.address, + faucetAddress: process.env.USDT as `0x${string}`, + amount: BigInt(3000), + }, + client, + ); + + console.log( + `Deployer smart account ${deployerWallet.address} has been topped up with 3000 USDT at tx hash ${topUpSmartAccount}`, + ); + + // Deploy InterestManager contract on shard 2 + const { address: deployInterestManager, hash: deployInterestManagerHash } = + await deployerWallet.deployContract({ + shardId: 2, + args: [], + bytecode: InterestManager.bytecode as `0x${string}`, + abi: InterestManager.abi as Abi, + salt: BigInt(Math.floor(Math.random() * 10000)), + }); + + await waitTillCompleted(client, deployInterestManagerHash); + console.log( + `Interest Manager deployed at ${deployInterestManager} with hash ${deployInterestManagerHash} on shard 2`, + ); + + // Deploy GlobalLedger contract on shard 3 + const { address: deployGlobalLedger, hash: deployGlobalLedgerHash } = + await deployerWallet.deployContract({ + shardId: 3, + args: [], + bytecode: GlobalLedger.bytecode as `0x${string}`, + abi: GlobalLedger.abi as Abi, + salt: BigInt(Math.floor(Math.random() * 10000)), + }); + + await waitTillCompleted(client, deployGlobalLedgerHash); + console.log( + `Global Ledger deployed at ${deployGlobalLedger} with hash ${deployGlobalLedgerHash} on shard 3`, + ); + + // Deploy Oracle contract on shard 4 + const { address: deployOracle, hash: deployOracleHash } = + await deployerWallet.deployContract({ + shardId: 4, + args: [], + bytecode: Oracle.bytecode as `0x${string}`, + abi: Oracle.abi as Abi, + salt: BigInt(Math.floor(Math.random() * 10000)), + }); + + await waitTillCompleted(client, deployOracleHash); + console.log( + `Oracle deployed at ${deployOracle} with hash ${deployOracleHash} on shard 4`, + ); + + // Deploy LendingPool contract on shard 1, linking all other contracts + const { address: deployLendingPool, hash: deployLendingPoolHash } = + await deployerWallet.deployContract({ + shardId: 1, + args: [ + deployGlobalLedger, + deployInterestManager, + deployOracle, + process.env.USDT, + process.env.ETH, + ], + bytecode: LendingPool.bytecode as `0x${string}`, + abi: LendingPool.abi as Abi, + salt: BigInt(Math.floor(Math.random() * 10000)), + }); + + await waitTillCompleted(client, deployLendingPoolHash); + console.log( + `Lending Pool deployed at ${deployLendingPool} with hash ${deployLendingPoolHash} on shard 1`, + ); + + // Generate two smart accounts (account1 and account2) + const account1 = await generateSmartAccount({ + shardId: 1, + rpcEndpoint: process.env.NIL_RPC_ENDPOINT as string, + faucetEndpoint: process.env.NIL_RPC_ENDPOINT as string, + }); + + console.log(`Account 1 generated at ${account1.address}`); + + const account2 = await generateSmartAccount({ + shardId: 3, + rpcEndpoint: process.env.NIL_RPC_ENDPOINT as string, + faucetEndpoint: process.env.NIL_RPC_ENDPOINT as string, + }); + + console.log(`Account 2 generated at ${account2.address}`); + + // Top up account1 with NIL, USDT, and ETH for testing + const topUpAccount1 = await faucet.topUpAndWaitUntilCompletion( + { + smartAccountAddress: account1.address, + faucetAddress: process.env.NIL as `0x${string}`, + amount: BigInt(1), + }, + client, + ); + + const topUpAccount1WithUSDT = await faucet.topUpAndWaitUntilCompletion( + { + smartAccountAddress: account1.address, + faucetAddress: process.env.USDT as `0x${string}`, + amount: BigInt(5000), + }, + client, + ); + + const topUpAccount1WithETH = await faucet.topUpAndWaitUntilCompletion( + { + smartAccountAddress: account1.address, + faucetAddress: process.env.ETH as `0x${string}`, + amount: BigInt(10), + }, + client, + ); + + console.log(`Account 1 topped up with 1 NIL at tx hash ${topUpAccount1}`); + console.log( + `Account 1 topped up with 5000 USDT at tx hash ${topUpAccount1WithUSDT}`, + ); + console.log( + `Account 1 topped up with 10 ETH at tx hash ${topUpAccount1WithETH}`, + ); + + // Top up account2 with ETH for testing + const topUpAccount2 = await faucet.topUpAndWaitUntilCompletion( + { + smartAccountAddress: account2.address, + faucetAddress: process.env.ETH as `0x${string}`, + amount: BigInt(5), + }, + client, + ); + + console.log(`Account 2 topped up with 5 ETH at tx hash ${topUpAccount2}`); + + // Log the token balances of account1 and account2 + console.log( + "Tokens in account 1:", + await client.getTokens(account1.address, "latest"), + ); + console.log( + "Tokens in account 2:", + await client.getTokens(account2.address, "latest"), + ); + + // Set the price for USDT and ETH in the Oracle contract + const setUSDTPrice = encodeFunctionData({ + abi: Oracle.abi as Abi, + functionName: "setPrice", + args: [process.env.USDT, 1n], + }); + + const setETHPrice = encodeFunctionData({ + abi: Oracle.abi as Abi, + functionName: "setPrice", + args: [process.env.ETH, 3000n], + }); + + // Set the price for USDT + const setOraclePriceUSDT = await deployerWallet.sendTransaction({ + to: deployOracle, + data: setUSDTPrice, + }); + + await waitTillCompleted(client, setOraclePriceUSDT); + console.log(`Oracle price set for USDT at tx hash ${setOraclePriceUSDT}`); + + // Set the price for ETH + const setOraclePriceETH = await deployerWallet.sendTransaction({ + to: deployOracle, + data: setETHPrice, + }); + + await waitTillCompleted(client, setOraclePriceETH); + console.log(`Oracle price set for ETH at tx hash ${setOraclePriceETH}`); + + // Retrieve the prices of USDT and ETH from the Oracle contract + const usdtPriceRequest = await client.call( + { + from: deployOracle, + to: deployOracle, + data: encodeFunctionData({ + abi: Oracle.abi as Abi, + functionName: "getPrice", + args: [process.env.USDT], + }), + }, + "latest", + ); + + const ethPriceRequest = await client.call( + { + from: deployOracle, + to: deployOracle, + data: encodeFunctionData({ + abi: Oracle.abi as Abi, + functionName: "getPrice", + args: [process.env.ETH], + }), + }, + "latest", + ); + + const usdtPrice = decodeFunctionResult({ + abi: Oracle.abi as Abi, + functionName: "getPrice", + data: usdtPriceRequest.data, + }); + + const ethPrice = decodeFunctionResult({ + abi: Oracle.abi as Abi, + functionName: "getPrice", + data: ethPriceRequest.data, + }); + + console.log(`Price of USDT is ${usdtPrice}`); + console.log(`Price of ETH is ${ethPrice}`); + + // Perform a deposit of USDT by account1 into the LendingPool + const depositUSDT = { + id: process.env.USDT as `0x${string}`, + amount: 3600n, + }; + + const depositUSDTResponse = await account1.sendTransaction({ + to: deployLendingPool, + functionName: "deposit", + abi: LendingPool.abi as Abi, + tokens: [depositUSDT], + feeCredit: convertEthToWei(0.001), + }); + + await waitTillCompleted(client, depositUSDTResponse); + console.log( + `Account 1 deposited 3600 USDT at tx hash ${depositUSDTResponse}`, + ); + + // Perform a deposit of ETH by account2 into the LendingPool + const depositETH = { + id: process.env.ETH as `0x${string}`, + amount: 1n, + }; + + const depositETHResponse = await account2.sendTransaction({ + to: deployLendingPool, + functionName: "deposit", + abi: LendingPool.abi as Abi, + tokens: [depositETH], + feeCredit: convertEthToWei(0.001), + }); + + await waitTillCompleted(client, depositETHResponse); + console.log(`Account 2 deposited 1 ETH at tx hash ${depositETHResponse}`); + + // Retrieve the deposit balances of account1 and account2 from GlobalLedger + const globalLedgerContract = getContract({ + client, + abi: GlobalLedger.abi, + address: deployGlobalLedger, + }); + + const account1Balance = await globalLedgerContract.read.getDeposit([ + account1.address, + process.env.USDT, + ]); + const account2Balance = await globalLedgerContract.read.getDeposit([ + account2.address, + process.env.ETH, + ]); + + console.log(`Account 1 balance in global ledger is ${account1Balance}`); + console.log(`Account 2 balance in global ledger is ${account2Balance}`); + + // Perform a borrow operation by account1 for 1 ETH + const borrowETH = encodeFunctionData({ + abi: LendingPool.abi as Abi, + functionName: "borrow", + args: [1, process.env.ETH], + }); + + const account1BalanceBeforeBorrow = await client.getTokens( + account1.address, + "latest", + ); + console.log("Account 1 balance before borrow:", account1BalanceBeforeBorrow); + + const borrowETHResponse = await account1.sendTransaction({ + to: deployLendingPool, + data: borrowETH, + feeCredit: convertEthToWei(0.001), + }); + + await waitTillCompleted(client, borrowETHResponse); + console.log(`Account 1 borrowed 1 ETH at tx hash ${borrowETHResponse}`); + + const account1BalanceAfterBorrow = await client.getTokens( + account1.address, + "latest", + ); + console.log("Account 1 balance after borrow:", account1BalanceAfterBorrow); + + // Top up account1 with NIL for loan repayment to avoid insufficient balance + const topUpSmartAccount1WithNIL = await faucet.topUpAndWaitUntilCompletion( + { + smartAccountAddress: account1.address, + faucetAddress: process.env.NIL as `0x${string}`, + amount: BigInt(1), + }, + client, + ); + + await waitTillCompleted(client, topUpSmartAccount1WithNIL); + console.log( + `Account 1 topped up with 1 NIL at tx hash ${topUpSmartAccount1WithNIL}`, + ); + + const account1BalanceAfterTopUp = await client.getBalance(account1.address); + console.log("Account 1 balance after top up:", account1BalanceAfterTopUp); + + // Perform a loan repayment by account1 + const repayETH = [ + { + id: process.env.ETH as `0x${string}`, + amount: BigInt(2), + }, + ]; + + const repayETHData = encodeFunctionData({ + abi: LendingPool.abi as Abi, + functionName: "repayLoan", + args: [], + }); + + const repayETHResponse = await account1.sendTransaction({ + to: deployLendingPool, + data: repayETHData, + tokens: repayETH, + feeCredit: convertEthToWei(0.001), + }); + + await waitTillCompleted(client, repayETHResponse); + console.log(`Account 1 repaid 1 ETH at tx hash ${repayETHResponse}`); + + const account1BalanceAfterRepay = await client.getTokens( + account1.address, + "latest", + ); + console.log("Account 1 balance after repay:", account1BalanceAfterRepay); +}); diff --git a/academy/lending-protocol/tsconfig.json b/academy/lending-protocol/tsconfig.json new file mode 100644 index 000000000..574e785c7 --- /dev/null +++ b/academy/lending-protocol/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "target": "es2020", + "module": "commonjs", + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "strict": true, + "skipLibCheck": true, + "resolveJsonModule": true + } +}