{
  "contractName": "Oracle",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "getPrice",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.8.0+commit.c7dfd78e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getPrice(address)\":{\"details\":\"Get the price of the currency_id. Returns the (price, timestamp)\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/runner/work/predeploy-contracts/predeploy-contracts/contracts/oracle/Oracle.sol\":\"Oracle\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/runner/work/predeploy-contracts/predeploy-contracts/contracts/oracle/IOracle.sol\":{\"keccak256\":\"0x9ee6c9eeb31d554e9dbd373d00ebc851338cd3f929cbecdead114d8c9c37d80a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://aa50be779cea5de6aa3bff6e0868cf7ee3379773d7893d5b8f2a6697718ca3ac\",\"dweb:/ipfs/QmXFEyXihcWcroD8VLUCVBiQBSxn1HvjTvBM6Tsva3PJyS\"]},\"/home/runner/work/predeploy-contracts/predeploy-contracts/contracts/oracle/Oracle.sol\":{\"keccak256\":\"0x1f20adc8f5adf465726f62f9aa0e475722d1f7fa81280928f9b2e2ede5531c0a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://5ad5af8b18e51a6837f718f4d74e5f5f02d31b03a054a489566d5e6b482c9c43\",\"dweb:/ipfs/QmPtaE2XGyM1kU7BF89qv9XxfkHWmj6PdmJqC5Wf4dGzR7\"]}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b5061046c806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c806341976e0914610030575b600080fd5b61004a60048036038101906100459190610224565b610060565b6040516100579190610357565b60405180910390f35b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156100d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100c890610337565b60405180910390fd5b60008061040373ffffffffffffffffffffffffffffffffffffffff16846040516024016100fe919061031c565b6040516020818303038152906040527f41976e09000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516101889190610305565b600060405180830381855afa9150503d80600081146101c3576040519150601f19603f3d011682016040523d82523d6000602084013e6101c8565b606091505b509150915060008214156101dd573d60208201fd5b808060200190518101906101f1919061024d565b92505050919050565b60008135905061020981610408565b92915050565b60008151905061021e8161041f565b92915050565b60006020828403121561023657600080fd5b6000610244848285016101fa565b91505092915050565b60006020828403121561025f57600080fd5b600061026d8482850161020f565b91505092915050565b61027f81610399565b82525050565b600061029082610372565b61029a818561037d565b93506102aa8185602086016103d5565b80840191505092915050565b60006102c3601d83610388565b91507f4f7261636c653a20746f6b656e206973207a65726f20616464726573730000006000830152602082019050919050565b6102ff816103cb565b82525050565b60006103118284610285565b915081905092915050565b60006020820190506103316000830184610276565b92915050565b60006020820190508181036000830152610350816102b6565b9050919050565b600060208201905061036c60008301846102f6565b92915050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b60006103a4826103ab565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156103f35780820151818401526020810190506103d8565b83811115610402576000848401525b50505050565b61041181610399565b811461041c57600080fd5b50565b610428816103cb565b811461043357600080fd5b5056fea264697066735822122078d0f9c9da5efa4e28c11a9b9b413e3dc52714b6c6861099f902c9908bc0ae6964736f6c63430008000033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c806341976e0914610030575b600080fd5b61004a60048036038101906100459190610224565b610060565b6040516100579190610357565b60405180910390f35b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156100d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100c890610337565b60405180910390fd5b60008061040373ffffffffffffffffffffffffffffffffffffffff16846040516024016100fe919061031c565b6040516020818303038152906040527f41976e09000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516101889190610305565b600060405180830381855afa9150503d80600081146101c3576040519150601f19603f3d011682016040523d82523d6000602084013e6101c8565b606091505b509150915060008214156101dd573d60208201fd5b808060200190518101906101f1919061024d565b92505050919050565b60008135905061020981610408565b92915050565b60008151905061021e8161041f565b92915050565b60006020828403121561023657600080fd5b6000610244848285016101fa565b91505092915050565b60006020828403121561025f57600080fd5b600061026d8482850161020f565b91505092915050565b61027f81610399565b82525050565b600061029082610372565b61029a818561037d565b93506102aa8185602086016103d5565b80840191505092915050565b60006102c3601d83610388565b91507f4f7261636c653a20746f6b656e206973207a65726f20616464726573730000006000830152602082019050919050565b6102ff816103cb565b82525050565b60006103118284610285565b915081905092915050565b60006020820190506103316000830184610276565b92915050565b60006020820190508181036000830152610350816102b6565b9050919050565b600060208201905061036c60008301846102f6565b92915050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b60006103a4826103ab565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156103f35780820151818401526020810190506103d8565b83811115610402576000848401525b50505050565b61041181610399565b811461041c57600080fd5b50565b610428816103cb565b811461043357600080fd5b5056fea264697066735822122078d0f9c9da5efa4e28c11a9b9b413e3dc52714b6c6861099f902c9908bc0ae6964736f6c63430008000033",
  "immutableReferences": {},
  "generatedSources": [],
  "deployedGeneratedSources": [
    {
      "ast": {
        "nodeType": "YulBlock",
        "src": "0:4292:20",
        "statements": [
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "59:87:20",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "69:29:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "91:6:20"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "78:12:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "78:20:20"
                  },
                  "variableNames": [
                    {
                      "name": "value",
                      "nodeType": "YulIdentifier",
                      "src": "69:5:20"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "134:5:20"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_t_address",
                      "nodeType": "YulIdentifier",
                      "src": "107:26:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "107:33:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "107:33:20"
                }
              ]
            },
            "name": "abi_decode_t_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "37:6:20",
                "type": ""
              },
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "45:3:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "53:5:20",
                "type": ""
              }
            ],
            "src": "7:139:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "215:80:20",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "225:22:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "240:6:20"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "234:5:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "234:13:20"
                  },
                  "variableNames": [
                    {
                      "name": "value",
                      "nodeType": "YulIdentifier",
                      "src": "225:5:20"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "283:5:20"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_t_uint256",
                      "nodeType": "YulIdentifier",
                      "src": "256:26:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "256:33:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "256:33:20"
                }
              ]
            },
            "name": "abi_decode_t_uint256_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "193:6:20",
                "type": ""
              },
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "201:3:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "209:5:20",
                "type": ""
              }
            ],
            "src": "152:143:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "367:196:20",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "413:16:20",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "422:1:20",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "425:1:20",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "415:6:20"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "415:12:20"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "415:12:20"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "388:7:20"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "397:9:20"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "384:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "384:23:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "409:2:20",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "380:3:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "380:32:20"
                  },
                  "nodeType": "YulIf",
                  "src": "377:2:20"
                },
                {
                  "nodeType": "YulBlock",
                  "src": "439:117:20",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "454:15:20",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "468:1:20",
                        "type": "",
                        "value": "0"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "458:6:20",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "483:63:20",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "518:9:20"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "529:6:20"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "514:3:20"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "514:22:20"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "538:7:20"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_address",
                          "nodeType": "YulIdentifier",
                          "src": "493:20:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "493:53:20"
                      },
                      "variableNames": [
                        {
                          "name": "value0",
                          "nodeType": "YulIdentifier",
                          "src": "483:6:20"
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "337:9:20",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "348:7:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "360:6:20",
                "type": ""
              }
            ],
            "src": "301:262:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "646:207:20",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "692:16:20",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "701:1:20",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "704:1:20",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "694:6:20"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "694:12:20"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "694:12:20"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "667:7:20"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "676:9:20"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "663:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "663:23:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "688:2:20",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "659:3:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "659:32:20"
                  },
                  "nodeType": "YulIf",
                  "src": "656:2:20"
                },
                {
                  "nodeType": "YulBlock",
                  "src": "718:128:20",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "733:15:20",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "747:1:20",
                        "type": "",
                        "value": "0"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "737:6:20",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "762:74:20",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "808:9:20"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "819:6:20"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "804:3:20"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "804:22:20"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "828:7:20"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_uint256_fromMemory",
                          "nodeType": "YulIdentifier",
                          "src": "772:31:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "772:64:20"
                      },
                      "variableNames": [
                        {
                          "name": "value0",
                          "nodeType": "YulIdentifier",
                          "src": "762:6:20"
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_uint256_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "616:9:20",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "627:7:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "639:6:20",
                "type": ""
              }
            ],
            "src": "569:284:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "924:53:20",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "941:3:20"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "964:5:20"
                          }
                        ],
                        "functionName": {
                          "name": "cleanup_t_address",
                          "nodeType": "YulIdentifier",
                          "src": "946:17:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "946:24:20"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "934:6:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "934:37:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "934:37:20"
                }
              ]
            },
            "name": "abi_encode_t_address_to_t_address_fromStack",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "912:5:20",
                "type": ""
              },
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "919:3:20",
                "type": ""
              }
            ],
            "src": "859:118:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1091:265:20",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1101:52:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "1147:5:20"
                      }
                    ],
                    "functionName": {
                      "name": "array_length_t_bytes_memory_ptr",
                      "nodeType": "YulIdentifier",
                      "src": "1115:31:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1115:38:20"
                  },
                  "variables": [
                    {
                      "name": "length",
                      "nodeType": "YulTypedName",
                      "src": "1105:6:20",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1162:95:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "1245:3:20"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "1250:6:20"
                      }
                    ],
                    "functionName": {
                      "name": "array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "1169:75:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1169:88:20"
                  },
                  "variableNames": [
                    {
                      "name": "pos",
                      "nodeType": "YulIdentifier",
                      "src": "1162:3:20"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "1292:5:20"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1299:4:20",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1288:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1288:16:20"
                      },
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "1306:3:20"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "1311:6:20"
                      }
                    ],
                    "functionName": {
                      "name": "copy_memory_to_memory",
                      "nodeType": "YulIdentifier",
                      "src": "1266:21:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1266:52:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1266:52:20"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1327:23:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "1338:3:20"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "1343:6:20"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1334:3:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1334:16:20"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nodeType": "YulIdentifier",
                      "src": "1327:3:20"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "1072:5:20",
                "type": ""
              },
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "1079:3:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "1087:3:20",
                "type": ""
              }
            ],
            "src": "983:373:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1508:181:20",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "1518:74:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "1584:3:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1589:2:20",
                        "type": "",
                        "value": "29"
                      }
                    ],
                    "functionName": {
                      "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "1525:58:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1525:67:20"
                  },
                  "variableNames": [
                    {
                      "name": "pos",
                      "nodeType": "YulIdentifier",
                      "src": "1518:3:20"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "1613:3:20"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1618:1:20",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1609:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1609:11:20"
                      },
                      {
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "1622:31:20",
                        "type": "",
                        "value": "Oracle: token is zero address"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1602:6:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1602:52:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1602:52:20"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1664:19:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "1675:3:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1680:2:20",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1671:3:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1671:12:20"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nodeType": "YulIdentifier",
                      "src": "1664:3:20"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_t_stringliteral_368a000050d2c2f953d3bcd0d3890d264885bfa36b329f94203a8755338c8f98_to_t_string_memory_ptr_fromStack",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "1496:3:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "1504:3:20",
                "type": ""
              }
            ],
            "src": "1362:327:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1760:53:20",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "1777:3:20"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "1800:5:20"
                          }
                        ],
                        "functionName": {
                          "name": "cleanup_t_uint256",
                          "nodeType": "YulIdentifier",
                          "src": "1782:17:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1782:24:20"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1770:6:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1770:37:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1770:37:20"
                }
              ]
            },
            "name": "abi_encode_t_uint256_to_t_uint256_fromStack",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "1748:5:20",
                "type": ""
              },
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "1755:3:20",
                "type": ""
              }
            ],
            "src": "1695:118:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1953:137:20",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "1964:100:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "2051:6:20"
                      },
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "2060:3:20"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "1971:79:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1971:93:20"
                  },
                  "variableNames": [
                    {
                      "name": "pos",
                      "nodeType": "YulIdentifier",
                      "src": "1964:3:20"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2074:10:20",
                  "value": {
                    "name": "pos",
                    "nodeType": "YulIdentifier",
                    "src": "2081:3:20"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nodeType": "YulIdentifier",
                      "src": "2074:3:20"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "1932:3:20",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "1938:6:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "1949:3:20",
                "type": ""
              }
            ],
            "src": "1819:271:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2194:124:20",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "2204:26:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2216:9:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2227:2:20",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "2212:3:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2212:18:20"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "2204:4:20"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "2284:6:20"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2297:9:20"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2308:1:20",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2293:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2293:17:20"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_address_to_t_address_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "2240:43:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2240:71:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2240:71:20"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2166:9:20",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "2178:6:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "2189:4:20",
                "type": ""
              }
            ],
            "src": "2096:222:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2495:248:20",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "2505:26:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2517:9:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2528:2:20",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "2513:3:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2513:18:20"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "2505:4:20"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2552:9:20"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2563:1:20",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2548:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2548:17:20"
                      },
                      {
                        "arguments": [
                          {
                            "name": "tail",
                            "nodeType": "YulIdentifier",
                            "src": "2571:4:20"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2577:9:20"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "2567:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2567:20:20"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2541:6:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2541:47:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2541:47:20"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2597:139:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "tail",
                        "nodeType": "YulIdentifier",
                        "src": "2731:4:20"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_stringliteral_368a000050d2c2f953d3bcd0d3890d264885bfa36b329f94203a8755338c8f98_to_t_string_memory_ptr_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "2605:124:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2605:131:20"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "2597:4:20"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_368a000050d2c2f953d3bcd0d3890d264885bfa36b329f94203a8755338c8f98__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2475:9:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "2490:4:20",
                "type": ""
              }
            ],
            "src": "2324:419:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2847:124:20",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "2857:26:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2869:9:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2880:2:20",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "2865:3:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2865:18:20"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "2857:4:20"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "2937:6:20"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2950:9:20"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2961:1:20",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2946:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2946:17:20"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_uint256_to_t_uint256_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "2893:43:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2893:71:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2893:71:20"
                }
              ]
            },
            "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2819:9:20",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "2831:6:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "2842:4:20",
                "type": ""
              }
            ],
            "src": "2749:222:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3035:40:20",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "3046:22:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "3062:5:20"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "3056:5:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3056:12:20"
                  },
                  "variableNames": [
                    {
                      "name": "length",
                      "nodeType": "YulIdentifier",
                      "src": "3046:6:20"
                    }
                  ]
                }
              ]
            },
            "name": "array_length_t_bytes_memory_ptr",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "3018:5:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "3028:6:20",
                "type": ""
              }
            ],
            "src": "2977:98:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3194:34:20",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "3204:18:20",
                  "value": {
                    "name": "pos",
                    "nodeType": "YulIdentifier",
                    "src": "3219:3:20"
                  },
                  "variableNames": [
                    {
                      "name": "updated_pos",
                      "nodeType": "YulIdentifier",
                      "src": "3204:11:20"
                    }
                  ]
                }
              ]
            },
            "name": "array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "3166:3:20",
                "type": ""
              },
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "3171:6:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "updated_pos",
                "nodeType": "YulTypedName",
                "src": "3182:11:20",
                "type": ""
              }
            ],
            "src": "3081:147:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3330:73:20",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "3347:3:20"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "3352:6:20"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3340:6:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3340:19:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3340:19:20"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3368:29:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "3387:3:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3392:4:20",
                        "type": "",
                        "value": "0x20"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "3383:3:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3383:14:20"
                  },
                  "variableNames": [
                    {
                      "name": "updated_pos",
                      "nodeType": "YulIdentifier",
                      "src": "3368:11:20"
                    }
                  ]
                }
              ]
            },
            "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "3302:3:20",
                "type": ""
              },
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "3307:6:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "updated_pos",
                "nodeType": "YulTypedName",
                "src": "3318:11:20",
                "type": ""
              }
            ],
            "src": "3234:169:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3454:51:20",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "3464:35:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "3493:5:20"
                      }
                    ],
                    "functionName": {
                      "name": "cleanup_t_uint160",
                      "nodeType": "YulIdentifier",
                      "src": "3475:17:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3475:24:20"
                  },
                  "variableNames": [
                    {
                      "name": "cleaned",
                      "nodeType": "YulIdentifier",
                      "src": "3464:7:20"
                    }
                  ]
                }
              ]
            },
            "name": "cleanup_t_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "3436:5:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "cleaned",
                "nodeType": "YulTypedName",
                "src": "3446:7:20",
                "type": ""
              }
            ],
            "src": "3409:96:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3556:81:20",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "3566:65:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "3581:5:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3588:42:20",
                        "type": "",
                        "value": "0xffffffffffffffffffffffffffffffffffffffff"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "3577:3:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3577:54:20"
                  },
                  "variableNames": [
                    {
                      "name": "cleaned",
                      "nodeType": "YulIdentifier",
                      "src": "3566:7:20"
                    }
                  ]
                }
              ]
            },
            "name": "cleanup_t_uint160",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "3538:5:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "cleaned",
                "nodeType": "YulTypedName",
                "src": "3548:7:20",
                "type": ""
              }
            ],
            "src": "3511:126:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3688:32:20",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "3698:16:20",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "3709:5:20"
                  },
                  "variableNames": [
                    {
                      "name": "cleaned",
                      "nodeType": "YulIdentifier",
                      "src": "3698:7:20"
                    }
                  ]
                }
              ]
            },
            "name": "cleanup_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "3670:5:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "cleaned",
                "nodeType": "YulTypedName",
                "src": "3680:7:20",
                "type": ""
              }
            ],
            "src": "3643:77:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3775:258:20",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "3785:10:20",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "3794:1:20",
                    "type": "",
                    "value": "0"
                  },
                  "variables": [
                    {
                      "name": "i",
                      "nodeType": "YulTypedName",
                      "src": "3789:1:20",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3854:63:20",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "dst",
                                  "nodeType": "YulIdentifier",
                                  "src": "3879:3:20"
                                },
                                {
                                  "name": "i",
                                  "nodeType": "YulIdentifier",
                                  "src": "3884:1:20"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "3875:3:20"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3875:11:20"
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "src",
                                      "nodeType": "YulIdentifier",
                                      "src": "3898:3:20"
                                    },
                                    {
                                      "name": "i",
                                      "nodeType": "YulIdentifier",
                                      "src": "3903:1:20"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "3894:3:20"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "3894:11:20"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nodeType": "YulIdentifier",
                                "src": "3888:5:20"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3888:18:20"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "3868:6:20"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3868:39:20"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3868:39:20"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "i",
                        "nodeType": "YulIdentifier",
                        "src": "3815:1:20"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "3818:6:20"
                      }
                    ],
                    "functionName": {
                      "name": "lt",
                      "nodeType": "YulIdentifier",
                      "src": "3812:2:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3812:13:20"
                  },
                  "nodeType": "YulForLoop",
                  "post": {
                    "nodeType": "YulBlock",
                    "src": "3826:19:20",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "3828:15:20",
                        "value": {
                          "arguments": [
                            {
                              "name": "i",
                              "nodeType": "YulIdentifier",
                              "src": "3837:1:20"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3840:2:20",
                              "type": "",
                              "value": "32"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "3833:3:20"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3833:10:20"
                        },
                        "variableNames": [
                          {
                            "name": "i",
                            "nodeType": "YulIdentifier",
                            "src": "3828:1:20"
                          }
                        ]
                      }
                    ]
                  },
                  "pre": {
                    "nodeType": "YulBlock",
                    "src": "3808:3:20",
                    "statements": []
                  },
                  "src": "3804:113:20"
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3951:76:20",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "dst",
                                  "nodeType": "YulIdentifier",
                                  "src": "4001:3:20"
                                },
                                {
                                  "name": "length",
                                  "nodeType": "YulIdentifier",
                                  "src": "4006:6:20"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "3997:3:20"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3997:16:20"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4015:1:20",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "3990:6:20"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3990:27:20"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3990:27:20"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "i",
                        "nodeType": "YulIdentifier",
                        "src": "3932:1:20"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "3935:6:20"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "3929:2:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3929:13:20"
                  },
                  "nodeType": "YulIf",
                  "src": "3926:2:20"
                }
              ]
            },
            "name": "copy_memory_to_memory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "src",
                "nodeType": "YulTypedName",
                "src": "3757:3:20",
                "type": ""
              },
              {
                "name": "dst",
                "nodeType": "YulTypedName",
                "src": "3762:3:20",
                "type": ""
              },
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "3767:6:20",
                "type": ""
              }
            ],
            "src": "3726:307:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4082:79:20",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "4139:16:20",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4148:1:20",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4151:1:20",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "4141:6:20"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4141:12:20"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4141:12:20"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "4105:5:20"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "4130:5:20"
                              }
                            ],
                            "functionName": {
                              "name": "cleanup_t_address",
                              "nodeType": "YulIdentifier",
                              "src": "4112:17:20"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "4112:24:20"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "4102:2:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4102:35:20"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "4095:6:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4095:43:20"
                  },
                  "nodeType": "YulIf",
                  "src": "4092:2:20"
                }
              ]
            },
            "name": "validator_revert_t_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "4075:5:20",
                "type": ""
              }
            ],
            "src": "4039:122:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4210:79:20",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "4267:16:20",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4276:1:20",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4279:1:20",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "4269:6:20"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4269:12:20"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4269:12:20"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "4233:5:20"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "4258:5:20"
                              }
                            ],
                            "functionName": {
                              "name": "cleanup_t_uint256",
                              "nodeType": "YulIdentifier",
                              "src": "4240:17:20"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "4240:24:20"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "4230:2:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4230:35:20"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "4223:6:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4223:43:20"
                  },
                  "nodeType": "YulIf",
                  "src": "4220:2:20"
                }
              ]
            },
            "name": "validator_revert_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "4203:5:20",
                "type": ""
              }
            ],
            "src": "4167:122:20"
          }
        ]
      },
      "contents": "{\n\n    function abi_decode_t_address(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_address(value)\n    }\n\n    function abi_decode_t_uint256_fromMemory(offset, end) -> value {\n        value := mload(offset)\n        validator_revert_t_uint256(value)\n    }\n\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_uint256_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_encode_t_address_to_t_address_fromStack(value, pos) {\n        mstore(pos, cleanup_t_address(value))\n    }\n\n    function abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack(value, pos) -> end {\n        let length := array_length_t_bytes_memory_ptr(value)\n        pos := array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack(pos, length)\n        copy_memory_to_memory(add(value, 0x20), pos, length)\n        end := add(pos, length)\n    }\n\n    function abi_encode_t_stringliteral_368a000050d2c2f953d3bcd0d3890d264885bfa36b329f94203a8755338c8f98_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 29)\n\n        mstore(add(pos, 0), \"Oracle: token is zero address\")\n\n        end := add(pos, 32)\n    }\n\n    function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n        mstore(pos, cleanup_t_uint256(value))\n    }\n\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos , value0) -> end {\n\n        pos := abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack(value0,  pos)\n\n        end := pos\n    }\n\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function abi_encode_tuple_t_stringliteral_368a000050d2c2f953d3bcd0d3890d264885bfa36b329f94203a8755338c8f98__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_368a000050d2c2f953d3bcd0d3890d264885bfa36b329f94203a8755338c8f98_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function array_length_t_bytes_memory_ptr(value) -> length {\n\n        length := mload(value)\n\n    }\n\n    function array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack(pos, length) -> updated_pos {\n        updated_pos := pos\n    }\n\n    function array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length) -> updated_pos {\n        mstore(pos, length)\n        updated_pos := add(pos, 0x20)\n    }\n\n    function cleanup_t_address(value) -> cleaned {\n        cleaned := cleanup_t_uint160(value)\n    }\n\n    function cleanup_t_uint160(value) -> cleaned {\n        cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n    }\n\n    function cleanup_t_uint256(value) -> cleaned {\n        cleaned := value\n    }\n\n    function copy_memory_to_memory(src, dst, length) {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        if gt(i, length)\n        {\n            // clear end\n            mstore(add(dst, length), 0)\n        }\n    }\n\n    function validator_revert_t_address(value) {\n        if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n    }\n\n    function validator_revert_t_uint256(value) {\n        if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n    }\n\n}\n",
      "id": 20,
      "language": "Yul",
      "name": "#utility.yul"
    }
  ],
  "sourceMap": "96:718:4:-:0;;;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "96:718:4:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;325:487;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;404:7;452:1;435:19;;:5;:19;;;;427:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;500:12;514:23;175:42;541:21;;608:5;563:51;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;541:74;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;499:116;;;;663:1;654:7;651:14;648:2;;;714:16;707:4;695:10;691:21;684:47;648:2;783:10;772:33;;;;;;;;;;;;:::i;:::-;765:40;;;;325:487;;;:::o;7:139:20:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;301:262::-;;409:2;397:9;388:7;384:23;380:32;377:2;;;425:1;422;415:12;377:2;468:1;493:53;538:7;529:6;518:9;514:22;493:53;:::i;:::-;483:63;;439:117;367:196;;;;:::o;569:284::-;;688:2;676:9;667:7;663:23;659:32;656:2;;;704:1;701;694:12;656:2;747:1;772:64;828:7;819:6;808:9;804:22;772:64;:::i;:::-;762:74;;718:128;646:207;;;;:::o;859:118::-;946:24;964:5;946:24;:::i;:::-;941:3;934:37;924:53;;:::o;983:373::-;;1115:38;1147:5;1115:38;:::i;:::-;1169:88;1250:6;1245:3;1169:88;:::i;:::-;1162:95;;1266:52;1311:6;1306:3;1299:4;1292:5;1288:16;1266:52;:::i;:::-;1343:6;1338:3;1334:16;1327:23;;1091:265;;;;;:::o;1362:327::-;;1525:67;1589:2;1584:3;1525:67;:::i;:::-;1518:74;;1622:31;1618:1;1613:3;1609:11;1602:52;1680:2;1675:3;1671:12;1664:19;;1508:181;;;:::o;1695:118::-;1782:24;1800:5;1782:24;:::i;:::-;1777:3;1770:37;1760:53;;:::o;1819:271::-;;1971:93;2060:3;2051:6;1971:93;:::i;:::-;1964:100;;2081:3;2074:10;;1953:137;;;;:::o;2096:222::-;;2227:2;2216:9;2212:18;2204:26;;2240:71;2308:1;2297:9;2293:17;2284:6;2240:71;:::i;:::-;2194:124;;;;:::o;2324:419::-;;2528:2;2517:9;2513:18;2505:26;;2577:9;2571:4;2567:20;2563:1;2552:9;2548:17;2541:47;2605:131;2731:4;2605:131;:::i;:::-;2597:139;;2495:248;;;:::o;2749:222::-;;2880:2;2869:9;2865:18;2857:26;;2893:71;2961:1;2950:9;2946:17;2937:6;2893:71;:::i;:::-;2847:124;;;;:::o;2977:98::-;;3062:5;3056:12;3046:22;;3035:40;;;:::o;3081:147::-;;3219:3;3204:18;;3194:34;;;;:::o;3234:169::-;;3352:6;3347:3;3340:19;3392:4;3387:3;3383:14;3368:29;;3330:73;;;;:::o;3409:96::-;;3475:24;3493:5;3475:24;:::i;:::-;3464:35;;3454:51;;;:::o;3511:126::-;;3588:42;3581:5;3577:54;3566:65;;3556:81;;;:::o;3643:77::-;;3709:5;3698:16;;3688:32;;;:::o;3726:307::-;3794:1;3804:113;3818:6;3815:1;3812:13;3804:113;;;3903:1;3898:3;3894:11;3888:18;3884:1;3879:3;3875:11;3868:39;3840:2;3837:1;3833:10;3828:15;;3804:113;;;3935:6;3932:1;3929:13;3926:2;;;4015:1;4006:6;4001:3;3997:16;3990:27;3926:2;3775:258;;;;:::o;4039:122::-;4112:24;4130:5;4112:24;:::i;:::-;4105:5;4102:35;4092:2;;4151:1;4148;4141:12;4092:2;4082:79;:::o;4167:122::-;4240:24;4258:5;4240:24;:::i;:::-;4233:5;4230:35;4220:2;;4279:1;4276;4269:12;4220:2;4210:79;:::o",
  "source": "// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.0;\n\nimport \"./IOracle.sol\";\n\ncontract Oracle is IOracle {\n    address constant private precompile = address(0x0000000000000000000000000000000000000403);\n\n    /**\n     * @dev Get the price of the currency_id.\n     * Returns the (price, timestamp)\n     */\n    function getPrice(address token)\n    public\n    view\n    override\n    returns (uint256)\n    {\n        require(token != address(0), \"Oracle: token is zero address\");\n\n        (bool success, bytes memory returnData) = precompile.staticcall(abi.encodeWithSignature(\"getPrice(address)\", token));\n        assembly {\n            if eq(success, 0) {\n                revert(add(returnData, 0x20), returndatasize())\n            }\n        }\n\n        return abi.decode(returnData, (uint256));\n    }\n}\n",
  "sourcePath": "/home/runner/work/predeploy-contracts/predeploy-contracts/contracts/oracle/Oracle.sol",
  "ast": {
    "absolutePath": "/home/runner/work/predeploy-contracts/predeploy-contracts/contracts/oracle/Oracle.sol",
    "exportedSymbols": {
      "IOracle": [
        822
      ],
      "Oracle": [
        876
      ]
    },
    "id": 877,
    "license": "GPL-3.0-or-later",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 824,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "46:23:4"
      },
      {
        "absolutePath": "/home/runner/work/predeploy-contracts/predeploy-contracts/contracts/oracle/IOracle.sol",
        "file": "./IOracle.sol",
        "id": 825,
        "nodeType": "ImportDirective",
        "scope": 877,
        "sourceUnit": 823,
        "src": "71:23:4",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 826,
              "name": "IOracle",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 822,
              "src": "115:7:4"
            },
            "id": 827,
            "nodeType": "InheritanceSpecifier",
            "src": "115:7:4"
          }
        ],
        "contractDependencies": [
          822
        ],
        "contractKind": "contract",
        "fullyImplemented": true,
        "id": 876,
        "linearizedBaseContracts": [
          876,
          822
        ],
        "name": "Oracle",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "id": 833,
            "mutability": "constant",
            "name": "precompile",
            "nodeType": "VariableDeclaration",
            "scope": 876,
            "src": "129:89:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 828,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "129:7:4",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": {
              "arguments": [
                {
                  "hexValue": "307830303030303030303030303030303030303030303030303030303030303030303030303030343033",
                  "id": 831,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "175:42:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "value": "0x0000000000000000000000000000000000000403"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                ],
                "id": 830,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "167:7:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_address_$",
                  "typeString": "type(address)"
                },
                "typeName": {
                  "id": 829,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "167:7:4",
                  "typeDescriptions": {}
                }
              },
              "id": 832,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "167:51:4",
              "tryCall": false,
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "private"
          },
          {
            "baseFunctions": [
              821
            ],
            "body": {
              "id": 874,
              "nodeType": "Block",
              "src": "417:395:4",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 848,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 843,
                          "name": "token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 836,
                          "src": "435:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 846,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "452:1:4",
                              "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": 845,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "444:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 844,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "444:7:4",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 847,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "444:10:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "435:19:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4f7261636c653a20746f6b656e206973207a65726f2061646472657373",
                        "id": 849,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "456:31:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_368a000050d2c2f953d3bcd0d3890d264885bfa36b329f94203a8755338c8f98",
                          "typeString": "literal_string \"Oracle: token is zero address\""
                        },
                        "value": "Oracle: token is zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_368a000050d2c2f953d3bcd0d3890d264885bfa36b329f94203a8755338c8f98",
                          "typeString": "literal_string \"Oracle: token is zero address\""
                        }
                      ],
                      "id": 842,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "427:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 850,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "427:61:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 851,
                  "nodeType": "ExpressionStatement",
                  "src": "427:61:4"
                },
                {
                  "assignments": [
                    853,
                    855
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 853,
                      "mutability": "mutable",
                      "name": "success",
                      "nodeType": "VariableDeclaration",
                      "scope": 874,
                      "src": "500:12:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 852,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "500:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 855,
                      "mutability": "mutable",
                      "name": "returnData",
                      "nodeType": "VariableDeclaration",
                      "scope": 874,
                      "src": "514:23:4",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 854,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "514:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 864,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "6765745072696365286164647265737329",
                            "id": 860,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "587:19:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_41976e0924e084835685c91898001f69cccb35bc0c6e18e30ce86f3869f2a8a4",
                              "typeString": "literal_string \"getPrice(address)\""
                            },
                            "value": "getPrice(address)"
                          },
                          {
                            "id": 861,
                            "name": "token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 836,
                            "src": "608:5:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_41976e0924e084835685c91898001f69cccb35bc0c6e18e30ce86f3869f2a8a4",
                              "typeString": "literal_string \"getPrice(address)\""
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "id": 858,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967295,
                            "src": "563:3:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 859,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodeWithSignature",
                          "nodeType": "MemberAccess",
                          "src": "563: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": 862,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "563:51:4",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "id": 856,
                        "name": "precompile",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 833,
                        "src": "541:10:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 857,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "staticcall",
                      "nodeType": "MemberAccess",
                      "src": "541:21:4",
                      "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": 863,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "541:74:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "499:116:4"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "634:121:4",
                    "statements": [
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "666:79:4",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "returnData",
                                        "nodeType": "YulIdentifier",
                                        "src": "695:10:4"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "707:4:4",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "691:3:4"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "691:21:4"
                                  },
                                  {
                                    "arguments": [],
                                    "functionName": {
                                      "name": "returndatasize",
                                      "nodeType": "YulIdentifier",
                                      "src": "714:14:4"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "714:16:4"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "684:6:4"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "684:47:4"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "684:47:4"
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "name": "success",
                              "nodeType": "YulIdentifier",
                              "src": "654:7:4"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "663:1:4",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "eq",
                            "nodeType": "YulIdentifier",
                            "src": "651:2:4"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "651:14:4"
                        },
                        "nodeType": "YulIf",
                        "src": "648:2:4"
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 855,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "695:10:4",
                      "valueSize": 1
                    },
                    {
                      "declaration": 853,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "654:7:4",
                      "valueSize": 1
                    }
                  ],
                  "id": 865,
                  "nodeType": "InlineAssembly",
                  "src": "625:130:4"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 868,
                        "name": "returnData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 855,
                        "src": "783:10:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "components": [
                          {
                            "id": 870,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "796:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": {
                              "id": 869,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "796:7:4",
                              "typeDescriptions": {}
                            }
                          }
                        ],
                        "id": 871,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "795: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": 866,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967295,
                        "src": "772:3:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 867,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "decode",
                      "nodeType": "MemberAccess",
                      "src": "772:10:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                        "typeString": "function () pure"
                      }
                    },
                    "id": 872,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "772:33:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 841,
                  "id": 873,
                  "nodeType": "Return",
                  "src": "765:40:4"
                }
              ]
            },
            "documentation": {
              "id": 834,
              "nodeType": "StructuredDocumentation",
              "src": "225:95:4",
              "text": " @dev Get the price of the currency_id.\n Returns the (price, timestamp)"
            },
            "functionSelector": "41976e09",
            "id": 875,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getPrice",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 838,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "382:8:4"
            },
            "parameters": {
              "id": 837,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 836,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 875,
                  "src": "343:13:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 835,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "343:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "342:15:4"
            },
            "returnParameters": {
              "id": 841,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 840,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 875,
                  "src": "404:7:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 839,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "404:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "403:9:4"
            },
            "scope": 876,
            "src": "325:487:4",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "scope": 877,
        "src": "96:718:4"
      }
    ],
    "src": "46:769:4"
  },
  "legacyAST": {
    "absolutePath": "/home/runner/work/predeploy-contracts/predeploy-contracts/contracts/oracle/Oracle.sol",
    "exportedSymbols": {
      "IOracle": [
        822
      ],
      "Oracle": [
        876
      ]
    },
    "id": 877,
    "license": "GPL-3.0-or-later",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 824,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "46:23:4"
      },
      {
        "absolutePath": "/home/runner/work/predeploy-contracts/predeploy-contracts/contracts/oracle/IOracle.sol",
        "file": "./IOracle.sol",
        "id": 825,
        "nodeType": "ImportDirective",
        "scope": 877,
        "sourceUnit": 823,
        "src": "71:23:4",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 826,
              "name": "IOracle",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 822,
              "src": "115:7:4"
            },
            "id": 827,
            "nodeType": "InheritanceSpecifier",
            "src": "115:7:4"
          }
        ],
        "contractDependencies": [
          822
        ],
        "contractKind": "contract",
        "fullyImplemented": true,
        "id": 876,
        "linearizedBaseContracts": [
          876,
          822
        ],
        "name": "Oracle",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "id": 833,
            "mutability": "constant",
            "name": "precompile",
            "nodeType": "VariableDeclaration",
            "scope": 876,
            "src": "129:89:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 828,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "129:7:4",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": {
              "arguments": [
                {
                  "hexValue": "307830303030303030303030303030303030303030303030303030303030303030303030303030343033",
                  "id": 831,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "175:42:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "value": "0x0000000000000000000000000000000000000403"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                ],
                "id": 830,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "167:7:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_address_$",
                  "typeString": "type(address)"
                },
                "typeName": {
                  "id": 829,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "167:7:4",
                  "typeDescriptions": {}
                }
              },
              "id": 832,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "167:51:4",
              "tryCall": false,
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "private"
          },
          {
            "baseFunctions": [
              821
            ],
            "body": {
              "id": 874,
              "nodeType": "Block",
              "src": "417:395:4",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 848,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 843,
                          "name": "token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 836,
                          "src": "435:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 846,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "452:1:4",
                              "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": 845,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "444:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 844,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "444:7:4",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 847,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "444:10:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "435:19:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4f7261636c653a20746f6b656e206973207a65726f2061646472657373",
                        "id": 849,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "456:31:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_368a000050d2c2f953d3bcd0d3890d264885bfa36b329f94203a8755338c8f98",
                          "typeString": "literal_string \"Oracle: token is zero address\""
                        },
                        "value": "Oracle: token is zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_368a000050d2c2f953d3bcd0d3890d264885bfa36b329f94203a8755338c8f98",
                          "typeString": "literal_string \"Oracle: token is zero address\""
                        }
                      ],
                      "id": 842,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "427:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 850,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "427:61:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 851,
                  "nodeType": "ExpressionStatement",
                  "src": "427:61:4"
                },
                {
                  "assignments": [
                    853,
                    855
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 853,
                      "mutability": "mutable",
                      "name": "success",
                      "nodeType": "VariableDeclaration",
                      "scope": 874,
                      "src": "500:12:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 852,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "500:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 855,
                      "mutability": "mutable",
                      "name": "returnData",
                      "nodeType": "VariableDeclaration",
                      "scope": 874,
                      "src": "514:23:4",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 854,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "514:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 864,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "6765745072696365286164647265737329",
                            "id": 860,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "587:19:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_41976e0924e084835685c91898001f69cccb35bc0c6e18e30ce86f3869f2a8a4",
                              "typeString": "literal_string \"getPrice(address)\""
                            },
                            "value": "getPrice(address)"
                          },
                          {
                            "id": 861,
                            "name": "token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 836,
                            "src": "608:5:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_41976e0924e084835685c91898001f69cccb35bc0c6e18e30ce86f3869f2a8a4",
                              "typeString": "literal_string \"getPrice(address)\""
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "id": 858,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967295,
                            "src": "563:3:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 859,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodeWithSignature",
                          "nodeType": "MemberAccess",
                          "src": "563: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": 862,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "563:51:4",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "id": 856,
                        "name": "precompile",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 833,
                        "src": "541:10:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 857,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "staticcall",
                      "nodeType": "MemberAccess",
                      "src": "541:21:4",
                      "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": 863,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "541:74:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "499:116:4"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "634:121:4",
                    "statements": [
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "666:79:4",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "returnData",
                                        "nodeType": "YulIdentifier",
                                        "src": "695:10:4"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "707:4:4",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "691:3:4"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "691:21:4"
                                  },
                                  {
                                    "arguments": [],
                                    "functionName": {
                                      "name": "returndatasize",
                                      "nodeType": "YulIdentifier",
                                      "src": "714:14:4"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "714:16:4"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "684:6:4"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "684:47:4"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "684:47:4"
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "name": "success",
                              "nodeType": "YulIdentifier",
                              "src": "654:7:4"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "663:1:4",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "eq",
                            "nodeType": "YulIdentifier",
                            "src": "651:2:4"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "651:14:4"
                        },
                        "nodeType": "YulIf",
                        "src": "648:2:4"
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 855,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "695:10:4",
                      "valueSize": 1
                    },
                    {
                      "declaration": 853,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "654:7:4",
                      "valueSize": 1
                    }
                  ],
                  "id": 865,
                  "nodeType": "InlineAssembly",
                  "src": "625:130:4"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 868,
                        "name": "returnData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 855,
                        "src": "783:10:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "components": [
                          {
                            "id": 870,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "796:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": {
                              "id": 869,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "796:7:4",
                              "typeDescriptions": {}
                            }
                          }
                        ],
                        "id": 871,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "795: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": 866,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967295,
                        "src": "772:3:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 867,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "decode",
                      "nodeType": "MemberAccess",
                      "src": "772:10:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                        "typeString": "function () pure"
                      }
                    },
                    "id": 872,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "772:33:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 841,
                  "id": 873,
                  "nodeType": "Return",
                  "src": "765:40:4"
                }
              ]
            },
            "documentation": {
              "id": 834,
              "nodeType": "StructuredDocumentation",
              "src": "225:95:4",
              "text": " @dev Get the price of the currency_id.\n Returns the (price, timestamp)"
            },
            "functionSelector": "41976e09",
            "id": 875,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getPrice",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 838,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "382:8:4"
            },
            "parameters": {
              "id": 837,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 836,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 875,
                  "src": "343:13:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 835,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "343:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "342:15:4"
            },
            "returnParameters": {
              "id": 841,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 840,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 875,
                  "src": "404:7:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 839,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "404:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "403:9:4"
            },
            "scope": 876,
            "src": "325:487:4",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "scope": 877,
        "src": "96:718:4"
      }
    ],
    "src": "46:769:4"
  },
  "compiler": {
    "name": "solc",
    "version": "0.8.0+commit.c7dfd78e.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.3.1",
  "updatedAt": "2021-11-23T02:17:24.045Z",
  "devdoc": {
    "kind": "dev",
    "methods": {
      "getPrice(address)": {
        "details": "Get the price of the currency_id. Returns the (price, timestamp)"
      }
    },
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "version": 1
  }
}