ETH Price: $1,565.45 (+4.71%)
 

Overview

ETH Balance

1 wei

Eth Value

Less Than $0.01 (@ $1,565.45/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Ape207135972024-09-09 14:17:35214 days ago1725891455IN
0x666f80a1...61facB666
0 ETH0.0005558410.73855021
Ape207135762024-09-09 14:13:23214 days ago1725891203IN
0x666f80a1...61facB666
0 ETH0.0004174710.64497185
Wfjizxua156658042022-10-03 6:21:47921 days ago1664778107IN
0x666f80a1...61facB666
0 ETH0.00195187.9111488
Wfjizxua154940072022-09-08 2:38:10946 days ago1662604690IN
0x666f80a1...61facB666
0 ETH0.0057961210.86164416
Wfjizxua153510862022-08-16 7:42:09969 days ago1660635729IN
0x666f80a1...61facB666
0 ETH0.004948126.27529531
Wfjizxua153453602022-08-15 9:49:30970 days ago1660556970IN
0x666f80a1...61facB666
0 ETH0.0034811612.85050253
Wfjizxua152848442022-08-05 21:52:57979 days ago1659736377IN
0x666f80a1...61facB666
0 ETH0.003057689.87453782
Wfjizxua152848042022-08-05 21:46:06979 days ago1659735966IN
0x666f80a1...61facB666
0 ETH0.0012220916.14689105
Wfjizxua152847682022-08-05 21:38:03979 days ago1659735483IN
0x666f80a1...61facB666
0 ETH0.0006912112.28743154
Wfjizxua138432022021-12-20 16:42:471207 days ago1640018567IN
0x666f80a1...61facB666
0.3 ETH0.0107734976.73651568
Wfjizxua136336182021-11-17 14:57:041241 days ago1637161024IN
0x666f80a1...61facB666
0.01 ETH0.02267315148.45449712
Transfer135157492021-10-30 2:03:501259 days ago1635559430IN
0x666f80a1...61facB666
0 ETH0.00390736179.51702315
Free135157492021-10-30 2:03:501259 days ago1635559430IN
0x666f80a1...61facB666
0 ETH0.00383986179.51702315
Ape128055332021-07-11 10:39:061370 days ago1625999946IN
0x666f80a1...61facB666
0 ETH0.000584468
Ape127967692021-07-10 1:45:541371 days ago1625881554IN
0x666f80a1...61facB666
0 ETH0.0004771710
Ape125770542021-06-05 22:10:411405 days ago1622931041IN
0x666f80a1...61facB666
0 ETH0.0013491217
Ape125770432021-06-05 22:07:261405 days ago1622930846IN
0x666f80a1...61facB666
0 ETH0.0010335216
Ape125770112021-06-05 22:00:491405 days ago1622930449IN
0x666f80a1...61facB666
0 ETH0.00110517
Ape125718422021-06-05 2:30:321406 days ago1622860232IN
0x666f80a1...61facB666
0 ETH0.00062314
Ape125669132021-06-04 8:37:041407 days ago1622795824IN
0x666f80a1...61facB666
0 ETH0.0008486216
Ape125668622021-06-04 8:27:081407 days ago1622795228IN
0x666f80a1...61facB666
0 ETH0.0009054617.6
Ape125667122021-06-04 7:56:231407 days ago1622793383IN
0x666f80a1...61facB666
0 ETH0.000881520
Ape125665912021-06-04 7:27:091407 days ago1622791629IN
0x666f80a1...61facB666
0 ETH0.0012337628
Eldddhzr125665642021-06-04 7:18:421407 days ago1622791122IN
0x666f80a1...61facB666
0 ETH0.0004102218
Ape125259352021-05-29 0:03:251413 days ago1622246605IN
0x666f80a1...61facB666
0 ETH0.0005724621
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer154940072022-09-08 2:38:10946 days ago1662604690
0x666f80a1...61facB666
0.0002273 ETH
Transfer154940072022-09-08 2:38:10946 days ago1662604690
0x666f80a1...61facB666
0.00000006 ETH
Transfer154940072022-09-08 2:38:10946 days ago1662604690
0x666f80a1...61facB666
0.00022737 ETH
Transfer153510862022-08-16 7:42:09969 days ago1660635729
0x666f80a1...61facB666
0.00439928 ETH
Transfer153510862022-08-16 7:42:09969 days ago1660635729
0x666f80a1...61facB666
0.010265 ETH
Transfer153510862022-08-16 7:42:09969 days ago1660635729
0x666f80a1...61facB666
0.01466429 ETH
-138432022021-12-20 16:42:471207 days ago1640018567
0x666f80a1...61facB666
0.3 ETH
-136336182021-11-17 14:57:041241 days ago1637161024
0x666f80a1...61facB666
0.01 ETH
-124593572021-05-18 16:04:331423 days ago1621353873
0x666f80a1...61facB666
0.04839737 ETH
-124593572021-05-18 16:04:331423 days ago1621353873
0x666f80a1...61facB666
0.11292721 ETH
-124593572021-05-18 16:04:331423 days ago1621353873
0x666f80a1...61facB666
0.16132459 ETH
-124593572021-05-18 16:04:331423 days ago1621353873
0x666f80a1...61facB666
67,077.81046471 ETH
-124593572021-05-18 16:04:331423 days ago1621353873
0x666f80a1...61facB666
66,077.81046471 ETH
-124593572021-05-18 16:04:331423 days ago1621353873
0x666f80a1...61facB666
0.00742 ETH
-124593572021-05-18 16:04:331423 days ago1621353873
0x666f80a1...61facB666
0.00742 ETH
-124593572021-05-18 16:04:331423 days ago1621353873
0x666f80a1...61facB666
1,000 ETH
-124549842021-05-17 23:49:471424 days ago1621295387
0x666f80a1...61facB666
0.0447941 ETH
-124549842021-05-17 23:49:471424 days ago1621295387
0x666f80a1...61facB666
0.06719115 ETH
-124549842021-05-17 23:49:471424 days ago1621295387
0x666f80a1...61facB666
0.11198525 ETH
-124542692021-05-17 21:10:151424 days ago1621285815
0x666f80a1...61facB666
0.0347909 ETH
-124542692021-05-17 21:10:151424 days ago1621285815
0x666f80a1...61facB666
0.05218635 ETH
-124542692021-05-17 21:10:151424 days ago1621285815
0x666f80a1...61facB666
0.08697725 ETH
-124542692021-05-17 21:10:151424 days ago1621285815
0x666f80a1...61facB666
0.58687681 ETH
-124542692021-05-17 21:10:151424 days ago1621285815
0x666f80a1...61facB666
0.58687681 ETH
-124533912021-05-17 17:51:081424 days ago1621273868
0x666f80a1...61facB666
0.03173538 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ApeBot

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 500 runs

Other Settings:
default evmVersion, None license
/**
 *Submitted for verification at Etherscan.io on 2021-05-01
*/

pragma solidity =0.8.4;
pragma experimental ABIEncoderV2;
// Leak alpha for run and profit with https://twitter.com/mevalphaleak

contract DyDxFlashLoanHelper {
    function marketIdFromTokenAddress(address tokenAddress) internal pure returns (uint256 resultId) {
        assembly {
            switch tokenAddress
            case 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 {
                resultId := 0
            }
            case 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 {
                resultId := 2
            }
            case 0x6B175474E89094C44Da98b954EedeAC495271d0F {
                resultId := 3
            }
            default {
                revert(0, 0)
            }
        }
    }
    function wrapWithDyDx(address requiredToken, uint256 requiredBalance, bool requiredApprove, bytes calldata data) public {
        Types.ActionArgs[] memory operations = new Types.ActionArgs[](3);
        operations[0] = Types.ActionArgs({
            actionType: Types.ActionType.Withdraw,
            accountId: 0,
            amount: Types.AssetAmount({
                sign: false,
                denomination: Types.AssetDenomination.Wei,
                ref: Types.AssetReference.Delta,
                value: requiredBalance
            }),
            primaryMarketId: marketIdFromTokenAddress(requiredToken),
            secondaryMarketId: 0,
            otherAddress: address(this),
            otherAccountId: 0,
            data: ""
        });
        operations[1] = Types.ActionArgs({
            actionType: Types.ActionType.Call,
            accountId: 0,
            amount: Types.AssetAmount({
                sign: false,
                denomination: Types.AssetDenomination.Wei,
                ref: Types.AssetReference.Delta,
                value: 0
            }),
            primaryMarketId: 0,
            secondaryMarketId: 0,
            otherAddress: address(this),
            otherAccountId: 0,
            data: data
        });
        operations[2] = Types.ActionArgs({
            actionType: Types.ActionType.Deposit,
            accountId: 0,
            amount: Types.AssetAmount({
                sign: true,
                denomination: Types.AssetDenomination.Wei,
                ref: Types.AssetReference.Delta,
                value: requiredBalance + (requiredToken == 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 ? 1 : 2)
            }),
            primaryMarketId: marketIdFromTokenAddress(requiredToken),
            secondaryMarketId: 0,
            otherAddress: address(this),
            otherAccountId: 0,
            data: ""
        });

        Types.AccountInfo[] memory accountInfos = new Types.AccountInfo[](1);
        accountInfos[0] = Types.AccountInfo({
            owner: address(this),
            number: 1
        });
        if (requiredApprove) {
          // Approval might be already set or can be set inside of 'operations[1]'
          IERC20Token(requiredToken).approve(
            0x1E0447b19BB6EcFdAe1e4AE1694b0C3659614e4e,
            0xffffffffffffffffffffffffffffffff // Max uint112
          );
        }
        ISoloMargin(0x1E0447b19BB6EcFdAe1e4AE1694b0C3659614e4e).operate(accountInfos, operations);
    }
}

contract IAlphaLeakConstants {
    address internal constant TOKEN_WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
    address internal constant TOKEN_USDC = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;
    address internal constant TOKEN_DAI  = 0x6B175474E89094C44Da98b954EedeAC495271d0F;

    address internal constant PROXY_DYDX  = 0x1E0447b19BB6EcFdAe1e4AE1694b0C3659614e4e;
    address internal constant ORACLE_USDC = 0x986b5E1e1755e3C2440e960477f25201B0a8bbD4;
    address internal constant ORACLE_DAI  = 0x773616E4d11A78F511299002da57A0a94577F1f4;

    uint256 internal constant FLAG_TRANSFORM_ETH_TO_WETH_BEFORE_APE = 0x1;
    uint256 internal constant FLAG_TRANSFORM_WETH_TO_ETH_BEFORE_APE = 0x2;
    uint256 internal constant FLAG_TRANSFORM_ETH_TO_WETH_AFTER_APE  = 0x4;
    uint256 internal constant FLAG_TRANSFORM_WETH_TO_ETH_AFTER_APE  = 0x8;

    uint256 internal constant FLAG_FLASH_DYDY_WETH     = 0x10;
    uint256 internal constant FLAG_FLASH_DYDY_USDC     = 0x20;
    uint256 internal constant FLAG_FLASH_DYDY_DAI      = 0x40;

    uint256 internal constant FLAG_WETH_ACCOUNTING     = 0x80;
    uint256 internal constant FLAG_USDC_ACCOUNTING     = 0x100;
    uint256 internal constant FLAG_DAI_ACCOUNTING      = 0x200;


    uint256 internal constant FLAG_EXIT_WETH           = 0x400;
    uint256 internal constant FLAG_PAY_COINBASE_SHARE  = 0x800;
    uint256 internal constant FLAG_PAY_COINBASE_AMOUNT = 0x1000;


    uint256 internal constant FLAG_RETURN_WETH         = 0x2000;
    uint256 internal constant FLAG_RETURN_USDC         = 0x4000;
    uint256 internal constant FLAG_RETURN_DAI          = 0x8000;
}

contract ApeBot is DyDxFlashLoanHelper, IAlphaLeakConstants {
    string  public constant name = "https://twitter.com/mevalphaleak";

    fallback() external payable {}
    function callFunction(
        address,
        Types.AccountInfo memory,
        bytes calldata data
    ) external {
        // Added to support DyDx flash loans natively
        // Security checks aren't necessary since I'm an ape
        address(this).call(data);
    }
    function executeOperation(
        address,
        uint256,
        uint256,
        bytes calldata _params
    ) external {
        // Added to support AAVE v1 flash loans natively
        // Security checks aren't necessary since I'm an ape
        address(this).call(_params);
    }
    function executeOperation(
        address[] calldata,
        uint256[] calldata,
        uint256[] calldata,
        address,
        bytes calldata params
    )
        external
        returns (bool)
    {
        // Added to support AAVE v2 flash loans natively
        // Security checks aren't necessary since I'm an ape
        address(this).call(params);
        return true;
    }

    function uniswapV2Call(
        address,
        uint,
        uint,
        bytes calldata data
    ) external {
        // Added to support uniswap v2 flash swaps natively
        // Security checks aren't necessary since I'm an ape
        address(this).call(data);
    }
    function uniswapV3FlashCallback(
        uint256,
        uint256,
        bytes calldata data
    ) external {
        // Added to support uniswap v3 flash loans natively
        // Security checks aren't necessary since I'm an ape
        address(this).call(data);
    }
    function uniswapV3MintCallback(
        uint256,
        uint256,
        bytes calldata data
    ) external {
        // Added to support uniswap v3 flash mints natively
        // Security checks aren't necessary since I'm an ape
        address(this).call(data);
    }
    function uniswapV3SwapCallback(
        int256,
        int256,
        bytes calldata data
    ) external {
        // Added to support uniswap v3 flash swaps natively
        // Security checks aren't necessary since I'm an ape
        address(this).call(data);
    }

    // All funds left on this contract will be imidiately lost to snipers
    // This function is completely permision-less and allows anyone to execute any arbitrary logic
    // Overall goal is to make a contract which allows to execute all types of nested flash loans
    function ape(uint256 actionFlags, uint256[] memory data) public payable {
        // FLAGS are used to simplify some common actions, they aren't necessary
        if ((actionFlags & (FLAG_TRANSFORM_ETH_TO_WETH_BEFORE_APE | FLAG_TRANSFORM_WETH_TO_ETH_BEFORE_APE)) > 0) {
            if ((actionFlags & FLAG_TRANSFORM_ETH_TO_WETH_BEFORE_APE) > 0) {
                uint selfbalance = address(this).balance;
                if (selfbalance > 1) WETH9(TOKEN_WETH).deposit{value: selfbalance - 1}();
            } else {
                uint wethbalance = IERC20Token(TOKEN_WETH).balanceOf(address(this));
                if (wethbalance > 1) WETH9(TOKEN_WETH).withdraw(wethbalance - 1);
            }
        }

        uint callId = 0;
        for (; callId < data.length;) {
            assembly {
                let callInfo := mload(add(data, mul(add(callId, 1), 0x20)))
                let callLength := and(div(callInfo, 0x1000000000000000000000000000000000000000000000000000000), 0xffff)
                let p := mload(0x40)   // Find empty storage location using "free memory pointer"
                // Place signature at begining of empty storage, hacky logic to compute shift here
                let callSignDataShiftResult := mul(and(callInfo, 0xffffffff0000000000000000000000000000000000000000000000), 0x10000000000)
                switch callSignDataShiftResult
                case 0 {
                    callLength := mul(callLength, 0x20)
                    callSignDataShiftResult := add(data, mul(0x20, add(callId, 3)))
                    for { let i := 0 } lt(i, callLength) { i := add(i, 0x20) } {
                        mstore(add(p, i), mload(add(callSignDataShiftResult, i)))
                    }
                }
                default {
                    mstore(p, callSignDataShiftResult)
                    callLength := add(mul(callLength, 0x20), 4)
                    callSignDataShiftResult := add(data, sub(mul(0x20, add(callId, 3)), 4))
                    for { let i := 4 } lt(i, callLength) { i := add(i, 0x20) } {
                        mstore(add(p, i), mload(add(callSignDataShiftResult, i)))
                    }
                }

                mstore(0x40, add(p, add(callLength, 0x20)))
                // new free pointer position after the output values of the called function.

                let callContract := and(callInfo, 0xffffffffffffffffffffffffffffffffffffffff)
                // Re-use callSignDataShiftResult as success
                switch and(callInfo, 0xf000000000000000000000000000000000000000000000000000000000000000)
                case 0x1000000000000000000000000000000000000000000000000000000000000000 {
                    callSignDataShiftResult := delegatecall(
                                    and(div(callInfo, 0x10000000000000000000000000000000000000000), 0xffffff), // allowed gas to use
                                    callContract, // contract to execute
                                    p,    // Inputs are at location p
                                    callLength, //Inputs size
                                    p,    //Store output over input
                                    0x20) //Output is 32 bytes long
                }
                default {
                    callSignDataShiftResult := call(
                                    and(div(callInfo, 0x10000000000000000000000000000000000000000), 0xffffff), // allowed gas to use
                                    callContract, // contract to execute
                                    mload(add(data, mul(add(callId, 2), 0x20))), // wei value amount
                                    p,    // Inputs are at location p
                                    callLength, //Inputs size
                                    p,    //Store output over input
                                    0x20) //Output is 32 bytes long
                }

                callSignDataShiftResult := and(div(callInfo, 0x10000000000000000000000000000000000000000000000000000000000), 0xff)
                if gt(callSignDataShiftResult, 0) {
                    // We're copying call result as input to some futher call
                    mstore(add(data, mul(callSignDataShiftResult, 0x20)), mload(p))
                }
                callId := add(callId, add(and(div(callInfo, 0x1000000000000000000000000000000000000000000000000000000), 0xffff), 2))
                mstore(0x40, p) // Set storage pointer to empty space
            }
        }

        // FLAGS are used to simplify some common actions, they aren't necessary
        if ((actionFlags & (FLAG_TRANSFORM_ETH_TO_WETH_AFTER_APE | FLAG_TRANSFORM_WETH_TO_ETH_AFTER_APE)) > 0) {
            if ((actionFlags & FLAG_TRANSFORM_ETH_TO_WETH_AFTER_APE) > 0) {
                uint selfbalance = address(this).balance;
                if (selfbalance > 1) WETH9(TOKEN_WETH).deposit{value: selfbalance - 1}();
            } else {
                uint wethbalance = IERC20Token(TOKEN_WETH).balanceOf(address(this));
                if (wethbalance > 1) WETH9(TOKEN_WETH).withdraw(wethbalance - 1);
            }
        }
    }

    // Function signature 0x00000000
    // Should be main entry point for any simple MEV searcher
    // Though you can always use 'ape' function directly with general purpose logic
    function wfjizxua(
        uint256 actionFlags,
        uint256[] calldata actionData
    ) external payable returns(int256 ethProfitDelta) {
        int256[4] memory balanceDeltas;
        balanceDeltas[0] = int256(address(this).balance);
        if ((actionFlags & (FLAG_WETH_ACCOUNTING | FLAG_USDC_ACCOUNTING | FLAG_DAI_ACCOUNTING)) > 0) {
            // In general ACCOUNTING flags should be used only during simulation and not production to avoid wasting gas on oracle calls
            if ((actionFlags & FLAG_WETH_ACCOUNTING) > 0) {
                balanceDeltas[1] = int256(IERC20Token(TOKEN_WETH).balanceOf(address(this)));
            }
            if ((actionFlags & FLAG_USDC_ACCOUNTING) > 0) {
                balanceDeltas[2] = int256(IERC20Token(TOKEN_USDC).balanceOf(address(this)));
            }
            if ((actionFlags & FLAG_DAI_ACCOUNTING) > 0) {
                balanceDeltas[3] = int256(IERC20Token(TOKEN_DAI).balanceOf(address(this)));
            }
        }

        if ((actionFlags & (FLAG_FLASH_DYDY_WETH | FLAG_FLASH_DYDY_USDC | FLAG_FLASH_DYDY_DAI)) > 0) {
            // This simple logic only supports single token flashloans
            // For multiple tokens or multiple providers you should use general purpose logic using 'ape' function
            if ((actionFlags & FLAG_FLASH_DYDY_WETH) > 0) {
                uint256 balanceToFlash = IERC20Token(TOKEN_WETH).balanceOf(PROXY_DYDX);
                this.wrapWithDyDx(
                    TOKEN_WETH,
                    balanceToFlash - 1,
                    IERC20Token(TOKEN_WETH).allowance(address(this), PROXY_DYDX) < balanceToFlash,
                    abi.encodeWithSignature('ape(uint256,uint256[])', actionFlags, actionData)
                );
            } else if ((actionFlags & FLAG_FLASH_DYDY_USDC) > 0) {
                uint256 balanceToFlash = IERC20Token(TOKEN_USDC).balanceOf(PROXY_DYDX);
                this.wrapWithDyDx(
                    TOKEN_USDC,
                    balanceToFlash - 1,
                    IERC20Token(TOKEN_USDC).allowance(address(this), PROXY_DYDX) < balanceToFlash,
                    abi.encodeWithSignature('ape(uint256,uint256[])', actionFlags, actionData)
                );
            } else if ((actionFlags & FLAG_FLASH_DYDY_DAI) > 0) {
                uint256 balanceToFlash = IERC20Token(TOKEN_DAI).balanceOf(PROXY_DYDX);
                this.wrapWithDyDx(
                    TOKEN_DAI,
                    balanceToFlash - 1,
                    IERC20Token(TOKEN_DAI).allowance(address(this), PROXY_DYDX) < balanceToFlash,
                    abi.encodeWithSignature('ape(uint256,uint256[])', actionFlags, actionData)
                );
            }
        } else {
            this.ape(actionFlags, actionData);
        }

        if ((actionFlags & FLAG_EXIT_WETH) > 0) {
            uint wethbalance = IERC20Token(TOKEN_WETH).balanceOf(address(this));
            if (wethbalance > 1) WETH9(TOKEN_WETH).withdraw(wethbalance - 1);
        }


        ethProfitDelta = int256(address(this).balance) - balanceDeltas[0];
        if ((actionFlags & (FLAG_WETH_ACCOUNTING | FLAG_USDC_ACCOUNTING | FLAG_DAI_ACCOUNTING)) > 0) {
            if ((actionFlags & FLAG_WETH_ACCOUNTING) > 0) {
                ethProfitDelta += int256(IERC20Token(TOKEN_WETH).balanceOf(address(this))) - balanceDeltas[1];
            }
            if ((actionFlags & FLAG_USDC_ACCOUNTING) > 0) {
                ethProfitDelta += (int256(IERC20Token(TOKEN_USDC).balanceOf(address(this))) - balanceDeltas[2]) * IChainlinkAggregator(ORACLE_USDC).latestAnswer() / (1 ether);
            }
            if ((actionFlags & FLAG_DAI_ACCOUNTING) > 0) {
                ethProfitDelta += (int256(IERC20Token(TOKEN_DAI).balanceOf(address(this))) - balanceDeltas[3]) * IChainlinkAggregator(ORACLE_DAI).latestAnswer() / (1 ether);
            }
        }


        if ((actionFlags & FLAG_PAY_COINBASE_AMOUNT) > 0) {
            uint selfbalance = address(this).balance;
            uint amountToPay = actionFlags / 0x100000000000000000000000000000000;
            if (selfbalance < amountToPay) {
                // Attempting to cover the gap via WETH token
                WETH9(TOKEN_WETH).withdraw(amountToPay - selfbalance);
            }
            payable(block.coinbase).transfer(amountToPay);
        } else if ((actionFlags & FLAG_PAY_COINBASE_SHARE) > 0) {
            uint selfbalance = address(this).balance;
            uint amountToPay = (actionFlags / 0x100000000000000000000000000000000) * uint256(ethProfitDelta) / (1 ether);
            if (selfbalance < amountToPay) {
                // Attempting to cover the gap via WETH token
                WETH9(TOKEN_WETH).withdraw(amountToPay - selfbalance);
            }
            payable(block.coinbase).transfer(amountToPay);
        }

        uint selfBalance = address(this).balance;
        if (selfBalance > 1) payable(msg.sender).transfer(selfBalance - 1);
        if ((actionFlags & (FLAG_RETURN_WETH | FLAG_RETURN_USDC | FLAG_RETURN_DAI)) > 0) {
            // Majority of simple atomic arbs should just need ETH
            if ((actionFlags & FLAG_RETURN_WETH) > 0) {
                uint tokenBalance = IERC20Token(TOKEN_WETH).balanceOf(address(this));
                if (tokenBalance > 1) IERC20Token(TOKEN_WETH).transfer(msg.sender, tokenBalance - 1);
            }
            if ((actionFlags & FLAG_RETURN_USDC) > 0) {
                uint tokenBalance = IERC20Token(TOKEN_USDC).balanceOf(address(this));
                if (tokenBalance > 1) IERC20Token(TOKEN_USDC).transfer(msg.sender, tokenBalance - 1);
            }
            if ((actionFlags & FLAG_RETURN_DAI) > 0) {
                uint tokenBalance = IERC20Token(TOKEN_DAI).balanceOf(address(this));
                if (tokenBalance > 1) IERC20Token(TOKEN_DAI).transfer(msg.sender, tokenBalance - 1);
            }
        }
    }
}

library Types {
    enum ActionType {
        Deposit,   // supply tokens
        Withdraw,  // borrow tokens
        Transfer,  // transfer balance between accounts
        Buy,       // buy an amount of some token (externally)
        Sell,      // sell an amount of some token (externally)
        Trade,     // trade tokens against another account
        Liquidate, // liquidate an undercollateralized or expiring account
        Vaporize,  // use excess tokens to zero-out a completely negative account
        Call       // send arbitrary data to an address
    }

    enum AssetDenomination {
        Wei, // the amount is denominated in wei
        Par  // the amount is denominated in par
    }

    enum AssetReference {
        Delta, // the amount is given as a delta from the current value
        Target // the amount is given as an exact number to end up at
    }

    struct AssetAmount {
        bool sign; // true if positive
        AssetDenomination denomination;
        AssetReference ref;
        uint256 value;
    }

    struct Wei {
        bool sign; // true if positive
        uint256 value;
    }

    struct ActionArgs {
        ActionType actionType;
        uint256 accountId;
        AssetAmount amount;
        uint256 primaryMarketId;
        uint256 secondaryMarketId;
        address otherAddress;
        uint256 otherAccountId;
        bytes data;
    }

    struct AccountInfo {
        address owner;  // The address that owns the account
        uint256 number; // A nonce that allows a single address to control many accounts
    }
}

contract ISoloMargin {
    function operate(Types.AccountInfo[] memory accounts, Types.ActionArgs[] memory actions) public {}
    function getMarketTokenAddress(uint256 marketId) public view returns (address) {}
}

/*
    ERC20 Standard Token interface
*/
contract IERC20Token {
    string public name;
    string public symbol;
    function decimals() public view returns (uint8) {}
    function totalSupply() public view returns (uint256) {}
    function balanceOf(address _owner) public view returns (uint256) { _owner; }
    function allowance(address _owner, address _spender) public view returns (uint256) { _owner; _spender; }

    function transfer(address _to, uint256 _value) public returns (bool success) {}
    function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {}
    function approve(address _spender, uint256 _value) public returns (bool success) {}
}

contract WETH9 {
    function deposit() public payable {}
    function withdraw(uint wad) public {}
}

interface IChainlinkAggregator {
  function latestAnswer() external view returns (int256);
}

Contract Security Audit

Contract ABI

API
[{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"uint256","name":"actionFlags","type":"uint256"},{"internalType":"uint256[]","name":"data","type":"uint256[]"}],"name":"ape","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"components":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"number","type":"uint256"}],"internalType":"struct Types.AccountInfo","name":"","type":"tuple"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"callFunction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"","type":"address[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"address","name":"","type":"address"},{"internalType":"bytes","name":"params","type":"bytes"}],"name":"executeOperation","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"_params","type":"bytes"}],"name":"executeOperation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"uniswapV2Call","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"uniswapV3FlashCallback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"uniswapV3MintCallback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int256","name":"","type":"int256"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"uniswapV3SwapCallback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"actionFlags","type":"uint256"},{"internalType":"uint256[]","name":"actionData","type":"uint256[]"}],"name":"wfjizxua","outputs":[{"internalType":"int256","name":"ethProfitDelta","type":"int256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"requiredToken","type":"address"},{"internalType":"uint256","name":"requiredBalance","type":"uint256"},{"internalType":"bool","name":"requiredApprove","type":"bool"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"wrapWithDyDx","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b50612725806100206000396000f3fe6080604052600436106100a15760003560e01c8063adecd1021161006e578063e9cbafb01161004b578063e9cbafb0146101c2578063ee8725581461011f578063fa461e33146101dd57005b8063adecd1021461018f578063bfe87292146101af578063d3487997146101c257005b80156100a357806306fdde03146100c957806310d1e85c1461011f5780638b4187131461013f578063920f5c841461015f575b005b6100b66100b1366004612137565b6101f8565b6040519081526020015b60405180910390f35b3480156100d557600080fd5b506101126040518060400160405280602081526020017f68747470733a2f2f747769747465722e636f6d2f6d6576616c7068616c65616b81525081565b6040516100c09190612446565b34801561012b57600080fd5b506100a161013a366004611f99565b6112ca565b34801561014b57600080fd5b506100a161015a366004611e88565b611328565b34801561016b57600080fd5b5061017f61017a366004611fe2565b611385565b60405190151581526020016100c0565b34801561019b57600080fd5b506100a16101aa366004611f2a565b6113f6565b6100a16101bd366004612181565b611876565b3480156101ce57600080fd5b506100a161015a366004612235565b3480156101e957600080fd5b506100a161015a3660046120f2565b6000610202611d4e565b4781526103808516156103c45760808516156102a0576040516370a0823160e01b815230600482015273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2906370a082319060240160206040518083038186803b15801561026257600080fd5b505afa158015610276573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029a91906120da565b60208201525b610100851615610332576040516370a0823160e01b815230600482015273a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48906370a082319060240160206040518083038186803b1580156102f457600080fd5b505afa158015610308573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061032c91906120da565b60408201525b6102008516156103c4576040516370a0823160e01b8152306004820152736b175474e89094c44da98b954eedeac495271d0f906370a082319060240160206040518083038186803b15801561038657600080fd5b505afa15801561039a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103be91906120da565b60608201525b60708516156108375760108516156105e5576040516370a0823160e01b8152731e0447b19bb6ecfdae1e4ae1694b0c3659614e4e600482015260009073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2906370a082319060240160206040518083038186803b15801561043757600080fd5b505afa15801561044b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061046f91906120da565b90503063adecd10273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc261049760018561265f565b604051636eb1769f60e11b8152306004820152731e0447b19bb6ecfdae1e4ae1694b0c3659614e4e6024820152859073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc29063dd62ed3e906044015b60206040518083038186803b1580156104fe57600080fd5b505afa158015610512573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061053691906120da565b108a8a8a60405160240161054c93929190612459565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16635ff4394960e11b1790525160e086901b6001600160e01b03191681526105ad94939291906004016122dc565b600060405180830381600087803b1580156105c757600080fd5b505af11580156105db573d6000803e3d6000fd5b5050505050610891565b6020851615610715576040516370a0823160e01b8152731e0447b19bb6ecfdae1e4ae1694b0c3659614e4e600482015260009073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48906370a082319060240160206040518083038186803b15801561064f57600080fd5b505afa158015610663573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068791906120da565b90503063adecd10273a0b86991c6218b36c1d19d4a2e9eb0ce3606eb486106af60018561265f565b604051636eb1769f60e11b8152306004820152731e0447b19bb6ecfdae1e4ae1694b0c3659614e4e6024820152859073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb489063dd62ed3e9060440160206040518083038186803b1580156104fe57600080fd5b6040851615610832576040516370a0823160e01b8152731e0447b19bb6ecfdae1e4ae1694b0c3659614e4e6004820152600090736b175474e89094c44da98b954eedeac495271d0f906370a082319060240160206040518083038186803b15801561077f57600080fd5b505afa158015610793573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b791906120da565b90503063adecd102736b175474e89094c44da98b954eedeac495271d0f6107df60018561265f565b604051636eb1769f60e11b8152306004820152731e0447b19bb6ecfdae1e4ae1694b0c3659614e4e60248201528590736b175474e89094c44da98b954eedeac495271d0f9063dd62ed3e906044016104e6565b610891565b604051635ff4394960e11b8152309063bfe872929061085e90889088908890600401612459565b600060405180830381600087803b15801561087857600080fd5b505af115801561088c573d6000803e3d6000fd5b505050505b6104008516156109a3576040516370a0823160e01b815230600482015260009073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2906370a082319060240160206040518083038186803b1580156108e857600080fd5b505afa1580156108fc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092091906120da565b905060018111156109a15773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2632e1a7d4d61095060018461265f565b6040518263ffffffff1660e01b815260040161096e91815260200190565b600060405180830381600087803b15801561098857600080fd5b505af115801561099c573d6000803e3d6000fd5b505050505b505b80516109af9047612620565b9150610380851615610cf6576080851615610a625760208101516040516370a0823160e01b815230600482015273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2906370a082319060240160206040518083038186803b158015610a1357600080fd5b505afa158015610a27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4b91906120da565b610a559190612620565b610a5f90836124e4565b91505b610100851615610bac57670de0b6b3a764000073986b5e1e1755e3c2440e960477f25201b0a8bbd46001600160a01b03166350d25bcd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ac257600080fd5b505afa158015610ad6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610afa91906120da565b60408084015190516370a0823160e01b815230600482015273a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48906370a082319060240160206040518083038186803b158015610b4957600080fd5b505afa158015610b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8191906120da565b610b8b9190612620565b610b95919061257e565b610b9f919061253c565b610ba990836124e4565b91505b610200851615610cf657670de0b6b3a764000073773616e4d11a78f511299002da57a0a94577f1f46001600160a01b03166350d25bcd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610c0c57600080fd5b505afa158015610c20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4491906120da565b60608301516040516370a0823160e01b8152306004820152736b175474e89094c44da98b954eedeac495271d0f906370a082319060240160206040518083038186803b158015610c9357600080fd5b505afa158015610ca7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ccb91906120da565b610cd59190612620565b610cdf919061257e565b610ce9919061253c565b610cf390836124e4565b91505b611000851615610dc557476000610d11600160801b8861256a565b905080821015610d905773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2632e1a7d4d610d3f848461265f565b6040518263ffffffff1660e01b8152600401610d5d91815260200190565b600060405180830381600087803b158015610d7757600080fd5b505af1158015610d8b573d6000803e3d6000fd5b505050505b604051419082156108fc029083906000818181858888f19350505050158015610dbd573d6000803e3d6000fd5b505050610eae565b610800851615610eae57476000670de0b6b3a764000084610dea600160801b8a61256a565b610df49190612601565b610dfe919061256a565b905080821015610e7d5773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2632e1a7d4d610e2c848461265f565b6040518263ffffffff1660e01b8152600401610e4a91815260200190565b600060405180830381600087803b158015610e6457600080fd5b505af1158015610e78573d6000803e3d6000fd5b505050505b604051419082156108fc029083906000818181858888f19350505050158015610eaa573d6000803e3d6000fd5b5050505b476001811115610ef157336108fc610ec760018461265f565b6040518115909202916000818181858888f19350505050158015610eef573d6000803e3d6000fd5b505b61e0008616156112c15761200086161561103d576040516370a0823160e01b815230600482015260009073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2906370a082319060240160206040518083038186803b158015610f5257600080fd5b505afa158015610f66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8a91906120da565b9050600181111561103b5773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc263a9059cbb33610fbb60018561265f565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b15801561100157600080fd5b505af1158015611015573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103991906120b7565b505b505b61400086161561117f576040516370a0823160e01b815230600482015260009073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48906370a082319060240160206040518083038186803b15801561109457600080fd5b505afa1580156110a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cc91906120da565b9050600181111561117d5773a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4863a9059cbb336110fd60018561265f565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b15801561114357600080fd5b505af1158015611157573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117b91906120b7565b505b505b6180008616156112c1576040516370a0823160e01b8152306004820152600090736b175474e89094c44da98b954eedeac495271d0f906370a082319060240160206040518083038186803b1580156111d657600080fd5b505afa1580156111ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061120e91906120da565b905060018111156112bf57736b175474e89094c44da98b954eedeac495271d0f63a9059cbb3361123f60018561265f565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b15801561128557600080fd5b505af1158015611299573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112bd91906120b7565b505b505b50509392505050565b60405130906112dc90849084906122cc565b6000604051808303816000865af19150503d8060008114611319576040519150601f19603f3d011682016040523d82523d6000602084013e61131e565b606091505b5050505050505050565b604051309061133a90849084906122cc565b6000604051808303816000865af19150503d8060008114611377576040519150601f19603f3d011682016040523d82523d6000602084013e61137c565b606091505b50505050505050565b6000306001600160a01b031683836040516113a19291906122cc565b6000604051808303816000865af19150503d80600081146113de576040519150601f19603f3d011682016040523d82523d6000602084013e6113e3565b606091505b5060019c9b505050505050505050505050565b60408051600380825260808201909252600091816020015b611416611d6c565b81526020019060019003908161140e5750506040805161010081018252600181526000602080830182905283516080810185528281529081018290528084019190915260608082018a905292820152919250810161147388611cd8565b815260200160008152602001306001600160a01b031681526020016000815260200160405180602001604052806000815250815250816000815181106114c957634e487b7160e01b600052603260045260246000fd5b602090810291909101015260408051610100810190915280600881526020016000815260200160405180608001604052806000151581526020016000600181111561152457634e487b7160e01b600052602160045260246000fd5b815260200160008152602001600081525081526020016000815260200160008152602001306001600160a01b031681526020016000815260200184848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509152508151829060019081106115b957634e487b7160e01b600052603260045260246000fd5b602090810291909101015260408051610100810190915280600081526020016000815260200160405180608001604052806001151581526020016000600181111561161457634e487b7160e01b600052602160045260246000fd5b81526020016000815260200173c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b038b161461164b57600261164e565b60015b61165b9060ff168a612524565b9052815260200161166b88611cd8565b815260200160008152602001306001600160a01b031681526020016000815260200160405180602001604052806000815250815250816002815181106116c157634e487b7160e01b600052603260045260246000fd5b6020908102919091010152604080516001808252818301909252600091816020015b60408051808201909152600080825260208201528152602001906001900390816116e35790505090506040518060400160405280306001600160a01b0316815260200160018152508160008151811061174c57634e487b7160e01b600052603260045260246000fd5b602002602001018190525084156118025760405163095ea7b360e01b8152731e0447b19bb6ecfdae1e4ae1694b0c3659614e4e60048201526fffffffffffffffffffffffffffffffff60248201526001600160a01b0388169063095ea7b390604401602060405180830381600087803b1580156117c857600080fd5b505af11580156117dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061180091906120b7565b505b60405163a67a6a4560e01b8152731e0447b19bb6ecfdae1e4ae1694b0c3659614e4e9063a67a6a459061183b9084908690600401612316565b600060405180830381600087803b15801561185557600080fd5b505af1158015611869573d6000803e3d6000fd5b5050505050505050505050565b6003821615611a0a576001821615611902574760018111156118fc5773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc263d0e30db06118b760018461265f565b6040518263ffffffff1660e01b81526004016000604051808303818588803b1580156118e257600080fd5b505af11580156118f6573d6000803e3d6000fd5b50505050505b50611a0a565b6040516370a0823160e01b815230600482015260009073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2906370a082319060240160206040518083038186803b15801561194f57600080fd5b505afa158015611963573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061198791906120da565b90506001811115611a085773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2632e1a7d4d6119b760018461265f565b6040518263ffffffff1660e01b81526004016119d591815260200190565b600060405180830381600087803b1580156119ef57600080fd5b505af1158015611a03573d6000803e3d6000fd5b505050505b505b60005b8151811015611b46576020600182010282015161ffff600160d81b8204166040516501000000000063ffffffff60b81b8416028060008114611a8457818352600460208502019350600460038701602002038701915060045b84811015611a7e578281015184820152602001611a66565b50611ab0565b60209384029360038701028701915060005b84811015611aae578281015184820152602001611a96565b505b506020830182016040526001600160a01b038416600f60fc1b8516600160fc1b8114611afa576020848686602060028c01028c01518662ffffff600160a01b8d0416f19250611b10565b60208486868562ffffff600160a01b8c0416f492505b505050600160e81b830460ff168015611b2d578151602082028701525b5060405250600160d81b900461ffff1601600201611a0d565b600c831615611cd3576004831615611bd257476001811115611bcc5773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc263d0e30db0611b8760018461265f565b6040518263ffffffff1660e01b81526004016000604051808303818588803b158015611bb257600080fd5b505af1158015611bc6573d6000803e3d6000fd5b50505050505b50505050565b6040516370a0823160e01b815230600482015260009073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2906370a082319060240160206040518083038186803b158015611c1f57600080fd5b505afa158015611c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5791906120da565b90506001811115611bcc5773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2632e1a7d4d611c8760018461265f565b6040518263ffffffff1660e01b8152600401611ca591815260200190565b600060405180830381600087803b158015611cbf57600080fd5b505af115801561131e573d6000803e3d6000fd5b505050565b60008173c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28114611d315773a0b86991c6218b36c1d19d4a2e9eb0ce3606eb488114611d3a57736b175474e89094c44da98b954eedeac495271d0f8114611d4357600080fd5b60009150611d48565b60029150611d48565b600391505b50919050565b60405180608001604052806004906020820280368337509192915050565b604080516101008101825260008082526020820152908101611db0604080516080810190915260008082526020820190815260200160008152602001600081525090565b8152602001600081526020016000815260200160006001600160a01b0316815260200160008152602001606081525090565b80356001600160a01b0381168114611df957600080fd5b919050565b60008083601f840112611e0f578081fd5b50813567ffffffffffffffff811115611e26578182fd5b6020830191508360208260051b8501011115611e4157600080fd5b9250929050565b60008083601f840112611e59578182fd5b50813567ffffffffffffffff811115611e70578182fd5b602083019150836020828501011115611e4157600080fd5b6000806000808486036080811215611e9e578485fd5b611ea786611de2565b94506040601f1982011215611eba578384fd5b506040516040810167ffffffffffffffff8282108183111715611edf57611edf6126b8565b81604052611eef60208901611de2565b83526040880135602084015291945060608701359180831115611f10578485fd5b5050611f1e87828801611e48565b95989497509550505050565b600080600080600060808688031215611f41578081fd5b611f4a86611de2565b9450602086013593506040860135611f61816126e1565b9250606086013567ffffffffffffffff811115611f7c578182fd5b611f8888828901611e48565b969995985093965092949392505050565b600080600080600060808688031215611fb0578081fd5b611fb986611de2565b94506020860135935060408601359250606086013567ffffffffffffffff811115611f7c578182fd5b600080600080600080600080600060a08a8c031215611fff578384fd5b893567ffffffffffffffff80821115612016578586fd5b6120228d838e01611dfe565b909b50995060208c013591508082111561203a578586fd5b6120468d838e01611dfe565b909950975060408c013591508082111561205e578586fd5b61206a8d838e01611dfe565b909750955085915061207e60608d01611de2565b945060808c0135915080821115612093578384fd5b506120a08c828d01611e48565b915080935050809150509295985092959850929598565b6000602082840312156120c8578081fd5b81516120d3816126e1565b9392505050565b6000602082840312156120eb578081fd5b5051919050565b60008060008060608587031215612107578384fd5b8435935060208501359250604085013567ffffffffffffffff81111561212b578283fd5b611f1e87828801611e48565b60008060006040848603121561214b578081fd5b83359250602084013567ffffffffffffffff811115612168578182fd5b61217486828701611dfe565b9497909650939450505050565b60008060408385031215612193578182fd5b8235915060208084013567ffffffffffffffff808211156121b2578384fd5b818601915086601f8301126121c5578384fd5b8135818111156121d7576121d76126b8565b8060051b91506121e88483016124b3565b8181528481019084860184860187018b1015612202578788fd5b8795505b83861015612224578035835260019590950194918601918601612206565b508096505050505050509250929050565b60008060008060608587031215612107578182fd5b60008151808452815b8181101561226f57602081850181015186830182015201612253565b818111156122805782602083870101525b50601f01601f19169290920160200192915050565b80511515825260208101516122a9816126ce565b602083015260408101516122bc816126ce565b6040830152606090810151910152565b8183823760009101908152919050565b6001600160a01b0385168152836020820152821515604082015260806060820152600061230c608083018461224a565b9695505050505050565b6040808252835182820181905260009190606090818501906020808901865b8381101561236357815180516001600160a01b03168652830151838601529386019390820190600101612335565b50508683038188015287518084528184019250600581901b84018201898301885b8381101561243557601f1987840301865281516101608151600981106123ac576123ac6126a2565b855281870151878601528a8201516123c68c870182612295565b508982015160c081818801526080840151915060e0828189015260a085015192506123fd6101008901846001600160a01b03169052565b9084015161012088015290920151610140860182905291506124218186018361224a565b978701979450505090840190600101612384565b50909b9a5050505050505050505050565b6020815260006120d3602083018461224a565b8381526040602082015281604082015260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115612497578081fd5b8260051b80856060850137919091016060019081529392505050565b604051601f8201601f1916810167ffffffffffffffff811182821017156124dc576124dc6126b8565b604052919050565b6000808212826001600160ff1b030384138115161561250557612505612676565b600160ff1b839003841281161561251e5761251e612676565b50500190565b6000821982111561253757612537612676565b500190565b60008261254b5761254b61268c565b600160ff1b82146000198414161561256557612565612676565b500590565b6000826125795761257961268c565b500490565b60006001600160ff1b03818413828413858304851182821616156125a4576125a4612676565b600160ff1b848712828116878305891216156125c2576125c2612676565b8587129250878205871284841616156125dd576125dd612676565b878505871281841616156125f3576125f3612676565b505050929093029392505050565b600081600019048311821515161561261b5761261b612676565b500290565b60008083128015600160ff1b85018412161561263e5761263e612676565b836001600160ff1b0301831381161561265957612659612676565b50500390565b60008282101561267157612671612676565b500390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600281106126de576126de6126a2565b50565b80151581146126de57600080fdfea26469706673582212209e05f519090abef664db665b013c295921fb04914a21d86974860cc8843bbf9164736f6c63430008040033

Deployed Bytecode

0x6080604052600436106100a15760003560e01c8063adecd1021161006e578063e9cbafb01161004b578063e9cbafb0146101c2578063ee8725581461011f578063fa461e33146101dd57005b8063adecd1021461018f578063bfe87292146101af578063d3487997146101c257005b80156100a357806306fdde03146100c957806310d1e85c1461011f5780638b4187131461013f578063920f5c841461015f575b005b6100b66100b1366004612137565b6101f8565b6040519081526020015b60405180910390f35b3480156100d557600080fd5b506101126040518060400160405280602081526020017f68747470733a2f2f747769747465722e636f6d2f6d6576616c7068616c65616b81525081565b6040516100c09190612446565b34801561012b57600080fd5b506100a161013a366004611f99565b6112ca565b34801561014b57600080fd5b506100a161015a366004611e88565b611328565b34801561016b57600080fd5b5061017f61017a366004611fe2565b611385565b60405190151581526020016100c0565b34801561019b57600080fd5b506100a16101aa366004611f2a565b6113f6565b6100a16101bd366004612181565b611876565b3480156101ce57600080fd5b506100a161015a366004612235565b3480156101e957600080fd5b506100a161015a3660046120f2565b6000610202611d4e565b4781526103808516156103c45760808516156102a0576040516370a0823160e01b815230600482015273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2906370a082319060240160206040518083038186803b15801561026257600080fd5b505afa158015610276573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029a91906120da565b60208201525b610100851615610332576040516370a0823160e01b815230600482015273a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48906370a082319060240160206040518083038186803b1580156102f457600080fd5b505afa158015610308573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061032c91906120da565b60408201525b6102008516156103c4576040516370a0823160e01b8152306004820152736b175474e89094c44da98b954eedeac495271d0f906370a082319060240160206040518083038186803b15801561038657600080fd5b505afa15801561039a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103be91906120da565b60608201525b60708516156108375760108516156105e5576040516370a0823160e01b8152731e0447b19bb6ecfdae1e4ae1694b0c3659614e4e600482015260009073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2906370a082319060240160206040518083038186803b15801561043757600080fd5b505afa15801561044b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061046f91906120da565b90503063adecd10273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc261049760018561265f565b604051636eb1769f60e11b8152306004820152731e0447b19bb6ecfdae1e4ae1694b0c3659614e4e6024820152859073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc29063dd62ed3e906044015b60206040518083038186803b1580156104fe57600080fd5b505afa158015610512573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061053691906120da565b108a8a8a60405160240161054c93929190612459565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16635ff4394960e11b1790525160e086901b6001600160e01b03191681526105ad94939291906004016122dc565b600060405180830381600087803b1580156105c757600080fd5b505af11580156105db573d6000803e3d6000fd5b5050505050610891565b6020851615610715576040516370a0823160e01b8152731e0447b19bb6ecfdae1e4ae1694b0c3659614e4e600482015260009073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48906370a082319060240160206040518083038186803b15801561064f57600080fd5b505afa158015610663573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068791906120da565b90503063adecd10273a0b86991c6218b36c1d19d4a2e9eb0ce3606eb486106af60018561265f565b604051636eb1769f60e11b8152306004820152731e0447b19bb6ecfdae1e4ae1694b0c3659614e4e6024820152859073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb489063dd62ed3e9060440160206040518083038186803b1580156104fe57600080fd5b6040851615610832576040516370a0823160e01b8152731e0447b19bb6ecfdae1e4ae1694b0c3659614e4e6004820152600090736b175474e89094c44da98b954eedeac495271d0f906370a082319060240160206040518083038186803b15801561077f57600080fd5b505afa158015610793573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b791906120da565b90503063adecd102736b175474e89094c44da98b954eedeac495271d0f6107df60018561265f565b604051636eb1769f60e11b8152306004820152731e0447b19bb6ecfdae1e4ae1694b0c3659614e4e60248201528590736b175474e89094c44da98b954eedeac495271d0f9063dd62ed3e906044016104e6565b610891565b604051635ff4394960e11b8152309063bfe872929061085e90889088908890600401612459565b600060405180830381600087803b15801561087857600080fd5b505af115801561088c573d6000803e3d6000fd5b505050505b6104008516156109a3576040516370a0823160e01b815230600482015260009073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2906370a082319060240160206040518083038186803b1580156108e857600080fd5b505afa1580156108fc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092091906120da565b905060018111156109a15773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2632e1a7d4d61095060018461265f565b6040518263ffffffff1660e01b815260040161096e91815260200190565b600060405180830381600087803b15801561098857600080fd5b505af115801561099c573d6000803e3d6000fd5b505050505b505b80516109af9047612620565b9150610380851615610cf6576080851615610a625760208101516040516370a0823160e01b815230600482015273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2906370a082319060240160206040518083038186803b158015610a1357600080fd5b505afa158015610a27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4b91906120da565b610a559190612620565b610a5f90836124e4565b91505b610100851615610bac57670de0b6b3a764000073986b5e1e1755e3c2440e960477f25201b0a8bbd46001600160a01b03166350d25bcd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ac257600080fd5b505afa158015610ad6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610afa91906120da565b60408084015190516370a0823160e01b815230600482015273a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48906370a082319060240160206040518083038186803b158015610b4957600080fd5b505afa158015610b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8191906120da565b610b8b9190612620565b610b95919061257e565b610b9f919061253c565b610ba990836124e4565b91505b610200851615610cf657670de0b6b3a764000073773616e4d11a78f511299002da57a0a94577f1f46001600160a01b03166350d25bcd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610c0c57600080fd5b505afa158015610c20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4491906120da565b60608301516040516370a0823160e01b8152306004820152736b175474e89094c44da98b954eedeac495271d0f906370a082319060240160206040518083038186803b158015610c9357600080fd5b505afa158015610ca7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ccb91906120da565b610cd59190612620565b610cdf919061257e565b610ce9919061253c565b610cf390836124e4565b91505b611000851615610dc557476000610d11600160801b8861256a565b905080821015610d905773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2632e1a7d4d610d3f848461265f565b6040518263ffffffff1660e01b8152600401610d5d91815260200190565b600060405180830381600087803b158015610d7757600080fd5b505af1158015610d8b573d6000803e3d6000fd5b505050505b604051419082156108fc029083906000818181858888f19350505050158015610dbd573d6000803e3d6000fd5b505050610eae565b610800851615610eae57476000670de0b6b3a764000084610dea600160801b8a61256a565b610df49190612601565b610dfe919061256a565b905080821015610e7d5773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2632e1a7d4d610e2c848461265f565b6040518263ffffffff1660e01b8152600401610e4a91815260200190565b600060405180830381600087803b158015610e6457600080fd5b505af1158015610e78573d6000803e3d6000fd5b505050505b604051419082156108fc029083906000818181858888f19350505050158015610eaa573d6000803e3d6000fd5b5050505b476001811115610ef157336108fc610ec760018461265f565b6040518115909202916000818181858888f19350505050158015610eef573d6000803e3d6000fd5b505b61e0008616156112c15761200086161561103d576040516370a0823160e01b815230600482015260009073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2906370a082319060240160206040518083038186803b158015610f5257600080fd5b505afa158015610f66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8a91906120da565b9050600181111561103b5773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc263a9059cbb33610fbb60018561265f565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b15801561100157600080fd5b505af1158015611015573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103991906120b7565b505b505b61400086161561117f576040516370a0823160e01b815230600482015260009073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48906370a082319060240160206040518083038186803b15801561109457600080fd5b505afa1580156110a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cc91906120da565b9050600181111561117d5773a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4863a9059cbb336110fd60018561265f565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b15801561114357600080fd5b505af1158015611157573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117b91906120b7565b505b505b6180008616156112c1576040516370a0823160e01b8152306004820152600090736b175474e89094c44da98b954eedeac495271d0f906370a082319060240160206040518083038186803b1580156111d657600080fd5b505afa1580156111ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061120e91906120da565b905060018111156112bf57736b175474e89094c44da98b954eedeac495271d0f63a9059cbb3361123f60018561265f565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b15801561128557600080fd5b505af1158015611299573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112bd91906120b7565b505b505b50509392505050565b60405130906112dc90849084906122cc565b6000604051808303816000865af19150503d8060008114611319576040519150601f19603f3d011682016040523d82523d6000602084013e61131e565b606091505b5050505050505050565b604051309061133a90849084906122cc565b6000604051808303816000865af19150503d8060008114611377576040519150601f19603f3d011682016040523d82523d6000602084013e61137c565b606091505b50505050505050565b6000306001600160a01b031683836040516113a19291906122cc565b6000604051808303816000865af19150503d80600081146113de576040519150601f19603f3d011682016040523d82523d6000602084013e6113e3565b606091505b5060019c9b505050505050505050505050565b60408051600380825260808201909252600091816020015b611416611d6c565b81526020019060019003908161140e5750506040805161010081018252600181526000602080830182905283516080810185528281529081018290528084019190915260608082018a905292820152919250810161147388611cd8565b815260200160008152602001306001600160a01b031681526020016000815260200160405180602001604052806000815250815250816000815181106114c957634e487b7160e01b600052603260045260246000fd5b602090810291909101015260408051610100810190915280600881526020016000815260200160405180608001604052806000151581526020016000600181111561152457634e487b7160e01b600052602160045260246000fd5b815260200160008152602001600081525081526020016000815260200160008152602001306001600160a01b031681526020016000815260200184848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509152508151829060019081106115b957634e487b7160e01b600052603260045260246000fd5b602090810291909101015260408051610100810190915280600081526020016000815260200160405180608001604052806001151581526020016000600181111561161457634e487b7160e01b600052602160045260246000fd5b81526020016000815260200173c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b038b161461164b57600261164e565b60015b61165b9060ff168a612524565b9052815260200161166b88611cd8565b815260200160008152602001306001600160a01b031681526020016000815260200160405180602001604052806000815250815250816002815181106116c157634e487b7160e01b600052603260045260246000fd5b6020908102919091010152604080516001808252818301909252600091816020015b60408051808201909152600080825260208201528152602001906001900390816116e35790505090506040518060400160405280306001600160a01b0316815260200160018152508160008151811061174c57634e487b7160e01b600052603260045260246000fd5b602002602001018190525084156118025760405163095ea7b360e01b8152731e0447b19bb6ecfdae1e4ae1694b0c3659614e4e60048201526fffffffffffffffffffffffffffffffff60248201526001600160a01b0388169063095ea7b390604401602060405180830381600087803b1580156117c857600080fd5b505af11580156117dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061180091906120b7565b505b60405163a67a6a4560e01b8152731e0447b19bb6ecfdae1e4ae1694b0c3659614e4e9063a67a6a459061183b9084908690600401612316565b600060405180830381600087803b15801561185557600080fd5b505af1158015611869573d6000803e3d6000fd5b5050505050505050505050565b6003821615611a0a576001821615611902574760018111156118fc5773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc263d0e30db06118b760018461265f565b6040518263ffffffff1660e01b81526004016000604051808303818588803b1580156118e257600080fd5b505af11580156118f6573d6000803e3d6000fd5b50505050505b50611a0a565b6040516370a0823160e01b815230600482015260009073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2906370a082319060240160206040518083038186803b15801561194f57600080fd5b505afa158015611963573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061198791906120da565b90506001811115611a085773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2632e1a7d4d6119b760018461265f565b6040518263ffffffff1660e01b81526004016119d591815260200190565b600060405180830381600087803b1580156119ef57600080fd5b505af1158015611a03573d6000803e3d6000fd5b505050505b505b60005b8151811015611b46576020600182010282015161ffff600160d81b8204166040516501000000000063ffffffff60b81b8416028060008114611a8457818352600460208502019350600460038701602002038701915060045b84811015611a7e578281015184820152602001611a66565b50611ab0565b60209384029360038701028701915060005b84811015611aae578281015184820152602001611a96565b505b506020830182016040526001600160a01b038416600f60fc1b8516600160fc1b8114611afa576020848686602060028c01028c01518662ffffff600160a01b8d0416f19250611b10565b60208486868562ffffff600160a01b8c0416f492505b505050600160e81b830460ff168015611b2d578151602082028701525b5060405250600160d81b900461ffff1601600201611a0d565b600c831615611cd3576004831615611bd257476001811115611bcc5773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc263d0e30db0611b8760018461265f565b6040518263ffffffff1660e01b81526004016000604051808303818588803b158015611bb257600080fd5b505af1158015611bc6573d6000803e3d6000fd5b50505050505b50505050565b6040516370a0823160e01b815230600482015260009073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2906370a082319060240160206040518083038186803b158015611c1f57600080fd5b505afa158015611c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5791906120da565b90506001811115611bcc5773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2632e1a7d4d611c8760018461265f565b6040518263ffffffff1660e01b8152600401611ca591815260200190565b600060405180830381600087803b158015611cbf57600080fd5b505af115801561131e573d6000803e3d6000fd5b505050565b60008173c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28114611d315773a0b86991c6218b36c1d19d4a2e9eb0ce3606eb488114611d3a57736b175474e89094c44da98b954eedeac495271d0f8114611d4357600080fd5b60009150611d48565b60029150611d48565b600391505b50919050565b60405180608001604052806004906020820280368337509192915050565b604080516101008101825260008082526020820152908101611db0604080516080810190915260008082526020820190815260200160008152602001600081525090565b8152602001600081526020016000815260200160006001600160a01b0316815260200160008152602001606081525090565b80356001600160a01b0381168114611df957600080fd5b919050565b60008083601f840112611e0f578081fd5b50813567ffffffffffffffff811115611e26578182fd5b6020830191508360208260051b8501011115611e4157600080fd5b9250929050565b60008083601f840112611e59578182fd5b50813567ffffffffffffffff811115611e70578182fd5b602083019150836020828501011115611e4157600080fd5b6000806000808486036080811215611e9e578485fd5b611ea786611de2565b94506040601f1982011215611eba578384fd5b506040516040810167ffffffffffffffff8282108183111715611edf57611edf6126b8565b81604052611eef60208901611de2565b83526040880135602084015291945060608701359180831115611f10578485fd5b5050611f1e87828801611e48565b95989497509550505050565b600080600080600060808688031215611f41578081fd5b611f4a86611de2565b9450602086013593506040860135611f61816126e1565b9250606086013567ffffffffffffffff811115611f7c578182fd5b611f8888828901611e48565b969995985093965092949392505050565b600080600080600060808688031215611fb0578081fd5b611fb986611de2565b94506020860135935060408601359250606086013567ffffffffffffffff811115611f7c578182fd5b600080600080600080600080600060a08a8c031215611fff578384fd5b893567ffffffffffffffff80821115612016578586fd5b6120228d838e01611dfe565b909b50995060208c013591508082111561203a578586fd5b6120468d838e01611dfe565b909950975060408c013591508082111561205e578586fd5b61206a8d838e01611dfe565b909750955085915061207e60608d01611de2565b945060808c0135915080821115612093578384fd5b506120a08c828d01611e48565b915080935050809150509295985092959850929598565b6000602082840312156120c8578081fd5b81516120d3816126e1565b9392505050565b6000602082840312156120eb578081fd5b5051919050565b60008060008060608587031215612107578384fd5b8435935060208501359250604085013567ffffffffffffffff81111561212b578283fd5b611f1e87828801611e48565b60008060006040848603121561214b578081fd5b83359250602084013567ffffffffffffffff811115612168578182fd5b61217486828701611dfe565b9497909650939450505050565b60008060408385031215612193578182fd5b8235915060208084013567ffffffffffffffff808211156121b2578384fd5b818601915086601f8301126121c5578384fd5b8135818111156121d7576121d76126b8565b8060051b91506121e88483016124b3565b8181528481019084860184860187018b1015612202578788fd5b8795505b83861015612224578035835260019590950194918601918601612206565b508096505050505050509250929050565b60008060008060608587031215612107578182fd5b60008151808452815b8181101561226f57602081850181015186830182015201612253565b818111156122805782602083870101525b50601f01601f19169290920160200192915050565b80511515825260208101516122a9816126ce565b602083015260408101516122bc816126ce565b6040830152606090810151910152565b8183823760009101908152919050565b6001600160a01b0385168152836020820152821515604082015260806060820152600061230c608083018461224a565b9695505050505050565b6040808252835182820181905260009190606090818501906020808901865b8381101561236357815180516001600160a01b03168652830151838601529386019390820190600101612335565b50508683038188015287518084528184019250600581901b84018201898301885b8381101561243557601f1987840301865281516101608151600981106123ac576123ac6126a2565b855281870151878601528a8201516123c68c870182612295565b508982015160c081818801526080840151915060e0828189015260a085015192506123fd6101008901846001600160a01b03169052565b9084015161012088015290920151610140860182905291506124218186018361224a565b978701979450505090840190600101612384565b50909b9a5050505050505050505050565b6020815260006120d3602083018461224a565b8381526040602082015281604082015260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115612497578081fd5b8260051b80856060850137919091016060019081529392505050565b604051601f8201601f1916810167ffffffffffffffff811182821017156124dc576124dc6126b8565b604052919050565b6000808212826001600160ff1b030384138115161561250557612505612676565b600160ff1b839003841281161561251e5761251e612676565b50500190565b6000821982111561253757612537612676565b500190565b60008261254b5761254b61268c565b600160ff1b82146000198414161561256557612565612676565b500590565b6000826125795761257961268c565b500490565b60006001600160ff1b03818413828413858304851182821616156125a4576125a4612676565b600160ff1b848712828116878305891216156125c2576125c2612676565b8587129250878205871284841616156125dd576125dd612676565b878505871281841616156125f3576125f3612676565b505050929093029392505050565b600081600019048311821515161561261b5761261b612676565b500290565b60008083128015600160ff1b85018412161561263e5761263e612676565b836001600160ff1b0301831381161561265957612659612676565b50500390565b60008282101561267157612671612676565b500390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600281106126de576126de6126a2565b50565b80151581146126de57600080fdfea26469706673582212209e05f519090abef664db665b013c295921fb04914a21d86974860cc8843bbf9164736f6c63430008040033

Deployed Bytecode Sourcemap

4969:14018:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12982:6002;;;;;;:::i;:::-;;:::i;:::-;;;14159:25:1;;;14147:2;14132:18;12982:6002:0;;;;;;;;5036:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;6146:283::-;;;;;;;;;;-1:-1:-1;6146:283:0;;;;;:::i;:::-;;:::i;5146:281::-;;;;;;;;;;-1:-1:-1;5146:281:0;;;;;:::i;:::-;;:::i;5734:404::-;;;;;;;;;;-1:-1:-1;5734:404:0;;;;;:::i;:::-;;:::i;:::-;;;13988:14:1;;13981:22;13963:41;;13951:2;13936:18;5734:404:0;13918:92:1;740:2554:0;;;;;;;;;;-1:-1:-1;740:2554:0;;;;;:::i;:::-;;:::i;7565:5223::-;;;;;;:::i;:::-;;:::i;6721:279::-;;;;;;;;;;-1:-1:-1;6721:279:0;;;;;:::i;7006:277::-;;;;;;;;;;-1:-1:-1;7006:277:0;;;;;:::i;12982:6002::-;13102:21;13136:30;;:::i;:::-;13203:21;13177:48;;13256:65;13241:81;;13240:87;13236:751;;4425:4;13487:34;;13486:40;13482:156;;13573:48;;-1:-1:-1;;;13573:48:0;;13615:4;13573:48;;;9792:74:1;3376:42:0;;13573:33;;9765:18:1;;13573:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13547:16;;;:75;13482:156;4489:5;13657:34;;13656:40;13652:156;;13743:48;;-1:-1:-1;;;13743:48:0;;13785:4;13743:48;;;9792:74:1;3464:42:0;;13743:33;;9765:18:1;;13743:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13717:16;;;:75;13652:156;4554:5;13827:33;;13826:39;13822:154;;13912:47;;-1:-1:-1;;;13912:47:0;;13953:4;13912:47;;;9792:74:1;3552:42:0;;13912:32;;9765:18:1;;13912:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13886:16;;;:74;13822:154;14019:65;14004:81;;14003:87;13999:1812;;4231:4;14300:34;;14299:40;14295:1439;;14385:45;;-1:-1:-1;;;14385:45:0;;3643:42;14385:45;;;9792:74:1;14360:22:0;;3376:42;;14385:33;;9765:18:1;;14385:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14360:70;-1:-1:-1;14449:4:0;:17;3376:42;14522:18;14539:1;14360:70;14522:18;:::i;:::-;14563:60;;-1:-1:-1;;;14563:60:0;;14605:4;14563:60;;;10112:34:1;3643:42:0;10162:18:1;;;10155:43;14626:14:0;;3376:42;;14563:33;;10024:18:1;;14563:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:77;14713:11;14726:10;;14663:74;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;14663:74:0;;;;;;;;;;;;;;;;-1:-1:-1;;;14663:74:0;;;14449:307;;;;;-1:-1:-1;;;;;;14449:307:0;;;;;;;;14663:74;14449:307;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14295:1439;13999:1812;;14295:1439;4295:4;14783:34;;14782:40;14778:956;;14868:45;;-1:-1:-1;;;14868:45:0;;3643:42;14868:45;;;9792:74:1;14843:22:0;;3464:42;;14868:33;;9765:18:1;;14868:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14843:70;-1:-1:-1;14932:4:0;:17;3464:42;15005:18;15022:1;14843:70;15005:18;:::i;:::-;15046:60;;-1:-1:-1;;;15046:60:0;;15088:4;15046:60;;;10112:34:1;3643:42:0;10162:18:1;;;10155:43;15109:14:0;;3464:42;;15046:33;;10024:18:1;;15046:60:0;;;;;;;;;;;;;;;;;;14778:956;4359:4;15266:33;;15265:39;15261:473;;15350:44;;-1:-1:-1;;;15350:44:0;;3643:42;15350:44;;;9792:74:1;15325:22:0;;3552:42;;15350:32;;9765:18:1;;15350:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15325:69;-1:-1:-1;15413:4:0;:17;3552:42;15485:18;15502:1;15325:69;15485:18;:::i;:::-;15526:59;;-1:-1:-1;;;15526:59:0;;15567:4;15526:59;;;10112:34:1;3643:42:0;10162:18:1;;;10155:43;15588:14:0;;3552:42;;15526:32;;10024:18:1;;15526:59:0;10006:198:1;15261:473:0;13999:1812;;;15766:33;;-1:-1:-1;;;15766:33:0;;:4;;:8;;:33;;15775:11;;15788:10;;;;15766:33;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13999:1812;4623:5;15828:28;;15827:34;15823:213;;15897:48;;-1:-1:-1;;;15897:48:0;;15939:4;15897:48;;;9792:74:1;15878:16:0;;3376:42;;15897:33;;9765:18:1;;15897:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15878:67;;15978:1;15964:11;:15;15960:64;;;3376:42;15981:26;16008:15;16022:1;16008:11;:15;:::i;:::-;15981:43;;;;;;;;;;;;;14159:25:1;;14147:2;14132:18;;14114:76;15981:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15960:64;15823:213;;16099:16;;16067:48;;16074:21;16067:48;:::i;:::-;16050:65;-1:-1:-1;16146:65:0;16131:81;;16130:87;16126:796;;4425:4;16239:34;;16238:40;16234:174;;16376:16;;;;16324:48;;-1:-1:-1;;;16324:48:0;;16366:4;16324:48;;;9792:74:1;3376:42:0;;16324:33;;9765:18:1;;16324:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16317:75;;;;:::i;:::-;16299:93;;;;:::i;:::-;;;16234:174;4489:5;16427:34;;16426:40;16422:239;;16637:7;3732:42;-1:-1:-1;;;;;16585:46:0;;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16565:16;;;;;16513:48;;-1:-1:-1;;;16513:48:0;;16555:4;16513:48;;;9792:74:1;3464:42:0;;16513:33;;9765:18:1;;16513:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16506:75;;;;:::i;:::-;16505:128;;;;:::i;:::-;:140;;;;:::i;:::-;16487:158;;;;:::i;:::-;;;16422:239;4554:5;16680:33;;16679:39;16675:236;;16887:7;3821:42;-1:-1:-1;;;;;16836:45:0;;:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16816:16;;;;16765:47;;-1:-1:-1;;;16765:47:0;;16806:4;16765:47;;;9792:74:1;3552:42:0;;16765:32;;9765:18:1;;16765:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16758:74;;;;:::i;:::-;16757:126;;;;:::i;:::-;:138;;;;:::i;:::-;16739:156;;;;:::i;:::-;;;16675:236;4753:6;16941:38;;16940:44;16936:957;;17020:21;17001:16;17075:49;-1:-1:-1;;;17075:11:0;:49;:::i;:::-;17056:68;;17157:11;17143;:25;17139:182;;;3376:42;17252:26;17279:25;17293:11;17279;:25;:::i;:::-;17252:53;;;;;;;;;;;;;14159:25:1;;14147:2;14132:18;;14114:76;17252:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17139:182;17335:45;;17343:14;;17335:45;;;;;17368:11;;17335:45;;;;17368:11;17343:14;17335:45;;;;;;;;;;;;;;;;;;;;;16936:957;;;;;4688:5;17403:37;;17402:43;17398:495;;17481:21;17462:16;17617:7;17598:14;17537:49;-1:-1:-1;;;17537:11:0;:49;:::i;:::-;17536:77;;;;:::i;:::-;:89;;;;:::i;:::-;17517:108;;17658:11;17644;:25;17640:182;;;3376:42;17753:26;17780:25;17794:11;17780;:25;:::i;:::-;17753:53;;;;;;;;;;;;;14159:25:1;;14147:2;14132:18;;14114:76;17753:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17640:182;17836:45;;17844:14;;17836:45;;;;;17869:11;;17836:45;;;;17869:11;17844:14;17836:45;;;;;;;;;;;;;;;;;;;;;17398:495;;;17924:21;17974:1;17960:15;;17956:66;;;17985:10;17977:45;18006:15;18020:1;18006:11;:15;:::i;:::-;17977:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17956:66;18053:53;18038:69;;18037:75;18033:944;;4823:6;18202:30;;18201:36;18197:248;;18278:48;;-1:-1:-1;;;18278:48:0;;18320:4;18278:48;;;9792:74:1;18258:17:0;;3376:42;;18278:33;;9765:18:1;;18278:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18258:68;;18364:1;18349:12;:16;18345:84;;;3376:42;18367:32;18400:10;18412:16;18427:1;18412:12;:16;:::i;:::-;18367:62;;-1:-1:-1;;;;;;18367:62:0;;;;;;;-1:-1:-1;;;;;10447:55:1;;;18367:62:0;;;10429:74:1;10519:18;;;10512:34;10402:18;;18367:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18345:84;18197:248;;4889:6;18464:30;;18463:36;18459:248;;18540:48;;-1:-1:-1;;;18540:48:0;;18582:4;18540:48;;;9792:74:1;18520:17:0;;3464:42;;18540:33;;9765:18:1;;18540:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18520:68;;18626:1;18611:12;:16;18607:84;;;3464:42;18629:32;18662:10;18674:16;18689:1;18674:12;:16;:::i;:::-;18629:62;;-1:-1:-1;;;;;;18629:62:0;;;;;;;-1:-1:-1;;;;;10447:55:1;;;18629:62:0;;;10429:74:1;10519:18;;;10512:34;10402:18;;18629:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18607:84;18459:248;;4955:6;18726:29;;18725:35;18721:245;;18801:47;;-1:-1:-1;;;18801:47:0;;18842:4;18801:47;;;9792:74:1;18781:17:0;;3552:42;;18801:32;;9765:18:1;;18801:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18781:67;;18886:1;18871:12;:16;18867:83;;;3552:42;18889:31;18921:10;18933:16;18948:1;18933:12;:16;:::i;:::-;18889:61;;-1:-1:-1;;;;;;18889:61:0;;;;;;;-1:-1:-1;;;;;10447:55:1;;;18889:61:0;;;10429:74:1;10519:18;;;10512:34;10402:18;;18889:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18867:83;18721:245;;12982:6002;;;;;;;:::o;6146:283::-;6397:24;;6405:4;;6397:24;;6416:4;;;;6397:24;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6146:283;;;;;:::o;5146:281::-;5395:24;;5403:4;;5395:24;;5414:4;;;;5395:24;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5146:281;;;;:::o;5734:404::-;5940:4;6090;-1:-1:-1;;;;;6082:18:0;6101:6;;6082:26;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6126:4:0;;5734:404;-1:-1:-1;;;;;;;;;;;;5734:404:0:o;740:2554::-;910:25;;;933:1;910:25;;;;;;;;;871:36;;910:25;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;962:549:0;;;;;;;;1006:25;962:549;;-1:-1:-1;962:549:0;;;;;;;1081:215;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;962:549;;;;871:64;;-1:-1:-1;962:549:0;;1328:39;1353:13;1328:24;:39::i;:::-;962:549;;;;1401:1;962:549;;;;1439:4;-1:-1:-1;;;;;962:549:0;;;;;1475:1;962:549;;;;;;;;;;;;;;;;;;;946:10;957:1;946:13;;;;;;-1:-1:-1;;;946:13:0;;;;;;;;;;;;;;;;;;:565;1538:495;;;;;;;;;;1582:21;1538:495;;;;1629:1;1538:495;;;;1653:201;;;;;;;;1696:5;1653:201;;;;;;1734:27;1653:201;;;;;;-1:-1:-1;;;1653:201:0;;;;;;;;;;;;;1785:26;1653:201;;;;1837:1;1653:201;;;1538:495;;;;1886:1;1538:495;;;;1921:1;1538:495;;;;1959:4;-1:-1:-1;;;;;1538:495:0;;;;;1995:1;1538:495;;;;2017:4;;1538:495;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1538:495:0;;-1:-1:-1;1522:13:0;;:10;;1533:1;;1522:13;;;;-1:-1:-1;;;1522:13:0;;;;;;;;;;;;;;;;;;:511;2060:619;;;;;;;;;;-1:-1:-1;2060:619:0;;;;2154:1;2060:619;;;;2178:286;;;;;;;;2221:4;2178:286;;;;;;2258:27;2178:286;;;;;;-1:-1:-1;;;2178:286:0;;;;;;;;;;;;;2309:26;2178:286;;;;2397:42;-1:-1:-1;;;;;2380:59:0;;;:67;;2446:1;2380:67;;;2442:1;2380:67;2361:87;;;;:15;:87;:::i;:::-;2178:286;;2060:619;;;;2496:39;2521:13;2496:24;:39::i;:::-;2060:619;;;;2569:1;2060:619;;;;2607:4;-1:-1:-1;;;;;2060:619:0;;;;;2643:1;2060:619;;;;;;;;;;;;;;;;;;;2044:10;2055:1;2044:13;;;;;;-1:-1:-1;;;2044:13:0;;;;;;;;;;;;;;;;;;:635;2734:26;;;2758:1;2734:26;;;;;;;;;2692:39;;2734:26;;;;-1:-1:-1;;;;;;;;;;;;;;;;;2734:26:0;;;;;;;;;;;;;;;2692:68;;2789:89;;;;;;;;2837:4;-1:-1:-1;;;;;2789:89:0;;;;;2865:1;2789:89;;;2771:12;2784:1;2771:15;;;;;;-1:-1:-1;;;2771:15:0;;;;;;;;;;;;;;:107;;;;2893:15;2889:298;;;3007:168;;-1:-1:-1;;;3007:168:0;;3056:42;3007:168;;;10429:74:1;3113:34:0;10519:18:1;;;10512:34;-1:-1:-1;;;;;3007:34:0;;;;;10402:18:1;;3007:168:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2889:298;3197:89;;-1:-1:-1;;;3197:89:0;;3209:42;;3197:63;;:89;;3261:12;;3275:10;;3197:89;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;740:2554;;;;;;;:::o;7565:5223::-;7750:77;7735:93;;7734:99;7730:551;;3938:3;7855:51;;7854:57;7850:420;;7951:21;8009:1;7995:15;;7991:72;;;3376:42;8012:25;8045:15;8059:1;8045:11;:15;:::i;:::-;8012:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7991:72;7850:420;;;;8123:48;;-1:-1:-1;;;8123:48:0;;8165:4;8123:48;;;9792:74:1;8104:16:0;;3376:42;;8123:33;;9765:18:1;;8123:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8104:67;;8208:1;8194:11;:15;8190:64;;;3376:42;8211:26;8238:15;8252:1;8238:11;:15;:::i;:::-;8211:43;;;;;;;;;;;;;14159:25:1;;14147:2;14132:18;;14114:76;8211:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8190:64;7850:420;;8293:11;8319:3820;8335:4;:11;8326:6;:20;8319:3820;;;8444:4;8440:1;8432:6;8428:14;8424:25;8418:4;8414:36;8408:43;8565:6;-1:-1:-1;;;8495:8:0;8491:72;8487:85;8605:4;8599:11;8897:13;-1:-1:-1;;;8828:8:0;8824:71;8820:91;8936:23;8982:1;8977:357;;;;9393:23;9390:1;9383:34;9480:1;9473:4;9461:10;9457:21;9453:29;9439:43;;9572:1;9567;9559:6;9555:14;9549:4;9545:25;9541:33;9535:4;9531:44;9504:71;;9612:1;9597:166;9622:10;9619:1;9616:17;9597:166;;;9707:31;;;9701:38;9690:9;;;9683:57;9648:4;9641:12;9597:166;;;9601:14;8929:853;;8977:357;9037:4;9021:21;;;;9123:1;9111:14;;9101:25;9091:36;;;-1:-1:-1;9164:1:0;9149:166;9174:10;9171:1;9168:17;9149:166;;;9259:31;;;9253:38;9242:9;;;9235:57;9200:4;9193:12;9149:166;;;9153:14;8929:853;;9838:4;9826:10;9822:21;9819:1;9815:29;9809:4;9802:43;-1:-1:-1;;;;;9983:8:0;9979:57;-1:-1:-1;;;10127:8:0;10123:81;-1:-1:-1;;;10222:634:0;;;;11488:4;11419:1;11356:10;11285:1;11219:4;11215:1;11207:6;11203:14;11199:25;11193:4;11189:36;11183:43;11109:12;11039:8;-1:-1:-1;;;10983:8:0;10979:58;10975:73;10932:561;10905:588;;10116:1422;;10222:634;10806:4;10737:1;10674:10;10603:1;10529:12;10459:8;-1:-1:-1;;;10403:8:0;10399:58;10395:73;10344:467;10317:494;;10116:1422;-1:-1:-1;;;;;;11589:76:0;;11667:4;11585:87;11693:30;;11690:2;;11886:1;11880:8;11872:4;11847:23;11843:34;11837:4;11833:45;11826:63;11690:2;-1:-1:-1;12067:4:0;12060:15;-1:-1:-1;;;;11956:72:0;;12030:6;11952:85;11936:106;12039:1;11936:106;8373:3755;;;12253:75;12238:91;;12237:97;12233:548;;4090:3;12356:50;;12355:56;12351:419;;12451:21;12509:1;12495:15;;12491:72;;;3376:42;12512:25;12545:15;12559:1;12545:11;:15;:::i;:::-;12512:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12491:72;12351:419;7565:5223;;;:::o;12351:419::-;12623:48;;-1:-1:-1;;;12623:48:0;;12665:4;12623:48;;;9792:74:1;12604:16:0;;3376:42;;12623:33;;9765:18:1;;12623:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12604:67;;12708:1;12694:11;:15;12690:64;;;3376:42;12711:26;12738:15;12752:1;12738:11;:15;:::i;:::-;12711:43;;;;;;;;;;;;;14159:25:1;;14147:2;14132:18;;14114:76;12711:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12351:419;7565:5223;;;:::o;170:564::-;249:16;309:12;340:42;335:95;;;;449:42;444:95;;;;558:42;553:95;;;;699:1;696;689:12;335:95;414:1;402:13;;335:95;;444;523:1;511:13;;444:95;;553;632:1;620:13;;302:414;;287:440;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:196:1:-;82:20;;-1:-1:-1;;;;;131:54:1;;121:65;;111:2;;200:1;197;190:12;111:2;63:147;;;:::o;215:391::-;278:8;288:6;342:3;335:4;327:6;323:17;319:27;309:2;;365:6;357;350:22;309:2;-1:-1:-1;393:20:1;;436:18;425:30;;422:2;;;475:8;465;458:26;422:2;519:4;511:6;507:17;495:29;;579:3;572:4;562:6;559:1;555:14;547:6;543:27;539:38;536:47;533:2;;;596:1;593;586:12;533:2;299:307;;;;;:::o;611:375::-;662:8;672:6;726:3;719:4;711:6;707:17;703:27;693:2;;751:8;741;734:26;693:2;-1:-1:-1;781:20:1;;824:18;813:30;;810:2;;;863:8;853;846:26;810:2;907:4;899:6;895:17;883:29;;959:3;952:4;943:6;935;931:19;927:30;924:39;921:2;;;976:1;973;966:12;991:1006;1108:6;1116;1124;1132;1176:9;1167:7;1163:23;1206:3;1202:2;1198:12;1195:2;;;1228:6;1220;1213:22;1195:2;1256:29;1275:9;1256:29;:::i;:::-;1246:39;-1:-1:-1;1319:4:1;-1:-1:-1;;1301:16:1;;1297:27;1294:2;;;1342:6;1334;1327:22;1294:2;;1380:4;1374:11;1424:4;1416:6;1412:17;1448:18;1516:6;1504:10;1501:22;1496:2;1484:10;1481:18;1478:46;1475:2;;;1527:18;;:::i;:::-;1569:10;1563:4;1556:24;1604:38;1638:2;1627:9;1623:18;1604:38;:::i;:::-;1589:54;;1704:4;1689:20;;1676:34;1671:2;1659:15;;1652:59;1596:6;;-1:-1:-1;1787:2:1;1772:18;;1759:32;;1803:14;;;1800:2;;;1835:6;1827;1820:22;1800:2;;;1879:58;1929:7;1920:6;1909:9;1905:22;1879:58;:::i;:::-;1143:854;;;;-1:-1:-1;1956:8:1;-1:-1:-1;;;;1143:854:1:o;2002:701::-;2096:6;2104;2112;2120;2128;2181:3;2169:9;2160:7;2156:23;2152:33;2149:2;;;2203:6;2195;2188:22;2149:2;2231:29;2250:9;2231:29;:::i;:::-;2221:39;;2307:2;2296:9;2292:18;2279:32;2269:42;;2361:2;2350:9;2346:18;2333:32;2374:28;2396:5;2374:28;:::i;:::-;2421:5;-1:-1:-1;2477:2:1;2462:18;;2449:32;2504:18;2493:30;;2490:2;;;2541:6;2533;2526:22;2490:2;2585:58;2635:7;2626:6;2615:9;2611:22;2585:58;:::i;:::-;2139:564;;;;-1:-1:-1;2139:564:1;;-1:-1:-1;2662:8:1;;2559:84;2139:564;-1:-1:-1;;;2139:564:1:o;2708:640::-;2805:6;2813;2821;2829;2837;2890:3;2878:9;2869:7;2865:23;2861:33;2858:2;;;2912:6;2904;2897:22;2858:2;2940:29;2959:9;2940:29;:::i;:::-;2930:39;;3016:2;3005:9;3001:18;2988:32;2978:42;;3067:2;3056:9;3052:18;3039:32;3029:42;;3122:2;3111:9;3107:18;3094:32;3149:18;3141:6;3138:30;3135:2;;;3186:6;3178;3171:22;3353:1501;3540:6;3548;3556;3564;3572;3580;3588;3596;3604;3657:3;3645:9;3636:7;3632:23;3628:33;3625:2;;;3679:6;3671;3664:22;3625:2;3724:9;3711:23;3753:18;3794:2;3786:6;3783:14;3780:2;;;3815:6;3807;3800:22;3780:2;3859:70;3921:7;3912:6;3901:9;3897:22;3859:70;:::i;:::-;3948:8;;-1:-1:-1;3833:96:1;-1:-1:-1;4036:2:1;4021:18;;4008:32;;-1:-1:-1;4052:16:1;;;4049:2;;;4086:6;4078;4071:22;4049:2;4130:72;4194:7;4183:8;4172:9;4168:24;4130:72;:::i;:::-;4221:8;;-1:-1:-1;4104:98:1;-1:-1:-1;4309:2:1;4294:18;;4281:32;;-1:-1:-1;4325:16:1;;;4322:2;;;4359:6;4351;4344:22;4322:2;4403:72;4467:7;4456:8;4445:9;4441:24;4403:72;:::i;:::-;4494:8;;-1:-1:-1;4377:98:1;-1:-1:-1;4377:98:1;;-1:-1:-1;4548:38:1;4582:2;4567:18;;4548:38;:::i;:::-;4538:48;;4639:3;4628:9;4624:19;4611:33;4595:49;;4669:2;4659:8;4656:16;4653:2;;;4690:6;4682;4675:22;4653:2;;4734:60;4786:7;4775:8;4764:9;4760:24;4734:60;:::i;:::-;4708:86;;4813:8;4803:18;;;4840:8;4830:18;;;3615:1239;;;;;;;;;;;:::o;4859:255::-;4926:6;4979:2;4967:9;4958:7;4954:23;4950:32;4947:2;;;5000:6;4992;4985:22;4947:2;5037:9;5031:16;5056:28;5078:5;5056:28;:::i;:::-;5103:5;4937:177;-1:-1:-1;;;4937:177:1:o;5119:193::-;5188:6;5241:2;5229:9;5220:7;5216:23;5212:32;5209:2;;;5262:6;5254;5247:22;5209:2;-1:-1:-1;5290:16:1;;5199:113;-1:-1:-1;5199:113:1:o;5317:563::-;5403:6;5411;5419;5427;5480:2;5468:9;5459:7;5455:23;5451:32;5448:2;;;5501:6;5493;5486:22;5448:2;5542:9;5529:23;5519:33;;5599:2;5588:9;5584:18;5571:32;5561:42;;5654:2;5643:9;5639:18;5626:32;5681:18;5673:6;5670:30;5667:2;;;5718:6;5710;5703:22;5667:2;5762:58;5812:7;5803:6;5792:9;5788:22;5762:58;:::i;6084:525::-;6179:6;6187;6195;6248:2;6236:9;6227:7;6223:23;6219:32;6216:2;;;6269:6;6261;6254:22;6216:2;6310:9;6297:23;6287:33;;6371:2;6360:9;6356:18;6343:32;6398:18;6390:6;6387:30;6384:2;;;6435:6;6427;6420:22;6384:2;6479:70;6541:7;6532:6;6521:9;6517:22;6479:70;:::i;:::-;6206:403;;6568:8;;-1:-1:-1;6453:96:1;;-1:-1:-1;;;;6206:403:1:o;6614:1070::-;6707:6;6715;6768:2;6756:9;6747:7;6743:23;6739:32;6736:2;;;6789:6;6781;6774:22;6736:2;6830:9;6817:23;6807:33;;6859:2;6912;6901:9;6897:18;6884:32;6935:18;6976:2;6968:6;6965:14;6962:2;;;6997:6;6989;6982:22;6962:2;7040:6;7029:9;7025:22;7015:32;;7085:7;7078:4;7074:2;7070:13;7066:27;7056:2;;7112:6;7104;7097:22;7056:2;7153;7140:16;7175:2;7171;7168:10;7165:2;;;7181:18;;:::i;:::-;7227:2;7224:1;7220:10;7210:20;;7250:28;7274:2;7270;7266:11;7250:28;:::i;:::-;7312:15;;;7343:12;;;;7375:11;;;7405;;;7401:20;;7398:33;-1:-1:-1;7395:2:1;;;7449:6;7441;7434:22;7395:2;7476:6;7467:15;;7491:163;7505:2;7502:1;7499:9;7491:163;;;7562:17;;7550:30;;7523:1;7516:9;;;;;7600:12;;;;7632;;7491:163;;;7495:3;7673:5;7663:15;;;;;;;;6726:958;;;;;:::o;7689:565::-;7777:6;7785;7793;7801;7854:2;7842:9;7833:7;7829:23;7825:32;7822:2;;;7875:6;7867;7860:22;8391:475;8432:3;8470:5;8464:12;8497:6;8492:3;8485:19;8522:3;8534:162;8548:6;8545:1;8542:13;8534:162;;;8610:4;8666:13;;;8662:22;;8656:29;8638:11;;;8634:20;;8627:59;8563:12;8534:162;;;8714:6;8711:1;8708:13;8705:2;;;8780:3;8773:4;8764:6;8759:3;8755:16;8751:27;8744:40;8705:2;-1:-1:-1;8848:2:1;8827:15;-1:-1:-1;;8823:29:1;8814:39;;;;8855:4;8810:50;;8440:426;-1:-1:-1;;8440:426:1:o;8871:492::-;8968:5;8962:12;8955:20;8948:28;8943:3;8936:41;9023:4;9016:5;9012:16;9006:23;9038:53;9078:12;9038:53;:::i;:::-;9116:4;9107:14;;9100:36;9184:4;9173:16;;9167:23;9199:55;9167:23;9199:55;:::i;:::-;9279:4;9270:14;;9263:38;9350:4;9339:16;;;9333:23;9317:14;;9310:47;8926:437::o;9368:273::-;9551:6;9543;9538:3;9525:33;9507:3;9577:16;;9602:15;;;9577:16;9515:126;-1:-1:-1;9515:126:1:o;10859:491::-;-1:-1:-1;;;;;11088:6:1;11084:55;11073:9;11066:74;11176:6;11171:2;11160:9;11156:18;11149:34;11233:6;11226:14;11219:22;11214:2;11203:9;11199:18;11192:50;11278:3;11273:2;11262:9;11258:18;11251:31;11047:4;11299:45;11339:3;11328:9;11324:19;11316:6;11299:45;:::i;:::-;11291:53;11056:294;-1:-1:-1;;;;;;11056:294:1:o;11355:2463::-;11718:2;11770:21;;;11840:13;;11743:18;;;11862:22;;;11689:4;;11718:2;11903;;11921:18;;;;11958:4;11985:15;;;11689:4;12031:303;12045:6;12042:1;12039:13;12031:303;;;12104:13;;12146:9;;-1:-1:-1;;;;;12142:58:1;12130:71;;12241:11;;12235:18;12221:12;;;12214:40;12274:12;;;;12309:15;;;;12067:1;12060:9;12031:303;;;-1:-1:-1;;12370:19:1;;;12350:18;;;12343:47;12440:13;;12462:21;;;12501:12;;;;-1:-1:-1;12553:1:1;12549:16;;;12540:26;;12536:35;;12596:15;;;12631:4;12644:1145;12660:8;12655:3;12652:17;12644:1145;;;12755:2;12751:7;12745:3;12737:6;12733:16;12729:30;12722:5;12715:45;12789:8;12783:15;12821:6;12856:2;12850:9;12889:1;12885:2;12882:9;12872:2;;12895:18;;:::i;:::-;12928;;12989:11;;;12983:18;12966:15;;;12959:43;13041:11;;;13035:18;13066:60;13110:15;;;13035:18;13066:60;:::i;:::-;;13163:2;13159;13155:11;13149:18;13190:4;13231:2;13226;13218:6;13214:15;13207:27;13272:4;13268:2;13264:13;13258:20;13247:31;;13302:4;13344:3;13338;13330:6;13326:16;13319:29;13397:4;13393:2;13389:13;13383:20;13361:42;;13416:55;13463:6;13455;13451:19;13435:14;-1:-1:-1;;;;;8325:54:1;8313:67;;8303:83;13416:55;13518:11;;;13512:18;13503:6;13491:19;;13484:47;13572:12;;;13566:19;13617:6;13605:19;;13598:31;;;13566:19;-1:-1:-1;13652:49:1;13685:15;;;13566:19;13652:49;:::i;:::-;13765:14;;;;13642:59;-1:-1:-1;;;13726:17:1;;;;12688:1;12679:11;12644:1145;;;-1:-1:-1;13806:6:1;;11698:2120;-1:-1:-1;;;;;;;;;;;11698:2120:1:o;14195:219::-;14344:2;14333:9;14326:21;14307:4;14364:44;14404:2;14393:9;14389:18;14381:6;14364:44;:::i;14601:613::-;14818:6;14807:9;14800:25;14861:2;14856;14845:9;14841:18;14834:30;14900:6;14895:2;14884:9;14880:18;14873:34;14781:4;14930:66;14922:6;14919:78;14916:2;;;15013:4;15007;15000:18;14916:2;15050:6;15047:1;15043:14;15107:6;15099;15094:2;15083:9;15079:18;15066:48;15137:22;;;;15161:2;15133:31;15173:16;;;15133:31;14790:424;-1:-1:-1;;;14790:424:1:o;15219:275::-;15290:2;15284:9;15355:2;15336:13;;-1:-1:-1;;15332:27:1;15320:40;;15390:18;15375:34;;15411:22;;;15372:62;15369:2;;;15437:18;;:::i;:::-;15473:2;15466:22;15264:230;;-1:-1:-1;15264:230:1:o;15499:314::-;15538:3;15573;15570:1;15566:11;15684:1;-1:-1:-1;;;;;15612:74:1;15609:1;15605:82;15600:2;15593:10;15589:99;15586:2;;;15691:18;;:::i;:::-;-1:-1:-1;;;15738:19:1;;;15731:27;;15723:36;;15720:2;;;15762:18;;:::i;:::-;-1:-1:-1;;15798:9:1;;15546:267::o;15818:128::-;15858:3;15889:1;15885:6;15882:1;15879:13;15876:2;;;15895:18;;:::i;:::-;-1:-1:-1;15931:9:1;;15866:80::o;15951:193::-;15990:1;16016;16006:2;;16021:18;;:::i;:::-;-1:-1:-1;;;16057:18:1;;-1:-1:-1;;16077:13:1;;16053:38;16050:2;;;16094:18;;:::i;:::-;-1:-1:-1;16128:10:1;;15996:148::o;16149:120::-;16189:1;16215;16205:2;;16220:18;;:::i;:::-;-1:-1:-1;16254:9:1;;16195:74::o;16274:624::-;16313:7;-1:-1:-1;;;;;16437:7:1;16434:1;16430:15;16471:7;16468:1;16464:15;16522:1;16518:2;16514:10;16511:1;16508:17;16503:2;16499;16495:11;16491:35;16488:2;;;16529:18;;:::i;:::-;-1:-1:-1;;;16598:15:1;;;16629:11;;;16649;;;16642:19;;16625:37;16622:2;;;16665:18;;:::i;:::-;16711:7;16708:1;16704:15;16694:25;;16764:1;16760:2;16755:11;16752:1;16748:19;16743:2;16739;16735:11;16731:37;16728:2;;;16771:18;;:::i;:::-;16836:1;16832:2;16827:11;16824:1;16820:19;16815:2;16811;16807:11;16803:37;16800:2;;;16843:18;;:::i;:::-;-1:-1:-1;;;16883:9:1;;;;;16325:573;-1:-1:-1;;;16325:573:1:o;16903:168::-;16943:7;17009:1;17005;17001:6;16997:14;16994:1;16991:21;16986:1;16979:9;16972:17;16968:45;16965:2;;;17016:18;;:::i;:::-;-1:-1:-1;17056:9:1;;16955:116::o;17076:317::-;17115:4;17144:12;;;17172:10;;-1:-1:-1;;;17191:19:1;;17184:27;;17168:44;17165:2;;;17215:18;;:::i;:::-;17334:1;-1:-1:-1;;;;;17262:74:1;17259:1;17255:82;17251:2;17247:91;17244:2;;;17341:18;;:::i;:::-;-1:-1:-1;;17378:9:1;;17124:269::o;17398:125::-;17438:4;17466:1;17463;17460:8;17457:2;;;17471:18;;:::i;:::-;-1:-1:-1;17508:9:1;;17447:76::o;17528:127::-;17589:10;17584:3;17580:20;17577:1;17570:31;17620:4;17617:1;17610:15;17644:4;17641:1;17634:15;17660:127;17721:10;17716:3;17712:20;17709:1;17702:31;17752:4;17749:1;17742:15;17776:4;17773:1;17766:15;17792:127;17853:10;17848:3;17844:20;17841:1;17834:31;17884:4;17881:1;17874:15;17908:4;17905:1;17898:15;17924:127;17985:10;17980:3;17976:20;17973:1;17966:31;18016:4;18013:1;18006:15;18040:4;18037:1;18030:15;18056:122;18146:1;18139:5;18136:12;18126:2;;18152:18;;:::i;:::-;18116:62;:::o;18183:118::-;18269:5;18262:13;18255:21;18248:5;18245:32;18235:2;;18291:1;18288;18281:12

Swarm Source

ipfs://9e05f519090abef664db665b013c295921fb04914a21d86974860cc8843bbf91

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.