Skip to content

Instantly share code, notes, and snippets.

@0xOsiris
Created March 6, 2022 09:27
Show Gist options
  • Save 0xOsiris/f138b504aa82be9a1fc5a396a5531f03 to your computer and use it in GitHub Desktop.
Save 0xOsiris/f138b504aa82be9a1fc5a396a5531f03 to your computer and use it in GitHub Desktop.
Created using remix-ide: Realtime Ethereum Contract Compiler and Runtime. Load this file by pasting this gists URL or ID at https://remix.ethereum.org/#version=soljson-v0.6.12+commit.27d51765.js&optimize=false&runs=200&gist=
REMIX EXAMPLE PROJECT
Remix example project is present when Remix loads very first time or there are no files existing in the File Explorer.
It contains 3 directories:
1. 'contracts': Holds three contracts with different complexity level, denoted with number prefix in file name.
2. 'scripts': Holds two scripts to deploy a contract. It is explained below.
3. 'tests': Contains one test file for 'Ballot' contract with unit tests in Solidity.
SCRIPTS
The 'scripts' folder contains example async/await scripts for deploying the 'Storage' contract.
For the deployment of any other contract, 'contractName' and 'constructorArgs' should be updated (along with other code if required).
Scripts have full access to the web3.js and ethers.js libraries.
To run a script, right click on file name in the file explorer and click 'Run'. Remember, Solidity file must already be compiled.
Output from script will appear in remix terminal.
//SPDX-License-Identifier: UNLICENSED
pragma solidity 0.6.12;
pragma experimental ABIEncoderV2;
interface IERC20 {
event Approval(address indexed owner, address indexed spender, uint value);
event Transfer(address indexed from, address indexed to, uint value);
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function decimals() external view returns (uint8);
function totalSupply() external view returns (uint);
function balanceOf(address owner) external view returns (uint);
function allowance(address owner, address spender) external view returns (uint);
function approve(address spender, uint value) external returns (bool);
function transfer(address to, uint value) external returns (bool);
function transferFrom(address from, address to, uint value) external returns (bool);
}
interface IWETH is IERC20 {
function deposit() external payable;
function withdraw(uint) external;
}
// This contract simply calls multiple targets sequentially, ensuring WETH balance before and after
contract FlashBotsMultiCall {
address private immutable owner;
address private immutable executor;
IWETH private constant WETH = IWETH(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2);
modifier onlyExecutor() {
require(msg.sender == executor);
_;
}
modifier onlyOwner() {
require(msg.sender == owner);
_;
}
constructor(address _executor) public payable {
owner = msg.sender;
executor = _executor;
if (msg.value > 0) {
WETH.deposit{value: msg.value}();
}
}
receive() external payable {
}
function uniswapWeth(uint256 _wethAmountToFirstMarket, uint256 _ethAmountToCoinbase, address[] memory _targets, bytes[] memory _payloads) external onlyExecutor payable {
require (_targets.length == _payloads.length);
uint256 _wethBalanceBefore = WETH.balanceOf(address(this));
WETH.transfer(_targets[0], _wethAmountToFirstMarket);
for (uint256 i = 0; i < _targets.length; i++) {
(bool _success, bytes memory _response) = _targets[i].call(_payloads[i]);
require(_success); _response;
}
uint256 _wethBalanceAfter = WETH.balanceOf(address(this));
require(_wethBalanceAfter > _wethBalanceBefore + _ethAmountToCoinbase);
if (_ethAmountToCoinbase == 0) return;
uint256 _ethBalance = address(this).balance;
if (_ethBalance < _ethAmountToCoinbase) {
WETH.withdraw(_ethAmountToCoinbase - _ethBalance);
}
block.coinbase.transfer(_ethAmountToCoinbase);
}
function call(address payable _to, uint256 _value, bytes calldata _data) external onlyOwner payable returns (bytes memory) {
require(_to != address(0));
(bool _success, bytes memory _result) = _to.call{value: _value}(_data);
require(_success);
return _result;
}
}
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;
/**
* @title Storage
* @dev Store & retrieve value in a variable
*/
contract Storage {
uint256 number;
/**
* @dev Store value in variable
* @param num value to store
*/
function store(uint256 num) public {
number = num;
}
/**
* @dev Return value
* @return value of 'number'
*/
function retrieve() public view returns (uint256){
return number;
}
}
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;
/**
* @title Owner
* @dev Set & change owner
*/
contract Owner {
address private owner;
// event for EVM logging
event OwnerSet(address indexed oldOwner, address indexed newOwner);
// modifier to check if caller is owner
modifier isOwner() {
// If the first argument of 'require' evaluates to 'false', execution terminates and all
// changes to the state and to Ether balances are reverted.
// This used to consume all gas in old EVM versions, but not anymore.
// It is often a good idea to use 'require' to check if functions are called correctly.
// As a second argument, you can also provide an explanation about what went wrong.
require(msg.sender == owner, "Caller is not owner");
_;
}
/**
* @dev Set contract deployer as owner
*/
constructor() {
owner = msg.sender; // 'msg.sender' is sender of current call, contract deployer for a constructor
emit OwnerSet(address(0), owner);
}
/**
* @dev Change owner
* @param newOwner address of new owner
*/
function changeOwner(address newOwner) public isOwner {
emit OwnerSet(owner, newOwner);
owner = newOwner;
}
/**
* @dev Return owner address
* @return address of owner
*/
function getOwner() external view returns (address) {
return owner;
}
}
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;
/**
* @title Ballot
* @dev Implements voting process along with vote delegation
*/
contract Ballot {
struct Voter {
uint weight; // weight is accumulated by delegation
bool voted; // if true, that person already voted
address delegate; // person delegated to
uint vote; // index of the voted proposal
}
struct Proposal {
// If you can limit the length to a certain number of bytes,
// always use one of bytes1 to bytes32 because they are much cheaper
bytes32 name; // short name (up to 32 bytes)
uint voteCount; // number of accumulated votes
}
address public chairperson;
mapping(address => Voter) public voters;
Proposal[] public proposals;
/**
* @dev Create a new ballot to choose one of 'proposalNames'.
* @param proposalNames names of proposals
*/
constructor(bytes32[] memory proposalNames) {
chairperson = msg.sender;
voters[chairperson].weight = 1;
for (uint i = 0; i < proposalNames.length; i++) {
// 'Proposal({...})' creates a temporary
// Proposal object and 'proposals.push(...)'
// appends it to the end of 'proposals'.
proposals.push(Proposal({
name: proposalNames[i],
voteCount: 0
}));
}
}
/**
* @dev Give 'voter' the right to vote on this ballot. May only be called by 'chairperson'.
* @param voter address of voter
*/
function giveRightToVote(address voter) public {
require(
msg.sender == chairperson,
"Only chairperson can give right to vote."
);
require(
!voters[voter].voted,
"The voter already voted."
);
require(voters[voter].weight == 0);
voters[voter].weight = 1;
}
/**
* @dev Delegate your vote to the voter 'to'.
* @param to address to which vote is delegated
*/
function delegate(address to) public {
Voter storage sender = voters[msg.sender];
require(!sender.voted, "You already voted.");
require(to != msg.sender, "Self-delegation is disallowed.");
while (voters[to].delegate != address(0)) {
to = voters[to].delegate;
// We found a loop in the delegation, not allowed.
require(to != msg.sender, "Found loop in delegation.");
}
sender.voted = true;
sender.delegate = to;
Voter storage delegate_ = voters[to];
if (delegate_.voted) {
// If the delegate already voted,
// directly add to the number of votes
proposals[delegate_.vote].voteCount += sender.weight;
} else {
// If the delegate did not vote yet,
// add to her weight.
delegate_.weight += sender.weight;
}
}
/**
* @dev Give your vote (including votes delegated to you) to proposal 'proposals[proposal].name'.
* @param proposal index of proposal in the proposals array
*/
function vote(uint proposal) public {
Voter storage sender = voters[msg.sender];
require(sender.weight != 0, "Has no right to vote");
require(!sender.voted, "Already voted.");
sender.voted = true;
sender.vote = proposal;
// If 'proposal' is out of the range of the array,
// this will throw automatically and revert all
// changes.
proposals[proposal].voteCount += sender.weight;
}
/**
* @dev Computes the winning proposal taking all previous votes into account.
* @return winningProposal_ index of winning proposal in the proposals array
*/
function winningProposal() public view
returns (uint winningProposal_)
{
uint winningVoteCount = 0;
for (uint p = 0; p < proposals.length; p++) {
if (proposals[p].voteCount > winningVoteCount) {
winningVoteCount = proposals[p].voteCount;
winningProposal_ = p;
}
}
}
/**
* @dev Calls winningProposal() function to get the index of the winner contained in the proposals array and then
* @return winnerName_ the name of the winner
*/
function winnerName() public view
returns (bytes32 winnerName_)
{
winnerName_ = proposals[winningProposal()].name;
}
}
{
"deploy": {
"VM:-": {
"linkReferences": {},
"autoDeployLib": true
},
"main:1": {
"linkReferences": {},
"autoDeployLib": true
},
"ropsten:3": {
"linkReferences": {},
"autoDeployLib": true
},
"rinkeby:4": {
"linkReferences": {},
"autoDeployLib": true
},
"kovan:42": {
"linkReferences": {},
"autoDeployLib": true
},
"görli:5": {
"linkReferences": {},
"autoDeployLib": true
},
"Custom": {
"linkReferences": {},
"autoDeployLib": true
}
},
"data": {
"bytecode": {
"linkReferences": {},
"object": "60c0604052604051610e83380380610e838339818101604052810190610025919061012d565b3373ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b8152505060003411156101125773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156100f857600080fd5b505af115801561010c573d6000803e3d6000fd5b50505050505b5061019f565b60008151905061012781610188565b92915050565b60006020828403121561013f57600080fd5b600061014d84828501610118565b91505092915050565b600061016182610168565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b61019181610156565b811461019c57600080fd5b50565b60805160601c60a05160601c610cbc6101c7600039806101a552508060895250610cbc6000f3fe60806040526004361061002d5760003560e01c80636dbf2fa014610039578063ecd494b31461006957610034565b3661003457005b600080fd5b610053600480360381019061004e91906107b9565b610085565b6040516100609190610a3a565b60405180910390f35b610083600480360381019061007e9190610877565b6101a3565b005b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146100df57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141561011957600080fd5b600060608673ffffffffffffffffffffffffffffffffffffffff168686866040516101459291906109c6565b60006040518083038185875af1925050503d8060008114610182576040519150601f19603f3d011682016040523d82523d6000602084013e610187565b606091505b50915091508161019657600080fd5b8092505050949350505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146101fb57600080fd5b805182511461020957600080fd5b600073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161025891906109f6565b60206040518083038186803b15801561027057600080fd5b505afa158015610284573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102a8919061084e565b905073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb846000815181106102e757fe5b6020026020010151876040518363ffffffff1660e01b815260040161030d929190610a11565b602060405180830381600087803b15801561032757600080fd5b505af115801561033b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061035f9190610825565b5060005b835181101561041b576000606085838151811061037c57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff168584815181106103a657fe5b60200260200101516040516103bb91906109df565b6000604051808303816000865af19150503d80600081146103f8576040519150601f19603f3d011682016040523d82523d6000602084013e6103fd565b606091505b50915091508161040c57600080fd5b50508080600101915050610363565b50600073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161046b91906109f6565b60206040518083038186803b15801561048357600080fd5b505afa158015610497573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104bb919061084e565b905084820181116104cb57600080fd5b60008514156104db5750506105b5565b60004790508581101561056a5773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d8288036040518263ffffffff1660e01b81526004016105379190610a5c565b600060405180830381600087803b15801561055157600080fd5b505af1158015610565573d6000803e3d6000fd5b505050505b4173ffffffffffffffffffffffffffffffffffffffff166108fc879081150290604051600060405180830381858888f193505050501580156105b0573d6000803e3d6000fd5b505050505b50505050565b6000813590506105ca81610c2a565b92915050565b6000813590506105df81610c41565b92915050565b600082601f8301126105f657600080fd5b813561060961060482610aa4565b610a77565b9150818183526020840193506020810190508385602084028201111561062e57600080fd5b60005b8381101561065e578161064488826105bb565b845260208401935060208301925050600181019050610631565b5050505092915050565b600082601f83011261067957600080fd5b813561068c61068782610acc565b610a77565b9150818183526020840193506020810190508360005b838110156106d257813586016106b8888261073b565b8452602084019350602083019250506001810190506106a2565b5050505092915050565b6000815190506106eb81610c58565b92915050565b60008083601f84011261070357600080fd5b8235905067ffffffffffffffff81111561071c57600080fd5b60208301915083600182028301111561073457600080fd5b9250929050565b600082601f83011261074c57600080fd5b813561075f61075a82610af4565b610a77565b9150808252602083016020830185838301111561077b57600080fd5b610786838284610bd7565b50505092915050565b60008135905061079e81610c6f565b92915050565b6000815190506107b381610c6f565b92915050565b600080600080606085870312156107cf57600080fd5b60006107dd878288016105d0565b94505060206107ee8782880161078f565b935050604085013567ffffffffffffffff81111561080b57600080fd5b610817878288016106f1565b925092505092959194509250565b60006020828403121561083757600080fd5b6000610845848285016106dc565b91505092915050565b60006020828403121561086057600080fd5b600061086e848285016107a4565b91505092915050565b6000806000806080858703121561088d57600080fd5b600061089b8782880161078f565b94505060206108ac8782880161078f565b935050604085013567ffffffffffffffff8111156108c957600080fd5b6108d5878288016105e5565b925050606085013567ffffffffffffffff8111156108f257600080fd5b6108fe87828801610668565b91505092959194509250565b61091381610ba1565b82525050565b61092281610b47565b82525050565b60006109348385610b3c565b9350610941838584610bd7565b82840190509392505050565b600061095882610b20565b6109628185610b2b565b9350610972818560208601610be6565b61097b81610c19565b840191505092915050565b600061099182610b20565b61099b8185610b3c565b93506109ab818560208601610be6565b80840191505092915050565b6109c081610b97565b82525050565b60006109d3828486610928565b91508190509392505050565b60006109eb8284610986565b915081905092915050565b6000602082019050610a0b600083018461090a565b92915050565b6000604082019050610a266000830185610919565b610a3360208301846109b7565b9392505050565b60006020820190508181036000830152610a54818461094d565b905092915050565b6000602082019050610a7160008301846109b7565b92915050565b6000604051905081810181811067ffffffffffffffff82111715610a9a57600080fd5b8060405250919050565b600067ffffffffffffffff821115610abb57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115610ae357600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115610b0b57600080fd5b601f19601f8301169050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b6000610b5282610b77565b9050919050565b6000610b6482610b77565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000610bac82610bb3565b9050919050565b6000610bbe82610bc5565b9050919050565b6000610bd082610b77565b9050919050565b82818337600083830152505050565b60005b83811015610c04578082015181840152602081019050610be9565b83811115610c13576000848401525b50505050565b6000601f19601f8301169050919050565b610c3381610b47565b8114610c3e57600080fd5b50565b610c4a81610b59565b8114610c5557600080fd5b50565b610c6181610b6b565b8114610c6c57600080fd5b50565b610c7881610b97565b8114610c8357600080fd5b5056fea2646970667358221220b6dc899e3be59b5f7a10facaf40fc9349b2124b66801932a70e11859f50dad7964736f6c634300060c0033",
"opcodes": "PUSH1 0xC0 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH2 0xE83 CODESIZE SUB DUP1 PUSH2 0xE83 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE DUP2 ADD SWAP1 PUSH2 0x25 SWAP2 SWAP1 PUSH2 0x12D JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x80 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x60 SHL DUP2 MSTORE POP POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0xA0 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x60 SHL DUP2 MSTORE POP POP PUSH1 0x0 CALLVALUE GT ISZERO PUSH2 0x112 JUMPI PUSH20 0xC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0E30DB0 CALLVALUE PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xF8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x10C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMPDEST POP PUSH2 0x19F JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x127 DUP2 PUSH2 0x188 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x13F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x14D DUP5 DUP3 DUP6 ADD PUSH2 0x118 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x161 DUP3 PUSH2 0x168 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x191 DUP2 PUSH2 0x156 JUMP JUMPDEST DUP2 EQ PUSH2 0x19C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0x60 SHR PUSH1 0xA0 MLOAD PUSH1 0x60 SHR PUSH2 0xCBC PUSH2 0x1C7 PUSH1 0x0 CODECOPY DUP1 PUSH2 0x1A5 MSTORE POP DUP1 PUSH1 0x89 MSTORE POP PUSH2 0xCBC PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2D JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6DBF2FA0 EQ PUSH2 0x39 JUMPI DUP1 PUSH4 0xECD494B3 EQ PUSH2 0x69 JUMPI PUSH2 0x34 JUMP JUMPDEST CALLDATASIZE PUSH2 0x34 JUMPI STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x53 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x4E SWAP2 SWAP1 PUSH2 0x7B9 JUMP JUMPDEST PUSH2 0x85 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x60 SWAP2 SWAP1 PUSH2 0xA3A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x83 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x7E SWAP2 SWAP1 PUSH2 0x877 JUMP JUMPDEST PUSH2 0x1A3 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x60 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xDF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x119 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH2 0x145 SWAP3 SWAP2 SWAP1 PUSH2 0x9C6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x182 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x187 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 PUSH2 0x196 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 SWAP3 POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD DUP3 MLOAD EQ PUSH2 0x209 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x258 SWAP2 SWAP1 PUSH2 0x9F6 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x270 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x284 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2A8 SWAP2 SWAP1 PUSH2 0x84E JUMP JUMPDEST SWAP1 POP PUSH20 0xC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xA9059CBB DUP5 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x2E7 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP8 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x30D SWAP3 SWAP2 SWAP1 PUSH2 0xA11 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x327 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x33B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x35F SWAP2 SWAP1 PUSH2 0x825 JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x41B JUMPI PUSH1 0x0 PUSH1 0x60 DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x37C JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x3A6 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 MLOAD PUSH2 0x3BB SWAP2 SWAP1 PUSH2 0x9DF JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x3F8 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x3FD JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 PUSH2 0x40C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 DUP1 PUSH1 0x1 ADD SWAP2 POP POP PUSH2 0x363 JUMP JUMPDEST POP PUSH1 0x0 PUSH20 0xC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x46B SWAP2 SWAP1 PUSH2 0x9F6 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x483 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x497 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4BB SWAP2 SWAP1 PUSH2 0x84E JUMP JUMPDEST SWAP1 POP DUP5 DUP3 ADD DUP2 GT PUSH2 0x4CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP6 EQ ISZERO PUSH2 0x4DB JUMPI POP POP PUSH2 0x5B5 JUMP JUMPDEST PUSH1 0x0 SELFBALANCE SWAP1 POP DUP6 DUP2 LT ISZERO PUSH2 0x56A JUMPI PUSH20 0xC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x2E1A7D4D DUP3 DUP9 SUB PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x537 SWAP2 SWAP1 PUSH2 0xA5C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x551 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x565 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST COINBASE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x8FC DUP8 SWAP1 DUP2 ISZERO MUL SWAP1 PUSH1 0x40 MLOAD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x5B0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x5CA DUP2 PUSH2 0xC2A JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x5DF DUP2 PUSH2 0xC41 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x5F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x609 PUSH2 0x604 DUP3 PUSH2 0xAA4 JUMP JUMPDEST PUSH2 0xA77 JUMP JUMPDEST SWAP2 POP DUP2 DUP2 DUP4 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH1 0x20 DUP2 ADD SWAP1 POP DUP4 DUP6 PUSH1 0x20 DUP5 MUL DUP3 ADD GT ISZERO PUSH2 0x62E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x65E JUMPI DUP2 PUSH2 0x644 DUP9 DUP3 PUSH2 0x5BB JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH1 0x20 DUP4 ADD SWAP3 POP POP PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH2 0x631 JUMP JUMPDEST POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x679 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x68C PUSH2 0x687 DUP3 PUSH2 0xACC JUMP JUMPDEST PUSH2 0xA77 JUMP JUMPDEST SWAP2 POP DUP2 DUP2 DUP4 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH1 0x20 DUP2 ADD SWAP1 POP DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x6D2 JUMPI DUP2 CALLDATALOAD DUP7 ADD PUSH2 0x6B8 DUP9 DUP3 PUSH2 0x73B JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH1 0x20 DUP4 ADD SWAP3 POP POP PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH2 0x6A2 JUMP JUMPDEST POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x6EB DUP2 PUSH2 0xC58 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x703 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP1 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x71C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x1 DUP3 MUL DUP4 ADD GT ISZERO PUSH2 0x734 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x74C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x75F PUSH2 0x75A DUP3 PUSH2 0xAF4 JUMP JUMPDEST PUSH2 0xA77 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP4 ADD DUP6 DUP4 DUP4 ADD GT ISZERO PUSH2 0x77B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x786 DUP4 DUP3 DUP5 PUSH2 0xBD7 JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x79E DUP2 PUSH2 0xC6F JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x7B3 DUP2 PUSH2 0xC6F JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x7CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x7DD DUP8 DUP3 DUP9 ADD PUSH2 0x5D0 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x7EE DUP8 DUP3 DUP9 ADD PUSH2 0x78F JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x80B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x817 DUP8 DUP3 DUP9 ADD PUSH2 0x6F1 JUMP JUMPDEST SWAP3 POP SWAP3 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x837 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x845 DUP5 DUP3 DUP6 ADD PUSH2 0x6DC JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x860 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x86E DUP5 DUP3 DUP6 ADD PUSH2 0x7A4 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x88D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x89B DUP8 DUP3 DUP9 ADD PUSH2 0x78F JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x8AC DUP8 DUP3 DUP9 ADD PUSH2 0x78F JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x8C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8D5 DUP8 DUP3 DUP9 ADD PUSH2 0x5E5 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x8F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8FE DUP8 DUP3 DUP9 ADD PUSH2 0x668 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH2 0x913 DUP2 PUSH2 0xBA1 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x922 DUP2 PUSH2 0xB47 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x934 DUP4 DUP6 PUSH2 0xB3C JUMP JUMPDEST SWAP4 POP PUSH2 0x941 DUP4 DUP6 DUP5 PUSH2 0xBD7 JUMP JUMPDEST DUP3 DUP5 ADD SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x958 DUP3 PUSH2 0xB20 JUMP JUMPDEST PUSH2 0x962 DUP2 DUP6 PUSH2 0xB2B JUMP JUMPDEST SWAP4 POP PUSH2 0x972 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0xBE6 JUMP JUMPDEST PUSH2 0x97B DUP2 PUSH2 0xC19 JUMP JUMPDEST DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x991 DUP3 PUSH2 0xB20 JUMP JUMPDEST PUSH2 0x99B DUP2 DUP6 PUSH2 0xB3C JUMP JUMPDEST SWAP4 POP PUSH2 0x9AB DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0xBE6 JUMP JUMPDEST DUP1 DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x9C0 DUP2 PUSH2 0xB97 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x9D3 DUP3 DUP5 DUP7 PUSH2 0x928 JUMP JUMPDEST SWAP2 POP DUP2 SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x9EB DUP3 DUP5 PUSH2 0x986 JUMP JUMPDEST SWAP2 POP DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xA0B PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x90A JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 ADD SWAP1 POP PUSH2 0xA26 PUSH1 0x0 DUP4 ADD DUP6 PUSH2 0x919 JUMP JUMPDEST PUSH2 0xA33 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x9B7 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0xA54 DUP2 DUP5 PUSH2 0x94D JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xA71 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x9B7 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD SWAP1 POP DUP2 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0xA9A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH1 0x40 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0xABB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP3 MUL SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0xAE3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP3 MUL SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0xB0B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB52 DUP3 PUSH2 0xB77 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB64 DUP3 PUSH2 0xB77 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO ISZERO SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBAC DUP3 PUSH2 0xBB3 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBBE DUP3 PUSH2 0xBC5 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBD0 DUP3 PUSH2 0xB77 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY PUSH1 0x0 DUP4 DUP4 ADD MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xC04 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0xBE9 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0xC13 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xC33 DUP2 PUSH2 0xB47 JUMP JUMPDEST DUP2 EQ PUSH2 0xC3E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0xC4A DUP2 PUSH2 0xB59 JUMP JUMPDEST DUP2 EQ PUSH2 0xC55 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0xC61 DUP2 PUSH2 0xB6B JUMP JUMPDEST DUP2 EQ PUSH2 0xC6C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0xC78 DUP2 PUSH2 0xB97 JUMP JUMPDEST DUP2 EQ PUSH2 0xC83 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB6 0xDC DUP10 SWAP15 EXTCODESIZE 0xE5 SWAP12 0x5F PUSH27 0x10FACAF40FC9349B2124B66801932A70E11859F50DAD7964736F6C PUSH4 0x4300060C STOP CALLER ",
"sourceMap": "1107:1897:0:-:0;;;1476:196;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1540:10;1532:18;;;;;;;;;;;;1571:9;1560:20;;;;;;;;;;;;1606:1;1594:9;:13;1590:76;;;1254:42;1623:12;;;1643:9;1623:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1590:76;1476:196;1107:1897;;5:134:-1;;89:6;83:13;74:22;;101:33;128:5;101:33;:::i;:::-;68:71;;;;:::o;146:263::-;;261:2;249:9;240:7;236:23;232:32;229:2;;;277:1;274;267:12;229:2;312:1;329:64;385:7;376:6;365:9;361:22;329:64;:::i;:::-;319:74;;291:108;223:186;;;;:::o;416:91::-;;478:24;496:5;478:24;:::i;:::-;467:35;;461:46;;;:::o;514:121::-;;587:42;580:5;576:54;565:65;;559:76;;;:::o;642:117::-;711:24;729:5;711:24;:::i;:::-;704:5;701:35;691:2;;750:1;747;740:12;691:2;685:74;:::o;1107:1897:0:-;;;;;;;;;;;;;;;;;"
},
"deployedBytecode": {
"immutableReferences": {
"97": [
{
"length": 32,
"start": 137
}
],
"99": [
{
"length": 32,
"start": 421
}
]
},
"linkReferences": {},
"object": "60806040526004361061002d5760003560e01c80636dbf2fa014610039578063ecd494b31461006957610034565b3661003457005b600080fd5b610053600480360381019061004e91906107b9565b610085565b6040516100609190610a3a565b60405180910390f35b610083600480360381019061007e9190610877565b6101a3565b005b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146100df57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141561011957600080fd5b600060608673ffffffffffffffffffffffffffffffffffffffff168686866040516101459291906109c6565b60006040518083038185875af1925050503d8060008114610182576040519150601f19603f3d011682016040523d82523d6000602084013e610187565b606091505b50915091508161019657600080fd5b8092505050949350505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146101fb57600080fd5b805182511461020957600080fd5b600073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161025891906109f6565b60206040518083038186803b15801561027057600080fd5b505afa158015610284573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102a8919061084e565b905073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb846000815181106102e757fe5b6020026020010151876040518363ffffffff1660e01b815260040161030d929190610a11565b602060405180830381600087803b15801561032757600080fd5b505af115801561033b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061035f9190610825565b5060005b835181101561041b576000606085838151811061037c57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff168584815181106103a657fe5b60200260200101516040516103bb91906109df565b6000604051808303816000865af19150503d80600081146103f8576040519150601f19603f3d011682016040523d82523d6000602084013e6103fd565b606091505b50915091508161040c57600080fd5b50508080600101915050610363565b50600073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161046b91906109f6565b60206040518083038186803b15801561048357600080fd5b505afa158015610497573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104bb919061084e565b905084820181116104cb57600080fd5b60008514156104db5750506105b5565b60004790508581101561056a5773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d8288036040518263ffffffff1660e01b81526004016105379190610a5c565b600060405180830381600087803b15801561055157600080fd5b505af1158015610565573d6000803e3d6000fd5b505050505b4173ffffffffffffffffffffffffffffffffffffffff166108fc879081150290604051600060405180830381858888f193505050501580156105b0573d6000803e3d6000fd5b505050505b50505050565b6000813590506105ca81610c2a565b92915050565b6000813590506105df81610c41565b92915050565b600082601f8301126105f657600080fd5b813561060961060482610aa4565b610a77565b9150818183526020840193506020810190508385602084028201111561062e57600080fd5b60005b8381101561065e578161064488826105bb565b845260208401935060208301925050600181019050610631565b5050505092915050565b600082601f83011261067957600080fd5b813561068c61068782610acc565b610a77565b9150818183526020840193506020810190508360005b838110156106d257813586016106b8888261073b565b8452602084019350602083019250506001810190506106a2565b5050505092915050565b6000815190506106eb81610c58565b92915050565b60008083601f84011261070357600080fd5b8235905067ffffffffffffffff81111561071c57600080fd5b60208301915083600182028301111561073457600080fd5b9250929050565b600082601f83011261074c57600080fd5b813561075f61075a82610af4565b610a77565b9150808252602083016020830185838301111561077b57600080fd5b610786838284610bd7565b50505092915050565b60008135905061079e81610c6f565b92915050565b6000815190506107b381610c6f565b92915050565b600080600080606085870312156107cf57600080fd5b60006107dd878288016105d0565b94505060206107ee8782880161078f565b935050604085013567ffffffffffffffff81111561080b57600080fd5b610817878288016106f1565b925092505092959194509250565b60006020828403121561083757600080fd5b6000610845848285016106dc565b91505092915050565b60006020828403121561086057600080fd5b600061086e848285016107a4565b91505092915050565b6000806000806080858703121561088d57600080fd5b600061089b8782880161078f565b94505060206108ac8782880161078f565b935050604085013567ffffffffffffffff8111156108c957600080fd5b6108d5878288016105e5565b925050606085013567ffffffffffffffff8111156108f257600080fd5b6108fe87828801610668565b91505092959194509250565b61091381610ba1565b82525050565b61092281610b47565b82525050565b60006109348385610b3c565b9350610941838584610bd7565b82840190509392505050565b600061095882610b20565b6109628185610b2b565b9350610972818560208601610be6565b61097b81610c19565b840191505092915050565b600061099182610b20565b61099b8185610b3c565b93506109ab818560208601610be6565b80840191505092915050565b6109c081610b97565b82525050565b60006109d3828486610928565b91508190509392505050565b60006109eb8284610986565b915081905092915050565b6000602082019050610a0b600083018461090a565b92915050565b6000604082019050610a266000830185610919565b610a3360208301846109b7565b9392505050565b60006020820190508181036000830152610a54818461094d565b905092915050565b6000602082019050610a7160008301846109b7565b92915050565b6000604051905081810181811067ffffffffffffffff82111715610a9a57600080fd5b8060405250919050565b600067ffffffffffffffff821115610abb57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115610ae357600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115610b0b57600080fd5b601f19601f8301169050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b6000610b5282610b77565b9050919050565b6000610b6482610b77565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000610bac82610bb3565b9050919050565b6000610bbe82610bc5565b9050919050565b6000610bd082610b77565b9050919050565b82818337600083830152505050565b60005b83811015610c04578082015181840152602081019050610be9565b83811115610c13576000848401525b50505050565b6000601f19601f8301169050919050565b610c3381610b47565b8114610c3e57600080fd5b50565b610c4a81610b59565b8114610c5557600080fd5b50565b610c6181610b6b565b8114610c6c57600080fd5b50565b610c7881610b97565b8114610c8357600080fd5b5056fea2646970667358221220b6dc899e3be59b5f7a10facaf40fc9349b2124b66801932a70e11859f50dad7964736f6c634300060c0033",
"opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2D JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6DBF2FA0 EQ PUSH2 0x39 JUMPI DUP1 PUSH4 0xECD494B3 EQ PUSH2 0x69 JUMPI PUSH2 0x34 JUMP JUMPDEST CALLDATASIZE PUSH2 0x34 JUMPI STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x53 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x4E SWAP2 SWAP1 PUSH2 0x7B9 JUMP JUMPDEST PUSH2 0x85 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x60 SWAP2 SWAP1 PUSH2 0xA3A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x83 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x7E SWAP2 SWAP1 PUSH2 0x877 JUMP JUMPDEST PUSH2 0x1A3 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x60 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xDF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x119 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH2 0x145 SWAP3 SWAP2 SWAP1 PUSH2 0x9C6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x182 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x187 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 PUSH2 0x196 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 SWAP3 POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD DUP3 MLOAD EQ PUSH2 0x209 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x258 SWAP2 SWAP1 PUSH2 0x9F6 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x270 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x284 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2A8 SWAP2 SWAP1 PUSH2 0x84E JUMP JUMPDEST SWAP1 POP PUSH20 0xC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xA9059CBB DUP5 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x2E7 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP8 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x30D SWAP3 SWAP2 SWAP1 PUSH2 0xA11 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x327 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x33B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x35F SWAP2 SWAP1 PUSH2 0x825 JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x41B JUMPI PUSH1 0x0 PUSH1 0x60 DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x37C JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x3A6 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 MLOAD PUSH2 0x3BB SWAP2 SWAP1 PUSH2 0x9DF JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x3F8 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x3FD JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 PUSH2 0x40C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 DUP1 PUSH1 0x1 ADD SWAP2 POP POP PUSH2 0x363 JUMP JUMPDEST POP PUSH1 0x0 PUSH20 0xC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x46B SWAP2 SWAP1 PUSH2 0x9F6 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x483 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x497 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4BB SWAP2 SWAP1 PUSH2 0x84E JUMP JUMPDEST SWAP1 POP DUP5 DUP3 ADD DUP2 GT PUSH2 0x4CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP6 EQ ISZERO PUSH2 0x4DB JUMPI POP POP PUSH2 0x5B5 JUMP JUMPDEST PUSH1 0x0 SELFBALANCE SWAP1 POP DUP6 DUP2 LT ISZERO PUSH2 0x56A JUMPI PUSH20 0xC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x2E1A7D4D DUP3 DUP9 SUB PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x537 SWAP2 SWAP1 PUSH2 0xA5C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x551 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x565 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST COINBASE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x8FC DUP8 SWAP1 DUP2 ISZERO MUL SWAP1 PUSH1 0x40 MLOAD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x5B0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x5CA DUP2 PUSH2 0xC2A JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x5DF DUP2 PUSH2 0xC41 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x5F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x609 PUSH2 0x604 DUP3 PUSH2 0xAA4 JUMP JUMPDEST PUSH2 0xA77 JUMP JUMPDEST SWAP2 POP DUP2 DUP2 DUP4 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH1 0x20 DUP2 ADD SWAP1 POP DUP4 DUP6 PUSH1 0x20 DUP5 MUL DUP3 ADD GT ISZERO PUSH2 0x62E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x65E JUMPI DUP2 PUSH2 0x644 DUP9 DUP3 PUSH2 0x5BB JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH1 0x20 DUP4 ADD SWAP3 POP POP PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH2 0x631 JUMP JUMPDEST POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x679 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x68C PUSH2 0x687 DUP3 PUSH2 0xACC JUMP JUMPDEST PUSH2 0xA77 JUMP JUMPDEST SWAP2 POP DUP2 DUP2 DUP4 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH1 0x20 DUP2 ADD SWAP1 POP DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x6D2 JUMPI DUP2 CALLDATALOAD DUP7 ADD PUSH2 0x6B8 DUP9 DUP3 PUSH2 0x73B JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH1 0x20 DUP4 ADD SWAP3 POP POP PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH2 0x6A2 JUMP JUMPDEST POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x6EB DUP2 PUSH2 0xC58 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x703 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP1 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x71C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x1 DUP3 MUL DUP4 ADD GT ISZERO PUSH2 0x734 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x74C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x75F PUSH2 0x75A DUP3 PUSH2 0xAF4 JUMP JUMPDEST PUSH2 0xA77 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP4 ADD DUP6 DUP4 DUP4 ADD GT ISZERO PUSH2 0x77B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x786 DUP4 DUP3 DUP5 PUSH2 0xBD7 JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x79E DUP2 PUSH2 0xC6F JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x7B3 DUP2 PUSH2 0xC6F JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x7CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x7DD DUP8 DUP3 DUP9 ADD PUSH2 0x5D0 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x7EE DUP8 DUP3 DUP9 ADD PUSH2 0x78F JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x80B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x817 DUP8 DUP3 DUP9 ADD PUSH2 0x6F1 JUMP JUMPDEST SWAP3 POP SWAP3 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x837 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x845 DUP5 DUP3 DUP6 ADD PUSH2 0x6DC JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x860 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x86E DUP5 DUP3 DUP6 ADD PUSH2 0x7A4 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x88D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x89B DUP8 DUP3 DUP9 ADD PUSH2 0x78F JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x8AC DUP8 DUP3 DUP9 ADD PUSH2 0x78F JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x8C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8D5 DUP8 DUP3 DUP9 ADD PUSH2 0x5E5 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x8F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8FE DUP8 DUP3 DUP9 ADD PUSH2 0x668 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH2 0x913 DUP2 PUSH2 0xBA1 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x922 DUP2 PUSH2 0xB47 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x934 DUP4 DUP6 PUSH2 0xB3C JUMP JUMPDEST SWAP4 POP PUSH2 0x941 DUP4 DUP6 DUP5 PUSH2 0xBD7 JUMP JUMPDEST DUP3 DUP5 ADD SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x958 DUP3 PUSH2 0xB20 JUMP JUMPDEST PUSH2 0x962 DUP2 DUP6 PUSH2 0xB2B JUMP JUMPDEST SWAP4 POP PUSH2 0x972 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0xBE6 JUMP JUMPDEST PUSH2 0x97B DUP2 PUSH2 0xC19 JUMP JUMPDEST DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x991 DUP3 PUSH2 0xB20 JUMP JUMPDEST PUSH2 0x99B DUP2 DUP6 PUSH2 0xB3C JUMP JUMPDEST SWAP4 POP PUSH2 0x9AB DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0xBE6 JUMP JUMPDEST DUP1 DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x9C0 DUP2 PUSH2 0xB97 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x9D3 DUP3 DUP5 DUP7 PUSH2 0x928 JUMP JUMPDEST SWAP2 POP DUP2 SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x9EB DUP3 DUP5 PUSH2 0x986 JUMP JUMPDEST SWAP2 POP DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xA0B PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x90A JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 ADD SWAP1 POP PUSH2 0xA26 PUSH1 0x0 DUP4 ADD DUP6 PUSH2 0x919 JUMP JUMPDEST PUSH2 0xA33 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x9B7 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0xA54 DUP2 DUP5 PUSH2 0x94D JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xA71 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x9B7 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD SWAP1 POP DUP2 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0xA9A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH1 0x40 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0xABB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP3 MUL SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0xAE3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP3 MUL SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0xB0B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB52 DUP3 PUSH2 0xB77 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB64 DUP3 PUSH2 0xB77 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO ISZERO SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBAC DUP3 PUSH2 0xBB3 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBBE DUP3 PUSH2 0xBC5 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBD0 DUP3 PUSH2 0xB77 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY PUSH1 0x0 DUP4 DUP4 ADD MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xC04 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0xBE9 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0xC13 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xC33 DUP2 PUSH2 0xB47 JUMP JUMPDEST DUP2 EQ PUSH2 0xC3E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0xC4A DUP2 PUSH2 0xB59 JUMP JUMPDEST DUP2 EQ PUSH2 0xC55 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0xC61 DUP2 PUSH2 0xB6B JUMP JUMPDEST DUP2 EQ PUSH2 0xC6C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0xC78 DUP2 PUSH2 0xB97 JUMP JUMPDEST DUP2 EQ PUSH2 0xC83 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB6 0xDC DUP10 SWAP15 EXTCODESIZE 0xE5 SWAP12 0x5F PUSH27 0x10FACAF40FC9349B2124B66801932A70E11859F50DAD7964736F6C PUSH4 0x4300060C STOP CALLER ",
"sourceMap": "1107:1897:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2705:297;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1718:981;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2705:297;2814:12;1446:5;1432:19;;:10;:19;;;1424:28;;;;;;2861:1:::1;2846:17;;:3;:17;;;;2838:26;;;::::0;::::1;;2875:13;2890:20;2914:3;:8;;2930:6;2938:5;;2914:30;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2874:70;;;;2962:8;2954:17;;;::::0;::::1;;2988:7;2981:14;;;;2705:297:::0;;;;;;:::o;1718:981::-;1360:8;1346:22;;:10;:22;;;1338:31;;;;;;1924:9:::1;:16;1905:8;:15;:35;1896:45;;;::::0;::::1;;1951:26;1254:42;1980:14;;;2003:4;1980:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1951:58;;1254:42;2019:13;;;2033:8;2042:1;2033:11;;;;;;;;;;;;;;2046:24;2019:52;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2086:9;2081:185;2105:8;:15;2101:1;:19;2081:185;;;2142:13;2157:22;2183:8;2192:1;2183:11;;;;;;;;;;;;;;:16;;2200:9;2210:1;2200:12;;;;;;;;;;;;;;2183:30;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2141:72;;;;2235:8;2227:17;;;::::0;::::1;;2081:185;;2122:3;;;;;;;2081:185;;;;2276:25;1254:42;2304:14;;;2327:4;2304:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2276:57;;2392:20;2371:18;:41;2351:17;:61;2343:70;;;::::0;::::1;;2451:1;2427:20;:25;2423:38;;;2454:7;;;;2423:38;2471:19;2493:21;2471:43;;2542:20;2528:11;:34;2524:114;;;1254:42;2578:13;;;2615:11;2592:20;:34;2578:49;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;2524:114;2647:14;:23;;:45;2671:20;2647:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;1379:1;;;;1718:981:::0;;;;:::o;5:130:-1:-;;85:6;72:20;63:29;;97:33;124:5;97:33;:::i;:::-;57:78;;;;:::o;142:146::-;;230:6;217:20;208:29;;242:41;277:5;242:41;:::i;:::-;202:86;;;;:::o;313:707::-;;430:3;423:4;415:6;411:17;407:27;397:2;;448:1;445;438:12;397:2;485:6;472:20;507:80;522:64;579:6;522:64;:::i;:::-;507:80;:::i;:::-;498:89;;604:5;629:6;622:5;615:21;659:4;651:6;647:17;637:27;;681:4;676:3;672:14;665:21;;734:6;781:3;773:4;765:6;761:17;756:3;752:27;749:36;746:2;;;798:1;795;788:12;746:2;823:1;808:206;833:6;830:1;827:13;808:206;;;891:3;913:37;946:3;934:10;913:37;:::i;:::-;908:3;901:50;974:4;969:3;965:14;958:21;;1002:4;997:3;993:14;986:21;;865:149;855:1;852;848:9;843:14;;808:206;;;812:14;390:630;;;;;;;:::o;1044:705::-;;1170:3;1163:4;1155:6;1151:17;1147:27;1137:2;;1188:1;1185;1178:12;1137:2;1225:6;1212:20;1247:89;1262:73;1328:6;1262:73;:::i;:::-;1247:89;:::i;:::-;1238:98;;1353:5;1378:6;1371:5;1364:21;1408:4;1400:6;1396:17;1386:27;;1430:4;1425:3;1421:14;1414:21;;1483:6;1516:1;1501:242;1526:6;1523:1;1520:13;1501:242;;;1609:3;1596:17;1588:6;1584:30;1633:46;1675:3;1663:10;1633:46;:::i;:::-;1628:3;1621:59;1703:4;1698:3;1694:14;1687:21;;1731:4;1726:3;1722:14;1715:21;;1558:185;1548:1;1545;1541:9;1536:14;;1501:242;;;1505:14;1130:619;;;;;;;:::o;1757:128::-;;1838:6;1832:13;1823:22;;1850:30;1874:5;1850:30;:::i;:::-;1817:68;;;;:::o;1906:336::-;;;2020:3;2013:4;2005:6;2001:17;1997:27;1987:2;;2038:1;2035;2028:12;1987:2;2071:6;2058:20;2048:30;;2098:18;2090:6;2087:30;2084:2;;;2130:1;2127;2120:12;2084:2;2164:4;2156:6;2152:17;2140:29;;2215:3;2207:4;2199:6;2195:17;2185:8;2181:32;2178:41;2175:2;;;2232:1;2229;2222:12;2175:2;1980:262;;;;;:::o;2251:440::-;;2352:3;2345:4;2337:6;2333:17;2329:27;2319:2;;2370:1;2367;2360:12;2319:2;2407:6;2394:20;2429:64;2444:48;2485:6;2444:48;:::i;:::-;2429:64;:::i;:::-;2420:73;;2513:6;2506:5;2499:21;2549:4;2541:6;2537:17;2582:4;2575:5;2571:16;2617:3;2608:6;2603:3;2599:16;2596:25;2593:2;;;2634:1;2631;2624:12;2593:2;2644:41;2678:6;2673:3;2668;2644:41;:::i;:::-;2312:379;;;;;;;:::o;2699:130::-;;2779:6;2766:20;2757:29;;2791:33;2818:5;2791:33;:::i;:::-;2751:78;;;;:::o;2836:134::-;;2920:6;2914:13;2905:22;;2932:33;2959:5;2932:33;:::i;:::-;2899:71;;;;:::o;2977:631::-;;;;;3142:2;3130:9;3121:7;3117:23;3113:32;3110:2;;;3158:1;3155;3148:12;3110:2;3193:1;3210:61;3263:7;3254:6;3243:9;3239:22;3210:61;:::i;:::-;3200:71;;3172:105;3308:2;3326:53;3371:7;3362:6;3351:9;3347:22;3326:53;:::i;:::-;3316:63;;3287:98;3444:2;3433:9;3429:18;3416:32;3468:18;3460:6;3457:30;3454:2;;;3500:1;3497;3490:12;3454:2;3528:64;3584:7;3575:6;3564:9;3560:22;3528:64;:::i;:::-;3510:82;;;;3395:203;3104:504;;;;;;;:::o;3615:257::-;;3727:2;3715:9;3706:7;3702:23;3698:32;3695:2;;;3743:1;3740;3733:12;3695:2;3778:1;3795:61;3848:7;3839:6;3828:9;3824:22;3795:61;:::i;:::-;3785:71;;3757:105;3689:183;;;;:::o;3879:263::-;;3994:2;3982:9;3973:7;3969:23;3965:32;3962:2;;;4010:1;4007;4000:12;3962:2;4045:1;4062:64;4118:7;4109:6;4098:9;4094:22;4062:64;:::i;:::-;4052:74;;4024:108;3956:186;;;;:::o;4149:907::-;;;;;4363:3;4351:9;4342:7;4338:23;4334:33;4331:2;;;4380:1;4377;4370:12;4331:2;4415:1;4432:53;4477:7;4468:6;4457:9;4453:22;4432:53;:::i;:::-;4422:63;;4394:97;4522:2;4540:53;4585:7;4576:6;4565:9;4561:22;4540:53;:::i;:::-;4530:63;;4501:98;4658:2;4647:9;4643:18;4630:32;4682:18;4674:6;4671:30;4668:2;;;4714:1;4711;4704:12;4668:2;4734:78;4804:7;4795:6;4784:9;4780:22;4734:78;:::i;:::-;4724:88;;4609:209;4877:2;4866:9;4862:18;4849:32;4901:18;4893:6;4890:30;4887:2;;;4933:1;4930;4923:12;4887:2;4953:87;5032:7;5023:6;5012:9;5008:22;4953:87;:::i;:::-;4943:97;;4828:218;4325:731;;;;;;;:::o;5063:142::-;5154:45;5193:5;5154:45;:::i;:::-;5149:3;5142:58;5136:69;;:::o;5212:113::-;5295:24;5313:5;5295:24;:::i;:::-;5290:3;5283:37;5277:48;;:::o;5355:310::-;;5487:88;5568:6;5563:3;5487:88;:::i;:::-;5480:95;;5587:43;5623:6;5618:3;5611:5;5587:43;:::i;:::-;5652:6;5647:3;5643:16;5636:23;;5473:192;;;;;:::o;5673:343::-;;5783:38;5815:5;5783:38;:::i;:::-;5833:70;5896:6;5891:3;5833:70;:::i;:::-;5826:77;;5908:52;5953:6;5948:3;5941:4;5934:5;5930:16;5908:52;:::i;:::-;5981:29;6003:6;5981:29;:::i;:::-;5976:3;5972:39;5965:46;;5763:253;;;;;:::o;6023:356::-;;6151:38;6183:5;6151:38;:::i;:::-;6201:88;6282:6;6277:3;6201:88;:::i;:::-;6194:95;;6294:52;6339:6;6334:3;6327:4;6320:5;6316:16;6294:52;:::i;:::-;6367:6;6362:3;6358:16;6351:23;;6131:248;;;;;:::o;6386:113::-;6469:24;6487:5;6469:24;:::i;:::-;6464:3;6457:37;6451:48;;:::o;6506:291::-;;6669:103;6768:3;6759:6;6751;6669:103;:::i;:::-;6662:110;;6789:3;6782:10;;6650:147;;;;;:::o;6804:271::-;;6957:93;7046:3;7037:6;6957:93;:::i;:::-;6950:100;;7067:3;7060:10;;6938:137;;;;:::o;7082:238::-;;7217:2;7206:9;7202:18;7194:26;;7231:79;7307:1;7296:9;7292:17;7283:6;7231:79;:::i;:::-;7188:132;;;;:::o;7327:333::-;;7482:2;7471:9;7467:18;7459:26;;7496:71;7564:1;7553:9;7549:17;7540:6;7496:71;:::i;:::-;7578:72;7646:2;7635:9;7631:18;7622:6;7578:72;:::i;:::-;7453:207;;;;;:::o;7667:306::-;;7812:2;7801:9;7797:18;7789:26;;7862:9;7856:4;7852:20;7848:1;7837:9;7833:17;7826:47;7887:76;7958:4;7949:6;7887:76;:::i;:::-;7879:84;;7783:190;;;;:::o;7980:222::-;;8107:2;8096:9;8092:18;8084:26;;8121:71;8189:1;8178:9;8174:17;8165:6;8121:71;:::i;:::-;8078:124;;;;:::o;8209:256::-;;8271:2;8265:9;8255:19;;8309:4;8301:6;8297:17;8408:6;8396:10;8393:22;8372:18;8360:10;8357:34;8354:62;8351:2;;;8429:1;8426;8419:12;8351:2;8449:10;8445:2;8438:22;8249:216;;;;:::o;8472:304::-;;8631:18;8623:6;8620:30;8617:2;;;8663:1;8660;8653:12;8617:2;8698:4;8690:6;8686:17;8678:25;;8761:4;8755;8751:15;8743:23;;8554:222;;;:::o;8783:313::-;;8951:18;8943:6;8940:30;8937:2;;;8983:1;8980;8973:12;8937:2;9018:4;9010:6;9006:17;8998:25;;9081:4;9075;9071:15;9063:23;;8874:222;;;:::o;9103:321::-;;9246:18;9238:6;9235:30;9232:2;;;9278:1;9275;9268:12;9232:2;9345:4;9341:9;9334:4;9326:6;9322:17;9318:33;9310:41;;9409:4;9403;9399:15;9391:23;;9169:255;;;:::o;9431:121::-;;9524:5;9518:12;9508:22;;9489:63;;;:::o;9560:162::-;;9674:6;9669:3;9662:19;9711:4;9706:3;9702:14;9687:29;;9655:67;;;;:::o;9731:144::-;;9866:3;9851:18;;9844:31;;;;:::o;9883:91::-;;9945:24;9963:5;9945:24;:::i;:::-;9934:35;;9928:46;;;:::o;9981:99::-;;10051:24;10069:5;10051:24;:::i;:::-;10040:35;;10034:46;;;:::o;10087:85::-;;10160:5;10153:13;10146:21;10135:32;;10129:43;;;:::o;10179:121::-;;10252:42;10245:5;10241:54;10230:65;;10224:76;;;:::o;10307:72::-;;10369:5;10358:16;;10352:27;;;:::o;10386:129::-;;10473:37;10504:5;10473:37;:::i;:::-;10460:50;;10454:61;;;:::o;10522:121::-;;10601:37;10632:5;10601:37;:::i;:::-;10588:50;;10582:61;;;:::o;10650:108::-;;10729:24;10747:5;10729:24;:::i;:::-;10716:37;;10710:48;;;:::o;10766:145::-;10847:6;10842:3;10837;10824:30;10903:1;10894:6;10889:3;10885:16;10878:27;10817:94;;;:::o;10920:268::-;10985:1;10992:101;11006:6;11003:1;11000:13;10992:101;;;11082:1;11077:3;11073:11;11067:18;11063:1;11058:3;11054:11;11047:39;11028:2;11025:1;11021:10;11016:15;;10992:101;;;11108:6;11105:1;11102:13;11099:2;;;11173:1;11164:6;11159:3;11155:16;11148:27;11099:2;10969:219;;;;:::o;11196:97::-;;11284:2;11280:7;11275:2;11268:5;11264:14;11260:28;11250:38;;11244:49;;;:::o;11301:117::-;11370:24;11388:5;11370:24;:::i;:::-;11363:5;11360:35;11350:2;;11409:1;11406;11399:12;11350:2;11344:74;:::o;11425:133::-;11502:32;11528:5;11502:32;:::i;:::-;11495:5;11492:43;11482:2;;11549:1;11546;11539:12;11482:2;11476:82;:::o;11565:111::-;11631:21;11646:5;11631:21;:::i;:::-;11624:5;11621:32;11611:2;;11667:1;11664;11657:12;11611:2;11605:71;:::o;11683:117::-;11752:24;11770:5;11752:24;:::i;:::-;11745:5;11742:35;11732:2;;11791:1;11788;11781:12;11732:2;11726:74;:::o"
},
"gasEstimates": {
"creation": {
"codeDepositCost": "652000",
"executionCost": "infinite",
"totalCost": "infinite"
},
"external": {
"call(address,uint256,bytes)": "infinite",
"uniswapWeth(uint256,uint256,address[],bytes[])": "infinite"
}
},
"methodIdentifiers": {
"call(address,uint256,bytes)": "6dbf2fa0",
"uniswapWeth(uint256,uint256,address[],bytes[])": "ecd494b3"
}
},
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "_executor",
"type": "address"
}
],
"stateMutability": "payable",
"type": "constructor"
},
{
"inputs": [
{
"internalType": "address payable",
"name": "_to",
"type": "address"
},
{
"internalType": "uint256",
"name": "_value",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "_data",
"type": "bytes"
}
],
"name": "call",
"outputs": [
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_wethAmountToFirstMarket",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_ethAmountToCoinbase",
"type": "uint256"
},
{
"internalType": "address[]",
"name": "_targets",
"type": "address[]"
},
{
"internalType": "bytes[]",
"name": "_payloads",
"type": "bytes[]"
}
],
"name": "uniswapWeth",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"stateMutability": "payable",
"type": "receive"
}
]
}
{
"compiler": {
"version": "0.6.12+commit.27d51765"
},
"language": "Solidity",
"output": {
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "_executor",
"type": "address"
}
],
"stateMutability": "payable",
"type": "constructor"
},
{
"inputs": [
{
"internalType": "address payable",
"name": "_to",
"type": "address"
},
{
"internalType": "uint256",
"name": "_value",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "_data",
"type": "bytes"
}
],
"name": "call",
"outputs": [
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_wethAmountToFirstMarket",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_ethAmountToCoinbase",
"type": "uint256"
},
{
"internalType": "address[]",
"name": "_targets",
"type": "address[]"
},
{
"internalType": "bytes[]",
"name": "_payloads",
"type": "bytes[]"
}
],
"name": "uniswapWeth",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"stateMutability": "payable",
"type": "receive"
}
],
"devdoc": {
"kind": "dev",
"methods": {},
"version": 1
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
},
"settings": {
"compilationTarget": {
"github/LeytonTaylor/simple-arbitrage/contracts/BundleExecutor.sol": "FlashBotsMultiCall"
},
"evmVersion": "istanbul",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": false,
"runs": 200
},
"remappings": []
},
"sources": {
"github/LeytonTaylor/simple-arbitrage/contracts/BundleExecutor.sol": {
"keccak256": "0xc605ea2381865dde07b39be58bdeb6857f3304a12bfb4d37175b3698a1cb6812",
"license": "UNLICENSED",
"urls": [
"bzz-raw://c32679007a63a5b48b80c71e2ea5ed29ce4caa80f7c2a2a53485a0343cdb5b3a",
"dweb:/ipfs/QmbeCnHqZKkjxBsUgh9yjbp3wf4m5Ec1ef94ALv9MXBkGy"
]
}
},
"version": 1
}
{
"deploy": {
"VM:-": {
"linkReferences": {},
"autoDeployLib": true
},
"main:1": {
"linkReferences": {},
"autoDeployLib": true
},
"ropsten:3": {
"linkReferences": {},
"autoDeployLib": true
},
"rinkeby:4": {
"linkReferences": {},
"autoDeployLib": true
},
"kovan:42": {
"linkReferences": {},
"autoDeployLib": true
},
"görli:5": {
"linkReferences": {},
"autoDeployLib": true
},
"Custom": {
"linkReferences": {},
"autoDeployLib": true
}
},
"data": {
"bytecode": {
"linkReferences": {},
"object": "608060405234801561001057600080fd5b50610da7806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80634dbf0f391461003b578063ab2217e41461006b575b600080fd5b61005560048036038101906100509190610795565b61009b565b6040516100629190610b23565b60405180910390f35b61008560048036038101906100809190610803565b610263565b6040516100929190610b01565b60405180910390f35b6060808383905067ffffffffffffffff811180156100b857600080fd5b506040519080825280602002602001820160405280156100f257816020015b6100df61064b565b8152602001906001900390816100d75790505b50905060005b848490508110156102585784848281811061010f57fe5b905060200201602081019061012491906107da565b73ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561016957600080fd5b505afa15801561017d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101a19190610852565b826dffffffffffffffffffffffffffff169250816dffffffffffffffffffffffffffff1691508063ffffffff1690508484815181106101dc57fe5b60200260200101516000600381106101f057fe5b6020020185858151811061020057fe5b602002602001015160016003811061021457fe5b6020020186868151811061022457fe5b602002602001015160026003811061023857fe5b6020020183815250838152508381525050505080806001019150506100f8565b508091505092915050565b606060008473ffffffffffffffffffffffffffffffffffffffff1663574f2ba36040518163ffffffff1660e01b815260040160206040518083038186803b1580156102ad57600080fd5b505afa1580156102c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102e591906108a1565b9050808311156102f3578092505b83831015610336576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032d90610b45565b60405180910390fd5b6000848403905060608167ffffffffffffffff8111801561035657600080fd5b5060405190808252806020026020018201604052801561039057816020015b61037d61066d565b8152602001906001900390816103755790505b50905060005b8281101561063d5760008873ffffffffffffffffffffffffffffffffffffffff16631e3dd18b838a016040518263ffffffff1660e01b81526004016103db9190610b65565b60206040518083038186803b1580156103f357600080fd5b505afa158015610407573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061042b919061076c565b90508073ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561047357600080fd5b505afa158015610487573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ab919061076c565b8383815181106104b757fe5b60200260200101516000600381106104cb57fe5b602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561054857600080fd5b505afa15801561055c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610580919061076c565b83838151811061058c57fe5b60200260200101516001600381106105a057fe5b602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050808383815181106105e457fe5b60200260200101516002600381106105f857fe5b602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050508080600101915050610396565b508093505050509392505050565b6040518060600160405280600390602082028036833780820191505090505090565b6040518060600160405280600390602082028036833780820191505090505090565b60008151905061069e81610ce7565b92915050565b60008083601f8401126106b657600080fd5b8235905067ffffffffffffffff8111156106cf57600080fd5b6020830191508360208202830111156106e757600080fd5b9250929050565b6000813590506106fd81610cfe565b92915050565b60008135905061071281610d15565b92915050565b60008151905061072781610d2c565b92915050565b60008135905061073c81610d43565b92915050565b60008151905061075181610d43565b92915050565b60008151905061076681610d5a565b92915050565b60006020828403121561077e57600080fd5b600061078c8482850161068f565b91505092915050565b600080602083850312156107a857600080fd5b600083013567ffffffffffffffff8111156107c257600080fd5b6107ce858286016106a4565b92509250509250929050565b6000602082840312156107ec57600080fd5b60006107fa848285016106ee565b91505092915050565b60008060006060848603121561081857600080fd5b600061082686828701610703565b93505060206108378682870161072d565b92505060406108488682870161072d565b9150509250925092565b60008060006060848603121561086757600080fd5b600061087586828701610718565b935050602061088686828701610718565b925050604061089786828701610757565b9150509250925092565b6000602082840312156108b357600080fd5b60006108c184828501610742565b91505092915050565b60006108d6838361092a565b60208301905092915050565b60006108ee8383610939565b60608301905092915050565b60006109068383610a4c565b60608301905092915050565b600061091e8383610ae3565b60208301905092915050565b61093381610c5d565b82525050565b61094281610bb4565b61094c8184610c14565b925061095782610b80565b8060005b8381101561098857815161096f87826108ca565b965061097a83610be0565b92505060018101905061095b565b505050505050565b600061099b82610bbf565b6109a58185610c1f565b93506109b083610b8a565b8060005b838110156109e15781516109c888826108e2565b97506109d383610bed565b9250506001810190506109b4565b5085935050505092915050565b60006109f982610bca565b610a038185610c30565b9350610a0e83610b9a565b8060005b83811015610a3f578151610a2688826108fa565b9750610a3183610bfa565b925050600181019050610a12565b5085935050505092915050565b610a5581610bd5565b610a5f8184610c41565b9250610a6a82610baa565b8060005b83811015610a9b578151610a828782610912565b9650610a8d83610c07565b925050600181019050610a6e565b505050505050565b6000610ab0602083610c4c565b91507f73746172742063616e6e6f7420626520686967686572207468616e2073746f706000830152602082019050919050565b610aec81610ccd565b82525050565b610afb81610ccd565b82525050565b60006020820190508181036000830152610b1b8184610990565b905092915050565b60006020820190508181036000830152610b3d81846109ee565b905092915050565b60006020820190508181036000830152610b5e81610aa3565b9050919050565b6000602082019050610b7a6000830184610af2565b92915050565b6000819050919050565b6000819050602082019050919050565b6000819050602082019050919050565b6000819050919050565b600060039050919050565b600081519050919050565b600081519050919050565b600060039050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000610c6882610cad565b9050919050565b6000610c7a82610c5d565b9050919050565b6000610c8c82610c5d565b9050919050565b60006dffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b610cf081610c5d565b8114610cfb57600080fd5b50565b610d0781610c6f565b8114610d1257600080fd5b50565b610d1e81610c81565b8114610d2957600080fd5b50565b610d3581610c93565b8114610d4057600080fd5b50565b610d4c81610ccd565b8114610d5757600080fd5b50565b610d6381610cd7565b8114610d6e57600080fd5b5056fea2646970667358221220f38fb9fc97b5ff504986f620cd006564be8c28d3f676529fa9464df4f4bf740264736f6c634300060c0033",
"opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xDA7 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x4DBF0F39 EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0xAB2217E4 EQ PUSH2 0x6B JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x55 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x795 JUMP JUMPDEST PUSH2 0x9B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x62 SWAP2 SWAP1 PUSH2 0xB23 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x85 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x80 SWAP2 SWAP1 PUSH2 0x803 JUMP JUMPDEST PUSH2 0x263 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x92 SWAP2 SWAP1 PUSH2 0xB01 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x60 DUP1 DUP4 DUP4 SWAP1 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0xB8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xF2 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH2 0xDF PUSH2 0x64B JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0xD7 JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP5 DUP5 SWAP1 POP DUP2 LT ISZERO PUSH2 0x258 JUMPI DUP5 DUP5 DUP3 DUP2 DUP2 LT PUSH2 0x10F JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x124 SWAP2 SWAP1 PUSH2 0x7DA JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x902F1AC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x169 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x17D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1A1 SWAP2 SWAP1 PUSH2 0x852 JUMP JUMPDEST DUP3 PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 POP DUP2 PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 POP DUP1 PUSH4 0xFFFFFFFF AND SWAP1 POP DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x1DC JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 PUSH1 0x3 DUP2 LT PUSH2 0x1F0 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL ADD DUP6 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x200 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x3 DUP2 LT PUSH2 0x214 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL ADD DUP7 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x224 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x2 PUSH1 0x3 DUP2 LT PUSH2 0x238 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL ADD DUP4 DUP2 MSTORE POP DUP4 DUP2 MSTORE POP DUP4 DUP2 MSTORE POP POP POP POP DUP1 DUP1 PUSH1 0x1 ADD SWAP2 POP POP PUSH2 0xF8 JUMP JUMPDEST POP DUP1 SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x574F2BA3 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2C1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2E5 SWAP2 SWAP1 PUSH2 0x8A1 JUMP JUMPDEST SWAP1 POP DUP1 DUP4 GT ISZERO PUSH2 0x2F3 JUMPI DUP1 SWAP3 POP JUMPDEST DUP4 DUP4 LT ISZERO PUSH2 0x336 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x32D SWAP1 PUSH2 0xB45 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP5 SUB SWAP1 POP PUSH1 0x60 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x356 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x390 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH2 0x37D PUSH2 0x66D JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x375 JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x63D JUMPI PUSH1 0x0 DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x1E3DD18B DUP4 DUP11 ADD PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP2 SWAP1 PUSH2 0xB65 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x407 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x42B SWAP2 SWAP1 PUSH2 0x76C JUMP JUMPDEST SWAP1 POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xDFE1681 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x473 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x487 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4AB SWAP2 SWAP1 PUSH2 0x76C JUMP JUMPDEST DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4B7 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 PUSH1 0x3 DUP2 LT PUSH2 0x4CB JUMPI INVALID JUMPDEST PUSH1 0x20 MUL ADD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD21220A7 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x548 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x55C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x580 SWAP2 SWAP1 PUSH2 0x76C JUMP JUMPDEST DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x58C JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x3 DUP2 LT PUSH2 0x5A0 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL ADD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP DUP1 DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x5E4 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x2 PUSH1 0x3 DUP2 LT PUSH2 0x5F8 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL ADD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP POP DUP1 DUP1 PUSH1 0x1 ADD SWAP2 POP POP PUSH2 0x396 JUMP JUMPDEST POP DUP1 SWAP4 POP POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY DUP1 DUP3 ADD SWAP2 POP POP SWAP1 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY DUP1 DUP3 ADD SWAP2 POP POP SWAP1 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x69E DUP2 PUSH2 0xCE7 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x6B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP1 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x6CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 MUL DUP4 ADD GT ISZERO PUSH2 0x6E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x6FD DUP2 PUSH2 0xCFE JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x712 DUP2 PUSH2 0xD15 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x727 DUP2 PUSH2 0xD2C JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x73C DUP2 PUSH2 0xD43 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x751 DUP2 PUSH2 0xD43 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x766 DUP2 PUSH2 0xD5A JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x77E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x78C DUP5 DUP3 DUP6 ADD PUSH2 0x68F JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x7A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x7C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x7CE DUP6 DUP3 DUP7 ADD PUSH2 0x6A4 JUMP JUMPDEST SWAP3 POP SWAP3 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x7EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x7FA DUP5 DUP3 DUP6 ADD PUSH2 0x6EE JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x818 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x826 DUP7 DUP3 DUP8 ADD PUSH2 0x703 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x837 DUP7 DUP3 DUP8 ADD PUSH2 0x72D JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x848 DUP7 DUP3 DUP8 ADD PUSH2 0x72D JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x867 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x875 DUP7 DUP3 DUP8 ADD PUSH2 0x718 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x886 DUP7 DUP3 DUP8 ADD PUSH2 0x718 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x897 DUP7 DUP3 DUP8 ADD PUSH2 0x757 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x8B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x8C1 DUP5 DUP3 DUP6 ADD PUSH2 0x742 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8D6 DUP4 DUP4 PUSH2 0x92A JUMP JUMPDEST PUSH1 0x20 DUP4 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8EE DUP4 DUP4 PUSH2 0x939 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x906 DUP4 DUP4 PUSH2 0xA4C JUMP JUMPDEST PUSH1 0x60 DUP4 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x91E DUP4 DUP4 PUSH2 0xAE3 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x933 DUP2 PUSH2 0xC5D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x942 DUP2 PUSH2 0xBB4 JUMP JUMPDEST PUSH2 0x94C DUP2 DUP5 PUSH2 0xC14 JUMP JUMPDEST SWAP3 POP PUSH2 0x957 DUP3 PUSH2 0xB80 JUMP JUMPDEST DUP1 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x988 JUMPI DUP2 MLOAD PUSH2 0x96F DUP8 DUP3 PUSH2 0x8CA JUMP JUMPDEST SWAP7 POP PUSH2 0x97A DUP4 PUSH2 0xBE0 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH2 0x95B JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x99B DUP3 PUSH2 0xBBF JUMP JUMPDEST PUSH2 0x9A5 DUP2 DUP6 PUSH2 0xC1F JUMP JUMPDEST SWAP4 POP PUSH2 0x9B0 DUP4 PUSH2 0xB8A JUMP JUMPDEST DUP1 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x9E1 JUMPI DUP2 MLOAD PUSH2 0x9C8 DUP9 DUP3 PUSH2 0x8E2 JUMP JUMPDEST SWAP8 POP PUSH2 0x9D3 DUP4 PUSH2 0xBED JUMP JUMPDEST SWAP3 POP POP PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH2 0x9B4 JUMP JUMPDEST POP DUP6 SWAP4 POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x9F9 DUP3 PUSH2 0xBCA JUMP JUMPDEST PUSH2 0xA03 DUP2 DUP6 PUSH2 0xC30 JUMP JUMPDEST SWAP4 POP PUSH2 0xA0E DUP4 PUSH2 0xB9A JUMP JUMPDEST DUP1 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xA3F JUMPI DUP2 MLOAD PUSH2 0xA26 DUP9 DUP3 PUSH2 0x8FA JUMP JUMPDEST SWAP8 POP PUSH2 0xA31 DUP4 PUSH2 0xBFA JUMP JUMPDEST SWAP3 POP POP PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH2 0xA12 JUMP JUMPDEST POP DUP6 SWAP4 POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xA55 DUP2 PUSH2 0xBD5 JUMP JUMPDEST PUSH2 0xA5F DUP2 DUP5 PUSH2 0xC41 JUMP JUMPDEST SWAP3 POP PUSH2 0xA6A DUP3 PUSH2 0xBAA JUMP JUMPDEST DUP1 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xA9B JUMPI DUP2 MLOAD PUSH2 0xA82 DUP8 DUP3 PUSH2 0x912 JUMP JUMPDEST SWAP7 POP PUSH2 0xA8D DUP4 PUSH2 0xC07 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH2 0xA6E JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xAB0 PUSH1 0x20 DUP4 PUSH2 0xC4C JUMP JUMPDEST SWAP2 POP PUSH32 0x73746172742063616E6E6F7420626520686967686572207468616E2073746F70 PUSH1 0x0 DUP4 ADD MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xAEC DUP2 PUSH2 0xCCD JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0xAFB DUP2 PUSH2 0xCCD JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0xB1B DUP2 DUP5 PUSH2 0x990 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0xB3D DUP2 DUP5 PUSH2 0x9EE JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0xB5E DUP2 PUSH2 0xAA3 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xB7A PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xAF2 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x3 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x3 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC68 DUP3 PUSH2 0xCAD JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC7A DUP3 PUSH2 0xC5D JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC8C DUP3 PUSH2 0xC5D JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xCF0 DUP2 PUSH2 0xC5D JUMP JUMPDEST DUP2 EQ PUSH2 0xCFB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0xD07 DUP2 PUSH2 0xC6F JUMP JUMPDEST DUP2 EQ PUSH2 0xD12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0xD1E DUP2 PUSH2 0xC81 JUMP JUMPDEST DUP2 EQ PUSH2 0xD29 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0xD35 DUP2 PUSH2 0xC93 JUMP JUMPDEST DUP2 EQ PUSH2 0xD40 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0xD4C DUP2 PUSH2 0xCCD JUMP JUMPDEST DUP2 EQ PUSH2 0xD57 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0xD63 DUP2 PUSH2 0xCD7 JUMP JUMPDEST DUP2 EQ PUSH2 0xD6E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 RETURN DUP16 0xB9 0xFC SWAP8 0xB5 SELFDESTRUCT POP 0x49 DUP7 0xF6 KECCAK256 0xCD STOP PUSH6 0x64BE8C28D3F6 PUSH23 0x529FA9464DF4F4BF740264736F6C634300060C00330000 ",
"sourceMap": "681:1186:0:-:0;;;;;;;;;;;;;;;;;;;"
},
"deployedBytecode": {
"immutableReferences": {},
"linkReferences": {},
"object": "608060405234801561001057600080fd5b50600436106100365760003560e01c80634dbf0f391461003b578063ab2217e41461006b575b600080fd5b61005560048036038101906100509190610795565b61009b565b6040516100629190610b23565b60405180910390f35b61008560048036038101906100809190610803565b610263565b6040516100929190610b01565b60405180910390f35b6060808383905067ffffffffffffffff811180156100b857600080fd5b506040519080825280602002602001820160405280156100f257816020015b6100df61064b565b8152602001906001900390816100d75790505b50905060005b848490508110156102585784848281811061010f57fe5b905060200201602081019061012491906107da565b73ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561016957600080fd5b505afa15801561017d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101a19190610852565b826dffffffffffffffffffffffffffff169250816dffffffffffffffffffffffffffff1691508063ffffffff1690508484815181106101dc57fe5b60200260200101516000600381106101f057fe5b6020020185858151811061020057fe5b602002602001015160016003811061021457fe5b6020020186868151811061022457fe5b602002602001015160026003811061023857fe5b6020020183815250838152508381525050505080806001019150506100f8565b508091505092915050565b606060008473ffffffffffffffffffffffffffffffffffffffff1663574f2ba36040518163ffffffff1660e01b815260040160206040518083038186803b1580156102ad57600080fd5b505afa1580156102c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102e591906108a1565b9050808311156102f3578092505b83831015610336576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032d90610b45565b60405180910390fd5b6000848403905060608167ffffffffffffffff8111801561035657600080fd5b5060405190808252806020026020018201604052801561039057816020015b61037d61066d565b8152602001906001900390816103755790505b50905060005b8281101561063d5760008873ffffffffffffffffffffffffffffffffffffffff16631e3dd18b838a016040518263ffffffff1660e01b81526004016103db9190610b65565b60206040518083038186803b1580156103f357600080fd5b505afa158015610407573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061042b919061076c565b90508073ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561047357600080fd5b505afa158015610487573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ab919061076c565b8383815181106104b757fe5b60200260200101516000600381106104cb57fe5b602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561054857600080fd5b505afa15801561055c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610580919061076c565b83838151811061058c57fe5b60200260200101516001600381106105a057fe5b602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050808383815181106105e457fe5b60200260200101516002600381106105f857fe5b602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050508080600101915050610396565b508093505050509392505050565b6040518060600160405280600390602082028036833780820191505090505090565b6040518060600160405280600390602082028036833780820191505090505090565b60008151905061069e81610ce7565b92915050565b60008083601f8401126106b657600080fd5b8235905067ffffffffffffffff8111156106cf57600080fd5b6020830191508360208202830111156106e757600080fd5b9250929050565b6000813590506106fd81610cfe565b92915050565b60008135905061071281610d15565b92915050565b60008151905061072781610d2c565b92915050565b60008135905061073c81610d43565b92915050565b60008151905061075181610d43565b92915050565b60008151905061076681610d5a565b92915050565b60006020828403121561077e57600080fd5b600061078c8482850161068f565b91505092915050565b600080602083850312156107a857600080fd5b600083013567ffffffffffffffff8111156107c257600080fd5b6107ce858286016106a4565b92509250509250929050565b6000602082840312156107ec57600080fd5b60006107fa848285016106ee565b91505092915050565b60008060006060848603121561081857600080fd5b600061082686828701610703565b93505060206108378682870161072d565b92505060406108488682870161072d565b9150509250925092565b60008060006060848603121561086757600080fd5b600061087586828701610718565b935050602061088686828701610718565b925050604061089786828701610757565b9150509250925092565b6000602082840312156108b357600080fd5b60006108c184828501610742565b91505092915050565b60006108d6838361092a565b60208301905092915050565b60006108ee8383610939565b60608301905092915050565b60006109068383610a4c565b60608301905092915050565b600061091e8383610ae3565b60208301905092915050565b61093381610c5d565b82525050565b61094281610bb4565b61094c8184610c14565b925061095782610b80565b8060005b8381101561098857815161096f87826108ca565b965061097a83610be0565b92505060018101905061095b565b505050505050565b600061099b82610bbf565b6109a58185610c1f565b93506109b083610b8a565b8060005b838110156109e15781516109c888826108e2565b97506109d383610bed565b9250506001810190506109b4565b5085935050505092915050565b60006109f982610bca565b610a038185610c30565b9350610a0e83610b9a565b8060005b83811015610a3f578151610a2688826108fa565b9750610a3183610bfa565b925050600181019050610a12565b5085935050505092915050565b610a5581610bd5565b610a5f8184610c41565b9250610a6a82610baa565b8060005b83811015610a9b578151610a828782610912565b9650610a8d83610c07565b925050600181019050610a6e565b505050505050565b6000610ab0602083610c4c565b91507f73746172742063616e6e6f7420626520686967686572207468616e2073746f706000830152602082019050919050565b610aec81610ccd565b82525050565b610afb81610ccd565b82525050565b60006020820190508181036000830152610b1b8184610990565b905092915050565b60006020820190508181036000830152610b3d81846109ee565b905092915050565b60006020820190508181036000830152610b5e81610aa3565b9050919050565b6000602082019050610b7a6000830184610af2565b92915050565b6000819050919050565b6000819050602082019050919050565b6000819050602082019050919050565b6000819050919050565b600060039050919050565b600081519050919050565b600081519050919050565b600060039050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000610c6882610cad565b9050919050565b6000610c7a82610c5d565b9050919050565b6000610c8c82610c5d565b9050919050565b60006dffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b610cf081610c5d565b8114610cfb57600080fd5b50565b610d0781610c6f565b8114610d1257600080fd5b50565b610d1e81610c81565b8114610d2957600080fd5b50565b610d3581610c93565b8114610d4057600080fd5b50565b610d4c81610ccd565b8114610d5757600080fd5b50565b610d6381610cd7565b8114610d6e57600080fd5b5056fea2646970667358221220f38fb9fc97b5ff504986f620cd006564be8c28d3f676529fa9464df4f4bf740264736f6c634300060c0033",
"opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x4DBF0F39 EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0xAB2217E4 EQ PUSH2 0x6B JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x55 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x795 JUMP JUMPDEST PUSH2 0x9B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x62 SWAP2 SWAP1 PUSH2 0xB23 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x85 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x80 SWAP2 SWAP1 PUSH2 0x803 JUMP JUMPDEST PUSH2 0x263 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x92 SWAP2 SWAP1 PUSH2 0xB01 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x60 DUP1 DUP4 DUP4 SWAP1 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0xB8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xF2 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH2 0xDF PUSH2 0x64B JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0xD7 JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP5 DUP5 SWAP1 POP DUP2 LT ISZERO PUSH2 0x258 JUMPI DUP5 DUP5 DUP3 DUP2 DUP2 LT PUSH2 0x10F JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x124 SWAP2 SWAP1 PUSH2 0x7DA JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x902F1AC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x169 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x17D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1A1 SWAP2 SWAP1 PUSH2 0x852 JUMP JUMPDEST DUP3 PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 POP DUP2 PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 POP DUP1 PUSH4 0xFFFFFFFF AND SWAP1 POP DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x1DC JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 PUSH1 0x3 DUP2 LT PUSH2 0x1F0 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL ADD DUP6 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x200 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x3 DUP2 LT PUSH2 0x214 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL ADD DUP7 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x224 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x2 PUSH1 0x3 DUP2 LT PUSH2 0x238 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL ADD DUP4 DUP2 MSTORE POP DUP4 DUP2 MSTORE POP DUP4 DUP2 MSTORE POP POP POP POP DUP1 DUP1 PUSH1 0x1 ADD SWAP2 POP POP PUSH2 0xF8 JUMP JUMPDEST POP DUP1 SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x574F2BA3 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2C1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2E5 SWAP2 SWAP1 PUSH2 0x8A1 JUMP JUMPDEST SWAP1 POP DUP1 DUP4 GT ISZERO PUSH2 0x2F3 JUMPI DUP1 SWAP3 POP JUMPDEST DUP4 DUP4 LT ISZERO PUSH2 0x336 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x32D SWAP1 PUSH2 0xB45 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP5 SUB SWAP1 POP PUSH1 0x60 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x356 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x390 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH2 0x37D PUSH2 0x66D JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x375 JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x63D JUMPI PUSH1 0x0 DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x1E3DD18B DUP4 DUP11 ADD PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DB SWAP2 SWAP1 PUSH2 0xB65 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x407 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x42B SWAP2 SWAP1 PUSH2 0x76C JUMP JUMPDEST SWAP1 POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xDFE1681 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x473 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x487 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4AB SWAP2 SWAP1 PUSH2 0x76C JUMP JUMPDEST DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4B7 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 PUSH1 0x3 DUP2 LT PUSH2 0x4CB JUMPI INVALID JUMPDEST PUSH1 0x20 MUL ADD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD21220A7 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x548 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x55C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x580 SWAP2 SWAP1 PUSH2 0x76C JUMP JUMPDEST DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x58C JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x3 DUP2 LT PUSH2 0x5A0 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL ADD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP DUP1 DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x5E4 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x2 PUSH1 0x3 DUP2 LT PUSH2 0x5F8 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL ADD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP POP DUP1 DUP1 PUSH1 0x1 ADD SWAP2 POP POP PUSH2 0x396 JUMP JUMPDEST POP DUP1 SWAP4 POP POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY DUP1 DUP3 ADD SWAP2 POP POP SWAP1 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY DUP1 DUP3 ADD SWAP2 POP POP SWAP1 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x69E DUP2 PUSH2 0xCE7 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x6B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP1 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x6CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 MUL DUP4 ADD GT ISZERO PUSH2 0x6E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x6FD DUP2 PUSH2 0xCFE JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x712 DUP2 PUSH2 0xD15 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x727 DUP2 PUSH2 0xD2C JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x73C DUP2 PUSH2 0xD43 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x751 DUP2 PUSH2 0xD43 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x766 DUP2 PUSH2 0xD5A JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x77E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x78C DUP5 DUP3 DUP6 ADD PUSH2 0x68F JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x7A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x7C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x7CE DUP6 DUP3 DUP7 ADD PUSH2 0x6A4 JUMP JUMPDEST SWAP3 POP SWAP3 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x7EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x7FA DUP5 DUP3 DUP6 ADD PUSH2 0x6EE JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x818 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x826 DUP7 DUP3 DUP8 ADD PUSH2 0x703 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x837 DUP7 DUP3 DUP8 ADD PUSH2 0x72D JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x848 DUP7 DUP3 DUP8 ADD PUSH2 0x72D JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x867 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x875 DUP7 DUP3 DUP8 ADD PUSH2 0x718 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x886 DUP7 DUP3 DUP8 ADD PUSH2 0x718 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x897 DUP7 DUP3 DUP8 ADD PUSH2 0x757 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x8B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x8C1 DUP5 DUP3 DUP6 ADD PUSH2 0x742 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8D6 DUP4 DUP4 PUSH2 0x92A JUMP JUMPDEST PUSH1 0x20 DUP4 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8EE DUP4 DUP4 PUSH2 0x939 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x906 DUP4 DUP4 PUSH2 0xA4C JUMP JUMPDEST PUSH1 0x60 DUP4 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x91E DUP4 DUP4 PUSH2 0xAE3 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x933 DUP2 PUSH2 0xC5D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x942 DUP2 PUSH2 0xBB4 JUMP JUMPDEST PUSH2 0x94C DUP2 DUP5 PUSH2 0xC14 JUMP JUMPDEST SWAP3 POP PUSH2 0x957 DUP3 PUSH2 0xB80 JUMP JUMPDEST DUP1 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x988 JUMPI DUP2 MLOAD PUSH2 0x96F DUP8 DUP3 PUSH2 0x8CA JUMP JUMPDEST SWAP7 POP PUSH2 0x97A DUP4 PUSH2 0xBE0 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH2 0x95B JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x99B DUP3 PUSH2 0xBBF JUMP JUMPDEST PUSH2 0x9A5 DUP2 DUP6 PUSH2 0xC1F JUMP JUMPDEST SWAP4 POP PUSH2 0x9B0 DUP4 PUSH2 0xB8A JUMP JUMPDEST DUP1 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x9E1 JUMPI DUP2 MLOAD PUSH2 0x9C8 DUP9 DUP3 PUSH2 0x8E2 JUMP JUMPDEST SWAP8 POP PUSH2 0x9D3 DUP4 PUSH2 0xBED JUMP JUMPDEST SWAP3 POP POP PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH2 0x9B4 JUMP JUMPDEST POP DUP6 SWAP4 POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x9F9 DUP3 PUSH2 0xBCA JUMP JUMPDEST PUSH2 0xA03 DUP2 DUP6 PUSH2 0xC30 JUMP JUMPDEST SWAP4 POP PUSH2 0xA0E DUP4 PUSH2 0xB9A JUMP JUMPDEST DUP1 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xA3F JUMPI DUP2 MLOAD PUSH2 0xA26 DUP9 DUP3 PUSH2 0x8FA JUMP JUMPDEST SWAP8 POP PUSH2 0xA31 DUP4 PUSH2 0xBFA JUMP JUMPDEST SWAP3 POP POP PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH2 0xA12 JUMP JUMPDEST POP DUP6 SWAP4 POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xA55 DUP2 PUSH2 0xBD5 JUMP JUMPDEST PUSH2 0xA5F DUP2 DUP5 PUSH2 0xC41 JUMP JUMPDEST SWAP3 POP PUSH2 0xA6A DUP3 PUSH2 0xBAA JUMP JUMPDEST DUP1 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xA9B JUMPI DUP2 MLOAD PUSH2 0xA82 DUP8 DUP3 PUSH2 0x912 JUMP JUMPDEST SWAP7 POP PUSH2 0xA8D DUP4 PUSH2 0xC07 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH2 0xA6E JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xAB0 PUSH1 0x20 DUP4 PUSH2 0xC4C JUMP JUMPDEST SWAP2 POP PUSH32 0x73746172742063616E6E6F7420626520686967686572207468616E2073746F70 PUSH1 0x0 DUP4 ADD MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xAEC DUP2 PUSH2 0xCCD JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0xAFB DUP2 PUSH2 0xCCD JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0xB1B DUP2 DUP5 PUSH2 0x990 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0xB3D DUP2 DUP5 PUSH2 0x9EE JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0xB5E DUP2 PUSH2 0xAA3 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xB7A PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xAF2 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x3 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x3 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC68 DUP3 PUSH2 0xCAD JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC7A DUP3 PUSH2 0xC5D JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC8C DUP3 PUSH2 0xC5D JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xCF0 DUP2 PUSH2 0xC5D JUMP JUMPDEST DUP2 EQ PUSH2 0xCFB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0xD07 DUP2 PUSH2 0xC6F JUMP JUMPDEST DUP2 EQ PUSH2 0xD12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0xD1E DUP2 PUSH2 0xC81 JUMP JUMPDEST DUP2 EQ PUSH2 0xD29 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0xD35 DUP2 PUSH2 0xC93 JUMP JUMPDEST DUP2 EQ PUSH2 0xD40 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0xD4C DUP2 PUSH2 0xCCD JUMP JUMPDEST DUP2 EQ PUSH2 0xD57 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0xD63 DUP2 PUSH2 0xCD7 JUMP JUMPDEST DUP2 EQ PUSH2 0xD6E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 RETURN DUP16 0xB9 0xFC SWAP8 0xB5 SELFDESTRUCT POP 0x49 DUP7 0xF6 KECCAK256 0xCD STOP PUSH6 0x64BE8C28D3F6 PUSH23 0x529FA9464DF4F4BF740264736F6C634300060C00330000 ",
"sourceMap": "681:1186:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;718:349;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1073:792;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;718:349;803:19;834:26;880:6;;:13;;863:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;834:60;;909:6;904:134;925:6;;:13;;921:1;:17;904:134;;;1004:6;;1011:1;1004:9;;;;;;;;;;;;;;;;;;;;:::i;:::-;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;959:68;;;;;;;;;;;;;;;960:6;967:1;960:9;;;;;;;;;;;;;;970:1;960:12;;;;;;;;;;974:6;981:1;974:9;;;;;;;;;;;;;;984:1;974:12;;;;;;;;;;988:6;995:1;988:9;;;;;;;;;;;;;;998:1;988:12;;;;;;;;;;959:68;;;;;;;;;;;;;;;940:3;;;;;;;904:134;;;;1054:6;1047:13;;;718:349;;;;:::o;1073:792::-;1191:19;1223:23;1249:15;:30;;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1223:58;;1303:15;1295:5;:23;1291:77;;;1342:15;1334:23;;1291:77;1394:6;1385:5;:15;;1377:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;1447:12;1470:6;1462:5;:14;1447:29;;1486:26;1532:4;1515:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;1486:51;;1552:6;1547:289;1568:4;1564:1;:8;1547:289;;;1593:27;1638:15;:24;;;1672:1;1663:6;:10;1638:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1593:82;;1704:12;:19;;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1689:6;1696:1;1689:9;;;;;;;;;;;;;;1699:1;1689:12;;;;;;;;;;:36;;;;;;;;;;;1754:12;:19;;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1739:6;1746:1;1739:9;;;;;;;;;;;;;;1749:1;1739:12;;;;;;;;;;:36;;;;;;;;;;;1812:12;1789:6;1796:1;1789:9;;;;;;;;;;;;;;1799:1;1789:12;;;;;;;;;;:36;;;;;;;;;;;1547:289;1574:3;;;;;;;1547:289;;;;1852:6;1845:13;;;;;1073:792;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5:134::-;;89:6;83:13;74:22;;101:33;128:5;101:33;:::i;:::-;68:71;;;;:::o;180:373::-;;;331:3;324:4;316:6;312:17;308:27;298:2;;349:1;346;339:12;298:2;382:6;369:20;359:30;;409:18;401:6;398:30;395:2;;;441:1;438;431:12;395:2;475:4;467:6;463:17;451:29;;526:3;518:4;510:6;506:17;496:8;492:32;489:41;486:2;;;543:1;540;533:12;486:2;291:262;;;;;:::o;561:172::-;;662:6;649:20;640:29;;674:54;722:5;674:54;:::i;:::-;634:99;;;;:::o;740:176::-;;843:6;830:20;821:29;;855:56;905:5;855:56;:::i;:::-;815:101;;;;:::o;923:134::-;;1007:6;1001:13;992:22;;1019:33;1046:5;1019:33;:::i;:::-;986:71;;;;:::o;1064:130::-;;1144:6;1131:20;1122:29;;1156:33;1183:5;1156:33;:::i;:::-;1116:78;;;;:::o;1201:134::-;;1285:6;1279:13;1270:22;;1297:33;1324:5;1297:33;:::i;:::-;1264:71;;;;:::o;1342:132::-;;1425:6;1419:13;1410:22;;1437:32;1463:5;1437:32;:::i;:::-;1404:70;;;;:::o;1481:263::-;;1596:2;1584:9;1575:7;1571:23;1567:32;1564:2;;;1612:1;1609;1602:12;1564:2;1647:1;1664:64;1720:7;1711:6;1700:9;1696:22;1664:64;:::i;:::-;1654:74;;1626:108;1558:186;;;;:::o;1751:439::-;;;1911:2;1899:9;1890:7;1886:23;1882:32;1879:2;;;1927:1;1924;1917:12;1879:2;1990:1;1979:9;1975:17;1962:31;2013:18;2005:6;2002:30;1999:2;;;2045:1;2042;2035:12;1999:2;2073:101;2166:7;2157:6;2146:9;2142:22;2073:101;:::i;:::-;2055:119;;;;1941:239;1873:317;;;;;:::o;2197:283::-;;2322:2;2310:9;2301:7;2297:23;2293:32;2290:2;;;2338:1;2335;2328:12;2290:2;2373:1;2390:74;2456:7;2447:6;2436:9;2432:22;2390:74;:::i;:::-;2380:84;;2352:118;2284:196;;;;:::o;2487:537::-;;;;2648:2;2636:9;2627:7;2623:23;2619:32;2616:2;;;2664:1;2661;2654:12;2616:2;2699:1;2716:76;2784:7;2775:6;2764:9;2760:22;2716:76;:::i;:::-;2706:86;;2678:120;2829:2;2847:53;2892:7;2883:6;2872:9;2868:22;2847:53;:::i;:::-;2837:63;;2808:98;2937:2;2955:53;3000:7;2991:6;2980:9;2976:22;2955:53;:::i;:::-;2945:63;;2916:98;2610:414;;;;;:::o;3031:533::-;;;;3179:2;3167:9;3158:7;3154:23;3150:32;3147:2;;;3195:1;3192;3185:12;3147:2;3230:1;3247:64;3303:7;3294:6;3283:9;3279:22;3247:64;:::i;:::-;3237:74;;3209:108;3348:2;3366:64;3422:7;3413:6;3402:9;3398:22;3366:64;:::i;:::-;3356:74;;3327:109;3467:2;3485:63;3540:7;3531:6;3520:9;3516:22;3485:63;:::i;:::-;3475:73;;3446:108;3141:423;;;;;:::o;3571:263::-;;3686:2;3674:9;3665:7;3661:23;3657:32;3654:2;;;3702:1;3699;3692:12;3654:2;3737:1;3754:64;3810:7;3801:6;3790:9;3786:22;3754:64;:::i;:::-;3744:74;;3716:108;3648:186;;;;:::o;3842:173::-;;3929:46;3971:3;3963:6;3929:46;:::i;:::-;4004:4;3999:3;3995:14;3981:28;;3922:93;;;;:::o;4024:265::-;;4157:92;4245:3;4237:6;4157:92;:::i;:::-;4278:4;4273:3;4269:14;4255:28;;4150:139;;;;:::o;4298:265::-;;4431:92;4519:3;4511:6;4431:92;:::i;:::-;4552:4;4547:3;4543:14;4529:28;;4424:139;;;;:::o;4572:173::-;;4659:46;4701:3;4693:6;4659:46;:::i;:::-;4734:4;4729:3;4725:14;4711:28;;4652:93;;;;:::o;4753:103::-;4826:24;4844:5;4826:24;:::i;:::-;4821:3;4814:37;4808:48;;:::o;4896:640::-;5019:52;5065:5;5019:52;:::i;:::-;5084:74;5151:6;5146:3;5084:74;:::i;:::-;5077:81;;5179:54;5227:5;5179:54;:::i;:::-;5253:7;5281:1;5266:258;5291:6;5288:1;5285:13;5266:258;;;5358:6;5352:13;5379:63;5438:3;5423:13;5379:63;:::i;:::-;5372:70;;5459:58;5510:6;5459:58;:::i;:::-;5449:68;;5323:201;5313:1;5310;5306:9;5301:14;;5266:258;;;5270:14;4998:538;;;;;:::o;5581:874::-;;5772:77;5843:5;5772:77;:::i;:::-;5862:109;5964:6;5959:3;5862:109;:::i;:::-;5855:116;;5992:79;6065:5;5992:79;:::i;:::-;6091:7;6119:1;6104:329;6129:6;6126:1;6123:13;6104:329;;;6196:6;6190:13;6217:109;6322:3;6307:13;6217:109;:::i;:::-;6210:116;;6343:83;6419:6;6343:83;:::i;:::-;6333:93;;6161:272;6151:1;6148;6144:9;6139:14;;6104:329;;;6108:14;6446:3;6439:10;;5751:704;;;;;;;:::o;6500:874::-;;6691:77;6762:5;6691:77;:::i;:::-;6781:109;6883:6;6878:3;6781:109;:::i;:::-;6774:116;;6911:79;6984:5;6911:79;:::i;:::-;7010:7;7038:1;7023:329;7048:6;7045:1;7042:13;7023:329;;;7115:6;7109:13;7136:109;7241:3;7226:13;7136:109;:::i;:::-;7129:116;;7262:83;7338:6;7262:83;:::i;:::-;7252:93;;7080:272;7070:1;7067;7063:9;7058:14;;7023:329;;;7027:14;7365:3;7358:10;;6670:704;;;;;;;:::o;7415:640::-;7538:52;7584:5;7538:52;:::i;:::-;7603:74;7670:6;7665:3;7603:74;:::i;:::-;7596:81;;7698:54;7746:5;7698:54;:::i;:::-;7772:7;7800:1;7785:258;7810:6;7807:1;7804:13;7785:258;;;7877:6;7871:13;7898:63;7957:3;7942:13;7898:63;:::i;:::-;7891:70;;7978:58;8029:6;7978:58;:::i;:::-;7968:68;;7842:201;7832:1;7829;7825:9;7820:14;;7785:258;;;7789:14;7517:538;;;;;:::o;8064:332::-;;8224:67;8288:2;8283:3;8224:67;:::i;:::-;8217:74;;8324:34;8320:1;8315:3;8311:11;8304:55;8387:2;8382:3;8378:12;8371:19;;8210:186;;;:::o;8404:103::-;8477:24;8495:5;8477:24;:::i;:::-;8472:3;8465:37;8459:48;;:::o;8514:113::-;8597:24;8615:5;8597:24;:::i;:::-;8592:3;8585:37;8579:48;;:::o;8634:462::-;;8857:2;8846:9;8842:18;8834:26;;8907:9;8901:4;8897:20;8893:1;8882:9;8878:17;8871:47;8932:154;9081:4;9072:6;8932:154;:::i;:::-;8924:162;;8828:268;;;;:::o;9103:462::-;;9326:2;9315:9;9311:18;9303:26;;9376:9;9370:4;9366:20;9362:1;9351:9;9347:17;9340:47;9401:154;9550:4;9541:6;9401:154;:::i;:::-;9393:162;;9297:268;;;;:::o;9572:416::-;;9772:2;9761:9;9757:18;9749:26;;9822:9;9816:4;9812:20;9808:1;9797:9;9793:17;9786:47;9847:131;9973:4;9847:131;:::i;:::-;9839:139;;9743:245;;;:::o;9995:222::-;;10122:2;10111:9;10107:18;10099:26;;10136:71;10204:1;10193:9;10189:17;10180:6;10136:71;:::i;:::-;10093:124;;;;:::o;10224:97::-;;10308:3;10300:11;;10294:27;;;:::o;10328:174::-;;10437:3;10429:11;;10475:4;10470:3;10466:14;10458:22;;10423:79;;;:::o;10509:174::-;;10618:3;10610:11;;10656:4;10651:3;10647:14;10639:22;;10604:79;;;:::o;10690:97::-;;10774:3;10766:11;;10760:27;;;:::o;10794:108::-;;10888:4;10878:14;;10866:36;;;:::o;10909:160::-;;11041:5;11035:12;11025:22;;11006:63;;;:::o;11076:160::-;;11208:5;11202:12;11192:22;;11173:63;;;:::o;11243:108::-;;11337:4;11327:14;;11315:36;;;:::o;11358:106::-;;11454:4;11449:3;11445:14;11437:22;;11431:33;;;:::o;11471:131::-;;11592:4;11587:3;11583:14;11575:22;;11569:33;;;:::o;11609:131::-;;11730:4;11725:3;11721:14;11713:22;;11707:33;;;:::o;11747:106::-;;11843:4;11838:3;11834:14;11826:22;;11820:33;;;:::o;11861:130::-;;11982:3;11967:18;;11960:31;;;;:::o;12000:201::-;;12153:6;12148:3;12141:19;12190:4;12185:3;12181:14;12166:29;;12134:67;;;;:::o;12210:201::-;;12363:6;12358:3;12351:19;12400:4;12395:3;12391:14;12376:29;;12344:67;;;;:::o;12420:130::-;;12541:3;12526:18;;12519:31;;;;:::o;12559:163::-;;12674:6;12669:3;12662:19;12711:4;12706:3;12702:14;12687:29;;12655:67;;;;:::o;12730:91::-;;12792:24;12810:5;12792:24;:::i;:::-;12781:35;;12775:46;;;:::o;12828:112::-;;12911:24;12929:5;12911:24;:::i;:::-;12900:35;;12894:46;;;:::o;12947:114::-;;13032:24;13050:5;13032:24;:::i;:::-;13021:35;;13015:46;;;:::o;13068:109::-;;13141:30;13134:5;13130:42;13119:53;;13113:64;;;:::o;13184:121::-;;13257:42;13250:5;13246:54;13235:65;;13229:76;;;:::o;13312:72::-;;13374:5;13363:16;;13357:27;;;:::o;13391:88::-;;13463:10;13456:5;13452:22;13441:33;;13435:44;;;:::o;13486:117::-;13555:24;13573:5;13555:24;:::i;:::-;13548:5;13545:35;13535:2;;13594:1;13591;13584:12;13535:2;13529:74;:::o;13610:159::-;13700:45;13739:5;13700:45;:::i;:::-;13693:5;13690:56;13680:2;;13760:1;13757;13750:12;13680:2;13674:95;:::o;13776:163::-;13868:47;13909:5;13868:47;:::i;:::-;13861:5;13858:58;13848:2;;13930:1;13927;13920:12;13848:2;13842:97;:::o;13946:117::-;14015:24;14033:5;14015:24;:::i;:::-;14008:5;14005:35;13995:2;;14054:1;14051;14044:12;13995:2;13989:74;:::o;14070:117::-;14139:24;14157:5;14139:24;:::i;:::-;14132:5;14129:35;14119:2;;14178:1;14175;14168:12;14119:2;14113:74;:::o;14194:115::-;14262:23;14279:5;14262:23;:::i;:::-;14255:5;14252:34;14242:2;;14300:1;14297;14290:12;14242:2;14236:73;:::o"
},
"gasEstimates": {
"creation": {
"codeDepositCost": "699000",
"executionCost": "734",
"totalCost": "699734"
},
"external": {
"getPairsByIndexRange(address,uint256,uint256)": "infinite",
"getReservesByPairs(address[])": "infinite"
}
},
"methodIdentifiers": {
"getPairsByIndexRange(address,uint256,uint256)": "ab2217e4",
"getReservesByPairs(address[])": "4dbf0f39"
}
},
"abi": [
{
"inputs": [
{
"internalType": "contract UniswapV2Factory",
"name": "_uniswapFactory",
"type": "address"
},
{
"internalType": "uint256",
"name": "_start",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_stop",
"type": "uint256"
}
],
"name": "getPairsByIndexRange",
"outputs": [
{
"internalType": "address[3][]",
"name": "",
"type": "address[3][]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IUniswapV2Pair[]",
"name": "_pairs",
"type": "address[]"
}
],
"name": "getReservesByPairs",
"outputs": [
{
"internalType": "uint256[3][]",
"name": "",
"type": "uint256[3][]"
}
],
"stateMutability": "view",
"type": "function"
}
]
}
{
"compiler": {
"version": "0.6.12+commit.27d51765"
},
"language": "Solidity",
"output": {
"abi": [
{
"inputs": [
{
"internalType": "contract UniswapV2Factory",
"name": "_uniswapFactory",
"type": "address"
},
{
"internalType": "uint256",
"name": "_start",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_stop",
"type": "uint256"
}
],
"name": "getPairsByIndexRange",
"outputs": [
{
"internalType": "address[3][]",
"name": "",
"type": "address[3][]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IUniswapV2Pair[]",
"name": "_pairs",
"type": "address[]"
}
],
"name": "getReservesByPairs",
"outputs": [
{
"internalType": "uint256[3][]",
"name": "",
"type": "uint256[3][]"
}
],
"stateMutability": "view",
"type": "function"
}
],
"devdoc": {
"kind": "dev",
"methods": {},
"version": 1
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
},
"settings": {
"compilationTarget": {
"github/LeytonTaylor/simple-arbitrage/contracts/UniswapFlashQuery.sol": "FlashBotsUniswapQuery"
},
"evmVersion": "istanbul",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": false,
"runs": 200
},
"remappings": []
},
"sources": {
"github/LeytonTaylor/simple-arbitrage/contracts/UniswapFlashQuery.sol": {
"keccak256": "0xfdff94384cc545ac1b5b57daf0d220452969ad597d95ce24cafc452d40274f1e",
"license": "UNLICENSED",
"urls": [
"bzz-raw://4da39b48f1f8ea4084d7d255767c2722286e3e47c8db4eacc7d9c559e8a950bc",
"dweb:/ipfs/QmQvZ9qgf7EGkDcsGZdskFeCEsUe2FxpoJBP6AL7YYgvpQ"
]
}
},
"version": 1
}
{
"deploy": {
"VM:-": {
"linkReferences": {},
"autoDeployLib": true
},
"main:1": {
"linkReferences": {},
"autoDeployLib": true
},
"ropsten:3": {
"linkReferences": {},
"autoDeployLib": true
},
"rinkeby:4": {
"linkReferences": {},
"autoDeployLib": true
},
"kovan:42": {
"linkReferences": {},
"autoDeployLib": true
},
"görli:5": {
"linkReferences": {},
"autoDeployLib": true
},
"Custom": {
"linkReferences": {},
"autoDeployLib": true
}
},
"data": {
"bytecode": {
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"deployedBytecode": {
"immutableReferences": {},
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"gasEstimates": null,
"methodIdentifiers": {
"allowance(address,address)": "dd62ed3e",
"approve(address,uint256)": "095ea7b3",
"balanceOf(address)": "70a08231",
"decimals()": "313ce567",
"name()": "06fdde03",
"symbol()": "95d89b41",
"totalSupply()": "18160ddd",
"transfer(address,uint256)": "a9059cbb",
"transferFrom(address,address,uint256)": "23b872dd"
}
},
"abi": [
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "Approval",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "to",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "Transfer",
"type": "event"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "address",
"name": "spender",
"type": "address"
}
],
"name": "allowance",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "approve",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "balanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "decimals",
"outputs": [
{
"internalType": "uint8",
"name": "",
"type": "uint8"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "name",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "symbol",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "totalSupply",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "transfer",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "transferFrom",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
}
]
}
{
"compiler": {
"version": "0.6.12+commit.27d51765"
},
"language": "Solidity",
"output": {
"abi": [
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "Approval",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "to",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "Transfer",
"type": "event"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "address",
"name": "spender",
"type": "address"
}
],
"name": "allowance",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "approve",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "balanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "decimals",
"outputs": [
{
"internalType": "uint8",
"name": "",
"type": "uint8"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "name",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "symbol",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "totalSupply",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "transfer",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "transferFrom",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
}
],
"devdoc": {
"kind": "dev",
"methods": {},
"version": 1
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
},
"settings": {
"compilationTarget": {
"github/LeytonTaylor/simple-arbitrage/contracts/BundleExecutor.sol": "IERC20"
},
"evmVersion": "istanbul",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": false,
"runs": 200
},
"remappings": []
},
"sources": {
"github/LeytonTaylor/simple-arbitrage/contracts/BundleExecutor.sol": {
"keccak256": "0xc605ea2381865dde07b39be58bdeb6857f3304a12bfb4d37175b3698a1cb6812",
"license": "UNLICENSED",
"urls": [
"bzz-raw://c32679007a63a5b48b80c71e2ea5ed29ce4caa80f7c2a2a53485a0343cdb5b3a",
"dweb:/ipfs/QmbeCnHqZKkjxBsUgh9yjbp3wf4m5Ec1ef94ALv9MXBkGy"
]
}
},
"version": 1
}
{
"deploy": {
"VM:-": {
"linkReferences": {},
"autoDeployLib": true
},
"main:1": {
"linkReferences": {},
"autoDeployLib": true
},
"ropsten:3": {
"linkReferences": {},
"autoDeployLib": true
},
"rinkeby:4": {
"linkReferences": {},
"autoDeployLib": true
},
"kovan:42": {
"linkReferences": {},
"autoDeployLib": true
},
"görli:5": {
"linkReferences": {},
"autoDeployLib": true
},
"Custom": {
"linkReferences": {},
"autoDeployLib": true
}
},
"data": {
"bytecode": {
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"deployedBytecode": {
"immutableReferences": {},
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"gasEstimates": null,
"methodIdentifiers": {
"getReserves()": "0902f1ac",
"token0()": "0dfe1681",
"token1()": "d21220a7"
}
},
"abi": [
{
"inputs": [],
"name": "getReserves",
"outputs": [
{
"internalType": "uint112",
"name": "reserve0",
"type": "uint112"
},
{
"internalType": "uint112",
"name": "reserve1",
"type": "uint112"
},
{
"internalType": "uint32",
"name": "blockTimestampLast",
"type": "uint32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "token0",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "token1",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
}
]
}
{
"compiler": {
"version": "0.6.12+commit.27d51765"
},
"language": "Solidity",
"output": {
"abi": [
{
"inputs": [],
"name": "getReserves",
"outputs": [
{
"internalType": "uint112",
"name": "reserve0",
"type": "uint112"
},
{
"internalType": "uint112",
"name": "reserve1",
"type": "uint112"
},
{
"internalType": "uint32",
"name": "blockTimestampLast",
"type": "uint32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "token0",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "token1",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
}
],
"devdoc": {
"kind": "dev",
"methods": {},
"version": 1
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
},
"settings": {
"compilationTarget": {
"github/LeytonTaylor/simple-arbitrage/contracts/UniswapFlashQuery.sol": "IUniswapV2Pair"
},
"evmVersion": "istanbul",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": false,
"runs": 200
},
"remappings": []
},
"sources": {
"github/LeytonTaylor/simple-arbitrage/contracts/UniswapFlashQuery.sol": {
"keccak256": "0xfdff94384cc545ac1b5b57daf0d220452969ad597d95ce24cafc452d40274f1e",
"license": "UNLICENSED",
"urls": [
"bzz-raw://4da39b48f1f8ea4084d7d255767c2722286e3e47c8db4eacc7d9c559e8a950bc",
"dweb:/ipfs/QmQvZ9qgf7EGkDcsGZdskFeCEsUe2FxpoJBP6AL7YYgvpQ"
]
}
},
"version": 1
}
{
"deploy": {
"VM:-": {
"linkReferences": {},
"autoDeployLib": true
},
"main:1": {
"linkReferences": {},
"autoDeployLib": true
},
"ropsten:3": {
"linkReferences": {},
"autoDeployLib": true
},
"rinkeby:4": {
"linkReferences": {},
"autoDeployLib": true
},
"kovan:42": {
"linkReferences": {},
"autoDeployLib": true
},
"görli:5": {
"linkReferences": {},
"autoDeployLib": true
},
"Custom": {
"linkReferences": {},
"autoDeployLib": true
}
},
"data": {
"bytecode": {
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"deployedBytecode": {
"immutableReferences": {},
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"gasEstimates": null,
"methodIdentifiers": {
"allowance(address,address)": "dd62ed3e",
"approve(address,uint256)": "095ea7b3",
"balanceOf(address)": "70a08231",
"decimals()": "313ce567",
"deposit()": "d0e30db0",
"name()": "06fdde03",
"symbol()": "95d89b41",
"totalSupply()": "18160ddd",
"transfer(address,uint256)": "a9059cbb",
"transferFrom(address,address,uint256)": "23b872dd",
"withdraw(uint256)": "2e1a7d4d"
}
},
"abi": [
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "Approval",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "to",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "Transfer",
"type": "event"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "address",
"name": "spender",
"type": "address"
}
],
"name": "allowance",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "approve",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "balanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "decimals",
"outputs": [
{
"internalType": "uint8",
"name": "",
"type": "uint8"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "deposit",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [],
"name": "name",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "symbol",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "totalSupply",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "transfer",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "transferFrom",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "withdraw",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
]
}
{
"compiler": {
"version": "0.6.12+commit.27d51765"
},
"language": "Solidity",
"output": {
"abi": [
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "Approval",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "to",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "Transfer",
"type": "event"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "address",
"name": "spender",
"type": "address"
}
],
"name": "allowance",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "approve",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "balanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "decimals",
"outputs": [
{
"internalType": "uint8",
"name": "",
"type": "uint8"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "deposit",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [],
"name": "name",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "symbol",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "totalSupply",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "transfer",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "transferFrom",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "withdraw",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
],
"devdoc": {
"kind": "dev",
"methods": {},
"version": 1
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
},
"settings": {
"compilationTarget": {
"github/LeytonTaylor/simple-arbitrage/contracts/BundleExecutor.sol": "IWETH"
},
"evmVersion": "istanbul",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": false,
"runs": 200
},
"remappings": []
},
"sources": {
"github/LeytonTaylor/simple-arbitrage/contracts/BundleExecutor.sol": {
"keccak256": "0xc605ea2381865dde07b39be58bdeb6857f3304a12bfb4d37175b3698a1cb6812",
"license": "UNLICENSED",
"urls": [
"bzz-raw://c32679007a63a5b48b80c71e2ea5ed29ce4caa80f7c2a2a53485a0343cdb5b3a",
"dweb:/ipfs/QmbeCnHqZKkjxBsUgh9yjbp3wf4m5Ec1ef94ALv9MXBkGy"
]
}
},
"version": 1
}
{
"deploy": {
"VM:-": {
"linkReferences": {},
"autoDeployLib": true
},
"main:1": {
"linkReferences": {},
"autoDeployLib": true
},
"ropsten:3": {
"linkReferences": {},
"autoDeployLib": true
},
"rinkeby:4": {
"linkReferences": {},
"autoDeployLib": true
},
"kovan:42": {
"linkReferences": {},
"autoDeployLib": true
},
"görli:5": {
"linkReferences": {},
"autoDeployLib": true
},
"Custom": {
"linkReferences": {},
"autoDeployLib": true
}
},
"data": {
"bytecode": {
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"deployedBytecode": {
"immutableReferences": {},
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"gasEstimates": null,
"methodIdentifiers": {
"allPairs(uint256)": "1e3dd18b",
"allPairsLength()": "574f2ba3",
"getPair(address,address)": "e6a43905"
}
},
"abi": [
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "allPairs",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "allPairsLength",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "getPair",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
}
]
}
{
"compiler": {
"version": "0.6.12+commit.27d51765"
},
"language": "Solidity",
"output": {
"abi": [
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "allPairs",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "allPairsLength",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "getPair",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
}
],
"devdoc": {
"kind": "dev",
"methods": {},
"version": 1
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
},
"settings": {
"compilationTarget": {
"github/LeytonTaylor/simple-arbitrage/contracts/UniswapFlashQuery.sol": "UniswapV2Factory"
},
"evmVersion": "istanbul",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": false,
"runs": 200
},
"remappings": []
},
"sources": {
"github/LeytonTaylor/simple-arbitrage/contracts/UniswapFlashQuery.sol": {
"keccak256": "0xfdff94384cc545ac1b5b57daf0d220452969ad597d95ce24cafc452d40274f1e",
"license": "UNLICENSED",
"urls": [
"bzz-raw://4da39b48f1f8ea4084d7d255767c2722286e3e47c8db4eacc7d9c559e8a950bc",
"dweb:/ipfs/QmQvZ9qgf7EGkDcsGZdskFeCEsUe2FxpoJBP6AL7YYgvpQ"
]
}
},
"version": 1
}
//SPDX-License-Identifier: UNLICENSED
pragma solidity 0.6.12;
pragma experimental ABIEncoderV2;
interface IERC20 {
event Approval(address indexed owner, address indexed spender, uint value);
event Transfer(address indexed from, address indexed to, uint value);
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function decimals() external view returns (uint8);
function totalSupply() external view returns (uint);
function balanceOf(address owner) external view returns (uint);
function allowance(address owner, address spender) external view returns (uint);
function approve(address spender, uint value) external returns (bool);
function transfer(address to, uint value) external returns (bool);
function transferFrom(address from, address to, uint value) external returns (bool);
}
interface IWETH is IERC20 {
function deposit() external payable;
function withdraw(uint) external;
}
// This contract simply calls multiple targets sequentially, ensuring WETH balance before and after
contract FlashBotsMultiCall {
address private immutable owner;
address private immutable executor;
IWETH private constant WETH = IWETH(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2);
modifier onlyExecutor() {
require(msg.sender == executor);
_;
}
modifier onlyOwner() {
require(msg.sender == owner);
_;
}
constructor(address _executor) public payable {
owner = msg.sender;
executor = _executor;
if (msg.value > 0) {
WETH.deposit{value: msg.value}();
}
}
receive() external payable {
}
function uniswapWeth(uint256 _wethAmountToFirstMarket, uint256 _ethAmountToCoinbase, address[] memory _targets, bytes[] memory _payloads) external onlyExecutor payable {
require (_targets.length == _payloads.length);
uint256 _wethBalanceBefore = WETH.balanceOf(address(this));
WETH.transfer(_targets[0], _wethAmountToFirstMarket);
for (uint256 i = 0; i < _targets.length; i++) {
(bool _success, bytes memory _response) = _targets[i].call(_payloads[i]);
require(_success); _response;
}
uint256 _wethBalanceAfter = WETH.balanceOf(address(this));
require(_wethBalanceAfter > _wethBalanceBefore + _ethAmountToCoinbase);
if (_ethAmountToCoinbase == 0) return;
uint256 _ethBalance = address(this).balance;
if (_ethBalance < _ethAmountToCoinbase) {
WETH.withdraw(_ethAmountToCoinbase - _ethBalance);
}
block.coinbase.transfer(_ethAmountToCoinbase);
}
function call(address payable _to, uint256 _value, bytes calldata _data) external onlyOwner payable returns (bytes memory) {
require(_to != address(0));
(bool _success, bytes memory _result) = _to.call{value: _value}(_data);
require(_success);
return _result;
}
}
//SPDX-License-Identifier: UNLICENSED
pragma solidity 0.6.12;
pragma experimental ABIEncoderV2;
interface IUniswapV2Pair {
function token0() external view returns (address);
function token1() external view returns (address);
function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
}
abstract contract UniswapV2Factory {
mapping(address => mapping(address => address)) public getPair;
address[] public allPairs;
function allPairsLength() external view virtual returns (uint);
}
// In order to quickly load up data from Uniswap-like market, this contract allows easy iteration with a single eth_call
contract FlashBotsUniswapQuery {
function getReservesByPairs(IUniswapV2Pair[] calldata _pairs) external view returns (uint256[3][] memory) {
uint256[3][] memory result = new uint256[3][](_pairs.length);
for (uint i = 0; i < _pairs.length; i++) {
(result[i][0], result[i][1], result[i][2]) = _pairs[i].getReserves();
}
return result;
}
function getPairsByIndexRange(UniswapV2Factory _uniswapFactory, uint256 _start, uint256 _stop) external view returns (address[3][] memory) {
uint256 _allPairsLength = _uniswapFactory.allPairsLength();
if (_stop > _allPairsLength) {
_stop = _allPairsLength;
}
require(_stop >= _start, "start cannot be higher than stop");
uint256 _qty = _stop - _start;
address[3][] memory result = new address[3][](_qty);
for (uint i = 0; i < _qty; i++) {
IUniswapV2Pair _uniswapPair = IUniswapV2Pair(_uniswapFactory.allPairs(_start + i));
result[i][0] = _uniswapPair.token0();
result[i][1] = _uniswapPair.token1();
result[i][2] = address(_uniswapPair);
}
return result;
}
}
// Right click on the script name and hit "Run" to execute
(async () => {
try {
console.log('Running deployWithEthers script...')
const contractName = 'Storage' // Change this for other contract
const constructorArgs = [] // Put constructor args (if any) here for your contract
// Note that the script needs the ABI which is generated from the compilation artifact.
// Make sure contract is compiled and artifacts are generated
const artifactsPath = `browser/contracts/artifacts/${contractName}.json` // Change this for different path
const metadata = JSON.parse(await remix.call('fileManager', 'getFile', artifactsPath))
// 'web3Provider' is a remix global variable object
const signer = (new ethers.providers.Web3Provider(web3Provider)).getSigner()
let factory = new ethers.ContractFactory(metadata.abi, metadata.data.bytecode.object, signer);
let contract = await factory.deploy(...constructorArgs);
console.log('Contract Address: ', contract.address);
// The contract is NOT deployed yet; we must wait until it is mined
await contract.deployed()
console.log('Deployment successful.')
} catch (e) {
console.log(e.message)
}
})()
// Right click on the script name and hit "Run" to execute
(async () => {
try {
console.log('Running deployWithWeb3 script...')
const contractName = 'Storage' // Change this for other contract
const constructorArgs = [] // Put constructor args (if any) here for your contract
// Note that the script needs the ABI which is generated from the compilation artifact.
// Make sure contract is compiled and artifacts are generated
const artifactsPath = `browser/contracts/artifacts/${contractName}.json` // Change this for different path
const metadata = JSON.parse(await remix.call('fileManager', 'getFile', artifactsPath))
const accounts = await web3.eth.getAccounts()
let contract = new web3.eth.Contract(metadata.abi)
contract = contract.deploy({
data: metadata.data.bytecode.object,
arguments: constructorArgs
})
const newContractInstance = await contract.send({
from: accounts[0],
gas: 1500000,
gasPrice: '30000000000'
})
console.log('Contract deployed at address: ', newContractInstance.options.address)
} catch (e) {
console.log(e.message)
}
})()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment