ETH Price: $2,501.51 (-5.05%)

Contract

0x1F211b9ffB62531B062c625d1DaD6A74E42ad4Dc
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Swap171686522023-05-01 21:29:35549 days ago1682976575IN
0x1F211b9f...4E42ad4Dc
0 ETH0.2287398778.1410252
Swap167143522023-02-26 19:01:23613 days ago1677438083IN
0x1F211b9f...4E42ad4Dc
0 ETH0.0155759625.69028689
Swap166502042023-02-17 18:28:59622 days ago1676658539IN
0x1F211b9f...4E42ad4Dc
0 ETH0.0327468249.50935083
Swap166501692023-02-17 18:21:35622 days ago1676658095IN
0x1F211b9f...4E42ad4Dc
0 ETH0.0304282445.54492716
Swap166365312023-02-15 20:30:11624 days ago1676493011IN
0x1F211b9f...4E42ad4Dc
0 ETH0.0329411954.41533285
Swap166364542023-02-15 20:14:47624 days ago1676492087IN
0x1F211b9f...4E42ad4Dc
0 ETH0.0381846656.11703152
Swap165933612023-02-09 19:44:35630 days ago1675971875IN
0x1F211b9f...4E42ad4Dc
0 ETH0.045567275.28882424
Approve_token165927492023-02-09 17:40:59630 days ago1675964459IN
0x1F211b9f...4E42ad4Dc
0 ETH0.0098391540.38115641
0x60806040165926062023-02-09 17:12:23630 days ago1675962743IN
 Create: equalize_coin
0 ETH0.1796017747.1796698

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
equalize_coin

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 3 : equalize_coin.sol
//SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;

import "./IERC20.sol";
import "./uniswap_interface.sol";

contract equalize_coin {
    address public owner;
    address public routerAddr = 0xE592427A0AEce92De3Edee1F18E0157C05861564;
    address public factoryAddr = 0x1F98431c8aD98523631AE4a59f267346ea31F984;
    uint24[] public arrPoolFee = [100, 200, 500, 3000, 10000];

    address[] public arr_token_address = [0x4Fabb145d64652a948d72533023f6E7A623C7C53, 0xdAC17F958D2ee523a2206206994597C13D831ec7, 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48, 0x6B175474E89094C44Da98b954EedeAC495271d0F, 0x056Fd409E1d7A124BD7017459dFEa2F387b6d5Cd];
    address[] public arr_pool_token_address = [0x4Fabb145d64652a948d72533023f6E7A623C7C53, 0xdAC17F958D2ee523a2206206994597C13D831ec7, 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48, 0x6B175474E89094C44Da98b954EedeAC495271d0F, 0x056Fd409E1d7A124BD7017459dFEa2F387b6d5Cd, 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2];

    event errors(string);
    event success_trans(string);

    constructor(){
        owner = msg.sender;
    }

    modifier onlyOwner {
        require(msg.sender == owner, "You are not the owner");
        _;
    }

    //----------------------------------------------------------------------
    function swap(uint _slippage, bool _multihop, uint _inaccuracy, uint _limitCurrency, uint _timedead) public {
        uint[] memory _arr = get_balance();
        uint _mean = mean_fun(_arr);

        for (uint8 i = 0; i < _arr.length; i++) {
            if (_arr[i] > _mean + _inaccuracy) {

                for (uint8 j = 0; j < _arr.length; j++) {
                    if ((_arr[j] + _inaccuracy < _mean) && (_arr[j] != 0) && (i != j)) {
                        if (_arr[i] - _mean >= _mean - _arr[j]) {
                            if ( _mean - _arr[j] <= _limitCurrency) {
                                send_transaction(i, j, _mean - _arr[j], _slippage, _multihop, _timedead);
                                _arr[j] = 0;
                            } else {
                                send_transaction(i, j, _limitCurrency, _slippage, _multihop, _timedead);
                                _arr[i] = 0;
                            }
                        } else {
                            if ( _arr[i] - _mean <= _limitCurrency) {
                                _arr[j] += _arr[i] - _mean;
                                send_transaction(i, j, _arr[i] - _mean, _slippage, _multihop, _timedead);
                            } else {
                                _arr[j] += _limitCurrency;
                                send_transaction(i, j, _limitCurrency, _slippage, _multihop, _timedead);
                            }
                            _arr[i] = 0;
                            break;
                        }
                        emit errors(string(abi.encodePacked(string("transaction send: "), i, string(" - "), j)));
                    }
                }
            }
        }
    }

    //------------------------------------------------------------------
    function get_balance() public returns (uint[] memory _arr) {
        uint _len = arr_token_address.length;
        _arr = new uint[](_len);
        for (uint i=0; i < arr_token_address.length; i++) {
            if (IERC20(arr_token_address[i]).balanceOf(msg.sender) != 0) {
                _arr[i] = IERC20(arr_token_address[i]).balanceOf(msg.sender) / 10 ** (IERC20(arr_token_address[i]).decimals() - 2);
            } else {
                _arr[i] = 0;
            }
        }
    }

    function mean_fun(uint[] memory _arr) public pure returns (uint) {
        uint _sum = 0;
        for (uint i = 0; i < _arr.length; i++) {
            _sum = _sum + _arr[i];
        }
        return _sum / _arr.length;
    }

    function get_poolFee(address _coin_a, address _coin_b) public view returns(uint24) {
        IUniswapV3Factory factory = IUniswapV3Factory(factoryAddr);
        for (uint8 i; i < arrPoolFee.length; i++) {
            if (factory.getPool(_coin_a, _coin_b, arrPoolFee[i]) != address(0)) {
                return arrPoolFee[i];
            }
        }
        return 0;
    }

    function getMultiPool(address _coin_a, address _coin_b) public view returns(bytes memory) {
        for (uint8 i; i < arr_pool_token_address.length; i++) {
            if (arr_pool_token_address[i] != _coin_a && arr_pool_token_address[i] != _coin_b) {
                uint24 _poolFeeA = get_poolFee(_coin_a, arr_pool_token_address[i]);
                uint24 _poolFeeB = get_poolFee(_coin_b, arr_pool_token_address[i]);
                if (_poolFeeA != 0 && _poolFeeB != 0) {
                    return abi.encodePacked(_coin_a, _poolFeeA, arr_pool_token_address[i], _poolFeeB, _coin_b);
                }
            }
        }
        uint24 a = 0;
        return abi.encodePacked(a);
    }

    function send_transaction(uint8 _coin_in, uint8 _coin_out, uint _amount, uint _slippage, bool _multihop, uint _timedead) public {
        if (get_poolFee(arr_token_address[_coin_in], arr_token_address[_coin_out]) != 0) {         
            send_transaction_single(_coin_in, _coin_out, _amount, _slippage, _timedead);
        } else {
            if (_multihop == true) {
                bytes memory _path = getMultiPool(arr_token_address[_coin_in], arr_token_address[_coin_out]);
                uint24 a = 0;
                if (keccak256(_path) != keccak256(abi.encodePacked(a))) {
                    send_transaction_multi(_coin_in, _coin_out, _amount, _slippage, _path, _timedead);
                } else {
                    emit errors(string(abi.encodePacked(string("three is no liquidity. Swap faild: "), _coin_in, string(" - "), _coin_out, string(" => "), _amount / 100, string("."), _amount % 100)));
                }
            } else {
                emit errors(string(abi.encodePacked(string("turn on Multihop and maybe swap will complete. Swap faild: "), _coin_in, string(" - "), _coin_out, string(" => "), _amount / 100, string("."), _amount % 100)));
            }
        }
    }

    function send_transaction_single(uint8 _coin_in, uint8 _coin_out, uint _amount, uint _slippage, uint _timedead) public {    
        ISwapRouter router = ISwapRouter(routerAddr);
        IERC20(arr_token_address[_coin_in]).transferFrom(msg.sender, address(this), _amount * 10 ** (IERC20(arr_token_address[_coin_in]).decimals() - 2));

        uint _amountOutMinimum;
        if (_amount <= _slippage) {
            _amountOutMinimum = 1;
        } else {
            _amountOutMinimum = (_amount - _slippage) * 10 ** (IERC20(arr_token_address[_coin_out]).decimals() - 2);
        }

        ISwapRouter.ExactInputSingleParams memory params = ISwapRouter
            .ExactInputSingleParams({
                tokenIn: arr_token_address[_coin_in],
                tokenOut: arr_token_address[_coin_out],
                fee: get_poolFee(arr_token_address[_coin_in], arr_token_address[_coin_out]),
                recipient: msg.sender,
                deadline: block.timestamp + _timedead,
                amountIn: _amount * 10 ** (IERC20(arr_token_address[_coin_in]).decimals() - 2),
                amountOutMinimum: _amountOutMinimum,
                sqrtPriceLimitX96: 0
            });
        router.exactInputSingle(params); 
    }

    function send_transaction_multi(uint8 _coin_in, uint8 _coin_out, uint _amount, uint _slippage, bytes memory _path, uint _timedead) public {
        ISwapRouter router = ISwapRouter(routerAddr);
        IERC20(arr_token_address[_coin_in]).transferFrom(msg.sender, address(this), _amount * 10 ** (IERC20(arr_token_address[_coin_in]).decimals() - 2));

        uint _amountOutMinimum;
        if (_amount <= _slippage) {
            _amountOutMinimum = 1;
        } else {
            _amountOutMinimum = (_amount - _slippage) * 10 ** (IERC20(arr_token_address[_coin_out]).decimals() - 2);
        }

        ISwapRouter.ExactInputParams memory params = ISwapRouter
            .ExactInputParams({
                path: _path,
                recipient: msg.sender,
                deadline: block.timestamp + _timedead,
                amountIn: _amount * 10 ** (IERC20(arr_token_address[_coin_in]).decimals() - 2),
                amountOutMinimum: _amountOutMinimum
            });
        router.exactInput(params);
    }

    //-----------------------------------------------------------------
    function approve_token() public onlyOwner {
        for (uint8 i; i < arr_token_address.length; i++) {
            if (IERC20(arr_token_address[i]).allowance(address(this), routerAddr) < 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) {
                IERC20(arr_token_address[i]).approve(routerAddr, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);
            }
        }
    }

    function setTokenAddr(address[] memory _arr_token_address) public onlyOwner {
        arr_token_address = _arr_token_address;
    }

    function setPoolTokenAddr(address[] memory _arr_pool_token_address) public onlyOwner {
        arr_pool_token_address = _arr_pool_token_address;
    }

    function setISwapRouter(address _routerAddr) public onlyOwner {
        routerAddr = _routerAddr;
    }

    function setISwapFactiry(address _factoryAddr) public onlyOwner {
        factoryAddr = _factoryAddr;
    }

    function setPoolFee(uint24[] memory _arrPoolFee) public onlyOwner {
        arrPoolFee = _arrPoolFee;
    }

    function setNewOwner(address _owner) public onlyOwner {
        owner = _owner;
    }
}

