Contract 0x50576Ed9D94cF934Bc32abf76e08EC6DdCd54BF0 2

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x61b8fdd62687a71372f4dec545587081c7123f740d71af46b420fcb98e026673Approve447861452022-08-13 2:00:203 days 4 hrs ago0xc7516d136befdd0a3e5cdd916eebf70f90e03dc9 IN  0x50576ed9d94cf934bc32abf76e08ec6ddcd54bf00 FTM0.000111196107
0x39ade6896669b31bb651e572cc8e71c299390f16adf3bf1d674c403057752b03Approve441299872022-08-03 9:46:3512 days 21 hrs ago0x922731d7e2a193870f438abfc89f3c38df821190 IN  0x50576ed9d94cf934bc32abf76e08ec6ddcd54bf00 FTM0.000042661667
0x42364cfaa9dcc5b66786e9126ca51e440739371a8bbace1b00465a52035aa843Approve441299612022-08-03 9:46:0812 days 21 hrs ago0x922731d7e2a193870f438abfc89f3c38df821190 IN  0x50576ed9d94cf934bc32abf76e08ec6ddcd54bf00 FTM0.000042661667
0x1c33e8d9e43deee38567e452ea02ade773f623a753b74282b5a37a8124871a1aApprove441299592022-08-03 9:46:0612 days 21 hrs ago0x922731d7e2a193870f438abfc89f3c38df821190 IN  0x50576ed9d94cf934bc32abf76e08ec6ddcd54bf00 FTM0.000042661667
0x3e0b723e89b6b7ea6645cbd5924493c4d9f7ec869fe13775a7525537bcf23d7bApprove441299522022-08-03 9:45:5912 days 21 hrs ago0x922731d7e2a193870f438abfc89f3c38df821190 IN  0x50576ed9d94cf934bc32abf76e08ec6ddcd54bf00 FTM0.000042661667
0xe7dce0ba1ff92c220e805be1ef84bd2e8fcf399c04271635b374d1eabba8c960Approve441299492022-08-03 9:45:5612 days 21 hrs ago0x922731d7e2a193870f438abfc89f3c38df821190 IN  0x50576ed9d94cf934bc32abf76e08ec6ddcd54bf00 FTM0.000039175088
0x737c8a7b97f781e0dee597a6260424f04f8a23640ac9306358529a0b8345eb49Approve429835032022-07-17 20:09:0429 days 10 hrs ago0x9bdbdb4a8f7f816c87a67f5281484ed902c6b942 IN  0x50576ed9d94cf934bc32abf76e08ec6ddcd54bf00 FTM0.000071424869
0xdf1c39388333a507060976aee944e5a5de46080e3622f74065d293a6bed1209bApprove416491672022-06-29 23:36:2947 days 7 hrs ago0x26cabc7528854005635a7f29c6929a691bbd07ef IN  0x50576ed9d94cf934bc32abf76e08ec6ddcd54bf00 FTM0.000222329631
0xdb626d36d670698fb90278ba621dc1f485889d86a1aa8b897540685e276b7a9cApprove393421562022-05-29 19:13:3978 days 11 hrs ago0x38a411bc1b8757ce4d251548187d0b215205ca71 IN  0x50576ed9d94cf934bc32abf76e08ec6ddcd54bf00 FTM0.000076854
0x410e324a35017897a2905dff7fe528d7d0e6b70d5f31646fab537345a9d1302fApprove386824872022-05-20 20:15:1587 days 10 hrs ago0x848a9126ff57004aa8bfdc99384f36a4754d4367 IN  0x50576ed9d94cf934bc32abf76e08ec6ddcd54bf00 FTM0.001465410923
0x26d6cd2ed36e28f8ba225cca8c622b8efcf9bfe34ce631904cd10258af6ff452Approve386808372022-05-20 19:44:2387 days 11 hrs ago0x848a9126ff57004aa8bfdc99384f36a4754d4367 IN  0x50576ed9d94cf934bc32abf76e08ec6ddcd54bf00 FTM0.00908647792
0x92afdd03dc954dfe6708dd1d0eb67012d6545d8eb02f6a9bf46ad21d4578162aApprove381701172022-05-13 19:14:3494 days 11 hrs ago0xdb5b4853ceabf6d8e08d73fddfa80f507ef9fba4 IN  0x50576ed9d94cf934bc32abf76e08ec6ddcd54bf00 FTM0.020895545211
0x864f73fbef227a1459bde72bc93d4dcb200d8b80c5f9f394a5f7aeb0e57f89d7Approve358933582022-04-12 17:20:43125 days 13 hrs ago0xe14e1fb07f78bbcb41f1f1209519290771ff6f58 IN  0x50576ed9d94cf934bc32abf76e08ec6ddcd54bf00 FTM0.00825214594
0xa1f49b68852cfdc1ce03ef5617dfd6b86a0e2b597ab357d5ce0e26840c743aecApprove358932692022-04-12 17:18:56125 days 13 hrs ago0xe14e1fb07f78bbcb41f1f1209519290771ff6f58 IN  0x50576ed9d94cf934bc32abf76e08ec6ddcd54bf00 FTM0.004232614115
0xffee85b26b902eebc366090c148b3a3660903b6cf424b33cffe160648baf6e70Approve340613262022-03-22 0:00:36147 days 6 hrs ago0xed9a912182745fe101ecb4291d00b802d982ba0f IN  0x50576ed9d94cf934bc32abf76e08ec6ddcd54bf00 FTM0.006161720479
0x48a9cb0837ddbe2c4ae745aa5c086d8630328b9b8078bc06c0c1d38481c8e977Approve334687372022-03-15 6:53:56153 days 23 hrs ago0x97fe467dc71ca04e179c7061d9d895a889e2d30d IN  0x50576ed9d94cf934bc32abf76e08ec6ddcd54bf00 FTM0.005026973579
0xb9c83804f932d36fc39396db7bdcb40303f9d0dda07a095fe1f80f60e29192aaApprove296618352022-02-01 7:45:29195 days 23 hrs ago0xe4ad956351e80a6e002357637d9533c2949eb4ab IN  0x50576ed9d94cf934bc32abf76e08ec6ddcd54bf00 FTM0.002781636
0xde3f443e1eca30113efd5f57f98bd04243cd052ca46e421f0e159b4c298cbc7fApprove283477882022-01-18 13:49:10209 days 17 hrs ago0x62de3d0bbd1f2d30aeb97c393d148cec5087fa61 IN  0x50576ed9d94cf934bc32abf76e08ec6ddcd54bf00 FTM0.014097043417
0x86401be7201e94c64a6e480308f54202e213958f215f951a8809d9c86a3dee2eApprove283473482022-01-18 13:42:53209 days 17 hrs ago0x62de3d0bbd1f2d30aeb97c393d148cec5087fa61 IN  0x50576ed9d94cf934bc32abf76e08ec6ddcd54bf00 FTM0.00999476588
0x423b1ebe2f70d78b85d60b09a80d8824c9569acca6b9ee295e790f1764e62be9Approve238055092021-12-02 20:08:39256 days 10 hrs ago0x9e138c3c1249f1627168d02359a4ba82e5f2ebd4 IN  0x50576ed9d94cf934bc32abf76e08ec6ddcd54bf00 FTM0.007024136608
0x4114121aee38499620bc3dc68de27e9ed4e78591506f570ccc8b6bec9115d02aApprove238052612021-12-02 20:04:36256 days 10 hrs ago0x9e138c3c1249f1627168d02359a4ba82e5f2ebd4 IN  0x50576ed9d94cf934bc32abf76e08ec6ddcd54bf00 FTM0.007465822669
0x512ff6de6a4127e5f7939309a56c436c57844c67e83c045e2e593ebf8a1f31faApprove238052572021-12-02 20:04:31256 days 10 hrs ago0x9e138c3c1249f1627168d02359a4ba82e5f2ebd4 IN  0x50576ed9d94cf934bc32abf76e08ec6ddcd54bf00 FTM0.007465822669
0x88f53ecc533e77f39ead39396af046f0095566ae39459fc7ef24f89d3ae5c213Approve238052532021-12-02 20:04:27256 days 10 hrs ago0x9e138c3c1249f1627168d02359a4ba82e5f2ebd4 IN  0x50576ed9d94cf934bc32abf76e08ec6ddcd54bf00 FTM0.00764666965
0x51fdcce6fb0e0e3014d662d6b9daa0b6d8f3359cc0431c493692df3d5cb57c1bApprove238052512021-12-02 20:04:25256 days 10 hrs ago0x9e138c3c1249f1627168d02359a4ba82e5f2ebd4 IN  0x50576ed9d94cf934bc32abf76e08ec6ddcd54bf00 FTM0.004425871036
0xa22cdb7aae9fb9b561eeaadd1a0b0c8716a50840ae08ac50358bd1bea5c3a772Approve216071832021-11-10 5:06:23279 days 1 hr ago0x0b33284c2455ce5453568eb7593474099cb512b0 IN  0x50576ed9d94cf934bc32abf76e08ec6ddcd54bf00 FTM0.005478601471
[ Download CSV Export 
Latest 1 internal transaction
Parent Txn Hash Block From To Value
0x8cd5d8475c6487293950402998f258b6803ff971260199afc16f342e90389c3167129352021-05-17 13:00:45455 days 17 hrs ago SushiSwap: V2 Factory  Contract Creation0 FTM
[ Download CSV Export 
Loading

Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0x175372f481847ca1a4cf983c5fcec58411161e9f

Contract Name:
UniswapV2Pair

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at FtmScan.com on 2021-11-26
*/

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 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: contracts/uniswapv2/libraries/SafeMath.sol

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');
    }
}

