ETH Price: $1,903.87 (+0.17%)
Gas: 0.41 Gwei
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Create Pair219867572025-03-06 8:48:4711 days ago1741250927IN
0x11593413...3c09d037c
0 ETH0.001624750.66134598
Create Pair219867522025-03-06 8:47:4711 days ago1741250867IN
0x11593413...3c09d037c
0 ETH0.001381640.69657943
Create Pair219867482025-03-06 8:46:5911 days ago1741250819IN
0x11593413...3c09d037c
0 ETH0.000626630.62720351
Create Pair196443532024-04-13 4:44:23339 days ago1712983463IN
0x11593413...3c09d037c
0 ETH0.024250499.87101125
Create Pair167713592023-03-06 19:22:47742 days ago1678130567IN
0x11593413...3c09d037c
0 ETH0.1057841443.07078976
Transfer163123372023-01-01 13:52:35806 days ago1672581155IN
0x11593413...3c09d037c
0 ETH0.0002933113.96750945
Create Pair154798272022-09-05 20:09:25924 days ago1662408565IN
0x11593413...3c09d037c
0 ETH0.0333324613.58371553
Set Fee To Sette...127739002021-07-06 12:27:291350 days ago1625574449IN
0x11593413...3c09d037c
0 ETH0.005758200
Create Pair127717762021-07-06 4:30:321351 days ago1625545832IN
0x11593413...3c09d037c
0 ETH0.1228027550
Create Pair127717752021-07-06 4:30:201351 days ago1625545820IN
0x11593413...3c09d037c
0 ETH0.1228027550
Create Pair127717742021-07-06 4:30:061351 days ago1625545806IN
0x11593413...3c09d037c
0 ETH0.1226927550
Create Pair127717732021-07-06 4:29:581351 days ago1625545798IN
0x11593413...3c09d037c
0 ETH0.1226927550
Create Pair127717722021-07-06 4:29:471351 days ago1625545787IN
0x11593413...3c09d037c
0 ETH0.1228027550
Create Pair127717702021-07-06 4:29:121351 days ago1625545752IN
0x11593413...3c09d037c
0 ETH0.1228027550
Create Pair127717642021-07-06 4:27:461351 days ago1625545666IN
0x11593413...3c09d037c
0 ETH0.1228027550
Create Pair127717632021-07-06 4:27:141351 days ago1625545634IN
0x11593413...3c09d037c
0 ETH0.1228027550
Create Pair127717582021-07-06 4:26:211351 days ago1625545581IN
0x11593413...3c09d037c
0 ETH0.1228027550
Create Pair127717572021-07-06 4:25:471351 days ago1625545547IN
0x11593413...3c09d037c
0 ETH0.1228027550
Create Pair127717562021-07-06 4:25:331351 days ago1625545533IN
0x11593413...3c09d037c
0 ETH0.1226927550
Create Pair127717472021-07-06 4:24:181351 days ago1625545458IN
0x11593413...3c09d037c
0 ETH0.1226927550
Create Pair127717462021-07-06 4:23:431351 days ago1625545423IN
0x11593413...3c09d037c
0 ETH0.1228027550
Create Pair127717442021-07-06 4:22:541351 days ago1625545374IN
0x11593413...3c09d037c
0 ETH0.1228027550
Create Pair127717412021-07-06 4:22:341351 days ago1625545354IN
0x11593413...3c09d037c
0 ETH0.1226922550
Create Pair127717402021-07-06 4:22:271351 days ago1625545347IN
0x11593413...3c09d037c
0 ETH0.1228027550
Create Pair127717382021-07-06 4:22:091351 days ago1625545329IN
0x11593413...3c09d037c
0 ETH0.1228027550
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
0x60806040219867572025-03-06 8:48:4711 days ago1741250927
0x11593413...3c09d037c
 Contract Creation0 ETH
Transfer*219867522025-03-06 8:47:4711 days ago1741250867
0x11593413...3c09d037c
 Contract Creation0 ETH
Transfer*219867482025-03-06 8:46:5911 days ago1741250819
0x11593413...3c09d037c
 Contract Creation0 ETH
0x60806040219471432025-02-28 20:09:4717 days ago1740773387
0x11593413...3c09d037c
 Contract Creation0 ETH
Transfer*218653122025-02-17 9:49:4728 days ago1739785787
0x11593413...3c09d037c
 Contract Creation0 ETH
0x60806040216744742025-01-21 17:51:4755 days ago1737481907
0x11593413...3c09d037c
 Contract Creation0 ETH
0x60806040216288112025-01-15 8:52:3561 days ago1736931155
0x11593413...3c09d037c
 Contract Creation0 ETH
0x60806040214139602024-12-16 8:43:4791 days ago1734338627
0x11593413...3c09d037c
 Contract Creation0 ETH
0x60806040214003162024-12-14 10:59:5993 days ago1734173999
0x11593413...3c09d037c
 Contract Creation0 ETH
0x60806040210154082024-10-21 17:19:47147 days ago1729531187
0x11593413...3c09d037c
 Contract Creation0 ETH
0x60806040209536342024-10-13 2:16:47156 days ago1728785807
0x11593413...3c09d037c
 Contract Creation0 ETH
0x60806040207238492024-09-11 0:39:59188 days ago1726015199
0x11593413...3c09d037c
 Contract Creation0 ETH
0x60806040207238332024-09-11 0:36:47188 days ago1726015007
0x11593413...3c09d037c
 Contract Creation0 ETH
0x60806040206731742024-09-03 22:54:59195 days ago1725404099
0x11593413...3c09d037c
 Contract Creation0 ETH
0x60806040206720712024-09-03 19:13:47195 days ago1725390827
0x11593413...3c09d037c
 Contract Creation0 ETH
0x60806040206720142024-09-03 19:02:23195 days ago1725390143
0x11593413...3c09d037c
 Contract Creation0 ETH
0x60806040205897362024-08-23 7:13:23207 days ago1724397203
0x11593413...3c09d037c
 Contract Creation0 ETH
0x60806040205589252024-08-18 23:53:35211 days ago1724025215
0x11593413...3c09d037c
 Contract Creation0 ETH
0x60806040205452132024-08-17 1:58:23213 days ago1723859903
0x11593413...3c09d037c
 Contract Creation0 ETH
0x60806040205241562024-08-14 3:22:47216 days ago1723605767
0x11593413...3c09d037c
 Contract Creation0 ETH
0x60806040205001812024-08-10 19:03:35219 days ago1723316615
0x11593413...3c09d037c
 Contract Creation0 ETH
0x60806040204999892024-08-10 18:25:11219 days ago1723314311
0x11593413...3c09d037c
 Contract Creation0 ETH
0x60806040204995582024-08-10 16:58:59219 days ago1723309139
0x11593413...3c09d037c
 Contract Creation0 ETH
0x60806040204963612024-08-10 6:16:35220 days ago1723270595
0x11593413...3c09d037c
 Contract Creation0 ETH
0x60806040203858632024-07-25 20:10:47235 days ago1721938247
0x11593413...3c09d037c
 Contract Creation0 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
UniswapV2Factory

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 5000 runs

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

pragma solidity =0.6.12;

import './interfaces/IUniswapV2Factory.sol';
import './UniswapV2Pair.sol';

contract UniswapV2Factory is IUniswapV2Factory {

    address public override feeTo;
    address public override feeToSetter;
    address public override migrator;

    uint public override totalFeeTopCoin;
    uint public override alphaTopCoin;
    uint public override betaTopCoin;
    uint public override totalFeeRegular;
    uint public override alphaRegular;
    uint public override betaRegular;

    // topCoins should hold true for WETH, WBTC, DAI, USDT, USDC
    mapping(address => bool) public override topCoins;
    mapping(address => mapping(address => address)) public override getPair;
    address[] public override allPairs;

    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
    event PairFeeUpdated(address indexed user, address indexed pair, uint _totalFee, uint _alpha, uint _beta);
    event FeeUpdated(string indexed which, address indexed user, uint _totalFee, uint _alpha, uint _beta);
    event SetAddress(string indexed which, address indexed user, address newAddr);
    event TopCoinUpdated(address indexed user, address indexed coinAddress, bool status);


    modifier onlyFeeToSetter() {
        require(msg.sender == feeToSetter, 'UniswapV2: FORBIDDEN');
        _;
    }

    constructor(address _feeToSetter, address[] memory coinAddress) public {
        feeToSetter = _feeToSetter;
        uint256 len = coinAddress.length;
        for (uint256 i = 0; i < len; i++) {
            topCoins[coinAddress[i]] = true;
        }
        totalFeeTopCoin = 3;
        alphaTopCoin = 1;
        betaTopCoin = 3;

        totalFeeRegular = 3;
        alphaRegular = 1;
        betaRegular = 6;
    }

    // totalFee: total fee in BIPS levied on a swap depends
    // alpha: numerator for the fraction of protocol fee, that is reserved for TreasureFinder
    // beta: denominator for the fraction of protocol fee, that is reserved for TreasureFinder
    //
    // Returns totalFee, alpha, beta
    function getFeeInfo(address token0, address token1) internal view returns (uint, uint, uint) {
        if (topCoins[token0]== true || topCoins[token1]== true) {
            return (totalFeeTopCoin, alphaTopCoin, betaTopCoin);
        }
        return (totalFeeRegular, alphaRegular, betaRegular);
    }

    function allPairsLength() external override view returns (uint) {
        return allPairs.length;
    }

    function pairCodeHash() external pure returns (bytes32) {
        return keccak256(type(UniswapV2Pair).creationCode);
    }

    function createPair(address tokenA, address tokenB) external override returns (address pair) {
        require(tokenA != tokenB, 'UniswapV2: IDENTICAL_ADDRESSES');
        (address token0, address token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'UniswapV2: ZERO_ADDRESS');
        require(getPair[token0][token1] == address(0), 'UniswapV2: PAIR_EXISTS'); // single check is sufficient
        bytes memory bytecode = type(UniswapV2Pair).creationCode;
        bytes32 salt = keccak256(abi.encodePacked(token0, token1));
        assembly {
            pair := create2(0, add(bytecode, 32), mload(bytecode), salt)
        }
        (uint totalFeePerThousand, uint alpha, uint beta) = getFeeInfo(token0, token1);
        UniswapV2Pair(pair).initialize(token0, token1, totalFeePerThousand, alpha, beta);
        getPair[token0][token1] = pair;
        getPair[token1][token0] = pair; // populate mapping in the reverse direction
        allPairs.push(pair);
        emit PairCreated(token0, token1, pair, allPairs.length);
    }

    function setFeeTo(address _feeTo) external override onlyFeeToSetter {
        feeTo = _feeTo;
        emit SetAddress("FeeTo", msg.sender, _feeTo);
    }

    function setMigrator(address _migrator) external override onlyFeeToSetter {
        migrator = _migrator;
        emit SetAddress("Migrator", msg.sender, _migrator);
    }

    function setFeeToSetter(address _feeToSetter) external override onlyFeeToSetter {
        feeToSetter = _feeToSetter;
        emit SetAddress("FeeToSetter", msg.sender, _feeToSetter);
    }

    function setTopCoin(address _coinAddress, bool _status) external onlyFeeToSetter {
        topCoins[_coinAddress] = _status;
        emit TopCoinUpdated(msg.sender, _coinAddress, _status);
    }

    function setTopCoinFee(uint _totalFee, uint _alpha, uint _beta) external onlyFeeToSetter {
        require(_alpha < _beta, 'UniswapV2: IMPROPER FRACTION');
        totalFeeTopCoin = _totalFee;
        alphaTopCoin = _alpha;
        betaTopCoin = _beta;
        emit FeeUpdated("TopCoin", msg.sender, _totalFee, _alpha, _beta);
    }

    function setRegularCoinFee(uint _totalFee, uint _alpha, uint _beta) external onlyFeeToSetter {
        require(_alpha < _beta, 'UniswapV2: IMPROPER FRACTION');
        totalFeeRegular = _totalFee;
        alphaRegular = _alpha;
        betaRegular = _beta;
        emit FeeUpdated("RegularCoin", msg.sender, _totalFee, _alpha, _beta);
    }

    function updatePairFee(address token0, address token1, uint _totalFee, uint _alpha, uint _beta) external onlyFeeToSetter {
        require(_alpha < _beta, 'UniswapV2: IMPROPER FRACTION');
        address pair = getPair[token0][token1];
        require(pair != address(0), 'UniswapV2: PAIR_DOES_NOT_EXIST');
        UniswapV2Pair(pair).updateFee(_totalFee, _alpha, _beta);
        emit PairFeeUpdated(msg.sender, pair, _totalFee, _alpha, _beta);
    }

}

File 2 of 9 : IUniswapV2Factory.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.5.0;

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function migrator() external view returns (address);

    function totalFeeTopCoin() external view returns (uint);
    function alphaTopCoin() external view returns (uint);
    function betaTopCoin() external view returns (uint);
    function totalFeeRegular() external view returns (uint);
    function alphaRegular() external view returns (uint);
    function betaRegular() external view returns (uint);

    function topCoins(address token) external view returns (bool isTopCoin);
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
    function setMigrator(address) external;
}

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

pragma solidity =0.6.12;

import './UniswapV2ERC20.sol';
import './libraries/Math.sol';
import './libraries/UQ112x112.sol';
import './interfaces/IERC20.sol';
import './interfaces/IUniswapV2Factory.sol';
import './interfaces/IUniswapV2Callee.sol';


interface IMigrator {
    // Return the desired amount of liquidity token that the migrator wants.
    function desiredLiquidity() external view returns (uint256);
}

contract UniswapV2Pair is UniswapV2ERC20 {
    using SafeMathUniswap  for uint;
    using UQ112x112 for uint224;

    uint public constant MINIMUM_LIQUIDITY = 10**3;
    bytes4 private constant SELECTOR = bytes4(keccak256(bytes('transfer(address,uint256)')));

    address public factory;
    address public token0;
    address public token1;

    uint112 private reserve0;           // uses single storage slot, accessible via getReserves
    uint112 private reserve1;           // uses single storage slot, accessible via getReserves
    uint32  private blockTimestampLast; // uses single storage slot, accessible via getReserves

    uint public price0CumulativeLast;
    uint public price1CumulativeLast;
    uint public kLast; // reserve0 * reserve1, as of immediately after the most recent liquidity event

    uint public totalFee; // total fee (parts per thousand) charged for a swap
    uint public alpha; // numerator for the protocol fee factor
    uint public beta; // denominator for the protocol fee factor

    uint private unlocked = 1;
    modifier lock() {
        require(unlocked == 1, 'UniswapV2: LOCKED');
        unlocked = 0;
        _;
        unlocked = 1;
    }

    function getReserves() public view returns (uint112 _reserve0, uint112 _reserve1, uint32 _blockTimestampLast) {
        _reserve0 = reserve0;
        _reserve1 = reserve1;
        _blockTimestampLast = blockTimestampLast;
    }

    function _safeTransfer(address token, address to, uint value) private {
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(SELECTOR, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'UniswapV2: TRANSFER_FAILED');
    }

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);
    event FeeUpdated(uint totalFee, uint alpha, uint beta);

    constructor() public {
        factory = msg.sender;
    }

    // called once by the factory at time of deployment
    function initialize(address _token0, address _token1, uint _totalFee, uint _alpha, uint _beta) external {
        require(msg.sender == factory, 'UniswapV2: FORBIDDEN'); // sufficient check
        require(_alpha > 0,"_alpha must be greater than 0");
        require(_beta > _alpha,"beta should always be later than alpha");
        require(_totalFee > 0,"totalFee should not be 0, which will allow free flash swap");
        token0 = _token0;
        token1 = _token1;
        totalFee = _totalFee;
        alpha = _alpha;
        beta = _beta;
    }

    function updateFee(uint _totalFee, uint _alpha, uint _beta) external {
        require(msg.sender == factory, 'UniswapV2: FORBIDDEN');
        totalFee = _totalFee;
        alpha = _alpha;
        beta = _beta;

        emit FeeUpdated(_totalFee, _alpha, _beta);
    }

    // update reserves and, on the first call per block, price accumulators
    function _update(uint balance0, uint balance1, uint112 _reserve0, uint112 _reserve1) private {
        require(balance0 <= uint112(-1) && balance1 <= uint112(-1), 'UniswapV2: OVERFLOW');
        uint32 blockTimestamp = uint32(block.timestamp % 2**32);
        uint32 timeElapsed = blockTimestamp - blockTimestampLast; // overflow is desired
        if (timeElapsed > 0 && _reserve0 != 0 && _reserve1 != 0) {
            // * never overflows, and + overflow is desired
            price0CumulativeLast += uint(UQ112x112.encode(_reserve1).uqdiv(_reserve0)) * timeElapsed;
            price1CumulativeLast += uint(UQ112x112.encode(_reserve0).uqdiv(_reserve1)) * timeElapsed;
        }
        reserve0 = uint112(balance0);
        reserve1 = uint112(balance1);
        blockTimestampLast = blockTimestamp;
        emit Sync(reserve0, reserve1);
    }

    // if fee is on, mint liquidity equivalent to alpha/beta of the growth in sqrt(k)
    function _mintFee(uint112 _reserve0, uint112 _reserve1) private returns (bool feeOn) {
        address feeTo = IUniswapV2Factory(factory).feeTo();
        feeOn = feeTo != address(0);
        uint _kLast = kLast; // gas savings
        if (feeOn) {
            if (_kLast != 0) {
                uint rootK = Math.sqrt(uint(_reserve0).mul(_reserve1));
                uint rootKLast = Math.sqrt(_kLast);
                if (rootK > rootKLast) {
                    uint numerator = totalSupply.mul(rootK.sub(rootKLast)).mul(alpha);
                    uint denominator = rootK.mul(beta.sub(alpha)).add(rootKLast.mul(alpha));
                    uint liquidity = numerator / denominator;
                    if (liquidity > 0) _mint(feeTo, liquidity);
                }
            }
        } else if (_kLast != 0) {
            kLast = 0;
        }
    }

    // this low-level function should be called from a contract which performs important safety checks
    function mint(address to) external lock returns (uint liquidity) {
        (uint112 _reserve0, uint112 _reserve1,) = getReserves(); // gas savings
        uint balance0 = IERC20Uniswap(token0).balanceOf(address(this));
        uint balance1 = IERC20Uniswap(token1).balanceOf(address(this));
        uint amount0 = balance0.sub(_reserve0);
        uint amount1 = balance1.sub(_reserve1);

        bool feeOn = _mintFee(_reserve0, _reserve1);
        uint _totalSupply = totalSupply; // gas savings, must be defined here since totalSupply can update in _mintFee
        if (_totalSupply == 0) {
            address migrator = IUniswapV2Factory(factory).migrator();
            if (msg.sender == migrator) {
                liquidity = IMigrator(migrator).desiredLiquidity();
                require(liquidity > 0 && liquidity != uint256(-1), "Bad desired liquidity");
            } else {
                require(migrator == address(0), "Must not have migrator");
                liquidity = Math.sqrt(amount0.mul(amount1)).sub(MINIMUM_LIQUIDITY);
                _mint(address(0), MINIMUM_LIQUIDITY); // permanently lock the first MINIMUM_LIQUIDITY tokens
            }
        } else {
            liquidity = Math.min(amount0.mul(_totalSupply) / _reserve0, amount1.mul(_totalSupply) / _reserve1);
        }
        require(liquidity > 0, 'UniswapV2: INSUFFICIENT_LIQUIDITY_MINTED');
        _mint(to, liquidity);

        _update(balance0, balance1, _reserve0, _reserve1);
        if (feeOn) kLast = uint(reserve0).mul(reserve1); // reserve0 and reserve1 are up-to-date
        emit Mint(msg.sender, amount0, amount1);
    }

    // this low-level function should be called from a contract which performs important safety checks
    function burn(address to) external lock returns (uint amount0, uint amount1) {
        (uint112 _reserve0, uint112 _reserve1,) = getReserves(); // gas savings
        address _token0 = token0;                                // gas savings
        address _token1 = token1;                                // gas savings
        uint balance0 = IERC20Uniswap(_token0).balanceOf(address(this));
        uint balance1 = IERC20Uniswap(_token1).balanceOf(address(this));
        uint liquidity = balanceOf[address(this)];

        bool feeOn = _mintFee(_reserve0, _reserve1);
        uint _totalSupply = totalSupply; // gas savings, must be defined here since totalSupply can update in _mintFee
        amount0 = liquidity.mul(balance0) / _totalSupply; // using balances ensures pro-rata distribution
        amount1 = liquidity.mul(balance1) / _totalSupply; // using balances ensures pro-rata distribution
        require(amount0 > 0 && amount1 > 0, 'UniswapV2: INSUFFICIENT_LIQUIDITY_BURNED');
        _burn(address(this), liquidity);
        _safeTransfer(_token0, to, amount0);
        _safeTransfer(_token1, to, amount1);
        balance0 = IERC20Uniswap(_token0).balanceOf(address(this));
        balance1 = IERC20Uniswap(_token1).balanceOf(address(this));

        _update(balance0, balance1, _reserve0, _reserve1);
        if (feeOn) kLast = uint(reserve0).mul(reserve1); // reserve0 and reserve1 are up-to-date
        emit Burn(msg.sender, amount0, amount1, to);
    }

    // this low-level function should be called from a contract which performs important safety checks
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external lock {
        require(amount0Out > 0 || amount1Out > 0, 'UniswapV2: INSUFFICIENT_OUTPUT_AMOUNT');
        (uint112 _reserve0, uint112 _reserve1,) = getReserves(); // gas savings
        require(amount0Out < _reserve0 && amount1Out < _reserve1, 'UniswapV2: INSUFFICIENT_LIQUIDITY');

        uint balance0;
        uint balance1;
        { // scope for _token{0,1}, avoids stack too deep errors
        address _token0 = token0;
        address _token1 = token1;
        require(to != _token0 && to != _token1, 'UniswapV2: INVALID_TO');
        if (amount0Out > 0) _safeTransfer(_token0, to, amount0Out); // optimistically transfer tokens
        if (amount1Out > 0) _safeTransfer(_token1, to, amount1Out); // optimistically transfer tokens
        if (data.length > 0) IUniswapV2Callee(to).uniswapV2Call(msg.sender, amount0Out, amount1Out, data);
        balance0 = IERC20Uniswap(_token0).balanceOf(address(this));
        balance1 = IERC20Uniswap(_token1).balanceOf(address(this));
        }
        uint amount0In = balance0 > _reserve0 - amount0Out ? balance0 - (_reserve0 - amount0Out) : 0;
        uint amount1In = balance1 > _reserve1 - amount1Out ? balance1 - (_reserve1 - amount1Out) : 0;
        require(amount0In > 0 || amount1In > 0, 'UniswapV2: INSUFFICIENT_INPUT_AMOUNT');
        { // scope for reserve{0,1}Adjusted, avoids stack too deep errors
        uint balance0Adjusted = balance0.mul(1000).sub(amount0In.mul(totalFee));
        uint balance1Adjusted = balance1.mul(1000).sub(amount1In.mul(totalFee));
        require(balance0Adjusted.mul(balance1Adjusted) >= uint(_reserve0).mul(_reserve1).mul(1000**2), 'UniswapV2: K');
        }

        _update(balance0, balance1, _reserve0, _reserve1);
        emit Swap(msg.sender, amount0In, amount1In, amount0Out, amount1Out, to);
    }

    // force balances to match reserves
    function skim(address to) external lock {
        address _token0 = token0; // gas savings
        address _token1 = token1; // gas savings
        _safeTransfer(_token0, to, IERC20Uniswap(_token0).balanceOf(address(this)).sub(reserve0));
        _safeTransfer(_token1, to, IERC20Uniswap(_token1).balanceOf(address(this)).sub(reserve1));
    }

    // force reserves to match balances
    function sync() external lock {
        _update(IERC20Uniswap(token0).balanceOf(address(this)), IERC20Uniswap(token1).balanceOf(address(this)), reserve0, reserve1);
    }
}

File 4 of 9 : UniswapV2ERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity =0.6.12;

import './libraries/SafeMath.sol';

contract UniswapV2ERC20 {
    using SafeMathUniswap for uint;

    string public constant name = 'ShibaSwap LP Token';
    string public constant symbol = 'SSLP';
    uint8 public constant decimals = 18;
    uint  public totalSupply;
    mapping(address => uint) public balanceOf;
    mapping(address => mapping(address => uint)) public allowance;

    bytes32 public DOMAIN_SEPARATOR;
    // keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");
    bytes32 public constant PERMIT_TYPEHASH = 0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9;
    mapping(address => uint) public nonces;

    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    constructor() public {
        uint chainId;
        assembly {
            chainId := chainid()
        }
        DOMAIN_SEPARATOR = keccak256(
            abi.encode(
                keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)'),
                keccak256(bytes(name)),
                keccak256(bytes('1')),
                chainId,
                address(this)
            )
        );
    }

    function _mint(address to, uint value) internal {
        totalSupply = totalSupply.add(value);
        balanceOf[to] = balanceOf[to].add(value);
        emit Transfer(address(0), to, value);
    }

    function _burn(address from, uint value) internal {
        balanceOf[from] = balanceOf[from].sub(value);
        totalSupply = totalSupply.sub(value);
        emit Transfer(from, address(0), value);
    }

    function _approve(address owner, address spender, uint value) private {
        allowance[owner][spender] = value;
        emit Approval(owner, spender, value);
    }

    function _transfer(address from, address to, uint value) private {
        balanceOf[from] = balanceOf[from].sub(value);
        balanceOf[to] = balanceOf[to].add(value);
        emit Transfer(from, to, value);
    }

    function approve(address spender, uint value) external returns (bool) {
        _approve(msg.sender, spender, value);
        return true;
    }

    function transfer(address to, uint value) external returns (bool) {
        _transfer(msg.sender, to, value);
        return true;
    }

    function transferFrom(address from, address to, uint value) external returns (bool) {
        if (allowance[from][msg.sender] != uint(-1)) {
            allowance[from][msg.sender] = allowance[from][msg.sender].sub(value);
        }
        _transfer(from, to, value);
        return true;
    }

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external {
        require(deadline >= block.timestamp, 'UniswapV2: EXPIRED');
        bytes32 digest = keccak256(
            abi.encodePacked(
                '\x19\x01',
                DOMAIN_SEPARATOR,
                keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, nonces[owner]++, deadline))
            )
        );
        address recoveredAddress = ecrecover(digest, v, r, s);
        require(recoveredAddress != address(0) && recoveredAddress == owner, 'UniswapV2: INVALID_SIGNATURE');
        _approve(owner, spender, value);
    }
}

File 5 of 9 : Math.sol
// SPDX-License-Identifier: MIT

pragma solidity =0.6.12;

// a library for performing various math operations

library Math {
    function min(uint x, uint y) internal pure returns (uint z) {
        z = x < y ? x : y;
    }

    // babylonian method (https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method)
    function sqrt(uint y) internal pure returns (uint z) {
        if (y > 3) {
            z = y;
            uint x = y / 2 + 1;
            while (x < z) {
                z = x;
                x = (y / x + x) / 2;
            }
        } else if (y != 0) {
            z = 1;
        }
    }
}

File 6 of 9 : UQ112x112.sol
// SPDX-License-Identifier: MIT

pragma solidity =0.6.12;

// a library for handling binary fixed point numbers (https://en.wikipedia.org/wiki/Q_(number_format))

// range: [0, 2**112 - 1]
// resolution: 1 / 2**112

library UQ112x112 {
    uint224 constant Q112 = 2**112;

    // encode a uint112 as a UQ112x112
    function encode(uint112 y) internal pure returns (uint224 z) {
        z = uint224(y) * Q112; // never overflows
    }

    // divide a UQ112x112 by a uint112, returning a UQ112x112
    function uqdiv(uint224 x, uint112 y) internal pure returns (uint224 z) {
        z = x / uint224(y);
    }
}

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

pragma solidity >=0.5.0;

interface IERC20Uniswap {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
}

File 8 of 9 : IUniswapV2Callee.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.5.0;

interface IUniswapV2Callee {
    function uniswapV2Call(address sender, uint amount0, uint amount1, bytes calldata data) external;
}

File 9 of 9 : SafeMath.sol
// SPDX-License-Identifier: MIT

pragma solidity =0.6.12;

// a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math)

library SafeMathUniswap {
    function add(uint x, uint y) internal pure returns (uint z) {
        require((z = x + y) >= x, 'ds-math-add-overflow');
    }

    function sub(uint x, uint y) internal pure returns (uint z) {
        require((z = x - y) <= x, 'ds-math-sub-underflow');
    }

    function mul(uint x, uint y) internal pure returns (uint z) {
        require(y == 0 || (z = x * y) / y == x, 'ds-math-mul-overflow');
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 5000
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  },
  "metadata": {
    "useLiteralContent": true
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_feeToSetter","type":"address"},{"internalType":"address[]","name":"coinAddress","type":"address[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"which","type":"string"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"_totalFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_alpha","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_beta","type":"uint256"}],"name":"FeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token0","type":"address"},{"indexed":true,"internalType":"address","name":"token1","type":"address"},{"indexed":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"PairCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"uint256","name":"_totalFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_alpha","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_beta","type":"uint256"}],"name":"PairFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"which","type":"string"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"address","name":"newAddr","type":"address"}],"name":"SetAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"coinAddress","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"TopCoinUpdated","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allPairs","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allPairsLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"alphaRegular","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"alphaTopCoin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"betaRegular","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"betaTopCoin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"}],"name":"createPair","outputs":[{"internalType":"address","name":"pair","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeTo","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeToSetter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"getPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"migrator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pairCodeHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_feeTo","type":"address"}],"name":"setFeeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeToSetter","type":"address"}],"name":"setFeeToSetter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_migrator","type":"address"}],"name":"setMigrator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_totalFee","type":"uint256"},{"internalType":"uint256","name":"_alpha","type":"uint256"},{"internalType":"uint256","name":"_beta","type":"uint256"}],"name":"setRegularCoinFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_coinAddress","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setTopCoin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_totalFee","type":"uint256"},{"internalType":"uint256","name":"_alpha","type":"uint256"},{"internalType":"uint256","name":"_beta","type":"uint256"}],"name":"setTopCoinFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"topCoins","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeeRegular","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeeTopCoin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"},{"internalType":"uint256","name":"_totalFee","type":"uint256"},{"internalType":"uint256","name":"_alpha","type":"uint256"},{"internalType":"uint256","name":"_beta","type":"uint256"}],"name":"updatePairFee","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b5060405162003e1538038062003e158339818101604052604081101561003557600080fd5b81516020830180516040519294929383019291908464010000000082111561005c57600080fd5b90830190602082018581111561007157600080fd5b825186602082028301116401000000008211171561008e57600080fd5b82525081516020918201928201910280838360005b838110156100bb5781810151838201526020016100a3565b50505050919091016040525050600180546001600160a01b0319166001600160a01b0386161790555050805160005b8181101561013e5760016009600085848151811061010457fe5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790556001016100ea565b5050600380805560016004819055600582905560069182556007556008555050613ca7806200016e6000396000f3fe608060405234801561001057600080fd5b50600436106101825760003560e01c80639aab9248116100d8578063c5a31a641161008c578063e524878211610066578063e524878214610360578063e6a43905146103a2578063f46901ed146103d057610182565b8063c5a31a6414610301578063c5c5d0241461032a578063c9c653961461033257610182565b8063b2c649d8116100bd578063b2c649d8146102b7578063b7a18775146102f1578063be879f7c146102f957610182565b80639aab924814610289578063a2e74af61461029157610182565b8063574f2ba31161013a5780637cd07e47116101145780637cd07e471461027157806383afcd7c146102795780639850b4a81461028157610182565b8063574f2ba31461021257806365fe70801461021a5780636862eaac1461024857610182565b80631e3dd18b1161016b5780631e3dd18b146101b357806323cf3118146101d057806356cc8494146101f857610182565b8063017e7e5814610187578063094b7415146101ab575b600080fd5b61018f6103f6565b604080516001600160a01b039092168252519081900360200190f35b61018f610405565b61018f600480360360208110156101c957600080fd5b5035610414565b6101f6600480360360208110156101e657600080fd5b50356001600160a01b031661043b565b005b610200610539565b60408051918252519081900360200190f35b61020061053f565b6101f66004803603604081101561023057600080fd5b506001600160a01b0381351690602001351515610545565b6101f66004803603606081101561025e57600080fd5b5080359060208101359060400135610623565b61018f61075c565b61020061076b565b610200610771565b610200610777565b6101f6600480360360208110156102a757600080fd5b50356001600160a01b03166107a9565b6102dd600480360360208110156102cd57600080fd5b50356001600160a01b03166108a7565b604080519115158252519081900360200190f35b6102006108bc565b6102006108c2565b6101f66004803603606081101561031757600080fd5b50803590602081013590604001356108c8565b610200610a01565b61018f6004803603604081101561034857600080fd5b506001600160a01b0381358116916020013516610a07565b6101f6600480360360a081101561037657600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060800135610e25565b61018f600480360360408110156103b857600080fd5b506001600160a01b0381358116916020013516611015565b6101f6600480360360208110156103e657600080fd5b50356001600160a01b031661103b565b6000546001600160a01b031681565b6001546001600160a01b031681565b600b818154811061042157fe5b6000918252602090912001546001600160a01b0316905081565b6001546001600160a01b0316331461049a576040805162461bcd60e51b815260206004820152601460248201527f556e697377617056323a20464f5242494444454e000000000000000000000000604482015290519081900360640190fd5b600280546001600160a01b0383167fffffffffffffffffffffffff00000000000000000000000000000000000000009091168117909155604080517f4d69677261746f720000000000000000000000000000000000000000000000008152815190819003600801812092815290513392917f86f9c80ce3fc41b1d49ca02c0e9835713d8fbfe63e8faeb589d90d909f5febaf919081900360200190a350565b60085481565b600b5490565b6001546001600160a01b031633146105a4576040805162461bcd60e51b815260206004820152601460248201527f556e697377617056323a20464f5242494444454e000000000000000000000000604482015290519081900360640190fd5b6001600160a01b03821660008181526009602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168515159081179091558251908152915133927f0147d01afad3b4974d09b9e942673c9ffac27e92fb9e66a047a1f401d104d9f592908290030190a35050565b6001546001600160a01b03163314610682576040805162461bcd60e51b815260206004820152601460248201527f556e697377617056323a20464f5242494444454e000000000000000000000000604482015290519081900360640190fd5b8082106106d6576040805162461bcd60e51b815260206004820152601c60248201527f556e697377617056323a20494d50524f504552204652414354494f4e00000000604482015290519081900360640190fd5b600383905560048290556005819055604080517f546f70436f696e00000000000000000000000000000000000000000000000000815281519081900360070181208582526020820185905281830184905291513392917f3ae23566743d78e956f88743c30c726137f65fb2646e15282e76e291d3703842919081900360600190a3505050565b6002546001600160a01b031681565b60075481565b60065481565b600060405180602001610789906111b6565b6020820181038252601f19601f8201166040525080519060200120905090565b6001546001600160a01b03163314610808576040805162461bcd60e51b815260206004820152601460248201527f556e697377617056323a20464f5242494444454e000000000000000000000000604482015290519081900360640190fd5b600180546001600160a01b0383167fffffffffffffffffffffffff00000000000000000000000000000000000000009091168117909155604080517f466565546f5365747465720000000000000000000000000000000000000000008152815190819003600b01812092815290513392917f86f9c80ce3fc41b1d49ca02c0e9835713d8fbfe63e8faeb589d90d909f5febaf919081900360200190a350565b60096020526000908152604090205460ff1681565b60035481565b60045481565b6001546001600160a01b03163314610927576040805162461bcd60e51b815260206004820152601460248201527f556e697377617056323a20464f5242494444454e000000000000000000000000604482015290519081900360640190fd5b80821061097b576040805162461bcd60e51b815260206004820152601c60248201527f556e697377617056323a20494d50524f504552204652414354494f4e00000000604482015290519081900360640190fd5b600683905560078290556008819055604080517f526567756c6172436f696e0000000000000000000000000000000000000000008152815190819003600b0181208582526020820185905281830184905291513392917f3ae23566743d78e956f88743c30c726137f65fb2646e15282e76e291d3703842919081900360600190a3505050565b60055481565b6000816001600160a01b0316836001600160a01b03161415610a70576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056323a204944454e544943414c5f4144445245535345530000604482015290519081900360640190fd5b600080836001600160a01b0316856001600160a01b031610610a93578385610a96565b84845b90925090506001600160a01b038216610af6576040805162461bcd60e51b815260206004820152601760248201527f556e697377617056323a205a45524f5f41444452455353000000000000000000604482015290519081900360640190fd5b6001600160a01b038281166000908152600a6020908152604080832085851684529091529020541615610b70576040805162461bcd60e51b815260206004820152601660248201527f556e697377617056323a20504149525f45584953545300000000000000000000604482015290519081900360640190fd5b606060405180602001610b82906111b6565b6020820181038252601f19601f8201166040525090506000838360405160200180836001600160a01b031660601b8152601401826001600160a01b031660601b815260140192505050604051602081830303815290604052805190602001209050808251602084016000f594506000806000610bfe8787611139565b925092509250876001600160a01b031663d13f90b488888686866040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b0316815260200184815260200183815260200182815260200195505050505050600060405180830381600087803b158015610c7c57600080fd5b505af1158015610c90573d6000803e3d6000fd5b5050505087600a6000896001600160a01b03166001600160a01b031681526020019081526020016000206000886001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555087600a6000886001600160a01b03166001600160a01b031681526020019081526020016000206000896001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600b889080600181540180825580915050600190039060005260206000200160009091909190916101000a8154816001600160a01b0302191690836001600160a01b03160217905550856001600160a01b0316876001600160a01b03167f0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e98a600b8054905060405180836001600160a01b031681526020018281526020019250505060405180910390a35050505050505092915050565b6001546001600160a01b03163314610e84576040805162461bcd60e51b815260206004820152601460248201527f556e697377617056323a20464f5242494444454e000000000000000000000000604482015290519081900360640190fd5b808210610ed8576040805162461bcd60e51b815260206004820152601c60248201527f556e697377617056323a20494d50524f504552204652414354494f4e00000000604482015290519081900360640190fd5b6001600160a01b038086166000908152600a6020908152604080832088851684529091529020541680610f52576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056323a20504149525f444f45535f4e4f545f45584953540000604482015290519081900360640190fd5b806001600160a01b031663fc061a4f8585856040518463ffffffff1660e01b8152600401808481526020018381526020018281526020019350505050600060405180830381600087803b158015610fa857600080fd5b505af1158015610fbc573d6000803e3d6000fd5b5050604080518781526020810187905280820186905290516001600160a01b03851693503392507f40570f2be051da7e1b3821db3af877c0fb63930ad6250c9adbe24b35d8f964929181900360600190a3505050505050565b600a6020908152600092835260408084209091529082529020546001600160a01b031681565b6001546001600160a01b0316331461109a576040805162461bcd60e51b815260206004820152601460248201527f556e697377617056323a20464f5242494444454e000000000000000000000000604482015290519081900360640190fd5b600080546001600160a01b0383167fffffffffffffffffffffffff00000000000000000000000000000000000000009091168117909155604080517f466565546f0000000000000000000000000000000000000000000000000000008152815190819003600501812092815290513392917f86f9c80ce3fc41b1d49ca02c0e9835713d8fbfe63e8faeb589d90d909f5febaf919081900360200190a350565b6001600160a01b0382166000908152600960205260408120548190819060ff1615156001148061118657506001600160a01b03841660009081526009602052604090205460ff1615156001145b1561119f576003546004546005549250925092506111af565b6006546007546008549250925092505b9250925092565b612aae806111c48339019056fe60806040526001600f5534801561001557600080fd5b50604080518082018252601281527129b434b130a9bbb0b8102628102a37b5b2b760711b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527f02ec6135c0effd6344c1d59f3fe7c85b41f59a70843703824e29619d57cdf3e0818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528351808303909101815260c09091019092528151910120600355600580546001600160a01b0319163317905561299e806101106000396000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c80637464fc3d1161010f578063c45a0155116100a2578063db1d0fd511610071578063db1d0fd5146105f4578063dd62ed3e146105fc578063fc061a4f1461062a578063fff6cae914610653576101e5565b8063c45a015514610551578063d13f90b414610559578063d21220a71461059b578063d505accf146105a3576101e5565b80639faa3c91116100de5780639faa3c91146104ef578063a9059cbb146104f7578063ba9a7a5614610523578063bc25cf771461052b576101e5565b80637464fc3d1461047a5780637ecebe001461048257806389afcb44146104a857806395d89b41146104e7576101e5565b806323b872dd116101875780635909c0d5116101565780635909c0d51461041e5780635a3d5493146104265780636a6278421461042e57806370a0823114610454576101e5565b806323b872dd146103ba57806330adf81f146103f0578063313ce567146103f85780633644e51514610416576101e5565b8063095ea7b3116101c3578063095ea7b3146103345780630dfe16811461037457806318160ddd146103985780631df4ccfc146103b2576101e5565b8063022c0d9f146101ea57806306fdde03146102785780630902f1ac146102f5575b600080fd5b6102766004803603608081101561020057600080fd5b8135916020810135916001600160a01b03604083013516919081019060808101606082013564010000000081111561023757600080fd5b82018360208201111561024957600080fd5b8035906020019184600183028401116401000000008311171561026b57600080fd5b50909250905061065b565b005b610280610bcd565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102ba5781810151838201526020016102a2565b50505050905090810190601f1680156102e75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102fd610c06565b604080516dffffffffffffffffffffffffffff948516815292909316602083015263ffffffff168183015290519081900360600190f35b6103606004803603604081101561034a57600080fd5b506001600160a01b038135169060200135610c5b565b604080519115158252519081900360200190f35b61037c610c72565b604080516001600160a01b039092168252519081900360200190f35b6103a0610c81565b60408051918252519081900360200190f35b6103a0610c87565b610360600480360360608110156103d057600080fd5b506001600160a01b03813581169160208101359091169060400135610c8d565b6103a0610d3f565b610400610d63565b6040805160ff9092168252519081900360200190f35b6103a0610d68565b6103a0610d6e565b6103a0610d74565b6103a06004803603602081101561044457600080fd5b50356001600160a01b0316610d7a565b6103a06004803603602081101561046a57600080fd5b50356001600160a01b0316611276565b6103a0611288565b6103a06004803603602081101561049857600080fd5b50356001600160a01b031661128e565b6104ce600480360360208110156104be57600080fd5b50356001600160a01b03166112a0565b6040805192835260208301919091528051918290030190f35b610280611652565b6103a061168b565b6103606004803603604081101561050d57600080fd5b506001600160a01b038135169060200135611691565b6103a061169e565b6102766004803603602081101561054157600080fd5b50356001600160a01b03166116a4565b61037c611837565b610276600480360360a081101561056f57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060800135611846565b61037c6119cd565b610276600480360360e08110156105b957600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356119dc565b6103a0611c04565b6103a06004803603604081101561061257600080fd5b506001600160a01b0381358116916020013516611c0a565b6102766004803603606081101561064057600080fd5b5080359060208101359060400135611c27565b610276611cda565b600f546001146106b2576040805162461bcd60e51b815260206004820152601160248201527f556e697377617056323a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b6000600f55841515806106c55750600084115b6107005760405162461bcd60e51b815260040180806020018281038252602581526020018061284f6025913960400191505060405180910390fd5b60008061070b610c06565b5091509150816dffffffffffffffffffffffffffff168710801561073e5750806dffffffffffffffffffffffffffff1686105b6107795760405162461bcd60e51b81526004018080602001828103825260218152602001806128986021913960400191505060405180910390fd5b60065460075460009182916001600160a01b039182169190811690891682148015906107b75750806001600160a01b0316896001600160a01b031614155b610808576040805162461bcd60e51b815260206004820152601560248201527f556e697377617056323a20494e56414c49445f544f0000000000000000000000604482015290519081900360640190fd5b8a1561081957610819828a8d611e5a565b891561082a5761082a818a8c611e5a565b86156108dc57886001600160a01b03166310d1e85c338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b1580156108c357600080fd5b505af11580156108d7573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561092257600080fd5b505afa158015610936573d6000803e3d6000fd5b505050506040513d602081101561094c57600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b15801561099857600080fd5b505afa1580156109ac573d6000803e3d6000fd5b505050506040513d60208110156109c257600080fd5b5051925060009150506dffffffffffffffffffffffffffff85168a900383116109ec576000610a02565b89856dffffffffffffffffffffffffffff160383035b9050600089856dffffffffffffffffffffffffffff16038311610a26576000610a3c565b89856dffffffffffffffffffffffffffff160383035b90506000821180610a4d5750600081115b610a885760405162461bcd60e51b81526004018080602001828103825260248152602001806128746024913960400191505060405180910390fd5b6000610ab4610aa2600c548561202290919063ffffffff16565b610aae876103e8612022565b9061208e565b90506000610ad0610aa2600c548561202290919063ffffffff16565b9050610afc620f4240610af66dffffffffffffffffffffffffffff8b8116908b16612022565b90612022565b610b068383612022565b1015610b59576040805162461bcd60e51b815260206004820152600c60248201527f556e697377617056323a204b0000000000000000000000000000000000000000604482015290519081900360640190fd5b5050610b67848488886120e6565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600f55505050505050505050565b6040518060400160405280601281526020017f536869626153776170204c5020546f6b656e000000000000000000000000000081525081565b6008546dffffffffffffffffffffffffffff808216926e0100000000000000000000000000008304909116917c0100000000000000000000000000000000000000000000000000000000900463ffffffff1690565b6000610c68338484612382565b5060015b92915050565b6006546001600160a01b031681565b60005481565b600c5481565b6001600160a01b03831660009081526002602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14610d2a576001600160a01b0384166000908152600260209081526040808320338452909152902054610d05908361208e565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610d358484846123e4565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b60095481565b600a5481565b6000600f54600114610dd3576040805162461bcd60e51b815260206004820152601160248201527f556e697377617056323a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b6000600f81905580610de3610c06565b50600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015610e3757600080fd5b505afa158015610e4b573d6000803e3d6000fd5b505050506040513d6020811015610e6157600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610eb457600080fd5b505afa158015610ec8573d6000803e3d6000fd5b505050506040513d6020811015610ede57600080fd5b505190506000610efe836dffffffffffffffffffffffffffff871661208e565b90506000610f1c836dffffffffffffffffffffffffffff871661208e565b90506000610f2a8787612492565b6000549091508061114757600554604080517f7cd07e4700000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691637cd07e47916004808301926020929190829003018186803b158015610f9357600080fd5b505afa158015610fa7573d6000803e3d6000fd5b505050506040513d6020811015610fbd57600080fd5b50519050336001600160a01b03821614156110be57806001600160a01b03166340dc0e376040518163ffffffff1660e01b815260040160206040518083038186803b15801561100b57600080fd5b505afa15801561101f573d6000803e3d6000fd5b505050506040513d602081101561103557600080fd5b50519950891580159061106857507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8a14155b6110b9576040805162461bcd60e51b815260206004820152601560248201527f4261642064657369726564206c69717569646974790000000000000000000000604482015290519081900360640190fd5b611141565b6001600160a01b0381161561111a576040805162461bcd60e51b815260206004820152601660248201527f4d757374206e6f742068617665206d69677261746f7200000000000000000000604482015290519081900360640190fd5b6111326103e8610aae61112d8888612022565b61260b565b995061114160006103e861265d565b50611198565b6111956dffffffffffffffffffffffffffff89166111658684612022565b8161116c57fe5b046dffffffffffffffffffffffffffff89166111888685612022565b8161118f57fe5b046126e7565b98505b600089116111d75760405162461bcd60e51b815260040180806020018281038252602881526020018061291b6028913960400191505060405180910390fd5b6111e18a8a61265d565b6111ed86868a8a6120e6565b811561122957600854611225906dffffffffffffffffffffffffffff808216916e010000000000000000000000000000900416612022565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600f5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600f546001146112fa576040805162461bcd60e51b815260206004820152601160248201527f556e697377617056323a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b6000600f8190558061130a610c06565b50600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b15801561136657600080fd5b505afa15801561137a573d6000803e3d6000fd5b505050506040513d602081101561139057600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b1580156113de57600080fd5b505afa1580156113f2573d6000803e3d6000fd5b505050506040513d602081101561140857600080fd5b5051306000908152600160205260408120549192506114278888612492565b600054909150806114388487612022565b8161143f57fe5b049a508061144d8486612022565b8161145457fe5b04995060008b118015611467575060008a115b6114a25760405162461bcd60e51b81526004018080602001828103825260288152602001806128f36028913960400191505060405180910390fd5b6114ac30846126ff565b6114b7878d8d611e5a565b6114c2868d8c611e5a565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b15801561150857600080fd5b505afa15801561151c573d6000803e3d6000fd5b505050506040513d602081101561153257600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b15801561157e57600080fd5b505afa158015611592573d6000803e3d6000fd5b505050506040513d60208110156115a857600080fd5b505193506115b885858b8b6120e6565b81156115f4576008546115f0906dffffffffffffffffffffffffffff808216916e010000000000000000000000000000900416612022565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600f81905550915091565b6040518060400160405280600481526020017f53534c500000000000000000000000000000000000000000000000000000000081525081565b600e5481565b6000610c683384846123e4565b6103e881565b600f546001146116fb576040805162461bcd60e51b815260206004820152601160248201527f556e697377617056323a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b6000600f55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b0394851694909316926117ab92859287926117a6926dffffffffffffffffffffffffffff169185916370a0823191602480820192602092909190829003018186803b15801561177457600080fd5b505afa158015611788573d6000803e3d6000fd5b505050506040513d602081101561179e57600080fd5b50519061208e565b611e5a565b61182d81846117a66008600e9054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff16856001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561177457600080fd5b50506001600f5550565b6005546001600160a01b031681565b6005546001600160a01b031633146118a5576040805162461bcd60e51b815260206004820152601460248201527f556e697377617056323a20464f5242494444454e000000000000000000000000604482015290519081900360640190fd5b600082116118fa576040805162461bcd60e51b815260206004820152601d60248201527f5f616c706861206d7573742062652067726561746572207468616e2030000000604482015290519081900360640190fd5b8181116119385760405162461bcd60e51b81526004018080602001828103825260268152602001806129436026913960400191505060405180910390fd5b600083116119775760405162461bcd60e51b815260040180806020018281038252603a8152602001806128b9603a913960400191505060405180910390fd5b600680546001600160a01b039687167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216179091556007805495909616941693909317909355600c55600d91909155600e55565b6007546001600160a01b031681565b42841015611a31576040805162461bcd60e51b815260206004820152601260248201527f556e697377617056323a20455850495245440000000000000000000000000000604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e0850182528051908301207f19010000000000000000000000000000000000000000000000000000000000006101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa158015611b67573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811615801590611b9d5750886001600160a01b0316816001600160a01b0316145b611bee576040805162461bcd60e51b815260206004820152601c60248201527f556e697377617056323a20494e56414c49445f5349474e415455524500000000604482015290519081900360640190fd5b611bf9898989612382565b505050505050505050565b600d5481565b600260209081526000928352604080842090915290825290205481565b6005546001600160a01b03163314611c86576040805162461bcd60e51b815260206004820152601460248201527f556e697377617056323a20464f5242494444454e000000000000000000000000604482015290519081900360640190fd5b600c839055600d829055600e819055604080518481526020810184905280820183905290517f509d432c4ab40e3eb039ee95fea93be8de6c751efa87aed5e51c7202b0dd8e099181900360600190a1505050565b600f54600114611d31576040805162461bcd60e51b815260206004820152601160248201527f556e697377617056323a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b6000600f55600654604080516370a0823160e01b81523060048201529051611e53926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015611d8257600080fd5b505afa158015611d96573d6000803e3d6000fd5b505050506040513d6020811015611dac57600080fd5b5051600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015611df957600080fd5b505afa158015611e0d573d6000803e3d6000fd5b505050506040513d6020811015611e2357600080fd5b50516008546dffffffffffffffffffffffffffff808216916e0100000000000000000000000000009004166120e6565b6001600f55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251815160009460609489169392918291908083835b60208310611f355780518252601f199092019160209182019101611f16565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611f97576040519150601f19603f3d011682016040523d82523d6000602084013e611f9c565b606091505b5091509150818015611fca575080511580611fca5750808060200190516020811015611fc757600080fd5b50515b61201b576040805162461bcd60e51b815260206004820152601a60248201527f556e697377617056323a205452414e534645525f4641494c4544000000000000604482015290519081900360640190fd5b5050505050565b600081158061203d5750508082028282828161203a57fe5b04145b610c6c576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b80820382811115610c6c576040805162461bcd60e51b815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6dffffffffffffffffffffffffffff841180159061211257506dffffffffffffffffffffffffffff8311155b612163576040805162461bcd60e51b815260206004820152601360248201527f556e697377617056323a204f564552464c4f5700000000000000000000000000604482015290519081900360640190fd5b60085463ffffffff428116917c0100000000000000000000000000000000000000000000000000000000900481168203908116158015906121b357506dffffffffffffffffffffffffffff841615155b80156121ce57506dffffffffffffffffffffffffffff831615155b15612278578063ffffffff1661220b856121e786612791565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16906127b5565b600980547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff929092169290920201905563ffffffff811661224b846121e787612791565b600a80547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff92909216929092020190555b600880547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000166dffffffffffffffffffffffffffff888116919091177fffffffff0000000000000000000000000000ffffffffffffffffffffffffffff166e0100000000000000000000000000008883168102919091177bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c010000000000000000000000000000000000000000000000000000000063ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316600090815260016020526040902054612407908261208e565b6001600160a01b03808516600090815260016020526040808220939093559084168152205461243690826127f6565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b1580156124e357600080fd5b505afa1580156124f7573d6000803e3d6000fd5b505050506040513d602081101561250d57600080fd5b5051600b546001600160a01b0382161580159450919250906125f75780156125f257600061255161112d6dffffffffffffffffffffffffffff888116908816612022565b9050600061255e8361260b565b9050808211156125ef57600d5460009061258890610af661257f868661208e565b60005490612022565b905060006125cb6125a4600d548561202290919063ffffffff16565b6125c56125be600d54600e5461208e90919063ffffffff16565b8790612022565b906127f6565b905060008183816125d857fe5b04905080156125eb576125eb878261265d565b5050505b50505b612603565b8015612603576000600b555b505092915050565b6000600382111561264e575080600160028204015b818110156126485780915060028182858161263757fe5b04018161264057fe5b049050612620565b50612658565b8115612658575060015b919050565b60005461266a90826127f6565b60009081556001600160a01b03831681526001602052604090205461268f90826127f6565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008183106126f657816126f8565b825b9392505050565b6001600160a01b038216600090815260016020526040902054612722908261208e565b6001600160a01b03831660009081526001602052604081209190915554612749908261208e565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6dffffffffffffffffffffffffffff166e0100000000000000000000000000000290565b60006dffffffffffffffffffffffffffff82167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8416816127ee57fe5b049392505050565b80820182811015610c6c576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fdfe556e697377617056323a20494e53554646494349454e545f4f55545055545f414d4f554e54556e697377617056323a20494e53554646494349454e545f494e5055545f414d4f554e54556e697377617056323a20494e53554646494349454e545f4c4951554944495459746f74616c4665652073686f756c64206e6f7420626520302c2077686963682077696c6c20616c6c6f77206672656520666c6173682073776170556e697377617056323a20494e53554646494349454e545f4c49515549444954595f4255524e4544556e697377617056323a20494e53554646494349454e545f4c49515549444954595f4d494e544544626574612073686f756c6420616c77617973206265206c61746572207468616e20616c706861a2646970667358221220b562054fd180879e709cb9f95feb3c261a153a823344d5c22c2f0cda0c56df5d64736f6c634300060c0033a2646970667358221220124837b039c2328490a323f2b83cbcd68dc047f4fc1ccf2ba3fe1aec4cb3b5c264736f6c634300060c0033000000000000000000000000c7d0445ac2947760b3dd388b8586adf079972bf3000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000050000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101825760003560e01c80639aab9248116100d8578063c5a31a641161008c578063e524878211610066578063e524878214610360578063e6a43905146103a2578063f46901ed146103d057610182565b8063c5a31a6414610301578063c5c5d0241461032a578063c9c653961461033257610182565b8063b2c649d8116100bd578063b2c649d8146102b7578063b7a18775146102f1578063be879f7c146102f957610182565b80639aab924814610289578063a2e74af61461029157610182565b8063574f2ba31161013a5780637cd07e47116101145780637cd07e471461027157806383afcd7c146102795780639850b4a81461028157610182565b8063574f2ba31461021257806365fe70801461021a5780636862eaac1461024857610182565b80631e3dd18b1161016b5780631e3dd18b146101b357806323cf3118146101d057806356cc8494146101f857610182565b8063017e7e5814610187578063094b7415146101ab575b600080fd5b61018f6103f6565b604080516001600160a01b039092168252519081900360200190f35b61018f610405565b61018f600480360360208110156101c957600080fd5b5035610414565b6101f6600480360360208110156101e657600080fd5b50356001600160a01b031661043b565b005b610200610539565b60408051918252519081900360200190f35b61020061053f565b6101f66004803603604081101561023057600080fd5b506001600160a01b0381351690602001351515610545565b6101f66004803603606081101561025e57600080fd5b5080359060208101359060400135610623565b61018f61075c565b61020061076b565b610200610771565b610200610777565b6101f6600480360360208110156102a757600080fd5b50356001600160a01b03166107a9565b6102dd600480360360208110156102cd57600080fd5b50356001600160a01b03166108a7565b604080519115158252519081900360200190f35b6102006108bc565b6102006108c2565b6101f66004803603606081101561031757600080fd5b50803590602081013590604001356108c8565b610200610a01565b61018f6004803603604081101561034857600080fd5b506001600160a01b0381358116916020013516610a07565b6101f6600480360360a081101561037657600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060800135610e25565b61018f600480360360408110156103b857600080fd5b506001600160a01b0381358116916020013516611015565b6101f6600480360360208110156103e657600080fd5b50356001600160a01b031661103b565b6000546001600160a01b031681565b6001546001600160a01b031681565b600b818154811061042157fe5b6000918252602090912001546001600160a01b0316905081565b6001546001600160a01b0316331461049a576040805162461bcd60e51b815260206004820152601460248201527f556e697377617056323a20464f5242494444454e000000000000000000000000604482015290519081900360640190fd5b600280546001600160a01b0383167fffffffffffffffffffffffff00000000000000000000000000000000000000009091168117909155604080517f4d69677261746f720000000000000000000000000000000000000000000000008152815190819003600801812092815290513392917f86f9c80ce3fc41b1d49ca02c0e9835713d8fbfe63e8faeb589d90d909f5febaf919081900360200190a350565b60085481565b600b5490565b6001546001600160a01b031633146105a4576040805162461bcd60e51b815260206004820152601460248201527f556e697377617056323a20464f5242494444454e000000000000000000000000604482015290519081900360640190fd5b6001600160a01b03821660008181526009602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168515159081179091558251908152915133927f0147d01afad3b4974d09b9e942673c9ffac27e92fb9e66a047a1f401d104d9f592908290030190a35050565b6001546001600160a01b03163314610682576040805162461bcd60e51b815260206004820152601460248201527f556e697377617056323a20464f5242494444454e000000000000000000000000604482015290519081900360640190fd5b8082106106d6576040805162461bcd60e51b815260206004820152601c60248201527f556e697377617056323a20494d50524f504552204652414354494f4e00000000604482015290519081900360640190fd5b600383905560048290556005819055604080517f546f70436f696e00000000000000000000000000000000000000000000000000815281519081900360070181208582526020820185905281830184905291513392917f3ae23566743d78e956f88743c30c726137f65fb2646e15282e76e291d3703842919081900360600190a3505050565b6002546001600160a01b031681565b60075481565b60065481565b600060405180602001610789906111b6565b6020820181038252601f19601f8201166040525080519060200120905090565b6001546001600160a01b03163314610808576040805162461bcd60e51b815260206004820152601460248201527f556e697377617056323a20464f5242494444454e000000000000000000000000604482015290519081900360640190fd5b600180546001600160a01b0383167fffffffffffffffffffffffff00000000000000000000000000000000000000009091168117909155604080517f466565546f5365747465720000000000000000000000000000000000000000008152815190819003600b01812092815290513392917f86f9c80ce3fc41b1d49ca02c0e9835713d8fbfe63e8faeb589d90d909f5febaf919081900360200190a350565b60096020526000908152604090205460ff1681565b60035481565b60045481565b6001546001600160a01b03163314610927576040805162461bcd60e51b815260206004820152601460248201527f556e697377617056323a20464f5242494444454e000000000000000000000000604482015290519081900360640190fd5b80821061097b576040805162461bcd60e51b815260206004820152601c60248201527f556e697377617056323a20494d50524f504552204652414354494f4e00000000604482015290519081900360640190fd5b600683905560078290556008819055604080517f526567756c6172436f696e0000000000000000000000000000000000000000008152815190819003600b0181208582526020820185905281830184905291513392917f3ae23566743d78e956f88743c30c726137f65fb2646e15282e76e291d3703842919081900360600190a3505050565b60055481565b6000816001600160a01b0316836001600160a01b03161415610a70576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056323a204944454e544943414c5f4144445245535345530000604482015290519081900360640190fd5b600080836001600160a01b0316856001600160a01b031610610a93578385610a96565b84845b90925090506001600160a01b038216610af6576040805162461bcd60e51b815260206004820152601760248201527f556e697377617056323a205a45524f5f41444452455353000000000000000000604482015290519081900360640190fd5b6001600160a01b038281166000908152600a6020908152604080832085851684529091529020541615610b70576040805162461bcd60e51b815260206004820152601660248201527f556e697377617056323a20504149525f45584953545300000000000000000000604482015290519081900360640190fd5b606060405180602001610b82906111b6565b6020820181038252601f19601f8201166040525090506000838360405160200180836001600160a01b031660601b8152601401826001600160a01b031660601b815260140192505050604051602081830303815290604052805190602001209050808251602084016000f594506000806000610bfe8787611139565b925092509250876001600160a01b031663d13f90b488888686866040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b0316815260200184815260200183815260200182815260200195505050505050600060405180830381600087803b158015610c7c57600080fd5b505af1158015610c90573d6000803e3d6000fd5b5050505087600a6000896001600160a01b03166001600160a01b031681526020019081526020016000206000886001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555087600a6000886001600160a01b03166001600160a01b031681526020019081526020016000206000896001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600b889080600181540180825580915050600190039060005260206000200160009091909190916101000a8154816001600160a01b0302191690836001600160a01b03160217905550856001600160a01b0316876001600160a01b03167f0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e98a600b8054905060405180836001600160a01b031681526020018281526020019250505060405180910390a35050505050505092915050565b6001546001600160a01b03163314610e84576040805162461bcd60e51b815260206004820152601460248201527f556e697377617056323a20464f5242494444454e000000000000000000000000604482015290519081900360640190fd5b808210610ed8576040805162461bcd60e51b815260206004820152601c60248201527f556e697377617056323a20494d50524f504552204652414354494f4e00000000604482015290519081900360640190fd5b6001600160a01b038086166000908152600a6020908152604080832088851684529091529020541680610f52576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056323a20504149525f444f45535f4e4f545f45584953540000604482015290519081900360640190fd5b806001600160a01b031663fc061a4f8585856040518463ffffffff1660e01b8152600401808481526020018381526020018281526020019350505050600060405180830381600087803b158015610fa857600080fd5b505af1158015610fbc573d6000803e3d6000fd5b5050604080518781526020810187905280820186905290516001600160a01b03851693503392507f40570f2be051da7e1b3821db3af877c0fb63930ad6250c9adbe24b35d8f964929181900360600190a3505050505050565b600a6020908152600092835260408084209091529082529020546001600160a01b031681565b6001546001600160a01b0316331461109a576040805162461bcd60e51b815260206004820152601460248201527f556e697377617056323a20464f5242494444454e000000000000000000000000604482015290519081900360640190fd5b600080546001600160a01b0383167fffffffffffffffffffffffff00000000000000000000000000000000000000009091168117909155604080517f466565546f0000000000000000000000000000000000000000000000000000008152815190819003600501812092815290513392917f86f9c80ce3fc41b1d49ca02c0e9835713d8fbfe63e8faeb589d90d909f5febaf919081900360200190a350565b6001600160a01b0382166000908152600960205260408120548190819060ff1615156001148061118657506001600160a01b03841660009081526009602052604090205460ff1615156001145b1561119f576003546004546005549250925092506111af565b6006546007546008549250925092505b9250925092565b612aae806111c48339019056fe60806040526001600f5534801561001557600080fd5b50604080518082018252601281527129b434b130a9bbb0b8102628102a37b5b2b760711b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527f02ec6135c0effd6344c1d59f3fe7c85b41f59a70843703824e29619d57cdf3e0818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528351808303909101815260c09091019092528151910120600355600580546001600160a01b0319163317905561299e806101106000396000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c80637464fc3d1161010f578063c45a0155116100a2578063db1d0fd511610071578063db1d0fd5146105f4578063dd62ed3e146105fc578063fc061a4f1461062a578063fff6cae914610653576101e5565b8063c45a015514610551578063d13f90b414610559578063d21220a71461059b578063d505accf146105a3576101e5565b80639faa3c91116100de5780639faa3c91146104ef578063a9059cbb146104f7578063ba9a7a5614610523578063bc25cf771461052b576101e5565b80637464fc3d1461047a5780637ecebe001461048257806389afcb44146104a857806395d89b41146104e7576101e5565b806323b872dd116101875780635909c0d5116101565780635909c0d51461041e5780635a3d5493146104265780636a6278421461042e57806370a0823114610454576101e5565b806323b872dd146103ba57806330adf81f146103f0578063313ce567146103f85780633644e51514610416576101e5565b8063095ea7b3116101c3578063095ea7b3146103345780630dfe16811461037457806318160ddd146103985780631df4ccfc146103b2576101e5565b8063022c0d9f146101ea57806306fdde03146102785780630902f1ac146102f5575b600080fd5b6102766004803603608081101561020057600080fd5b8135916020810135916001600160a01b03604083013516919081019060808101606082013564010000000081111561023757600080fd5b82018360208201111561024957600080fd5b8035906020019184600183028401116401000000008311171561026b57600080fd5b50909250905061065b565b005b610280610bcd565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102ba5781810151838201526020016102a2565b50505050905090810190601f1680156102e75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102fd610c06565b604080516dffffffffffffffffffffffffffff948516815292909316602083015263ffffffff168183015290519081900360600190f35b6103606004803603604081101561034a57600080fd5b506001600160a01b038135169060200135610c5b565b604080519115158252519081900360200190f35b61037c610c72565b604080516001600160a01b039092168252519081900360200190f35b6103a0610c81565b60408051918252519081900360200190f35b6103a0610c87565b610360600480360360608110156103d057600080fd5b506001600160a01b03813581169160208101359091169060400135610c8d565b6103a0610d3f565b610400610d63565b6040805160ff9092168252519081900360200190f35b6103a0610d68565b6103a0610d6e565b6103a0610d74565b6103a06004803603602081101561044457600080fd5b50356001600160a01b0316610d7a565b6103a06004803603602081101561046a57600080fd5b50356001600160a01b0316611276565b6103a0611288565b6103a06004803603602081101561049857600080fd5b50356001600160a01b031661128e565b6104ce600480360360208110156104be57600080fd5b50356001600160a01b03166112a0565b6040805192835260208301919091528051918290030190f35b610280611652565b6103a061168b565b6103606004803603604081101561050d57600080fd5b506001600160a01b038135169060200135611691565b6103a061169e565b6102766004803603602081101561054157600080fd5b50356001600160a01b03166116a4565b61037c611837565b610276600480360360a081101561056f57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060800135611846565b61037c6119cd565b610276600480360360e08110156105b957600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356119dc565b6103a0611c04565b6103a06004803603604081101561061257600080fd5b506001600160a01b0381358116916020013516611c0a565b6102766004803603606081101561064057600080fd5b5080359060208101359060400135611c27565b610276611cda565b600f546001146106b2576040805162461bcd60e51b815260206004820152601160248201527f556e697377617056323a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b6000600f55841515806106c55750600084115b6107005760405162461bcd60e51b815260040180806020018281038252602581526020018061284f6025913960400191505060405180910390fd5b60008061070b610c06565b5091509150816dffffffffffffffffffffffffffff168710801561073e5750806dffffffffffffffffffffffffffff1686105b6107795760405162461bcd60e51b81526004018080602001828103825260218152602001806128986021913960400191505060405180910390fd5b60065460075460009182916001600160a01b039182169190811690891682148015906107b75750806001600160a01b0316896001600160a01b031614155b610808576040805162461bcd60e51b815260206004820152601560248201527f556e697377617056323a20494e56414c49445f544f0000000000000000000000604482015290519081900360640190fd5b8a1561081957610819828a8d611e5a565b891561082a5761082a818a8c611e5a565b86156108dc57886001600160a01b03166310d1e85c338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b1580156108c357600080fd5b505af11580156108d7573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561092257600080fd5b505afa158015610936573d6000803e3d6000fd5b505050506040513d602081101561094c57600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b15801561099857600080fd5b505afa1580156109ac573d6000803e3d6000fd5b505050506040513d60208110156109c257600080fd5b5051925060009150506dffffffffffffffffffffffffffff85168a900383116109ec576000610a02565b89856dffffffffffffffffffffffffffff160383035b9050600089856dffffffffffffffffffffffffffff16038311610a26576000610a3c565b89856dffffffffffffffffffffffffffff160383035b90506000821180610a4d5750600081115b610a885760405162461bcd60e51b81526004018080602001828103825260248152602001806128746024913960400191505060405180910390fd5b6000610ab4610aa2600c548561202290919063ffffffff16565b610aae876103e8612022565b9061208e565b90506000610ad0610aa2600c548561202290919063ffffffff16565b9050610afc620f4240610af66dffffffffffffffffffffffffffff8b8116908b16612022565b90612022565b610b068383612022565b1015610b59576040805162461bcd60e51b815260206004820152600c60248201527f556e697377617056323a204b0000000000000000000000000000000000000000604482015290519081900360640190fd5b5050610b67848488886120e6565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600f55505050505050505050565b6040518060400160405280601281526020017f536869626153776170204c5020546f6b656e000000000000000000000000000081525081565b6008546dffffffffffffffffffffffffffff808216926e0100000000000000000000000000008304909116917c0100000000000000000000000000000000000000000000000000000000900463ffffffff1690565b6000610c68338484612382565b5060015b92915050565b6006546001600160a01b031681565b60005481565b600c5481565b6001600160a01b03831660009081526002602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14610d2a576001600160a01b0384166000908152600260209081526040808320338452909152902054610d05908361208e565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610d358484846123e4565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b60095481565b600a5481565b6000600f54600114610dd3576040805162461bcd60e51b815260206004820152601160248201527f556e697377617056323a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b6000600f81905580610de3610c06565b50600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015610e3757600080fd5b505afa158015610e4b573d6000803e3d6000fd5b505050506040513d6020811015610e6157600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610eb457600080fd5b505afa158015610ec8573d6000803e3d6000fd5b505050506040513d6020811015610ede57600080fd5b505190506000610efe836dffffffffffffffffffffffffffff871661208e565b90506000610f1c836dffffffffffffffffffffffffffff871661208e565b90506000610f2a8787612492565b6000549091508061114757600554604080517f7cd07e4700000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691637cd07e47916004808301926020929190829003018186803b158015610f9357600080fd5b505afa158015610fa7573d6000803e3d6000fd5b505050506040513d6020811015610fbd57600080fd5b50519050336001600160a01b03821614156110be57806001600160a01b03166340dc0e376040518163ffffffff1660e01b815260040160206040518083038186803b15801561100b57600080fd5b505afa15801561101f573d6000803e3d6000fd5b505050506040513d602081101561103557600080fd5b50519950891580159061106857507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8a14155b6110b9576040805162461bcd60e51b815260206004820152601560248201527f4261642064657369726564206c69717569646974790000000000000000000000604482015290519081900360640190fd5b611141565b6001600160a01b0381161561111a576040805162461bcd60e51b815260206004820152601660248201527f4d757374206e6f742068617665206d69677261746f7200000000000000000000604482015290519081900360640190fd5b6111326103e8610aae61112d8888612022565b61260b565b995061114160006103e861265d565b50611198565b6111956dffffffffffffffffffffffffffff89166111658684612022565b8161116c57fe5b046dffffffffffffffffffffffffffff89166111888685612022565b8161118f57fe5b046126e7565b98505b600089116111d75760405162461bcd60e51b815260040180806020018281038252602881526020018061291b6028913960400191505060405180910390fd5b6111e18a8a61265d565b6111ed86868a8a6120e6565b811561122957600854611225906dffffffffffffffffffffffffffff808216916e010000000000000000000000000000900416612022565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600f5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600f546001146112fa576040805162461bcd60e51b815260206004820152601160248201527f556e697377617056323a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b6000600f8190558061130a610c06565b50600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b15801561136657600080fd5b505afa15801561137a573d6000803e3d6000fd5b505050506040513d602081101561139057600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b1580156113de57600080fd5b505afa1580156113f2573d6000803e3d6000fd5b505050506040513d602081101561140857600080fd5b5051306000908152600160205260408120549192506114278888612492565b600054909150806114388487612022565b8161143f57fe5b049a508061144d8486612022565b8161145457fe5b04995060008b118015611467575060008a115b6114a25760405162461bcd60e51b81526004018080602001828103825260288152602001806128f36028913960400191505060405180910390fd5b6114ac30846126ff565b6114b7878d8d611e5a565b6114c2868d8c611e5a565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b15801561150857600080fd5b505afa15801561151c573d6000803e3d6000fd5b505050506040513d602081101561153257600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b15801561157e57600080fd5b505afa158015611592573d6000803e3d6000fd5b505050506040513d60208110156115a857600080fd5b505193506115b885858b8b6120e6565b81156115f4576008546115f0906dffffffffffffffffffffffffffff808216916e010000000000000000000000000000900416612022565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600f81905550915091565b6040518060400160405280600481526020017f53534c500000000000000000000000000000000000000000000000000000000081525081565b600e5481565b6000610c683384846123e4565b6103e881565b600f546001146116fb576040805162461bcd60e51b815260206004820152601160248201527f556e697377617056323a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b6000600f55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b0394851694909316926117ab92859287926117a6926dffffffffffffffffffffffffffff169185916370a0823191602480820192602092909190829003018186803b15801561177457600080fd5b505afa158015611788573d6000803e3d6000fd5b505050506040513d602081101561179e57600080fd5b50519061208e565b611e5a565b61182d81846117a66008600e9054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff16856001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561177457600080fd5b50506001600f5550565b6005546001600160a01b031681565b6005546001600160a01b031633146118a5576040805162461bcd60e51b815260206004820152601460248201527f556e697377617056323a20464f5242494444454e000000000000000000000000604482015290519081900360640190fd5b600082116118fa576040805162461bcd60e51b815260206004820152601d60248201527f5f616c706861206d7573742062652067726561746572207468616e2030000000604482015290519081900360640190fd5b8181116119385760405162461bcd60e51b81526004018080602001828103825260268152602001806129436026913960400191505060405180910390fd5b600083116119775760405162461bcd60e51b815260040180806020018281038252603a8152602001806128b9603a913960400191505060405180910390fd5b600680546001600160a01b039687167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216179091556007805495909616941693909317909355600c55600d91909155600e55565b6007546001600160a01b031681565b42841015611a31576040805162461bcd60e51b815260206004820152601260248201527f556e697377617056323a20455850495245440000000000000000000000000000604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e0850182528051908301207f19010000000000000000000000000000000000000000000000000000000000006101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa158015611b67573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811615801590611b9d5750886001600160a01b0316816001600160a01b0316145b611bee576040805162461bcd60e51b815260206004820152601c60248201527f556e697377617056323a20494e56414c49445f5349474e415455524500000000604482015290519081900360640190fd5b611bf9898989612382565b505050505050505050565b600d5481565b600260209081526000928352604080842090915290825290205481565b6005546001600160a01b03163314611c86576040805162461bcd60e51b815260206004820152601460248201527f556e697377617056323a20464f5242494444454e000000000000000000000000604482015290519081900360640190fd5b600c839055600d829055600e819055604080518481526020810184905280820183905290517f509d432c4ab40e3eb039ee95fea93be8de6c751efa87aed5e51c7202b0dd8e099181900360600190a1505050565b600f54600114611d31576040805162461bcd60e51b815260206004820152601160248201527f556e697377617056323a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b6000600f55600654604080516370a0823160e01b81523060048201529051611e53926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015611d8257600080fd5b505afa158015611d96573d6000803e3d6000fd5b505050506040513d6020811015611dac57600080fd5b5051600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015611df957600080fd5b505afa158015611e0d573d6000803e3d6000fd5b505050506040513d6020811015611e2357600080fd5b50516008546dffffffffffffffffffffffffffff808216916e0100000000000000000000000000009004166120e6565b6001600f55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251815160009460609489169392918291908083835b60208310611f355780518252601f199092019160209182019101611f16565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611f97576040519150601f19603f3d011682016040523d82523d6000602084013e611f9c565b606091505b5091509150818015611fca575080511580611fca5750808060200190516020811015611fc757600080fd5b50515b61201b576040805162461bcd60e51b815260206004820152601a60248201527f556e697377617056323a205452414e534645525f4641494c4544000000000000604482015290519081900360640190fd5b5050505050565b600081158061203d5750508082028282828161203a57fe5b04145b610c6c576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b80820382811115610c6c576040805162461bcd60e51b815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6dffffffffffffffffffffffffffff841180159061211257506dffffffffffffffffffffffffffff8311155b612163576040805162461bcd60e51b815260206004820152601360248201527f556e697377617056323a204f564552464c4f5700000000000000000000000000604482015290519081900360640190fd5b60085463ffffffff428116917c0100000000000000000000000000000000000000000000000000000000900481168203908116158015906121b357506dffffffffffffffffffffffffffff841615155b80156121ce57506dffffffffffffffffffffffffffff831615155b15612278578063ffffffff1661220b856121e786612791565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16906127b5565b600980547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff929092169290920201905563ffffffff811661224b846121e787612791565b600a80547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff92909216929092020190555b600880547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000166dffffffffffffffffffffffffffff888116919091177fffffffff0000000000000000000000000000ffffffffffffffffffffffffffff166e0100000000000000000000000000008883168102919091177bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c010000000000000000000000000000000000000000000000000000000063ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316600090815260016020526040902054612407908261208e565b6001600160a01b03808516600090815260016020526040808220939093559084168152205461243690826127f6565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b1580156124e357600080fd5b505afa1580156124f7573d6000803e3d6000fd5b505050506040513d602081101561250d57600080fd5b5051600b546001600160a01b0382161580159450919250906125f75780156125f257600061255161112d6dffffffffffffffffffffffffffff888116908816612022565b9050600061255e8361260b565b9050808211156125ef57600d5460009061258890610af661257f868661208e565b60005490612022565b905060006125cb6125a4600d548561202290919063ffffffff16565b6125c56125be600d54600e5461208e90919063ffffffff16565b8790612022565b906127f6565b905060008183816125d857fe5b04905080156125eb576125eb878261265d565b5050505b50505b612603565b8015612603576000600b555b505092915050565b6000600382111561264e575080600160028204015b818110156126485780915060028182858161263757fe5b04018161264057fe5b049050612620565b50612658565b8115612658575060015b919050565b60005461266a90826127f6565b60009081556001600160a01b03831681526001602052604090205461268f90826127f6565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008183106126f657816126f8565b825b9392505050565b6001600160a01b038216600090815260016020526040902054612722908261208e565b6001600160a01b03831660009081526001602052604081209190915554612749908261208e565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6dffffffffffffffffffffffffffff166e0100000000000000000000000000000290565b60006dffffffffffffffffffffffffffff82167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8416816127ee57fe5b049392505050565b80820182811015610c6c576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fdfe556e697377617056323a20494e53554646494349454e545f4f55545055545f414d4f554e54556e697377617056323a20494e53554646494349454e545f494e5055545f414d4f554e54556e697377617056323a20494e53554646494349454e545f4c4951554944495459746f74616c4665652073686f756c64206e6f7420626520302c2077686963682077696c6c20616c6c6f77206672656520666c6173682073776170556e697377617056323a20494e53554646494349454e545f4c49515549444954595f4255524e4544556e697377617056323a20494e53554646494349454e545f4c49515549444954595f4d494e544544626574612073686f756c6420616c77617973206265206c61746572207468616e20616c706861a2646970667358221220b562054fd180879e709cb9f95feb3c261a153a823344d5c22c2f0cda0c56df5d64736f6c634300060c0033a2646970667358221220124837b039c2328490a323f2b83cbcd68dc047f4fc1ccf2ba3fe1aec4cb3b5c264736f6c634300060c0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000c7d0445ac2947760b3dd388b8586adf079972bf3000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000050000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2

-----Decoded View---------------
Arg [0] : _feeToSetter (address): 0xc7D0445ac2947760b3dD388B8586Adf079972Bf3
Arg [1] : coinAddress (address[]): 0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599,0xdAC17F958D2ee523a2206206994597C13D831ec7,0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48,0x6B175474E89094C44Da98b954EedeAC495271d0F,0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 000000000000000000000000c7d0445ac2947760b3dd388b8586adf079972bf3
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [3] : 0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599
Arg [4] : 000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7
Arg [5] : 000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
Arg [6] : 0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f
Arg [7] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2


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
Loading...
Loading
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.