File 2 of 3 : uniswap_interface.sol
//SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;

interface ISwapRouter {
    struct ExactInputSingleParams {
        address tokenIn;
        address tokenOut;
        uint24 fee;
        address recipient;
        uint deadline;
        uint amountIn;
        uint amountOutMinimum;
        uint160 sqrtPriceLimitX96;
    }

    function exactInputSingle(ExactInputSingleParams calldata params)
        external
        payable
        returns (uint amountOut);

    struct ExactInputParams {
        bytes path;
        address recipient;
        uint deadline;
        uint amountIn;
        uint amountOutMinimum;
    }

    function exactInput(ExactInputParams calldata params)
        external
        payable
        returns (uint amountOut);
}

interface IUniswapV3Factory {
    event OwnerChanged(address indexed oldOwner, address indexed newOwner);

    event PoolCreated(
        address indexed token0,
        address indexed token1,
        uint24 indexed fee,
        int24 tickSpacing,
        address pool
    );

    event FeeAmountEnabled(uint24 indexed fee, int24 indexed tickSpacing);

    function owner() external view returns (address);

    function feeAmountTickSpacing(uint24 fee) external view returns (int24);

    function getPool(
        address tokenA,
        address tokenB,
        uint24 fee
    ) external view returns (address pool);

    function createPool(
        address tokenA,
        address tokenB,
        uint24 fee
    ) external returns (address pool);

    function setOwner(address _owner) external;

    function enableFeeAmount(uint24 fee, int24 tickSpacing) external;
}

File 3 of 3 : IERC20.sol
//SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;

abstract contract ERC20Basic {
    uint public _totalSupply;
    function totalSupply() public virtual returns (uint);
    function balanceOf(address who) public virtual returns (uint);
    function transfer(address to, uint value) public virtual;
    event Transfer(address indexed from, address indexed to, uint value);
}