// File: contracts/uniswapv2/UniswapV2ERC20.sol

pragma solidity =0.6.12;


contract UniswapV2ERC20 {
    using SafeMathUniswap for uint;

    string public constant name = 'SushiSwap LP Token';
    string public constant symbol = 'SLP';
    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: contracts/uniswapv2/libraries/Math.sol

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: contracts/uniswapv2/libraries/UQ112x112.sol

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: contracts/uniswapv2/interfaces/IERC20.sol

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: contracts/uniswapv2/interfaces/IUniswapV2Callee.sol

pragma solidity >=0.5.0;

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

// File: contracts/uniswapv2/UniswapV2Pair.sol

pragma solidity =0.6.12;








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 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);

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

    // called once by the factory at time of deployment
    function initialize(address _token0, address _token1) external {
        require(msg.sender == factory, 'UniswapV2: FORBIDDEN'); // sufficient check
        token0 = _token0;
        token1 = _token1;
    }

    // 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 1/6th 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));
                    uint denominator = rootK.mul(5).add(rootKLast);
                    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(3));
        uint balance1Adjusted = balance1.mul(1000).sub(amount1In.mul(3));
        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);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0In","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1In","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount0Out","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1Out","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint112","name":"reserve0","type":"uint112"},{"indexed":false,"internalType":"uint112","name":"reserve1","type":"uint112"}],"name":"Sync","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINIMUM_LIQUIDITY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"burn","outputs":[{"internalType":"uint256","name":"amount0","type":"uint256"},{"internalType":"uint256","name":"amount1","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReserves","outputs":[{"internalType":"uint112","name":"_reserve0","type":"uint112"},{"internalType":"uint112","name":"_reserve1","type":"uint112"},{"internalType":"uint32","name":"_blockTimestampLast","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token0","type":"address"},{"internalType":"address","name":"_token1","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"kLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"mint","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"price0CumulativeLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price1CumulativeLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"skim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount0Out","type":"uint256"},{"internalType":"uint256","name":"amount1Out","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"swap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sync","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token0","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

60806040526001600c5534801561001557600080fd5b50604080518082018252601281527129bab9b434a9bbb0b8102628102a37b5b2b760711b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527fefbffe65652a145845c9bc8d0532945be6b9830fe1e9966c887bd298e551ac83818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528351808303909101815260c09091019092528151910120600355600580546001600160a01b03191633179055612377806101106000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80636a627842116100f9578063ba9a7a5611610097578063d21220a711610071578063d21220a714610534578063d505accf1461053c578063dd62ed3e1461058d578063fff6cae9146105bb576101a9565b8063ba9a7a56146104fe578063bc25cf7714610506578063c45a01551461052c576101a9565b80637ecebe00116100d35780637ecebe001461046557806389afcb441461048b57806395d89b41146104ca578063a9059cbb146104d2576101a9565b80636a6278421461041157806370a08231146104375780637464fc3d1461045d576101a9565b806323b872dd116101665780633644e515116101405780633644e515146103cb578063485cc955146103d35780635909c0d5146104015780635a3d549314610409576101a9565b806323b872dd1461036f57806330adf81f146103a5578063313ce567146103ad576101a9565b8063022c0d9f146101ae57806306fdde031461023c5780630902f1ac146102b9578063095ea7b3146102f15780630dfe16811461033157806318160ddd14610355575b600080fd5b61023a600480360360808110156101c457600080fd5b8135916020810135916001600160a01b0360408301351691908101906080810160608201356401000000008111156101fb57600080fd5b82018360208201111561020d57600080fd5b8035906020019184600183028401116401000000008311171561022f57600080fd5b5090925090506105c3565b005b610244610acb565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561027e578181015183820152602001610266565b50505050905090810190601f1680156102ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c1610af9565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b61031d6004803603604081101561030757600080fd5b506001600160a01b038135169060200135610b23565b604080519115158252519081900360200190f35b610339610b3a565b604080516001600160a01b039092168252519081900360200190f35b61035d610b49565b60408051918252519081900360200190f35b61031d6004803603606081101561038557600080fd5b506001600160a01b03813581169160208101359091169060400135610b4f565b61035d610be3565b6103b5610c07565b6040805160ff9092168252519081900360200190f35b61035d610c0c565b61023a600480360360408110156103e957600080fd5b506001600160a01b0381358116916020013516610c12565b61035d610c96565b61035d610c9c565b61035d6004803603602081101561042757600080fd5b50356001600160a01b0316610ca2565b61035d6004803603602081101561044d57600080fd5b50356001600160a01b031661111e565b61035d611130565b61035d6004803603602081101561047b57600080fd5b50356001600160a01b0316611136565b6104b1600480360360208110156104a157600080fd5b50356001600160a01b0316611148565b6040805192835260208301919091528051918290030190f35b6102446114dc565b61031d600480360360408110156104e857600080fd5b506001600160a01b0381351690602001356114fb565b61035d611508565b61023a6004803603602081101561051c57600080fd5b50356001600160a01b031661150e565b610339611680565b61033961168f565b61023a600480360360e081101561055257600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c0013561169e565b61035d600480360360408110156105a357600080fd5b506001600160a01b03813581169160200135166118a0565b61023a6118bd565b600c5460011461060e576040805162461bcd60e51b8152602060048201526011602482015270155b9a5cddd85c158c8e881313d0d2d151607a1b604482015290519081900360640190fd5b6000600c55841515806106215750600084115b61065c5760405162461bcd60e51b81526004018080602001828103825260258152602001806122886025913960400191505060405180910390fd5b600080610667610af9565b5091509150816001600160701b03168710801561068c5750806001600160701b031686105b6106c75760405162461bcd60e51b81526004018080602001828103825260218152602001806122d16021913960400191505060405180910390fd5b60065460075460009182916001600160a01b039182169190811690891682148015906107055750806001600160a01b0316896001600160a01b031614155b61074e576040805162461bcd60e51b8152602060048201526015602482015274556e697377617056323a20494e56414c49445f544f60581b604482015290519081900360640190fd5b8a1561075f5761075f828a8d611a1f565b891561077057610770818a8c611a1f565b861561082257886001600160a01b03166310d1e85c338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561080957600080fd5b505af115801561081d573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561086857600080fd5b505afa15801561087c573d6000803e3d6000fd5b505050506040513d602081101561089257600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b1580156108de57600080fd5b505afa1580156108f2573d6000803e3d6000fd5b505050506040513d602081101561090857600080fd5b5051925060009150506001600160701b0385168a9003831161092b57600061093a565b89856001600160701b03160383035b9050600089856001600160701b0316038311610957576000610966565b89856001600160701b03160383035b905060008211806109775750600081115b6109b25760405162461bcd60e51b81526004018080602001828103825260248152602001806122ad6024913960400191505060405180910390fd5b60006109d46109c2846003611bb9565b6109ce876103e8611bb9565b90611c1c565b905060006109e66109c2846003611bb9565b9050610a0b620f4240610a056001600160701b038b8116908b16611bb9565b90611bb9565b610a158383611bb9565b1015610a57576040805162461bcd60e51b815260206004820152600c60248201526b556e697377617056323a204b60a01b604482015290519081900360640190fd5b5050610a6584848888611c6c565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600c55505050505050505050565b6040518060400160405280601281526020017129bab9b434a9bbb0b8102628102a37b5b2b760711b81525081565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610b30338484611e2b565b5060015b92915050565b6006546001600160a01b031681565b60005481565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610bce576001600160a01b0384166000908152600260209081526040808320338452909152902054610ba99083611c1c565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610bd9848484611e8d565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b6005546001600160a01b03163314610c68576040805162461bcd60e51b81526020600482015260146024820152732ab734b9bbb0b82b191d102327a92124a22222a760611b604482015290519081900360640190fd5b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b60095481565b600a5481565b6000600c54600114610cef576040805162461bcd60e51b8152602060048201526011602482015270155b9a5cddd85c158c8e881313d0d2d151607a1b604482015290519081900360640190fd5b6000600c81905580610cff610af9565b50600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015610d5357600080fd5b505afa158015610d67573d6000803e3d6000fd5b505050506040513d6020811015610d7d57600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610dd057600080fd5b505afa158015610de4573d6000803e3d6000fd5b505050506040513d6020811015610dfa57600080fd5b505190506000610e13836001600160701b038716611c1c565b90506000610e2a836001600160701b038716611c1c565b90506000610e388787611f3b565b6000549091508061100f5760055460408051637cd07e4760e01b815290516000926001600160a01b031691637cd07e47916004808301926020929190829003018186803b158015610e8857600080fd5b505afa158015610e9c573d6000803e3d6000fd5b505050506040513d6020811015610eb257600080fd5b50519050336001600160a01b0382161415610f8d57806001600160a01b03166340dc0e376040518163ffffffff1660e01b815260040160206040518083038186803b158015610f0057600080fd5b505afa158015610f14573d6000803e3d6000fd5b505050506040513d6020811015610f2a57600080fd5b505199508915801590610f3f57506000198a14155b610f88576040805162461bcd60e51b81526020600482015260156024820152744261642064657369726564206c697175696469747960581b604482015290519081900360640190fd5b611009565b6001600160a01b03811615610fe2576040805162461bcd60e51b815260206004820152601660248201527526bab9ba103737ba103430bb329036b4b3b930ba37b960511b604482015290519081900360640190fd5b610ffa6103e86109ce610ff58888611bb9565b61207b565b995061100960006103e86120cd565b50611052565b61104f6001600160701b0389166110268684611bb9565b8161102d57fe5b046001600160701b0389166110428685611bb9565b8161104957fe5b04612157565b98505b600089116110915760405162461bcd60e51b815260040180806020018281038252602881526020018061231a6028913960400191505060405180910390fd5b61109b8a8a6120cd565b6110a786868a8a611c6c565b81156110d1576008546110cd906001600160701b0380821691600160701b900416611bb9565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600c5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600c54600114611196576040805162461bcd60e51b8152602060048201526011602482015270155b9a5cddd85c158c8e881313d0d2d151607a1b604482015290519081900360640190fd5b6000600c819055806111a6610af9565b50600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b15801561120257600080fd5b505afa158015611216573d6000803e3d6000fd5b505050506040513d602081101561122c57600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b15801561127a57600080fd5b505afa15801561128e573d6000803e3d6000fd5b505050506040513d60208110156112a457600080fd5b5051306000908152600160205260408120549192506112c38888611f3b565b600054909150806112d48487611bb9565b816112db57fe5b049a50806112e98486611bb9565b816112f057fe5b04995060008b118015611303575060008a115b61133e5760405162461bcd60e51b81526004018080602001828103825260288152602001806122f26028913960400191505060405180910390fd5b611348308461216f565b611353878d8d611a1f565b61135e868d8c611a1f565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b1580156113a457600080fd5b505afa1580156113b8573d6000803e3d6000fd5b505050506040513d60208110156113ce57600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b15801561141a57600080fd5b505afa15801561142e573d6000803e3d6000fd5b505050506040513d602081101561144457600080fd5b5051935061145485858b8b611c6c565b811561147e5760085461147a906001600160701b0380821691600160701b900416611bb9565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600c81905550915091565b604051806040016040528060038152602001620534c560ec1b81525081565b6000610b30338484611e8d565b6103e881565b600c54600114611559576040805162461bcd60e51b8152602060048201526011602482015270155b9a5cddd85c158c8e881313d0d2d151607a1b604482015290519081900360640190fd5b6000600c55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b03948516949093169261160292859287926115fd926001600160701b03169185916370a0823191602480820192602092909190829003018186803b1580156115cb57600080fd5b505afa1580156115df573d6000803e3d6000fd5b505050506040513d60208110156115f557600080fd5b505190611c1c565b611a1f565b61167681846115fd6008600e9054906101000a90046001600160701b03166001600160701b0316856001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156115cb57600080fd5b50506001600c5550565b6005546001600160a01b031681565b6007546001600160a01b031681565b428410156116e8576040805162461bcd60e51b8152602060048201526012602482015271155b9a5cddd85c158c8e881156141254915160721b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa158015611803573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906118395750886001600160a01b0316816001600160a01b0316145b61188a576040805162461bcd60e51b815260206004820152601c60248201527f556e697377617056323a20494e56414c49445f5349474e415455524500000000604482015290519081900360640190fd5b611895898989611e2b565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b600c54600114611908576040805162461bcd60e51b8152602060048201526011602482015270155b9a5cddd85c158c8e881313d0d2d151607a1b604482015290519081900360640190fd5b6000600c55600654604080516370a0823160e01b81523060048201529051611a18926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561195957600080fd5b505afa15801561196d573d6000803e3d6000fd5b505050506040513d602081101561198357600080fd5b5051600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156119d057600080fd5b505afa1580156119e4573d6000803e3d6000fd5b505050506040513d60208110156119fa57600080fd5b50516008546001600160701b0380821691600160701b900416611c6c565b6001600c55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b60208310611acc5780518252601f199092019160209182019101611aad565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611b2e576040519150601f19603f3d011682016040523d82523d6000602084013e611b33565b606091505b5091509150818015611b61575080511580611b615750808060200190516020811015611b5e57600080fd5b50515b611bb2576040805162461bcd60e51b815260206004820152601a60248201527f556e697377617056323a205452414e534645525f4641494c4544000000000000604482015290519081900360640190fd5b5050505050565b6000811580611bd457505080820282828281611bd157fe5b04145b610b34576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820382811115610b34576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160701b038411801590611c8a57506001600160701b038311155b611cd1576040805162461bcd60e51b8152602060048201526013602482015272556e697377617056323a204f564552464c4f5760681b604482015290519081900360640190fd5b60085463ffffffff42811691600160e01b90048116820390811615801590611d0157506001600160701b03841615155b8015611d1557506001600160701b03831615155b15611d80578063ffffffff16611d3d85611d2e86612201565b6001600160e01b031690612213565b600980546001600160e01b03929092169290920201905563ffffffff8116611d6884611d2e87612201565b600a80546001600160e01b0392909216929092020190555b600880546dffffffffffffffffffffffffffff19166001600160701b03888116919091176dffffffffffffffffffffffffffff60701b1916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316600090815260016020526040902054611eb09082611c1c565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611edf9082612238565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611f8c57600080fd5b505afa158015611fa0573d6000803e3d6000fd5b505050506040513d6020811015611fb657600080fd5b5051600b546001600160a01b038216158015945091925090612067578015612062576000611ff3610ff56001600160701b03888116908816611bb9565b905060006120008361207b565b90508082111561205f5760006120226120198484611c1c565b60005490611bb9565b9050600061203b83612035866005611bb9565b90612238565b9050600081838161204857fe5b049050801561205b5761205b87826120cd565b5050505b50505b612073565b8015612073576000600b555b505092915050565b600060038211156120be575080600160028204015b818110156120b8578091506002818285816120a757fe5b0401816120b057fe5b049050612090565b506120c8565b81156120c8575060015b919050565b6000546120da9082612238565b60009081556001600160a01b0383168152600160205260409020546120ff9082612238565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008183106121665781612168565b825b9392505050565b6001600160a01b0382166000908152600160205260409020546121929082611c1c565b6001600160a01b038316600090815260016020526040812091909155546121b99082611c1c565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b0384168161223057fe5b049392505050565b80820182811015610b34576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe556e697377617056323a20494e53554646494349454e545f4f55545055545f414d4f554e54556e697377617056323a20494e53554646494349454e545f494e5055545f414d4f554e54556e697377617056323a20494e53554646494349454e545f4c4951554944495459556e697377617056323a20494e53554646494349454e545f4c49515549444954595f4255524e4544556e697377617056323a20494e53554646494349454e545f4c49515549444954595f4d494e544544a2646970667358221220713a8bf21df06433f34b5c9abf186abb737e72524583bdf420105a289791e24864736f6c634300060c0033

Deployed ByteCode Sourcemap

7655:10161:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15292:1903;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15292:1903:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15292:1903:0;;-1:-1:-1;15292:1903:0;-1:-1:-1;15292:1903:0;:::i;:::-;;1578:50;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8667:231;;;:::i;:::-;;;;-1:-1:-1;;;;;8667:231:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3632:147;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3632:147:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;7956:21;;;:::i;:::-;;;;-1:-1:-1;;;;;7956:21:0;;;;;;;;;;;;;;1721:24;;;:::i;:::-;;;;;;;;;;;;;;;;3934:301;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3934:301:0;;;;;;;;;;;;;;;;;:::i;2013:108::-;;;:::i;1679:35::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1870:31;;;:::i;9727:210::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;9727:210:0;;;;;;;;;;:::i;8307:32::-;;;:::i;8346:::-;;;:::i;11921:1653::-;;;;;;;;;;;;;;;;-1:-1:-1;11921:1653:0;-1:-1:-1;;;;;11921:1653:0;;:::i;1752:41::-;;;;;;;;;;;;;;;;-1:-1:-1;1752:41:0;-1:-1:-1;;;;;1752:41:0;;:::i;8385:17::-;;;:::i;2128:38::-;;;;;;;;;;;;;;;;-1:-1:-1;2128:38:0;-1:-1:-1;;;;;2128:38:0;;:::i;13686:1494::-;;;;;;;;;;;;;;;;-1:-1:-1;13686:1494:0;-1:-1:-1;;;;;13686:1494:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1635:37;;;:::i;3787:139::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3787:139:0;;;;;;;;:::i;7777:46::-;;;:::i;17244:348::-;;;;;;;;;;;;;;;;-1:-1:-1;17244:348:0;-1:-1:-1;;;;;17244:348:0;;:::i;7927:22::-;;;:::i;7984:21::-;;;:::i;4243:674::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4243:674:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;1800:61::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1800:61:0;;;;;;;;;;:::i;17641:172::-;;;:::i;15292:1903::-;8558:8;;8570:1;8558:13;8550:43;;;;;-1:-1:-1;;;8550:43:0;;;;;;;;;;;;-1:-1:-1;;;8550:43:0;;;;;;;;;;;;;;;8615:1;8604:8;:12;15406:14;;;;:32:::1;;;15437:1;15424:10;:14;15406:32;15398:82;;;;-1:-1:-1::0;;;15398:82:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15492:17;15511::::0;15533:13:::1;:11;:13::i;:::-;15491:55;;;;;15593:9;-1:-1:-1::0;;;;;15580:22:0::1;:10;:22;:48;;;;;15619:9;-1:-1:-1::0;;;;;15606:22:0::1;:10;:22;15580:48;15572:94;;;;-1:-1:-1::0;;;15572:94:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15811:6;::::0;15846::::1;::::0;15679:13:::1;::::0;;;-1:-1:-1;;;;;15811:6:0;;::::1;::::0;15846;;::::1;::::0;15871:13;::::1;::::0;::::1;::::0;::::1;::::0;:30:::1;;;15894:7;-1:-1:-1::0;;;;;15888:13:0::1;:2;-1:-1:-1::0;;;;;15888:13:0::1;;;15871:30;15863:64;;;::::0;;-1:-1:-1;;;15863:64:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;15863:64:0;;;;;;;;;;;;;::::1;;15942:14:::0;;15938:58:::1;;15958:38;15972:7;15981:2;15985:10;15958:13;:38::i;:::-;16045:14:::0;;16041:58:::1;;16061:38;16075:7;16084:2;16088:10;16061:13;:38::i;:::-;16148:15:::0;;16144:97:::1;;16182:2;-1:-1:-1::0;;;;;16165:34:0::1;;16200:10;16212;16224;16236:4;;16165:76;;;;;;;;;;;;;-1:-1:-1::0;;;;;16165:76:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16144:97;16263:47;::::0;;-1:-1:-1;;;16263:47:0;;16304:4:::1;16263:47;::::0;::::1;::::0;;;-1:-1:-1;;;;;16263:32:0;::::1;::::0;::::1;::::0;:47;;;;;::::1;::::0;;;;;;;;:32;:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;16263:47:0;16332::::1;::::0;;-1:-1:-1;;;16332:47:0;;16373:4:::1;16332:47;::::0;::::1;::::0;;;16263;;-1:-1:-1;;;;;;16332:32:0;::::1;::::0;::::1;::::0;:47;;;;;16263::::1;::::0;16332;;;;;;;;:32;:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;16332:47:0;;-1:-1:-1;16401:14:0::1;::::0;-1:-1:-1;;;;;;;16429:22:0;::::1;::::0;;::::1;16418:33:::0;::::1;:75;;16492:1;16418:75;;;16478:10;16466:9;-1:-1:-1::0;;;;;16466:22:0::1;;16454:8;:35;16418:75;16401:92;;16504:14;16544:10;16532:9;-1:-1:-1::0;;;;;16532:22:0::1;;16521:8;:33;:75;;16595:1;16521:75;;;16581:10;16569:9;-1:-1:-1::0;;;;;16569:22:0::1;;16557:8;:35;16521:75;16504:92;;16627:1;16615:9;:13;:30;;;;16644:1;16632:9;:13;16615:30;16607:79;;;;-1:-1:-1::0;;;16607:79:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16772:21;16796:40;16819:16;:9:::0;16833:1:::1;16819:13;:16::i;:::-;16796:18;:8:::0;16809:4:::1;16796:12;:18::i;:::-;:22:::0;::::1;:40::i;:::-;16772:64:::0;-1:-1:-1;16847:21:0::1;16871:40;16894:16;:9:::0;16908:1:::1;16894:13;:16::i;16871:40::-;16847:64:::0;-1:-1:-1;16972:43:0::1;17007:7;16972:30;-1:-1:-1::0;;;;;16972:15:0;;::::1;::::0;:30;::::1;:19;:30::i;:::-;:34:::0;::::1;:43::i;:::-;16930:38;:16:::0;16951;16930:20:::1;:38::i;:::-;:85;;16922:110;;;::::0;;-1:-1:-1;;;16922:110:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;16922:110:0;;;;;;;;;;;;;::::1;;8627:1;;17056:49;17064:8;17074;17084:9;17095;17056:7;:49::i;:::-;17121:66;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17121:66:0;::::1;::::0;17126:10:::1;::::0;17121:66:::1;::::0;;;;;;;::::1;-1:-1:-1::0;;8650:1:0;8639:8;:12;-1:-1:-1;;;;;;;;;15292:1903:0:o;1578:50::-;;;;;;;;;;;;;;-1:-1:-1;;;1578:50:0;;;;:::o;8667:231::-;8800:8;;-1:-1:-1;;;;;8800:8:0;;;;-1:-1:-1;;;8831:8:0;;;;;;-1:-1:-1;;;8872:18:0;;;;;8667:231::o;3632:147::-;3696:4;3713:36;3722:10;3734:7;3743:5;3713:8;:36::i;:::-;-1:-1:-1;3767:4:0;3632:147;;;;;:::o;7956:21::-;;;-1:-1:-1;;;;;7956:21:0;;:::o;1721:24::-;;;;:::o;3934:301::-;-1:-1:-1;;;;;4033:15:0;;4012:4;4033:15;;;:9;:15;;;;;;;;4049:10;4033:27;;;;;;;;-1:-1:-1;;4033:39:0;4029:140;;-1:-1:-1;;;;;4119:15:0;;;;;;:9;:15;;;;;;;;4135:10;4119:27;;;;;;;;:38;;4151:5;4119:31;:38::i;:::-;-1:-1:-1;;;;;4089:15:0;;;;;;:9;:15;;;;;;;;4105:10;4089:27;;;;;;;:68;4029:140;4179:26;4189:4;4195:2;4199:5;4179:9;:26::i;:::-;-1:-1:-1;4223:4:0;3934:301;;;;;:::o;2013:108::-;2055:66;2013:108;:::o;1679:35::-;1712:2;1679:35;:::o;1870:31::-;;;;:::o;9727:210::-;9823:7;;-1:-1:-1;;;;;9823:7:0;9809:10;:21;9801:54;;;;;-1:-1:-1;;;9801:54:0;;;;;;;;;;;;-1:-1:-1;;;9801:54:0;;;;;;;;;;;;;;;9886:6;:16;;-1:-1:-1;;;;;9886:16:0;;;-1:-1:-1;;;;;;9886:16:0;;;;;;;9913:6;:16;;;;;;;;;;;9727:210::o;8307:32::-;;;;:::o;8346:::-;;;;:::o;11921:1653::-;11970:14;8558:8;;8570:1;8558:13;8550:43;;;;;-1:-1:-1;;;8550:43:0;;;;;;;;;;;;-1:-1:-1;;;8550:43:0;;;;;;;;;;;;;;;8615:1;8604:8;:12;;;8615:1;12039:13:::1;:11;:13::i;:::-;-1:-1:-1::0;12108:6:0::1;::::0;12094:46:::1;::::0;;-1:-1:-1;;;12094:46:0;;12134:4:::1;12094:46;::::0;::::1;::::0;;;11997:55;;-1:-1:-1;11997:55:0;;-1:-1:-1;12078:13:0::1;::::0;-1:-1:-1;;;;;12108:6:0;;::::1;::::0;12094:31:::1;::::0;:46;;;;;::::1;::::0;;;;;;;;12108:6;12094:46;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;12094:46:0;12181:6:::1;::::0;12167:46:::1;::::0;;-1:-1:-1;;;12167:46:0;;12207:4:::1;12167:46;::::0;::::1;::::0;;;12094;;-1:-1:-1;12151:13:0::1;::::0;-1:-1:-1;;;;;12181:6:0;;::::1;::::0;12167:31:::1;::::0;:46;;;;;12094::::1;::::0;12167;;;;;;;;12181:6;12167:46;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;12167:46:0;;-1:-1:-1;12224:12:0::1;12239:23;:8:::0;-1:-1:-1;;;;;12239:23:0;::::1;:12;:23::i;:::-;12224:38:::0;-1:-1:-1;12273:12:0::1;12288:23;:8:::0;-1:-1:-1;;;;;12288:23:0;::::1;:12;:23::i;:::-;12273:38;;12324:10;12337:30;12346:9;12357;12337:8;:30::i;:::-;12378:17;12398:11:::0;12324:43;;-1:-1:-1;12502:17:0;12498:751:::1;;12573:7;::::0;12555:37:::1;::::0;;-1:-1:-1;;;12555:37:0;;;;12536:16:::1;::::0;-1:-1:-1;;;;;12573:7:0::1;::::0;12555:35:::1;::::0;:37:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;12573:7;12555:37;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;12555:37:0;;-1:-1:-1;12611:10:0::1;-1:-1:-1::0;;;;;12611:22:0;::::1;;12607:500;;;12676:8;-1:-1:-1::0;;;;;12666:36:0::1;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;12666:38:0;;-1:-1:-1;12731:13:0;;;;;:41:::1;;;-1:-1:-1::0;;12748:9:0::1;:24;;12731:41;12723:75;;;::::0;;-1:-1:-1;;;12723:75:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;12723:75:0;;;;;;;;;;;;;::::1;;12607:500;;;-1:-1:-1::0;;;;;12847:22:0;::::1;::::0;12839:57:::1;;;::::0;;-1:-1:-1;;;12839:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;12839:57:0;;;;;;;;;;;;;::::1;;12927:54;7818:5;12927:31;12937:20;:7:::0;12949;12937:11:::1;:20::i;:::-;12927:9;:31::i;:54::-;12915:66;;13000:36;13014:1;7818:5;13000;:36::i;:::-;12498:751;;;;13151:86;-1:-1:-1::0;;;;;13160:37:0;::::1;:25;:7:::0;13172:12;13160:11:::1;:25::i;:::-;:37;;;;;;-1:-1:-1::0;;;;;13199:37:0;::::1;:25;:7:::0;13211:12;13199:11:::1;:25::i;:::-;:37;;;;;;13151:8;:86::i;:::-;13139:98;;12498:751;13279:1;13267:9;:13;13259:66;;;;-1:-1:-1::0;;;13259:66:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13336:20;13342:2;13346:9;13336:5;:20::i;:::-;13369:49;13377:8;13387;13397:9;13408;13369:7;:49::i;:::-;13433:5;13429:47;;;13467:8;::::0;13448:28:::1;::::0;-1:-1:-1;;;;;13453:8:0;;::::1;::::0;-1:-1:-1;;;13467:8:0;::::1;;13448:18;:28::i;:::-;13440:5;:36:::0;13429:47:::1;13532:34;::::0;;;;;::::1;::::0;::::1;::::0;;;;;13537:10:::1;::::0;13532:34:::1;::::0;;;;;;::::1;-1:-1:-1::0;;8650:1:0;8639:8;:12;-1:-1:-1;11921:1653:0;;;-1:-1:-1;;;;;;11921:1653:0:o;1752:41::-;;;;;;;;;;;;;:::o;8385:17::-;;;;:::o;2128:38::-;;;;;;;;;;;;;:::o;13686:1494::-;13735:12;13749;8558:8;;8570:1;8558:13;8550:43;;;;;-1:-1:-1;;;8550:43:0;;;;;;;;;;;;-1:-1:-1;;;8550:43:0;;;;;;;;;;;;;;;8615:1;8604:8;:12;;;8615:1;13816:13:::1;:11;:13::i;:::-;-1:-1:-1::0;13873:6:0::1;::::0;13954::::1;::::0;14033:47:::1;::::0;;-1:-1:-1;;;14033:47:0;;14074:4:::1;14033:47;::::0;::::1;::::0;;;13774:55;;-1:-1:-1;13774:55:0;;-1:-1:-1;;;;;;13873:6:0;;::::1;::::0;13954;::::1;::::0;13855:15:::1;::::0;13873:6;;14033:32:::1;::::0;:47;;;;;::::1;::::0;;;;;;;;13873:6;14033:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;14033:47:0;14107::::1;::::0;;-1:-1:-1;;;14107:47:0;;14148:4:::1;14107:47;::::0;::::1;::::0;;;14033;;-1:-1:-1;14091:13:0::1;::::0;-1:-1:-1;;;;;14107:32:0;::::1;::::0;::::1;::::0;:47;;;;;14033::::1;::::0;14107;;;;;;;:32;:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;14107:47:0;14200:4:::1;14165:14;14182:24:::0;;;:9:::1;14107:47;14182:24:::0;;;;;14107:47;;-1:-1:-1;14232:30:0::1;14241:9:::0;14252;14232:8:::1;:30::i;:::-;14273:17;14293:11:::0;14219:43;;-1:-1:-1;14293:11:0;14403:23:::1;:9:::0;14417:8;14403:13:::1;:23::i;:::-;:38;;;;;;::::0;-1:-1:-1;14536:12:0;14510:23:::1;:9:::0;14524:8;14510:13:::1;:23::i;:::-;:38;;;;;;14500:48;;14625:1;14615:7;:11;:26;;;;;14640:1;14630:7;:11;14615:26;14607:79;;;;-1:-1:-1::0;;;14607:79:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14697:31;14711:4;14718:9;14697:5;:31::i;:::-;14739:35;14753:7;14762:2;14766:7;14739:13;:35::i;:::-;14785;14799:7;14808:2;14812:7;14785:13;:35::i;:::-;14842:47;::::0;;-1:-1:-1;;;14842:47:0;;14883:4:::1;14842:47;::::0;::::1;::::0;;;-1:-1:-1;;;;;14842:32:0;::::1;::::0;::::1;::::0;:47;;;;;::::1;::::0;;;;;;;;:32;:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;14842:47:0;14911::::1;::::0;;-1:-1:-1;;;14911:47:0;;14952:4:::1;14911:47;::::0;::::1;::::0;;;14842;;-1:-1:-1;;;;;;14911:32:0;::::1;::::0;::::1;::::0;:47;;;;;14842::::1;::::0;14911;;;;;;;;:32;:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;14911:47:0;;-1:-1:-1;14971:49:0::1;14979:8:::0;14911:47;14999:9;15010;14971:7:::1;:49::i;:::-;15035:5;15031:47;;;15069:8;::::0;15050:28:::1;::::0;-1:-1:-1;;;;;15055:8:0;;::::1;::::0;-1:-1:-1;;;15069:8:0;::::1;;15050:18;:28::i;:::-;15042:5;:36:::0;15031:47:::1;15134:38;::::0;;;;;::::1;::::0;::::1;::::0;;;;;-1:-1:-1;;;;;15134:38:0;::::1;::::0;15139:10:::1;::::0;15134:38:::1;::::0;;;;;;;;;::::1;8627:1;;;;;;;;;8650::::0;8639:8;:12;;;;13686:1494;;;:::o;1635:37::-;;;;;;;;;;;;;;-1:-1:-1;;;1635:37:0;;;;:::o;3787:139::-;3847:4;3864:32;3874:10;3886:2;3890:5;3864:9;:32::i;7777:46::-;7818:5;7777:46;:::o;17244:348::-;8558:8;;8570:1;8558:13;8550:43;;;;;-1:-1:-1;;;8550:43:0;;;;;;;;;;;;-1:-1:-1;;;8550:43:0;;;;;;;;;;;;;;;8615:1;8604:8;:12;17313:6:::1;::::0;17363::::1;::::0;17474:8:::1;::::0;17422:47:::1;::::0;;-1:-1:-1;;;17422:47:0;;17463:4:::1;17422:47;::::0;::::1;::::0;;;-1:-1:-1;;;;;17313:6:0;;::::1;::::0;17363;;::::1;::::0;17395:89:::1;::::0;17313:6;;17418:2;;17422:61:::1;::::0;-1:-1:-1;;;;;17474:8:0::1;::::0;17313:6;;17422:32:::1;::::0;:47;;;;;::::1;::::0;;;;;;;;;17313:6;17422:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;17422:47:0;;:51:::1;:61::i;:::-;17395:13;:89::i;:::-;17495;17509:7;17518:2;17522:61;17574:8;;;;;;;;;-1:-1:-1::0;;;;;17574:8:0::1;-1:-1:-1::0;;;;;17522:61:0::1;17536:7;-1:-1:-1::0;;;;;17522:32:0::1;;17563:4;17522:47;;;;;;;;;;;;;-1:-1:-1::0;;;;;17522:47:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;17495:89;-1:-1:-1::0;;8650:1:0;8639:8;:12;-1:-1:-1;17244:348:0:o;7927:22::-;;;-1:-1:-1;;;;;7927:22:0;;:::o;7984:21::-;;;-1:-1:-1;;;;;7984:21:0;;:::o;4243:674::-;4389:15;4377:8;:27;;4369:58;;;;;-1:-1:-1;;;4369:58:0;;;;;;;;;;;;-1:-1:-1;;;4369:58:0;;;;;;;;;;;;;;;4543:16;;-1:-1:-1;;;;;4639:13:0;;;4438:14;4639:13;;;:6;:13;;;;;;;;:15;;;;;;;;;4588:77;;2055:66;4588:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4578:88;;;;;;-1:-1:-1;;;4479:202:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4455:237;;;;;;;;;4730:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4438:14;;4639:15;4730:26;;;;;-1:-1:-1;;4730:26:0;;;;;;;;;;4639:15;4730:26;;;;;;;;;;;;;;;-1:-1:-1;;4730:26:0;;-1:-1:-1;;4730:26:0;;;-1:-1:-1;;;;;;;4775:30:0;;;;;;:59;;;4829:5;-1:-1:-1;;;;;4809:25:0;:16;-1:-1:-1;;;;;4809:25:0;;4775:59;4767:100;;;;;-1:-1:-1;;;4767:100:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;4878:31;4887:5;4894:7;4903:5;4878:8;:31::i;:::-;4243:674;;;;;;;;;:::o;1800:61::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;17641:172::-;8558:8;;8570:1;8558:13;8550:43;;;;;-1:-1:-1;;;8550:43:0;;;;;;;;;;;;-1:-1:-1;;;8550:43:0;;;;;;;;;;;;;;;8615:1;8604:8;:12;17704:6:::1;::::0;17690:46:::1;::::0;;-1:-1:-1;;;17690:46:0;;17730:4:::1;17690:46;::::0;::::1;::::0;;;17682:123:::1;::::0;-1:-1:-1;;;;;17704:6:0::1;::::0;17690:31:::1;::::0;:46;;;;;::::1;::::0;;;;;;;;17704:6;17690:46;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;17690:46:0;17752:6:::1;::::0;17738:46:::1;::::0;;-1:-1:-1;;;17738:46:0;;17778:4:::1;17738:46;::::0;::::1;::::0;;;-1:-1:-1;;;;;17752:6:0;;::::1;::::0;17738:31:::1;::::0;:46;;;;;17690::::1;::::0;17738;;;;;;;;17752:6;17738:46;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;17738:46:0;17786:8:::1;::::0;-1:-1:-1;;;;;17786:8:0;;::::1;::::0;-1:-1:-1;;;17796:8:0;::::1;;17682:7;:123::i;:::-;8650:1:::0;8639:8;:12;17641:172::o;8906:287::-;7882:34;;;;;;;;;;;;;;;;;9034:43;;-1:-1:-1;;;;;9034:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9034:43:0;-1:-1:-1;;;9034:43:0;;;9023:55;;;;8988:12;;9002:17;;9023:10;;;9034:43;9023:55;;;9034:43;9023:55;;9034:43;9023:55;;;;;;;;;;-1:-1:-1;;9023:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8987:91;;;;9097:7;:57;;;;-1:-1:-1;9109:11:0;;:16;;:44;;;9140:4;9129:24;;;;;;;;;;;;;;;-1:-1:-1;9129:24:0;9109:44;9089:96;;;;;-1:-1:-1;;;9089:96:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;8906:287;;;;;:::o;1278:142::-;1330:6;1357;;;:30;;-1:-1:-1;;1372:5:0;;;1386:1;1381;1372:5;1381:1;1367:15;;;;;:20;1357:30;1349:63;;;;;-1:-1:-1;;;1349:63:0;;;;;;;;;;;;-1:-1:-1;;;1349:63:0;;;;;;;;;;;;;;1141:129;1225:5;;;1220:16;;;;1212:50;;;;;-1:-1:-1;;;1212:50:0;;;;;;;;;;;;-1:-1:-1;;;1212:50:0;;;;;;;;;;;;;;10022:860;-1:-1:-1;;;;;10134:23:0;;;;;:50;;-1:-1:-1;;;;;;10161:23:0;;;10134:50;10126:82;;;;;-1:-1:-1;;;10126:82:0;;;;;;;;;;;;-1:-1:-1;;;10126:82:0;;;;;;;;;;;;;;;10323:18;;10250:23;:15;:23;;;-1:-1:-1;;;10323:18:0;;;;10306:35;;;10379:15;;;;;;:33;;-1:-1:-1;;;;;;10398:14:0;;;;10379:33;:51;;;;-1:-1:-1;;;;;;10416:14:0;;;;10379:51;10375:336;;;10585:11;10532:64;;10537:44;10571:9;10537:27;10554:9;10537:16;:27::i;:::-;-1:-1:-1;;;;;10537:33:0;;;:44::i;:::-;10508:20;:88;;-1:-1:-1;;;;;10532:50:0;;;;:64;;;;10508:88;;;10635:64;;;10640:44;10674:9;10640:27;10657:9;10640:16;:27::i;:44::-;10611:20;:88;;-1:-1:-1;;;;;10635:50:0;;;;:64;;;;10611:88;;;10375:336;10721:8;:28;;-1:-1:-1;;10721:28:0;-1:-1:-1;;;;;10721:28:0;;;;;;;-1:-1:-1;;;;10760:28:0;-1:-1:-1;;;10760:28:0;;;;;;;;;-1:-1:-1;;;;;10799:35:0;-1:-1:-1;;;10799:35:0;;;;;;;;;10850:24;;;10855:8;;;10850:24;;10865:8;;;;;;;10850:24;;;;;;;;;;;;;;;;;10022:860;;;;;;:::o;3227:169::-;-1:-1:-1;;;;;3308:16:0;;;;;;;:9;:16;;;;;;;;:25;;;;;;;;;;;;;:33;;;3357:31;;;;;;;;;;;;;;;;;3227:169;;;:::o;3404:220::-;-1:-1:-1;;;;;3498:15:0;;;;;;:9;:15;;;;;;:26;;3518:5;3498:19;:26::i;:::-;-1:-1:-1;;;;;3480:15:0;;;;;;;:9;:15;;;;;;:44;;;;3551:13;;;;;;;:24;;3569:5;3551:17;:24::i;:::-;-1:-1:-1;;;;;3535:13:0;;;;;;;:9;:13;;;;;;;;;:40;;;;3591:25;;;;;;;3535:13;;3591:25;;;;;;;;;;;;;3404:220;;;:::o;10972:837::-;11045:10;11068:13;11102:7;;;;;;;;;-1:-1:-1;;;;;11102:7:0;-1:-1:-1;;;;;11084:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11084:34:0;11181:5;;-1:-1:-1;;;;;11137:19:0;;;;;;-1:-1:-1;11084:34:0;;-1:-1:-1;11181:5:0;11212:590;;11242:11;;11238:494;;11274:10;11287:41;11297:30;-1:-1:-1;;;;;11297:15:0;;;;:30;;:19;:30::i;11287:41::-;11274:54;;11347:14;11364:17;11374:6;11364:9;:17::i;:::-;11347:34;;11412:9;11404:5;:17;11400:317;;;11446:14;11463:37;11479:20;:5;11489:9;11479;:20::i;:::-;11463:11;;;:15;:37::i;:::-;11446:54;-1:-1:-1;11523:16:0;11542:27;11559:9;11542:12;:5;11552:1;11542:9;:12::i;:::-;:16;;:27::i;:::-;11523:46;;11592:14;11621:11;11609:9;:23;;;;;;;-1:-1:-1;11659:13:0;;11655:42;;11674:23;11680:5;11687:9;11674:5;:23::i;:::-;11400:317;;;;11238:494;;;11212:590;;;11753:11;;11749:53;;11789:1;11781:5;:9;11749:53;10972:837;;;;;;:::o;5292:303::-;5337:6;5364:1;5360;:5;5356:232;;;-1:-1:-1;5386:1:0;5419;5415;5411:5;;:9;5435:92;5446:1;5442;:5;5435:92;;;5472:1;5468:5;;5510:1;5505;5501;5497;:5;;;;;;:9;5496:15;;;;;;5492:19;;5435:92;;;5356:232;;;;5548:6;;5544:44;;-1:-1:-1;5575:1:0;5544:44;5292:303;;;:::o;2801:201::-;2874:11;;:22;;2890:5;2874:15;:22::i;:::-;2860:11;:36;;;-1:-1:-1;;;;;2923:13:0;;;;:9;:13;;;;;;:24;;2941:5;2923:17;:24::i;:::-;-1:-1:-1;;;;;2907:13:0;;;;;;:9;:13;;;;;;;;:40;;;;2963:31;;;;;;;2907:13;;;;2963:31;;;;;;;;;;2801:201;;:::o;5078:96::-;5130:6;5157:1;5153;:5;:13;;5165:1;5153:13;;;5161:1;5153:13;5149:17;5078:96;-1:-1:-1;;;5078:96:0:o;3010:209::-;-1:-1:-1;;;;;3089:15:0;;;;;;:9;:15;;;;;;:26;;3109:5;3089:19;:26::i;:::-;-1:-1:-1;;;;;3071:15:0;;;;;;:9;:15;;;;;:44;;;;3140:11;:22;;3156:5;3140:15;:22::i;:::-;3126:11;:36;;;3178:33;;;;;;;;-1:-1:-1;;;;;3178:33:0;;;;;;;;;;;;;3010:209;;:::o;5952:120::-;-1:-1:-1;;;;;6028:10:0;-1:-1:-1;;;6028:17:0;;5952:120::o;6143:108::-;6203:9;-1:-1:-1;;;;;6233:10:0;;-1:-1:-1;;;;;6229:14:0;;6233:10;6229:14;;;;;;6143:108;-1:-1:-1;;;6143:108:0:o;1005:128::-;1089:5;;;1084:16;;;;1076:49;;;;;-1:-1:-1;;;1076:49:0;;;;;;;;;;;;-1:-1:-1;;;1076:49:0;;;;;;;;;;;;;

Swarm Source

ipfs://713a8bf21df06433f34b5c9abf186abb737e72524583bdf420105a289791e248
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Validator ID :
0 FTM

Amount Staked
0

Amount Delegated
0

Staking Total
0

Staking Start Epoch
0

Staking Start Time
0

Proof of Importance
0

Origination Score
0

Validation Score
0

Active
0

Online
0

Downtime
0 s
Address Amount claimed Rewards Created On Epoch Created On
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.