RouterETH.json 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. {
  2. "address": "0xAF9917f5E26F9eB6BAcfEd518F140Cc5bA46fA37",
  3. "abi": [
  4. {
  5. "inputs": [
  6. {
  7. "internalType": "address",
  8. "name": "_mirrorgateEthVault",
  9. "type": "address"
  10. },
  11. {
  12. "internalType": "address",
  13. "name": "_mirrorgateRouter",
  14. "type": "address"
  15. },
  16. {
  17. "internalType": "uint16",
  18. "name": "_poolId",
  19. "type": "uint16"
  20. }
  21. ],
  22. "stateMutability": "nonpayable",
  23. "type": "constructor"
  24. },
  25. {
  26. "inputs": [],
  27. "name": "addLiquidityETH",
  28. "outputs": [],
  29. "stateMutability": "payable",
  30. "type": "function"
  31. },
  32. {
  33. "inputs": [],
  34. "name": "mirrorgateEthVault",
  35. "outputs": [
  36. {
  37. "internalType": "address",
  38. "name": "",
  39. "type": "address"
  40. }
  41. ],
  42. "stateMutability": "view",
  43. "type": "function"
  44. },
  45. {
  46. "inputs": [],
  47. "name": "mirrorgateRouter",
  48. "outputs": [
  49. {
  50. "internalType": "contract IMirrorgateRouter",
  51. "name": "",
  52. "type": "address"
  53. }
  54. ],
  55. "stateMutability": "view",
  56. "type": "function"
  57. },
  58. {
  59. "inputs": [],
  60. "name": "poolId",
  61. "outputs": [
  62. {
  63. "internalType": "uint16",
  64. "name": "",
  65. "type": "uint16"
  66. }
  67. ],
  68. "stateMutability": "view",
  69. "type": "function"
  70. },
  71. {
  72. "inputs": [
  73. {
  74. "internalType": "uint16",
  75. "name": "_dstChainId",
  76. "type": "uint16"
  77. },
  78. {
  79. "internalType": "address payable",
  80. "name": "_refundAddress",
  81. "type": "address"
  82. },
  83. {
  84. "internalType": "bytes",
  85. "name": "_toAddress",
  86. "type": "bytes"
  87. },
  88. {
  89. "internalType": "uint256",
  90. "name": "_amountLD",
  91. "type": "uint256"
  92. },
  93. {
  94. "internalType": "uint256",
  95. "name": "_minAmountLD",
  96. "type": "uint256"
  97. }
  98. ],
  99. "name": "swapETH",
  100. "outputs": [],
  101. "stateMutability": "payable",
  102. "type": "function"
  103. },
  104. {
  105. "stateMutability": "payable",
  106. "type": "receive"
  107. }
  108. ],
  109. "transactionHash": "0xfcc98666a42f550a14b8df962389a61df9c5d89bf9eb700963403be383662f85",
  110. "receipt": {
  111. "to": null,
  112. "from": "0x368715F09C1AB5E0B55bF5bA19cD887189A28DBE",
  113. "contractAddress": "0xAF9917f5E26F9eB6BAcfEd518F140Cc5bA46fA37",
  114. "transactionIndex": 3,
  115. "gasUsed": "32736560",
  116. "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
  117. "blockHash": "0x17e4571c106e5e2e819a95118860a8ebb62431d4fd99291ff18a230c2a980ae0",
  118. "transactionHash": "0xfcc98666a42f550a14b8df962389a61df9c5d89bf9eb700963403be383662f85",
  119. "logs": [],
  120. "blockNumber": 14285078,
  121. "cumulativeGasUsed": "61908828",
  122. "status": 1,
  123. "byzantium": true
  124. },
  125. "args": [
  126. "0x00ebaBf931186c546d2413D553Bc81d2435d01Cf",
  127. "0x47590c3D11e9366215416f2a3A03Cf21AdB716AE",
  128. 0
  129. ],
  130. "numDeployments": 1,
  131. "solcInputHash": "c474952dec744e7c88dc7c3d2b8d163f",
  132. "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_mirrorgateEthVault\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_mirrorgateRouter\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"_poolId\",\"type\":\"uint16\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"addLiquidityETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mirrorgateEthVault\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mirrorgateRouter\",\"outputs\":[{\"internalType\":\"contract IMirrorgateRouter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"poolId\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_dstChainId\",\"type\":\"uint16\"},{\"internalType\":\"address payable\",\"name\":\"_refundAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_toAddress\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_minAmountLD\",\"type\":\"uint256\"}],\"name\":\"swapETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/RouterETH.sol\":\"RouterETH\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/RouterETH.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\r\\n\\r\\npragma solidity 0.7.6;\\r\\npragma abicoder v2;\\r\\n\\r\\nimport \\\"./interfaces/IMirrorgateRouter.sol\\\";\\r\\nimport \\\"./interfaces/IMirrorgateEthVault.sol\\\";\\r\\n\\r\\ncontract RouterETH {\\r\\n address public immutable mirrorgateEthVault;\\r\\n IMirrorgateRouter public immutable mirrorgateRouter;\\r\\n uint16 public immutable poolId;\\r\\n\\r\\n constructor(address _mirrorgateEthVault, address _mirrorgateRouter, uint16 _poolId){\\r\\n require(_mirrorgateEthVault != address(0x0), \\\"RouterETH: _mirrorgateEthVault cant be 0x0\\\");\\r\\n require(_mirrorgateRouter != address(0x0), \\\"RouterETH: _mirrorgateRouter cant be 0x0\\\");\\r\\n mirrorgateEthVault = _mirrorgateEthVault;\\r\\n mirrorgateRouter = IMirrorgateRouter(_mirrorgateRouter);\\r\\n poolId = _poolId;\\r\\n }\\r\\n\\r\\n function addLiquidityETH() external payable {\\r\\n require(msg.value > 0, \\\"Mirrorgate: msg.value is 0\\\");\\r\\n\\r\\n uint256 amountLD = msg.value;\\r\\n\\r\\n // wrap the ETH into WETH\\r\\n IMirrorgateEthVault(mirrorgateEthVault).deposit{value: amountLD}();\\r\\n IMirrorgateEthVault(mirrorgateEthVault).approve(address(mirrorgateRouter), amountLD);\\r\\n\\r\\n // addLiquidity using the WETH that was just wrapped,\\r\\n // and mint the LP token to the msg.sender\\r\\n mirrorgateRouter.addLiquidity(\\r\\n poolId,\\r\\n amountLD,\\r\\n msg.sender\\r\\n );\\r\\n }\\r\\n\\r\\n // compose mirrorgate to swap ETH on the source to ETH on the destination\\r\\n function swapETH(\\r\\n uint16 _dstChainId, // destination mirrorgate chainId\\r\\n address payable _refundAddress, // refund additional messageFee to this address\\r\\n bytes calldata _toAddress, // the receiver of the destination ETH\\r\\n uint256 _amountLD, // the amount, in Local Decimals, to be swapped\\r\\n uint256 _minAmountLD // the minimum amount accepted out on destination\\r\\n ) external payable {\\r\\n require(msg.value > _amountLD, \\\"Mirrorgate: msg.value must be > _amountLD\\\");\\r\\n\\r\\n // wrap the ETH into WETH\\r\\n IMirrorgateEthVault(mirrorgateEthVault).deposit{value: _amountLD}();\\r\\n IMirrorgateEthVault(mirrorgateEthVault).approve(address(mirrorgateRouter), _amountLD);\\r\\n\\r\\n // messageFee is the remainder of the msg.value after wrap\\r\\n uint256 messageFee = msg.value - _amountLD;\\r\\n\\r\\n // compose a mirrorgate swap() using the WETH that was just wrapped\\r\\n mirrorgateRouter.swap{value: messageFee}(\\r\\n _dstChainId, // destination mirrorgate chainId\\r\\n poolId, // WETH mirrorgate poolId on source\\r\\n poolId, // WETH mirrorgate poolId on destination\\r\\n _refundAddress, // message refund address if overpaid\\r\\n _amountLD, // the amount in Local Decimals to swap()\\r\\n _minAmountLD, // the minimum amount swap()er would allow to get out (ie: slippage)\\r\\n IMirrorgateRouter.lzTxObj(0, 0, \\\"0x\\\"),\\r\\n _toAddress, // address on destination to send to\\r\\n bytes(\\\"\\\") // empty payload, since sending to EOA\\r\\n );\\r\\n }\\r\\n\\r\\n // this contract needs to accept ETH\\r\\n receive() external payable {}\\r\\n\\r\\n}\\r\\n\",\"keccak256\":\"0x31c7d4e3c365c9f96514ee99a31ccffe4e442b456d42c2dd96b141dec43a0459\",\"license\":\"BUSL-1.1\"},\"contracts/interfaces/IMirrorgateEthVault.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\r\\npragma solidity 0.7.6;\\r\\n\\r\\ninterface IMirrorgateEthVault {\\r\\n function deposit() external payable;\\r\\n\\r\\n function transfer(address to, uint value) external returns (bool);\\r\\n\\r\\n function withdraw(uint) external;\\r\\n\\r\\n function approve(address guy, uint wad) external returns (bool);\\r\\n\\r\\n function transferFrom(address src, address dst, uint wad) external returns (bool);\\r\\n}\\r\\n\",\"keccak256\":\"0xdf47cb2c23c753b5dc60855d22247cece601a94318f2cae85f34d239675ce71e\",\"license\":\"BUSL-1.1\"},\"contracts/interfaces/IMirrorgateRouter.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\r\\n\\r\\npragma solidity 0.7.6;\\r\\npragma abicoder v2;\\r\\n\\r\\ninterface IMirrorgateRouter {\\r\\n struct lzTxObj {\\r\\n uint256 dstGasForCall;\\r\\n uint256 dstNativeAmount;\\r\\n bytes dstNativeAddr;\\r\\n }\\r\\n\\r\\n function addLiquidity(\\r\\n uint256 _poolId,\\r\\n uint256 _amountLD,\\r\\n address _to\\r\\n ) external;\\r\\n\\r\\n function swap(\\r\\n uint16 _dstChainId,\\r\\n uint256 _srcPoolId,\\r\\n uint256 _dstPoolId,\\r\\n address payable _refundAddress,\\r\\n uint256 _amountLD,\\r\\n uint256 _minAmountLD,\\r\\n lzTxObj memory _lzTxParams,\\r\\n bytes calldata _to,\\r\\n bytes calldata _payload\\r\\n ) external payable;\\r\\n\\r\\n function redeemRemote(\\r\\n uint16 _dstChainId,\\r\\n uint256 _srcPoolId,\\r\\n uint256 _dstPoolId,\\r\\n address payable _refundAddress,\\r\\n uint256 _amountLP,\\r\\n uint256 _minAmountLD,\\r\\n bytes calldata _to,\\r\\n lzTxObj memory _lzTxParams\\r\\n ) external payable;\\r\\n\\r\\n function instantRedeemLocal(\\r\\n uint16 _srcPoolId,\\r\\n uint256 _amountLP,\\r\\n address _to\\r\\n ) external returns (uint256);\\r\\n\\r\\n function redeemLocal(\\r\\n uint16 _dstChainId,\\r\\n uint256 _srcPoolId,\\r\\n uint256 _dstPoolId,\\r\\n address payable _refundAddress,\\r\\n uint256 _amountLP,\\r\\n bytes calldata _to,\\r\\n lzTxObj memory _lzTxParams\\r\\n ) external payable;\\r\\n\\r\\n function sendCredits(\\r\\n uint16 _dstChainId,\\r\\n uint256 _srcPoolId,\\r\\n uint256 _dstPoolId,\\r\\n address payable _refundAddress\\r\\n ) external payable;\\r\\n\\r\\n function quoteLayerZeroFee(\\r\\n uint16 _dstChainId,\\r\\n uint8 _functionType,\\r\\n bytes calldata _toAddress,\\r\\n bytes calldata _transferAndCallPayload,\\r\\n lzTxObj memory _lzTxParams\\r\\n ) external view returns (uint256, uint256);\\r\\n}\\r\\n\",\"keccak256\":\"0x46cf8167a09621589cb2c56caeacf0bf31473dfa4acde15d73fb71a9cdf13f4e\",\"license\":\"BUSL-1.1\"}},\"version\":1}",
  133. "bytecode": "0x60e060405234801561001057600080fd5b50604051610aea380380610aea83398101604081905261002f916100d1565b6001600160a01b03831661005e5760405162461bcd60e51b81526004016100559061011d565b60405180910390fd5b6001600160a01b0382166100845760405162461bcd60e51b815260040161005590610167565b606092831b6001600160601b03199081166080529190921b1660a05260f01b6001600160f01b03191660c0526101af565b80516001600160a01b03811681146100cc57600080fd5b919050565b6000806000606084860312156100e5578283fd5b6100ee846100b5565b92506100fc602085016100b5565b9150604084015161ffff81168114610112578182fd5b809150509250925092565b6020808252602a908201527f526f757465724554483a205f6d6972726f72676174654574685661756c7420636040820152690616e74206265203078360b41b606082015260800190565b60208082526028908201527f526f757465724554483a205f6d6972726f7267617465526f757465722063616e604082015267074206265203078360c41b606082015260800190565b60805160601c60a05160601c60c05160f01c6108d061021a6000398061029452806102b552806103a652806105665250806101dd5280610263528061038252806104a5528061053952508060db528061012752806101ad52806103ef528061047552506108d06000f3fe60806040526004361061004e5760003560e01c80630a69940d1461005a5780631114cd2a1461008557806319d505af1461009a5780633e0dc34e146100af578063ed995307146100d157610055565b3661005557005b600080fd5b34801561006657600080fd5b5061006f6100d9565b60405161007c9190610713565b60405180910390f35b6100986100933660046105ee565b6100fd565b005b3480156100a657600080fd5b5061006f610380565b3480156100bb57600080fd5b506100c46103a4565b60405161007c91906107c0565b6100986103c8565b7f000000000000000000000000000000000000000000000000000000000000000081565b8134116101255760405162461bcd60e51b815260040161011c90610777565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b15801561018057600080fd5b505af1158015610194573d6000803e3d6000fd5b505060405163095ea7b360e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016935063095ea7b3925061020791507f0000000000000000000000000000000000000000000000000000000000000000908690600401610727565b602060405180830381600087803b15801561022157600080fd5b505af1158015610235573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061025991906105c7565b50600082340390507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639fbf10fc82897f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008b89896040518060600160405280600081526020016000815260200160405180604001604052806002815260200161060f60f31b8152508152508e8e604051806020016040528060008152506040518c63ffffffff1660e01b81526004016103459a999897969594939291906107cf565b6000604051808303818588803b15801561035e57600080fd5b505af1158015610372573d6000803e3d6000fd5b505050505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b600034116103e85760405162461bcd60e51b815260040161011c90610740565b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561044857600080fd5b505af115801561045c573d6000803e3d6000fd5b505060405163095ea7b360e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016935063095ea7b392506104cf91507f0000000000000000000000000000000000000000000000000000000000000000908590600401610727565b602060405180830381600087803b1580156104e957600080fd5b505af11580156104fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052191906105c7565b506040516321ec87bf60e21b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906387b21efc90610592907f00000000000000000000000000000000000000000000000000000000000000009085903390600401610875565b600060405180830381600087803b1580156105ac57600080fd5b505af11580156105c0573d6000803e3d6000fd5b5050505050565b6000602082840312156105d8578081fd5b815180151581146105e7578182fd5b9392505050565b60008060008060008060a08789031215610606578182fd5b863561ffff81168114610617578283fd5b955060208701356001600160a01b0381168114610632578283fd5b9450604087013567ffffffffffffffff8082111561064e578384fd5b818901915089601f830112610661578384fd5b81358181111561066f578485fd5b8a6020828501011115610680578485fd5b979a9699505060200196606081013595608090910135945092505050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b60008151808452815b818110156106ed576020818501810151868301820152016106d1565b818111156106fe5782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6020808252601a908201527f4d6972726f72676174653a206d73672e76616c75652069732030000000000000604082015260600190565b60208082526029908201527f4d6972726f72676174653a206d73672e76616c7565206d757374206265203e2060408201526817d85b5bdd5b9d131160ba1b606082015260800190565b61ffff91909116815260200190565b600061012061ffff808e168452808d166020850152808c1660408501525060018060a01b038a1660608401528860808401528760a08401528060c08401528651818401525060208601516101408301526040860151606061016084015261083a6101808401826106c8565b905082810360e084015261084f81868861069e565b905082810361010084015261086481856106c8565b9d9c50505050505050505050505050565b61ffff93909316835260208301919091526001600160a01b031660408201526060019056fea2646970667358221220717deb97af72920500977a485e2ca5f234ddcbd2e9d9783c21e1fd3696b554af64736f6c63430007060033",
  134. "deployedBytecode": "0x60806040526004361061004e5760003560e01c80630a69940d1461005a5780631114cd2a1461008557806319d505af1461009a5780633e0dc34e146100af578063ed995307146100d157610055565b3661005557005b600080fd5b34801561006657600080fd5b5061006f6100d9565b60405161007c9190610713565b60405180910390f35b6100986100933660046105ee565b6100fd565b005b3480156100a657600080fd5b5061006f610380565b3480156100bb57600080fd5b506100c46103a4565b60405161007c91906107c0565b6100986103c8565b7f000000000000000000000000000000000000000000000000000000000000000081565b8134116101255760405162461bcd60e51b815260040161011c90610777565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b15801561018057600080fd5b505af1158015610194573d6000803e3d6000fd5b505060405163095ea7b360e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016935063095ea7b3925061020791507f0000000000000000000000000000000000000000000000000000000000000000908690600401610727565b602060405180830381600087803b15801561022157600080fd5b505af1158015610235573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061025991906105c7565b50600082340390507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639fbf10fc82897f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008b89896040518060600160405280600081526020016000815260200160405180604001604052806002815260200161060f60f31b8152508152508e8e604051806020016040528060008152506040518c63ffffffff1660e01b81526004016103459a999897969594939291906107cf565b6000604051808303818588803b15801561035e57600080fd5b505af1158015610372573d6000803e3d6000fd5b505050505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b600034116103e85760405162461bcd60e51b815260040161011c90610740565b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561044857600080fd5b505af115801561045c573d6000803e3d6000fd5b505060405163095ea7b360e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016935063095ea7b392506104cf91507f0000000000000000000000000000000000000000000000000000000000000000908590600401610727565b602060405180830381600087803b1580156104e957600080fd5b505af11580156104fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052191906105c7565b506040516321ec87bf60e21b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906387b21efc90610592907f00000000000000000000000000000000000000000000000000000000000000009085903390600401610875565b600060405180830381600087803b1580156105ac57600080fd5b505af11580156105c0573d6000803e3d6000fd5b5050505050565b6000602082840312156105d8578081fd5b815180151581146105e7578182fd5b9392505050565b60008060008060008060a08789031215610606578182fd5b863561ffff81168114610617578283fd5b955060208701356001600160a01b0381168114610632578283fd5b9450604087013567ffffffffffffffff8082111561064e578384fd5b818901915089601f830112610661578384fd5b81358181111561066f578485fd5b8a6020828501011115610680578485fd5b979a9699505060200196606081013595608090910135945092505050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b60008151808452815b818110156106ed576020818501810151868301820152016106d1565b818111156106fe5782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6020808252601a908201527f4d6972726f72676174653a206d73672e76616c75652069732030000000000000604082015260600190565b60208082526029908201527f4d6972726f72676174653a206d73672e76616c7565206d757374206265203e2060408201526817d85b5bdd5b9d131160ba1b606082015260800190565b61ffff91909116815260200190565b600061012061ffff808e168452808d166020850152808c1660408501525060018060a01b038a1660608401528860808401528760a08401528060c08401528651818401525060208601516101408301526040860151606061016084015261083a6101808401826106c8565b905082810360e084015261084f81868861069e565b905082810361010084015261086481856106c8565b9d9c50505050505050505050505050565b61ffff93909316835260208301919091526001600160a01b031660408201526060019056fea2646970667358221220717deb97af72920500977a485e2ca5f234ddcbd2e9d9783c21e1fd3696b554af64736f6c63430007060033",
  135. "devdoc": {
  136. "kind": "dev",
  137. "methods": {},
  138. "version": 1
  139. },
  140. "userdoc": {
  141. "kind": "user",
  142. "methods": {},
  143. "version": 1
  144. },
  145. "storageLayout": {
  146. "storage": [],
  147. "types": null
  148. }
  149. }