abstract contract IERC20 is ERC20Basic {
    function allowance(address owner, address spender) public virtual returns (uint);
    function transferFrom(address from, address to, uint value) public virtual;
    function approve(address spender, uint value) public virtual;
    uint public decimals;
    event Approval(address indexed owner, address indexed spender, uint value);
}

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"","type":"string"}],"name":"errors","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"","type":"string"}],"name":"success_trans","type":"event"},{"inputs":[],"name":"approve_token","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"arrPoolFee","outputs":[{"internalType":"uint24","name":"","type":"uint24"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"arr_pool_token_address","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"arr_token_address","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"factoryAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_coin_a","type":"address"},{"internalType":"address","name":"_coin_b","type":"address"}],"name":"getMultiPool","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"get_balance","outputs":[{"internalType":"uint256[]","name":"_arr","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_coin_a","type":"address"},{"internalType":"address","name":"_coin_b","type":"address"}],"name":"get_poolFee","outputs":[{"internalType":"uint24","name":"","type":"uint24"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_arr","type":"uint256[]"}],"name":"mean_fun","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"routerAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_coin_in","type":"uint8"},{"internalType":"uint8","name":"_coin_out","type":"uint8"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_slippage","type":"uint256"},{"internalType":"bool","name":"_multihop","type":"bool"},{"internalType":"uint256","name":"_timedead","type":"uint256"}],"name":"send_transaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_coin_in","type":"uint8"},{"internalType":"uint8","name":"_coin_out","type":"uint8"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_slippage","type":"uint256"},{"internalType":"bytes","name":"_path","type":"bytes"},{"internalType":"uint256","name":"_timedead","type":"uint256"}],"name":"send_transaction_multi","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_coin_in","type":"uint8"},{"internalType":"uint8","name":"_coin_out","type":"uint8"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_slippage","type":"uint256"},{"internalType":"uint256","name":"_timedead","type":"uint256"}],"name":"send_transaction_single","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_factoryAddr","type":"address"}],"name":"setISwapFactiry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_routerAddr","type":"address"}],"name":"setISwapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"setNewOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint24[]","name":"_arrPoolFee","type":"uint24[]"}],"name":"setPoolFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_arr_pool_token_address","type":"address[]"}],"name":"setPoolTokenAddr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_arr_token_address","type":"address[]"}],"name":"setTokenAddr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_slippage","type":"uint256"},{"internalType":"bool","name":"_multihop","type":"bool"},{"internalType":"uint256","name":"_inaccuracy","type":"uint256"},{"internalType":"uint256","name":"_limitCurrency","type":"uint256"},{"internalType":"uint256","name":"_timedead","type":"uint256"}],"name":"swap","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405273e592427a0aece92de3edee1f18e0157c05861564600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550731f98431c8ad98523631ae4a59f267346ea31f984600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060a00160405280606461ffff16815260200160c861ffff1681526020016101f461ffff168152602001610bb861ffff16815260200161271061ffff1681525060039060056200010392919062000492565b506040518060a00160405280734fabb145d64652a948d72533023f6e7a623c7c5373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173dac17f958d2ee523a2206206994597c13d831ec773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001736b175474e89094c44da98b954eedeac495271d0f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173056fd409e1d7a124bd7017459dfea2f387b6d5cd73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525060049060056200027d92919062000545565b506040518060c00160405280734fabb145d64652a948d72533023f6e7a623c7c5373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173dac17f958d2ee523a2206206994597c13d831ec773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001736b175474e89094c44da98b954eedeac495271d0f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173056fd409e1d7a124bd7017459dfea2f387b6d5cd73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525060059060066200043d929190620005d4565b503480156200044b57600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000682565b82805482825590600052602060002090600901600a90048101928215620005325791602002820160005b83821115620004ff57835183826101000a81548162ffffff021916908361ffff1602179055509260200192600301602081600201049283019260010302620004bc565b8015620005305782816101000a81549062ffffff0219169055600301602081600201049283019260010302620004ff565b505b50905062000541919062000663565b5090565b828054828255906000526020600020908101928215620005c1579160200282015b82811115620005c05782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509160200191906001019062000566565b5b509050620005d0919062000663565b5090565b82805482825590600052602060002090810192821562000650579160200282015b828111156200064f5782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190620005f5565b5b5090506200065f919062000663565b5090565b5b808211156200067e57600081600090555060010162000664565b5090565b613c3f80620006926000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c8063963671be116100b8578063d1e9b6231161007c578063d1e9b62314610326578063e815d4ff14610342578063f1ab80a71461035e578063f220844a1461038e578063f420ab3e146103aa578063f5a1f5b4146103da57610137565b8063963671be14610282578063aee6c53a146102a0578063ba89a467146102d0578063c0ced387146102ec578063c1cfb99a1461030857610137565b80636b90694c116100ff5780636b90694c146101f05780636e9d7a981461020e578063703667671461022a5780637b5939b9146102345780638da5cb5b1461026457610137565b806309289a8e1461013c5780630b719a651461016c57806322d7d735146101885780632efef1bb146101b85780633e6109ee146101d4575b600080fd5b61015660048036038101906101519190612759565b6103f6565b60405161016391906127a4565b60405180910390f35b610186600480360381019061018191906127f7565b61042f565b005b6101a2600480360381019061019d91906129cb565b610846565b6040516101af9190612a23565b60405180910390f35b6101d260048036038101906101cd9190612b2d565b6108aa565b005b6101ee60048036038101906101e99190612c97565b610952565b005b6101f86109fa565b6040516102059190612cef565b60405180910390f35b61022860048036038101906102239190612c97565b610a20565b005b610232610ac8565b005b61024e60048036038101906102499190612d0a565b610d78565b60405161025b91906127a4565b60405180910390f35b61026c610f04565b6040516102799190612cef565b60405180910390f35b61028a610f28565b6040516102979190612cef565b60405180910390f35b6102ba60048036038101906102b59190612d0a565b610f4e565b6040516102c79190612dc9565b60405180910390f35b6102ea60048036038101906102e59190612e24565b6111c7565b005b61030660048036038101906103019190612eb1565b6115ce565b005b6103106116a0565b60405161031d9190612f9c565b60405180910390f35b610340600480360381019061033b9190612eb1565b6119af565b005b61035c60048036038101906103579190613073565b611a81565b005b61037860048036038101906103739190612759565b611ec3565b6040516103859190612cef565b60405180910390f35b6103a860048036038101906103a3919061311c565b611f02565b005b6103c460048036038101906103bf9190612759565b6124ab565b6040516103d19190612cef565b60405180910390f35b6103f460048036038101906103ef9190612eb1565b6124ea565b005b6003818154811061040657600080fd5b90600052602060002090600a9182820401919006600302915054906101000a900462ffffff1681565b60006104396116a0565b9050600061044682610846565b905060005b82518160ff16101561083c57858261046391906131c6565b838260ff1681518110610479576104786131fa565b5b602002602001015111156108295760005b83518160ff161015610827578287858360ff16815181106104ae576104ad6131fa565b5b60200260200101516104c091906131c6565b1080156104eb57506000848260ff16815181106104e0576104df6131fa565b5b602002602001015114155b80156104fd57508060ff168260ff1614155b1561081457838160ff1681518110610518576105176131fa565b5b60200260200101518361052b9190613229565b83858460ff1681518110610542576105416131fa565b5b60200260200101516105549190613229565b1061061f5785848260ff16815181106105705761056f6131fa565b5b6020026020010151846105839190613229565b116105e7576105be8282868460ff16815181106105a3576105a26131fa565b5b6020026020010151866105b69190613229565b8c8c8a6111c7565b6000848260ff16815181106105d6576105d56131fa565b5b60200260200101818152505061061a565b6105f58282888c8c8a6111c7565b6000848360ff168151811061060d5761060c6131fa565b5b6020026020010181815250505b61074d565b8583858460ff1681518110610637576106366131fa565b5b60200260200101516106499190613229565b116106e35782848360ff1681518110610665576106646131fa565b5b60200260200101516106779190613229565b848260ff168151811061068d5761068c6131fa565b5b602002602001018181516106a191906131c6565b915081815250506106de828285878660ff16815181106106c4576106c36131fa565b5b60200260200101516106d69190613229565b8c8c8a6111c7565b610724565b85848260ff16815181106106fa576106f96131fa565b5b6020026020010181815161070e91906131c6565b915081815250506107238282888c8c8a6111c7565b5b6000848360ff168151811061073c5761073b6131fa565b5b602002602001018181525050610827565b7fcfbc85b0d7cb13aefb02bb4fa3c3c3beb3b507c93b927eb5955193860882ef5e6040518060400160405280601281526020017f7472616e73616374696f6e2073656e643a200000000000000000000000000000815250836040518060400160405280600381526020017f202d200000000000000000000000000000000000000000000000000000000000815250846040516020016107ef94939291906132da565b60405160208183030381529060405260405161080b919061336a565b60405180910390a15b808061081f9061338c565b91505061048a565b505b80806108349061338c565b91505061044b565b5050505050505050565b6000806000905060005b83518110156108945783818151811061086c5761086b6131fa565b5b60200260200101518261087f91906131c6565b9150808061088c906133b5565b915050610850565b508251816108a2919061342c565b915050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092f906134a9565b60405180910390fd5b806003908051906020019061094e9291906125bb565b5050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d7906134a9565b60405180910390fd5b80600490805190602001906109f6929190612668565b5050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610aae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa5906134a9565b60405180910390fd5b8060059080519060200190610ac4929190612668565b5050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4d906134a9565b60405180910390fd5b60005b6004805490508160ff161015610d75577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60048260ff1681548110610ba157610ba06131fa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401610c289291906134c9565b6020604051808303816000875af1158015610c47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6b9190613507565b1015610d625760048160ff1681548110610c8857610c876131fa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401610d2f929190613579565b600060405180830381600087803b158015610d4957600080fd5b505af1158015610d5d573d6000803e3d6000fd5b505050505b8080610d6d9061338c565b915050610b59565b50565b600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060005b6003805490508160ff161015610ef757600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16631698ee82878760038660ff1681548110610e0057610dff6131fa565b5b90600052602060002090600a91828204019190066003029054906101000a900462ffffff166040518463ffffffff1660e01b8152600401610e43939291906135a2565b602060405180830381865afa158015610e60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8491906135ee565b73ffffffffffffffffffffffffffffffffffffffff1614610ee45760038160ff1681548110610eb657610eb56131fa565b5b90600052602060002090600a91828204019190066003029054906101000a900462ffffff1692505050610efe565b8080610eef9061338c565b915050610da3565b5060009150505b92915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060005b6005805490508160ff16101561119a578373ffffffffffffffffffffffffffffffffffffffff1660058260ff1681548110610f9157610f906131fa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415801561104d57508273ffffffffffffffffffffffffffffffffffffffff1660058260ff1681548110611009576110086131fa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b1561118757600061109f8560058460ff168154811061106f5761106e6131fa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610d78565b905060006110ee8560058560ff16815481106110be576110bd6131fa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610d78565b905060008262ffffff161415801561110c575060008162ffffff1614155b1561118457858260058560ff168154811061112a576111296131fa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838860405160200161116b959493929190613699565b60405160208183030381529060405293505050506111c1565b50505b80806111929061338c565b915050610f53565b506000806040516020016111ae91906136f8565b6040516020818303038152906040529150505b92915050565b600061125560048860ff16815481106111e3576111e26131fa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660048860ff1681548110611225576112246131fa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610d78565b62ffffff16146112715761126c8686868685611f02565b6115c6565b600115158215150361149157600061130b60048860ff1681548110611299576112986131fa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660048860ff16815481106112db576112da6131fa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610f4e565b905060008060405160200161132091906136f8565b6040516020818303038152906040528051906020012082805190602001201461135657611351888888888688611a81565b61148a565b7fcfbc85b0d7cb13aefb02bb4fa3c3c3beb3b507c93b927eb5955193860882ef5e604051806060016040528060238152602001613be760239139896040518060400160405280600381526020017f202d2000000000000000000000000000000000000000000000000000000000008152508a6040518060400160405280600481526020017f203d3e200000000000000000000000000000000000000000000000000000000081525060648c61140b919061342c565b6040518060400160405280600181526020017f2e0000000000000000000000000000000000000000000000000000000000000081525060648e61144e9190613713565b604051602001611465989796959493929190613765565b604051602081830303815290604052604051611481919061336a565b60405180910390a15b50506115c5565b7fcfbc85b0d7cb13aefb02bb4fa3c3c3beb3b507c93b927eb5955193860882ef5e6040518060600160405280603b8152602001613bac603b9139876040518060400160405280600381526020017f202d200000000000000000000000000000000000000000000000000000000000815250886040518060400160405280600481526020017f203d3e200000000000000000000000000000000000000000000000000000000081525060648a611546919061342c565b6040518060400160405280600181526020017f2e0000000000000000000000000000000000000000000000000000000000000081525060648c6115899190613713565b6040516020016115a0989796959493929190613765565b6040516020818303038152906040526040516115bc919061336a565b60405180910390a15b5b505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461165c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611653906134a9565b60405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060600060048054905090508067ffffffffffffffff8111156116c6576116c5612888565b5b6040519080825280602002602001820160405280156116f45781602001602082028036833780820191505090505b50915060005b6004805490508110156119aa5760006004828154811061171d5761171c6131fa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016117809190612cef565b6020604051808303816000875af115801561179f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c39190613507565b14611975576002600482815481106117de576117dd6131fa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611853573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118779190613507565b6118819190613229565b600a61188d919061391a565b600482815481106118a1576118a06131fa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016119049190612cef565b6020604051808303816000875af1158015611923573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119479190613507565b611951919061342c565b838281518110611964576119636131fa565b5b602002602001018181525050611997565b600083828151811061198a576119896131fa565b5b6020026020010181815250505b80806119a2906133b5565b9150506116fa565b505090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a34906134a9565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060048760ff1681548110611abf57611abe6131fa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330600260048c60ff1681548110611b2057611b1f6131fa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb99190613507565b611bc39190613229565b600a611bcf919061391a565b89611bda9190613965565b6040518463ffffffff1660e01b8152600401611bf8939291906139a7565b600060405180830381600087803b158015611c1257600080fd5b505af1158015611c26573d6000803e3d6000fd5b505050506000848611611c3c5760019050611d1d565b600260048860ff1681548110611c5557611c546131fa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cee9190613507565b611cf89190613229565b600a611d04919061391a565b8587611d109190613229565b611d1a9190613965565b90505b60006040518060a001604052808681526020013373ffffffffffffffffffffffffffffffffffffffff1681526020018542611d5891906131c6565b8152602001600260048c60ff1681548110611d7657611d756131fa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611deb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e0f9190613507565b611e199190613229565b600a611e25919061391a565b89611e309190613965565b81526020018381525090508273ffffffffffffffffffffffffffffffffffffffff1663c04b8d59826040518263ffffffff1660e01b8152600401611e749190613aad565b6020604051808303816000875af1158015611e93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb79190613507565b50505050505050505050565b60048181548110611ed357600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060048660ff1681548110611f4057611f3f6131fa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330600260048b60ff1681548110611fa157611fa06131fa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612016573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061203a9190613507565b6120449190613229565b600a612050919061391a565b8861205b9190613965565b6040518463ffffffff1660e01b8152600401612079939291906139a7565b600060405180830381600087803b15801561209357600080fd5b505af11580156120a7573d6000803e3d6000fd5b5050505060008385116120bd576001905061219e565b600260048760ff16815481106120d6576120d56131fa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561214b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061216f9190613507565b6121799190613229565b600a612185919061391a565b84866121919190613229565b61219b9190613965565b90505b600060405180610100016040528060048a60ff16815481106121c3576121c26131fa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160048960ff16815481106122205761221f6131fa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016122f260048b60ff16815481106122805761227f6131fa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660048b60ff16815481106122c2576122c16131fa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610d78565b62ffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001854261232491906131c6565b8152602001600260048b60ff1681548110612342576123416131fa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123db9190613507565b6123e59190613229565b600a6123f1919061391a565b886123fc9190613965565b8152602001838152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090508273ffffffffffffffffffffffffffffffffffffffff1663414bf389826040518263ffffffff1660e01b815260040161245d9190613b8f565b6020604051808303816000875af115801561247c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a09190613507565b505050505050505050565b600581815481106124bb57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612578576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256f906134a9565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b82805482825590600052602060002090600901600a900481019282156126575791602002820160005b8382111561262657835183826101000a81548162ffffff021916908362ffffff16021790555092602001926003016020816002010492830192600103026125e4565b80156126555782816101000a81549062ffffff0219169055600301602081600201049283019260010302612626565b505b50905061266491906126f2565b5090565b8280548282559060005260206000209081019282156126e1579160200282015b828111156126e05782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190612688565b5b5090506126ee91906126f2565b5090565b5b8082111561270b5760008160009055506001016126f3565b5090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b61273681612723565b811461274157600080fd5b50565b6000813590506127538161272d565b92915050565b60006020828403121561276f5761276e612719565b5b600061277d84828501612744565b91505092915050565b600062ffffff82169050919050565b61279e81612786565b82525050565b60006020820190506127b96000830184612795565b92915050565b60008115159050919050565b6127d4816127bf565b81146127df57600080fd5b50565b6000813590506127f1816127cb565b92915050565b600080600080600060a0868803121561281357612812612719565b5b600061282188828901612744565b9550506020612832888289016127e2565b945050604061284388828901612744565b935050606061285488828901612744565b925050608061286588828901612744565b9150509295509295909350565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6128c082612877565b810181811067ffffffffffffffff821117156128df576128de612888565b5b80604052505050565b60006128f261270f565b90506128fe82826128b7565b919050565b600067ffffffffffffffff82111561291e5761291d612888565b5b602082029050602081019050919050565b600080fd5b600061294761294284612903565b6128e8565b9050808382526020820190506020840283018581111561296a5761296961292f565b5b835b81811015612993578061297f8882612744565b84526020840193505060208101905061296c565b5050509392505050565b600082601f8301126129b2576129b1612872565b5b81356129c2848260208601612934565b91505092915050565b6000602082840312156129e1576129e0612719565b5b600082013567ffffffffffffffff8111156129ff576129fe61271e565b5b612a0b8482850161299d565b91505092915050565b612a1d81612723565b82525050565b6000602082019050612a386000830184612a14565b92915050565b600067ffffffffffffffff821115612a5957612a58612888565b5b602082029050602081019050919050565b612a7381612786565b8114612a7e57600080fd5b50565b600081359050612a9081612a6a565b92915050565b6000612aa9612aa484612a3e565b6128e8565b90508083825260208201905060208402830185811115612acc57612acb61292f565b5b835b81811015612af55780612ae18882612a81565b845260208401935050602081019050612ace565b5050509392505050565b600082601f830112612b1457612b13612872565b5b8135612b24848260208601612a96565b91505092915050565b600060208284031215612b4357612b42612719565b5b600082013567ffffffffffffffff811115612b6157612b6061271e565b5b612b6d84828501612aff565b91505092915050565b600067ffffffffffffffff821115612b9157612b90612888565b5b602082029050602081019050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612bcd82612ba2565b9050919050565b612bdd81612bc2565b8114612be857600080fd5b50565b600081359050612bfa81612bd4565b92915050565b6000612c13612c0e84612b76565b6128e8565b90508083825260208201905060208402830185811115612c3657612c3561292f565b5b835b81811015612c5f5780612c4b8882612beb565b845260208401935050602081019050612c38565b5050509392505050565b600082601f830112612c7e57612c7d612872565b5b8135612c8e848260208601612c00565b91505092915050565b600060208284031215612cad57612cac612719565b5b600082013567ffffffffffffffff811115612ccb57612cca61271e565b5b612cd784828501612c69565b91505092915050565b612ce981612bc2565b82525050565b6000602082019050612d046000830184612ce0565b92915050565b60008060408385031215612d2157612d20612719565b5b6000612d2f85828601612beb565b9250506020612d4085828601612beb565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612d84578082015181840152602081019050612d69565b60008484015250505050565b6000612d9b82612d4a565b612da58185612d55565b9350612db5818560208601612d66565b612dbe81612877565b840191505092915050565b60006020820190508181036000830152612de38184612d90565b905092915050565b600060ff82169050919050565b612e0181612deb565b8114612e0c57600080fd5b50565b600081359050612e1e81612df8565b92915050565b60008060008060008060c08789031215612e4157612e40612719565b5b6000612e4f89828a01612e0f565b9650506020612e6089828a01612e0f565b9550506040612e7189828a01612744565b9450506060612e8289828a01612744565b9350506080612e9389828a016127e2565b92505060a0612ea489828a01612744565b9150509295509295509295565b600060208284031215612ec757612ec6612719565b5b6000612ed584828501612beb565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612f1381612723565b82525050565b6000612f258383612f0a565b60208301905092915050565b6000602082019050919050565b6000612f4982612ede565b612f538185612ee9565b9350612f5e83612efa565b8060005b83811015612f8f578151612f768882612f19565b9750612f8183612f31565b925050600181019050612f62565b5085935050505092915050565b60006020820190508181036000830152612fb68184612f3e565b905092915050565b600080fd5b600067ffffffffffffffff821115612fde57612fdd612888565b5b612fe782612877565b9050602081019050919050565b82818337600083830152505050565b600061301661301184612fc3565b6128e8565b90508281526020810184848401111561303257613031612fbe565b5b61303d848285612ff4565b509392505050565b600082601f83011261305a57613059612872565b5b813561306a848260208601613003565b91505092915050565b60008060008060008060c087890312156130905761308f612719565b5b600061309e89828a01612e0f565b96505060206130af89828a01612e0f565b95505060406130c089828a01612744565b94505060606130d189828a01612744565b935050608087013567ffffffffffffffff8111156130f2576130f161271e565b5b6130fe89828a01613045565b92505060a061310f89828a01612744565b9150509295509295509295565b600080600080600060a0868803121561313857613137612719565b5b600061314688828901612e0f565b955050602061315788828901612e0f565b945050604061316888828901612744565b935050606061317988828901612744565b925050608061318a88828901612744565b9150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006131d182612723565b91506131dc83612723565b92508282019050808211156131f4576131f3613197565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061323482612723565b915061323f83612723565b925082820390508181111561325757613256613197565b5b92915050565b600081519050919050565b600081905092915050565b600061327e8261325d565b6132888185613268565b9350613298818560208601612d66565b80840191505092915050565b60008160f81b9050919050565b60006132bc826132a4565b9050919050565b6132d46132cf82612deb565b6132b1565b82525050565b60006132e68287613273565b91506132f282866132c3565b6001820191506133028285613273565b915061330e82846132c3565b60018201915081905095945050505050565b600082825260208201905092915050565b600061333c8261325d565b6133468185613320565b9350613356818560208601612d66565b61335f81612877565b840191505092915050565b600060208201905081810360008301526133848184613331565b905092915050565b600061339782612deb565b915060ff82036133aa576133a9613197565b5b600182019050919050565b60006133c082612723565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036133f2576133f1613197565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061343782612723565b915061344283612723565b925082613452576134516133fd565b5b828204905092915050565b7f596f7520617265206e6f7420746865206f776e65720000000000000000000000600082015250565b6000613493601583613320565b915061349e8261345d565b602082019050919050565b600060208201905081810360008301526134c281613486565b9050919050565b60006040820190506134de6000830185612ce0565b6134eb6020830184612ce0565b9392505050565b6000815190506135018161272d565b92915050565b60006020828403121561351d5761351c612719565b5b600061352b848285016134f2565b91505092915050565b6000819050919050565b6000819050919050565b600061356361355e61355984613534565b61353e565b612723565b9050919050565b61357381613548565b82525050565b600060408201905061358e6000830185612ce0565b61359b602083018461356a565b9392505050565b60006060820190506135b76000830186612ce0565b6135c46020830185612ce0565b6135d16040830184612795565b949350505050565b6000815190506135e881612bd4565b92915050565b60006020828403121561360457613603612719565b5b6000613612848285016135d9565b91505092915050565b60008160601b9050919050565b60006136338261361b565b9050919050565b600061364582613628565b9050919050565b61365d61365882612bc2565b61363a565b82525050565b60008160e81b9050919050565b600061367b82613663565b9050919050565b61369361368e82612786565b613670565b82525050565b60006136a5828861364c565b6014820191506136b58287613682565b6003820191506136c5828661364c565b6014820191506136d58285613682565b6003820191506136e5828461364c565b6014820191508190509695505050505050565b60006137048284613682565b60038201915081905092915050565b600061371e82612723565b915061372983612723565b925082613739576137386133fd565b5b828206905092915050565b6000819050919050565b61375f61375a82612723565b613744565b82525050565b6000613771828b613273565b915061377d828a6132c3565b60018201915061378d8289613273565b915061379982886132c3565b6001820191506137a98287613273565b91506137b5828661374e565b6020820191506137c58285613273565b91506137d1828461374e565b6020820191508190509998505050505050505050565b60008160011c9050919050565b6000808291508390505b600185111561383e5780860481111561381a57613819613197565b5b60018516156138295780820291505b8081029050613837856137e7565b94506137fe565b94509492505050565b6000826138575760019050613913565b816138655760009050613913565b816001811461387b5760028114613885576138b4565b6001915050613913565b60ff84111561389757613896613197565b5b8360020a9150848211156138ae576138ad613197565b5b50613913565b5060208310610133831016604e8410600b84101617156138e95782820a9050838111156138e4576138e3613197565b5b613913565b6138f684848460016137f4565b9250905081840481111561390d5761390c613197565b5b81810290505b9392505050565b600061392582612723565b915061393083612723565b925061395d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613847565b905092915050565b600061397082612723565b915061397b83612723565b925082820261398981612723565b915082820484148315176139a05761399f613197565b5b5092915050565b60006060820190506139bc6000830186612ce0565b6139c96020830185612ce0565b6139d66040830184612a14565b949350505050565b600082825260208201905092915050565b60006139fa82612d4a565b613a0481856139de565b9350613a14818560208601612d66565b613a1d81612877565b840191505092915050565b613a3181612bc2565b82525050565b600060a0830160008301518482036000860152613a5482826139ef565b9150506020830151613a696020860182613a28565b506040830151613a7c6040860182612f0a565b506060830151613a8f6060860182612f0a565b506080830151613aa26080860182612f0a565b508091505092915050565b60006020820190508181036000830152613ac78184613a37565b905092915050565b613ad881612786565b82525050565b613ae781612ba2565b82525050565b61010082016000820151613b046000850182613a28565b506020820151613b176020850182613a28565b506040820151613b2a6040850182613acf565b506060820151613b3d6060850182613a28565b506080820151613b506080850182612f0a565b5060a0820151613b6360a0850182612f0a565b5060c0820151613b7660c0850182612f0a565b5060e0820151613b8960e0850182613ade565b50505050565b600061010082019050613ba56000830184613aed565b9291505056fe7475726e206f6e204d756c7469686f7020616e64206d6179626520737761702077696c6c20636f6d706c6574652e2053776170206661696c643a207468726565206973206e6f206c69717569646974792e2053776170206661696c643a20a264697066735822122050a2b0446a1c1e674c6a44dd94cc43480eabf5518c4820a058fb847989813c2964736f6c63430008110033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101375760003560e01c8063963671be116100b8578063d1e9b6231161007c578063d1e9b62314610326578063e815d4ff14610342578063f1ab80a71461035e578063f220844a1461038e578063f420ab3e146103aa578063f5a1f5b4146103da57610137565b8063963671be14610282578063aee6c53a146102a0578063ba89a467146102d0578063c0ced387146102ec578063c1cfb99a1461030857610137565b80636b90694c116100ff5780636b90694c146101f05780636e9d7a981461020e578063703667671461022a5780637b5939b9146102345780638da5cb5b1461026457610137565b806309289a8e1461013c5780630b719a651461016c57806322d7d735146101885780632efef1bb146101b85780633e6109ee146101d4575b600080fd5b61015660048036038101906101519190612759565b6103f6565b60405161016391906127a4565b60405180910390f35b610186600480360381019061018191906127f7565b61042f565b005b6101a2600480360381019061019d91906129cb565b610846565b6040516101af9190612a23565b60405180910390f35b6101d260048036038101906101cd9190612b2d565b6108aa565b005b6101ee60048036038101906101e99190612c97565b610952565b005b6101f86109fa565b6040516102059190612cef565b60405180910390f35b61022860048036038101906102239190612c97565b610a20565b005b610232610ac8565b005b61024e60048036038101906102499190612d0a565b610d78565b60405161025b91906127a4565b60405180910390f35b61026c610f04565b6040516102799190612cef565b60405180910390f35b61028a610f28565b6040516102979190612cef565b60405180910390f35b6102ba60048036038101906102b59190612d0a565b610f4e565b6040516102c79190612dc9565b60405180910390f35b6102ea60048036038101906102e59190612e24565b6111c7565b005b61030660048036038101906103019190612eb1565b6115ce565b005b6103106116a0565b60405161031d9190612f9c565b60405180910390f35b610340600480360381019061033b9190612eb1565b6119af565b005b61035c60048036038101906103579190613073565b611a81565b005b61037860048036038101906103739190612759565b611ec3565b6040516103859190612cef565b60405180910390f35b6103a860048036038101906103a3919061311c565b611f02565b005b6103c460048036038101906103bf9190612759565b6124ab565b6040516103d19190612cef565b60405180910390f35b6103f460048036038101906103ef9190612eb1565b6124ea565b005b6003818154811061040657600080fd5b90600052602060002090600a9182820401919006600302915054906101000a900462ffffff1681565b60006104396116a0565b9050600061044682610846565b905060005b82518160ff16101561083c57858261046391906131c6565b838260ff1681518110610479576104786131fa565b5b602002602001015111156108295760005b83518160ff161015610827578287858360ff16815181106104ae576104ad6131fa565b5b60200260200101516104c091906131c6565b1080156104eb57506000848260ff16815181106104e0576104df6131fa565b5b602002602001015114155b80156104fd57508060ff168260ff1614155b1561081457838160ff1681518110610518576105176131fa565b5b60200260200101518361052b9190613229565b83858460ff1681518110610542576105416131fa565b5b60200260200101516105549190613229565b1061061f5785848260ff16815181106105705761056f6131fa565b5b6020026020010151846105839190613229565b116105e7576105be8282868460ff16815181106105a3576105a26131fa565b5b6020026020010151866105b69190613229565b8c8c8a6111c7565b6000848260ff16815181106105d6576105d56131fa565b5b60200260200101818152505061061a565b6105f58282888c8c8a6111c7565b6000848360ff168151811061060d5761060c6131fa565b5b6020026020010181815250505b61074d565b8583858460ff1681518110610637576106366131fa565b5b60200260200101516106499190613229565b116106e35782848360ff1681518110610665576106646131fa565b5b60200260200101516106779190613229565b848260ff168151811061068d5761068c6131fa565b5b602002602001018181516106a191906131c6565b915081815250506106de828285878660ff16815181106106c4576106c36131fa565b5b60200260200101516106d69190613229565b8c8c8a6111c7565b610724565b85848260ff16815181106106fa576106f96131fa565b5b6020026020010181815161070e91906131c6565b915081815250506107238282888c8c8a6111c7565b5b6000848360ff168151811061073c5761073b6131fa565b5b602002602001018181525050610827565b7fcfbc85b0d7cb13aefb02bb4fa3c3c3beb3b507c93b927eb5955193860882ef5e6040518060400160405280601281526020017f7472616e73616374696f6e2073656e643a200000000000000000000000000000815250836040518060400160405280600381526020017f202d200000000000000000000000000000000000000000000000000000000000815250846040516020016107ef94939291906132da565b60405160208183030381529060405260405161080b919061336a565b60405180910390a15b808061081f9061338c565b91505061048a565b505b80806108349061338c565b91505061044b565b5050505050505050565b6000806000905060005b83518110156108945783818151811061086c5761086b6131fa565b5b60200260200101518261087f91906131c6565b9150808061088c906133b5565b915050610850565b508251816108a2919061342c565b915050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092f906134a9565b60405180910390fd5b806003908051906020019061094e9291906125bb565b5050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d7906134a9565b60405180910390fd5b80600490805190602001906109f6929190612668565b5050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610aae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa5906134a9565b60405180910390fd5b8060059080519060200190610ac4929190612668565b5050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4d906134a9565b60405180910390fd5b60005b6004805490508160ff161015610d75577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60048260ff1681548110610ba157610ba06131fa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401610c289291906134c9565b6020604051808303816000875af1158015610c47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6b9190613507565b1015610d625760048160ff1681548110610c8857610c876131fa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401610d2f929190613579565b600060405180830381600087803b158015610d4957600080fd5b505af1158015610d5d573d6000803e3d6000fd5b505050505b8080610d6d9061338c565b915050610b59565b50565b600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060005b6003805490508160ff161015610ef757600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16631698ee82878760038660ff1681548110610e0057610dff6131fa565b5b90600052602060002090600a91828204019190066003029054906101000a900462ffffff166040518463ffffffff1660e01b8152600401610e43939291906135a2565b602060405180830381865afa158015610e60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8491906135ee565b73ffffffffffffffffffffffffffffffffffffffff1614610ee45760038160ff1681548110610eb657610eb56131fa565b5b90600052602060002090600a91828204019190066003029054906101000a900462ffffff1692505050610efe565b8080610eef9061338c565b915050610da3565b5060009150505b92915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060005b6005805490508160ff16101561119a578373ffffffffffffffffffffffffffffffffffffffff1660058260ff1681548110610f9157610f906131fa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415801561104d57508273ffffffffffffffffffffffffffffffffffffffff1660058260ff1681548110611009576110086131fa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b1561118757600061109f8560058460ff168154811061106f5761106e6131fa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610d78565b905060006110ee8560058560ff16815481106110be576110bd6131fa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610d78565b905060008262ffffff161415801561110c575060008162ffffff1614155b1561118457858260058560ff168154811061112a576111296131fa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838860405160200161116b959493929190613699565b60405160208183030381529060405293505050506111c1565b50505b80806111929061338c565b915050610f53565b506000806040516020016111ae91906136f8565b6040516020818303038152906040529150505b92915050565b600061125560048860ff16815481106111e3576111e26131fa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660048860ff1681548110611225576112246131fa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610d78565b62ffffff16146112715761126c8686868685611f02565b6115c6565b600115158215150361149157600061130b60048860ff1681548110611299576112986131fa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660048860ff16815481106112db576112da6131fa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610f4e565b905060008060405160200161132091906136f8565b6040516020818303038152906040528051906020012082805190602001201461135657611351888888888688611a81565b61148a565b7fcfbc85b0d7cb13aefb02bb4fa3c3c3beb3b507c93b927eb5955193860882ef5e604051806060016040528060238152602001613be760239139896040518060400160405280600381526020017f202d2000000000000000000000000000000000000000000000000000000000008152508a6040518060400160405280600481526020017f203d3e200000000000000000000000000000000000000000000000000000000081525060648c61140b919061342c565b6040518060400160405280600181526020017f2e0000000000000000000000000000000000000000000000000000000000000081525060648e61144e9190613713565b604051602001611465989796959493929190613765565b604051602081830303815290604052604051611481919061336a565b60405180910390a15b50506115c5565b7fcfbc85b0d7cb13aefb02bb4fa3c3c3beb3b507c93b927eb5955193860882ef5e6040518060600160405280603b8152602001613bac603b9139876040518060400160405280600381526020017f202d200000000000000000000000000000000000000000000000000000000000815250886040518060400160405280600481526020017f203d3e200000000000000000000000000000000000000000000000000000000081525060648a611546919061342c565b6040518060400160405280600181526020017f2e0000000000000000000000000000000000000000000000000000000000000081525060648c6115899190613713565b6040516020016115a0989796959493929190613765565b6040516020818303038152906040526040516115bc919061336a565b60405180910390a15b5b505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461165c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611653906134a9565b60405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060600060048054905090508067ffffffffffffffff8111156116c6576116c5612888565b5b6040519080825280602002602001820160405280156116f45781602001602082028036833780820191505090505b50915060005b6004805490508110156119aa5760006004828154811061171d5761171c6131fa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016117809190612cef565b6020604051808303816000875af115801561179f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c39190613507565b14611975576002600482815481106117de576117dd6131fa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611853573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118779190613507565b6118819190613229565b600a61188d919061391a565b600482815481106118a1576118a06131fa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016119049190612cef565b6020604051808303816000875af1158015611923573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119479190613507565b611951919061342c565b838281518110611964576119636131fa565b5b602002602001018181525050611997565b600083828151811061198a576119896131fa565b5b6020026020010181815250505b80806119a2906133b5565b9150506116fa565b505090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a34906134a9565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060048760ff1681548110611abf57611abe6131fa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330600260048c60ff1681548110611b2057611b1f6131fa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb99190613507565b611bc39190613229565b600a611bcf919061391a565b89611bda9190613965565b6040518463ffffffff1660e01b8152600401611bf8939291906139a7565b600060405180830381600087803b158015611c1257600080fd5b505af1158015611c26573d6000803e3d6000fd5b505050506000848611611c3c5760019050611d1d565b600260048860ff1681548110611c5557611c546131fa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cee9190613507565b611cf89190613229565b600a611d04919061391a565b8587611d109190613229565b611d1a9190613965565b90505b60006040518060a001604052808681526020013373ffffffffffffffffffffffffffffffffffffffff1681526020018542611d5891906131c6565b8152602001600260048c60ff1681548110611d7657611d756131fa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611deb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e0f9190613507565b611e199190613229565b600a611e25919061391a565b89611e309190613965565b81526020018381525090508273ffffffffffffffffffffffffffffffffffffffff1663c04b8d59826040518263ffffffff1660e01b8152600401611e749190613aad565b6020604051808303816000875af1158015611e93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb79190613507565b50505050505050505050565b60048181548110611ed357600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060048660ff1681548110611f4057611f3f6131fa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330600260048b60ff1681548110611fa157611fa06131fa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612016573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061203a9190613507565b6120449190613229565b600a612050919061391a565b8861205b9190613965565b6040518463ffffffff1660e01b8152600401612079939291906139a7565b600060405180830381600087803b15801561209357600080fd5b505af11580156120a7573d6000803e3d6000fd5b5050505060008385116120bd576001905061219e565b600260048760ff16815481106120d6576120d56131fa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561214b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061216f9190613507565b6121799190613229565b600a612185919061391a565b84866121919190613229565b61219b9190613965565b90505b600060405180610100016040528060048a60ff16815481106121c3576121c26131fa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160048960ff16815481106122205761221f6131fa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016122f260048b60ff16815481106122805761227f6131fa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660048b60ff16815481106122c2576122c16131fa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610d78565b62ffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001854261232491906131c6565b8152602001600260048b60ff1681548110612342576123416131fa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123db9190613507565b6123e59190613229565b600a6123f1919061391a565b886123fc9190613965565b8152602001838152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090508273ffffffffffffffffffffffffffffffffffffffff1663414bf389826040518263ffffffff1660e01b815260040161245d9190613b8f565b6020604051808303816000875af115801561247c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a09190613507565b505050505050505050565b600581815481106124bb57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612578576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256f906134a9565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b82805482825590600052602060002090600901600a900481019282156126575791602002820160005b8382111561262657835183826101000a81548162ffffff021916908362ffffff16021790555092602001926003016020816002010492830192600103026125e4565b80156126555782816101000a81549062ffffff0219169055600301602081600201049283019260010302612626565b505b50905061266491906126f2565b5090565b8280548282559060005260206000209081019282156126e1579160200282015b828111156126e05782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190612688565b5b5090506126ee91906126f2565b5090565b5b8082111561270b5760008160009055506001016126f3565b5090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b61273681612723565b811461274157600080fd5b50565b6000813590506127538161272d565b92915050565b60006020828403121561276f5761276e612719565b5b600061277d84828501612744565b91505092915050565b600062ffffff82169050919050565b61279e81612786565b82525050565b60006020820190506127b96000830184612795565b92915050565b60008115159050919050565b6127d4816127bf565b81146127df57600080fd5b50565b6000813590506127f1816127cb565b92915050565b600080600080600060a0868803121561281357612812612719565b5b600061282188828901612744565b9550506020612832888289016127e2565b945050604061284388828901612744565b935050606061285488828901612744565b925050608061286588828901612744565b9150509295509295909350565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6128c082612877565b810181811067ffffffffffffffff821117156128df576128de612888565b5b80604052505050565b60006128f261270f565b90506128fe82826128b7565b919050565b600067ffffffffffffffff82111561291e5761291d612888565b5b602082029050602081019050919050565b600080fd5b600061294761294284612903565b6128e8565b9050808382526020820190506020840283018581111561296a5761296961292f565b5b835b81811015612993578061297f8882612744565b84526020840193505060208101905061296c565b5050509392505050565b600082601f8301126129b2576129b1612872565b5b81356129c2848260208601612934565b91505092915050565b6000602082840312156129e1576129e0612719565b5b600082013567ffffffffffffffff8111156129ff576129fe61271e565b5b612a0b8482850161299d565b91505092915050565b612a1d81612723565b82525050565b6000602082019050612a386000830184612a14565b92915050565b600067ffffffffffffffff821115612a5957612a58612888565b5b602082029050602081019050919050565b612a7381612786565b8114612a7e57600080fd5b50565b600081359050612a9081612a6a565b92915050565b6000612aa9612aa484612a3e565b6128e8565b90508083825260208201905060208402830185811115612acc57612acb61292f565b5b835b81811015612af55780612ae18882612a81565b845260208401935050602081019050612ace565b5050509392505050565b600082601f830112612b1457612b13612872565b5b8135612b24848260208601612a96565b91505092915050565b600060208284031215612b4357612b42612719565b5b600082013567ffffffffffffffff811115612b6157612b6061271e565b5b612b6d84828501612aff565b91505092915050565b600067ffffffffffffffff821115612b9157612b90612888565b5b602082029050602081019050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612bcd82612ba2565b9050919050565b612bdd81612bc2565b8114612be857600080fd5b50565b600081359050612bfa81612bd4565b92915050565b6000612c13612c0e84612b76565b6128e8565b90508083825260208201905060208402830185811115612c3657612c3561292f565b5b835b81811015612c5f5780612c4b8882612beb565b845260208401935050602081019050612c38565b5050509392505050565b600082601f830112612c7e57612c7d612872565b5b8135612c8e848260208601612c00565b91505092915050565b600060208284031215612cad57612cac612719565b5b600082013567ffffffffffffffff811115612ccb57612cca61271e565b5b612cd784828501612c69565b91505092915050565b612ce981612bc2565b82525050565b6000602082019050612d046000830184612ce0565b92915050565b60008060408385031215612d2157612d20612719565b5b6000612d2f85828601612beb565b9250506020612d4085828601612beb565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612d84578082015181840152602081019050612d69565b60008484015250505050565b6000612d9b82612d4a565b612da58185612d55565b9350612db5818560208601612d66565b612dbe81612877565b840191505092915050565b60006020820190508181036000830152612de38184612d90565b905092915050565b600060ff82169050919050565b612e0181612deb565b8114612e0c57600080fd5b50565b600081359050612e1e81612df8565b92915050565b60008060008060008060c08789031215612e4157612e40612719565b5b6000612e4f89828a01612e0f565b9650506020612e6089828a01612e0f565b9550506040612e7189828a01612744565b9450506060612e8289828a01612744565b9350506080612e9389828a016127e2565b92505060a0612ea489828a01612744565b9150509295509295509295565b600060208284031215612ec757612ec6612719565b5b6000612ed584828501612beb565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612f1381612723565b82525050565b6000612f258383612f0a565b60208301905092915050565b6000602082019050919050565b6000612f4982612ede565b612f538185612ee9565b9350612f5e83612efa565b8060005b83811015612f8f578151612f768882612f19565b9750612f8183612f31565b925050600181019050612f62565b5085935050505092915050565b60006020820190508181036000830152612fb68184612f3e565b905092915050565b600080fd5b600067ffffffffffffffff821115612fde57612fdd612888565b5b612fe782612877565b9050602081019050919050565b82818337600083830152505050565b600061301661301184612fc3565b6128e8565b90508281526020810184848401111561303257613031612fbe565b5b61303d848285612ff4565b509392505050565b600082601f83011261305a57613059612872565b5b813561306a848260208601613003565b91505092915050565b60008060008060008060c087890312156130905761308f612719565b5b600061309e89828a01612e0f565b96505060206130af89828a01612e0f565b95505060406130c089828a01612744565b94505060606130d189828a01612744565b935050608087013567ffffffffffffffff8111156130f2576130f161271e565b5b6130fe89828a01613045565b92505060a061310f89828a01612744565b9150509295509295509295565b600080600080600060a0868803121561313857613137612719565b5b600061314688828901612e0f565b955050602061315788828901612e0f565b945050604061316888828901612744565b935050606061317988828901612744565b925050608061318a88828901612744565b9150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006131d182612723565b91506131dc83612723565b92508282019050808211156131f4576131f3613197565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061323482612723565b915061323f83612723565b925082820390508181111561325757613256613197565b5b92915050565b600081519050919050565b600081905092915050565b600061327e8261325d565b6132888185613268565b9350613298818560208601612d66565b80840191505092915050565b60008160f81b9050919050565b60006132bc826132a4565b9050919050565b6132d46132cf82612deb565b6132b1565b82525050565b60006132e68287613273565b91506132f282866132c3565b6001820191506133028285613273565b915061330e82846132c3565b60018201915081905095945050505050565b600082825260208201905092915050565b600061333c8261325d565b6133468185613320565b9350613356818560208601612d66565b61335f81612877565b840191505092915050565b600060208201905081810360008301526133848184613331565b905092915050565b600061339782612deb565b915060ff82036133aa576133a9613197565b5b600182019050919050565b60006133c082612723565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036133f2576133f1613197565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061343782612723565b915061344283612723565b925082613452576134516133fd565b5b828204905092915050565b7f596f7520617265206e6f7420746865206f776e65720000000000000000000000600082015250565b6000613493601583613320565b915061349e8261345d565b602082019050919050565b600060208201905081810360008301526134c281613486565b9050919050565b60006040820190506134de6000830185612ce0565b6134eb6020830184612ce0565b9392505050565b6000815190506135018161272d565b92915050565b60006020828403121561351d5761351c612719565b5b600061352b848285016134f2565b91505092915050565b6000819050919050565b6000819050919050565b600061356361355e61355984613534565b61353e565b612723565b9050919050565b61357381613548565b82525050565b600060408201905061358e6000830185612ce0565b61359b602083018461356a565b9392505050565b60006060820190506135b76000830186612ce0565b6135c46020830185612ce0565b6135d16040830184612795565b949350505050565b6000815190506135e881612bd4565b92915050565b60006020828403121561360457613603612719565b5b6000613612848285016135d9565b91505092915050565b60008160601b9050919050565b60006136338261361b565b9050919050565b600061364582613628565b9050919050565b61365d61365882612bc2565b61363a565b82525050565b60008160e81b9050919050565b600061367b82613663565b9050919050565b61369361368e82612786565b613670565b82525050565b60006136a5828861364c565b6014820191506136b58287613682565b6003820191506136c5828661364c565b6014820191506136d58285613682565b6003820191506136e5828461364c565b6014820191508190509695505050505050565b60006137048284613682565b60038201915081905092915050565b600061371e82612723565b915061372983612723565b925082613739576137386133fd565b5b828206905092915050565b6000819050919050565b61375f61375a82612723565b613744565b82525050565b6000613771828b613273565b915061377d828a6132c3565b60018201915061378d8289613273565b915061379982886132c3565b6001820191506137a98287613273565b91506137b5828661374e565b6020820191506137c58285613273565b91506137d1828461374e565b6020820191508190509998505050505050505050565b60008160011c9050919050565b6000808291508390505b600185111561383e5780860481111561381a57613819613197565b5b60018516156138295780820291505b8081029050613837856137e7565b94506137fe565b94509492505050565b6000826138575760019050613913565b816138655760009050613913565b816001811461387b5760028114613885576138b4565b6001915050613913565b60ff84111561389757613896613197565b5b8360020a9150848211156138ae576138ad613197565b5b50613913565b5060208310610133831016604e8410600b84101617156138e95782820a9050838111156138e4576138e3613197565b5b613913565b6138f684848460016137f4565b9250905081840481111561390d5761390c613197565b5b81810290505b9392505050565b600061392582612723565b915061393083612723565b925061395d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613847565b905092915050565b600061397082612723565b915061397b83612723565b925082820261398981612723565b915082820484148315176139a05761399f613197565b5b5092915050565b60006060820190506139bc6000830186612ce0565b6139c96020830185612ce0565b6139d66040830184612a14565b949350505050565b600082825260208201905092915050565b60006139fa82612d4a565b613a0481856139de565b9350613a14818560208601612d66565b613a1d81612877565b840191505092915050565b613a3181612bc2565b82525050565b600060a0830160008301518482036000860152613a5482826139ef565b9150506020830151613a696020860182613a28565b506040830151613a7c6040860182612f0a565b506060830151613a8f6060860182612f0a565b506080830151613aa26080860182612f0a565b508091505092915050565b60006020820190508181036000830152613ac78184613a37565b905092915050565b613ad881612786565b82525050565b613ae781612ba2565b82525050565b61010082016000820151613b046000850182613a28565b506020820151613b176020850182613a28565b506040820151613b2a6040850182613acf565b506060820151613b3d6060850182613a28565b506080820151613b506080850182612f0a565b5060a0820151613b6360a0850182612f0a565b5060c0820151613b7660c0850182612f0a565b5060e0820151613b8960e0850182613ade565b50505050565b600061010082019050613ba56000830184613aed565b9291505056fe7475726e206f6e204d756c7469686f7020616e64206d6179626520737761702077696c6c20636f6d706c6574652e2053776170206661696c643a207468726565206973206e6f206c69717569646974792e2053776170206661696c643a20a264697066735822122050a2b0446a1c1e674c6a44dd94cc43480eabf5518c4820a058fb847989813c2964736f6c63430008110033

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  ]

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.