Contract 0x04d2d843e31017ca1d9a2801900cf6454103fc17 2

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x9471f49ef4e76867a5807e0e936c1ee89959578eb6a6b5657fc2e4688439ccd4Approve238204242022-01-17 8:52:196 days 12 hrs ago0x82bc4f424338fcad19e1d646702ac48f3eca9772 IN  0x04d2d843e31017ca1d9a2801900cf6454103fc170 MATIC0.00148652832
0x6fd5493aaae9d8299f08a8506b59ab69d81d7e8303a17b5e4a395cb22ab77dbeApprove237196112022-01-14 19:18:139 days 2 hrs ago0xc482e15589834a1821776ed4886b4dc0b85f17fc IN  0x04d2d843e31017ca1d9a2801900cf6454103fc170 MATIC0.00148652832
0xdc04d8f6efd36f2e80a5dd5e45ff5d2f291ea688ee3124a8613926b584fa3bbfApprove236768972022-01-13 16:04:2210 days 5 hrs ago0xa655553ccd585a969adbb5ec605696a1ee8f731a IN  0x04d2d843e31017ca1d9a2801900cf6454103fc170 MATIC0.00148652832
0xb503e4442a9204d9b6a6d7d013b4699f2cc71cfc21c87321ee557e4cc622f846Approve236578922022-01-13 4:25:3310 days 17 hrs ago0x3c10e6f13abc22df2eb9b898b0c533d78d1360bb IN  0x04d2d843e31017ca1d9a2801900cf6454103fc170 MATIC0.00148652832
0xb9f4caf0ac94713d9c3bd561cf0e66dc50f2add6d51044acb62d730eba5672a7Approve236430462022-01-12 19:18:2611 days 2 hrs ago0xb1ecc06c51d2523145465c7c2c29930dd47f5947 IN  0x04d2d843e31017ca1d9a2801900cf6454103fc170 MATIC0.00148652832
0xac4ce2d880e4a14bf56778d81822314e24ee1f1ba856a765faa880e175b7d2edApprove236267522022-01-12 8:50:1911 days 12 hrs ago0xff1faab5de7af32367db1c021e613fd168dfb626 IN  0x04d2d843e31017ca1d9a2801900cf6454103fc170 MATIC0.00148652832
0x224e34e885df8c2c824b7e18df8e796293b0ae279d89f9908bd1cbcf21de9770Approve236125252022-01-12 0:15:0711 days 21 hrs ago0x659b32a1eb5db2d0d8b59a114f4a904d030af5e4 IN  0x04d2d843e31017ca1d9a2801900cf6454103fc170 MATIC0.00148652832
0x2621bca6bf10542eeb29b27aa1b74af67cfa7c1f68ea8a598141ecd01e43ababApprove235958072022-01-11 13:29:2812 days 8 hrs ago0xe83b69b7f7b4fa45f4722b4f55a06092e6e064c2 IN  0x04d2d843e31017ca1d9a2801900cf6454103fc170 MATIC0.00148652832
0x20a4e40c60f8401c0b87ef4c639c3d7fe5a100239f0151acedf631a9261d64a4Approve235805062022-01-11 3:58:3812 days 17 hrs ago0x02b0e4247b46bdf05a9f25c50bbf08dde9289a77 IN  0x04d2d843e31017ca1d9a2801900cf6454103fc170 MATIC0.00148652832
0x0ac6cc4a1ea3bf7bf82b401ecfcd6949b9c9c4706217ccaf471c48ca90518ca3Approve234684922022-01-08 5:58:5015 days 15 hrs ago0x6ea33331e07ab50709dad4f7940b7cdbb021f0f2 IN  0x04d2d843e31017ca1d9a2801900cf6454103fc170 MATIC0.00148652832
0x8f01b810060abe9b423ae73c191973deabb4031f2a09cbd49bb881cd1237895cApprove234668932022-01-08 5:01:4415 days 16 hrs ago0x771172981bac99c3a1ae844c7539580b27f9217c IN  0x04d2d843e31017ca1d9a2801900cf6454103fc170 MATIC0.00148652832
0xc4597246c5fdf8eec4e95a592fe7bdfee872c3c17b26e2debcc0ad72515c2761Approve234526642022-01-07 20:07:3516 days 1 hr ago0x73dd7f72a3886bdd10c8f12a3eb1efdb430a4d63 IN  0x04d2d843e31017ca1d9a2801900cf6454103fc170 MATIC0.00148652832
0x2951504f4e3aa394cce30cdbafee629d1266f9703f32a45707e0dcebbb522b19Approve232387202022-01-01 22:56:5121 days 22 hrs ago0x6e3e1c56d2b278a4e55124f09ae6fa828a2fa6f2 IN  0x04d2d843e31017ca1d9a2801900cf6454103fc170 MATIC0.00148652832
0x4dfc393a70485bb436a30bec73c317180d942e7342d75d09ccd49b987c449eccApprove230679672021-12-28 15:22:5226 days 6 hrs ago0x7d25fc0b22c92d96bf70d0fbf9a9ca878a1ff4df IN  0x04d2d843e31017ca1d9a2801900cf6454103fc170 MATIC0.00148652832
0x59ae22434daebcfa0dcd621d69a5ed0d08ba32d664f1300b6d9fad5df5de9c6cApprove229472292021-12-25 13:39:0529 days 7 hrs ago0xb03ef4e8878f73ecf63022c86d845e86afb5c663 IN  0x04d2d843e31017ca1d9a2801900cf6454103fc170 MATIC0.00148652832
0x833401400a11775426869970d05c7dcdd13cff7d90f03889bba0f0655b1ef547Approve229071032021-12-24 13:10:2430 days 8 hrs ago0xa287cda289279475d2d99238692fb6f39a3c151d IN  0x04d2d843e31017ca1d9a2801900cf6454103fc170 MATIC0.00148652832
0x1a8d80f98b0227a133b4f55445af489cd5b9300fe8bca83e4da0b98d7b337834Approve228096752021-12-22 1:16:3032 days 20 hrs ago0x704a96108c85472921c2727ad7ba8b47b7b500e5 IN  0x04d2d843e31017ca1d9a2801900cf6454103fc170 MATIC0.00148652832
0x1ccdaaf7539d89304bbe2182ace8bf1ff12477cc8840b4ab35fc46deb76dc95cApprove226873992021-12-18 23:29:3835 days 22 hrs ago0x00c7ca57244dd301349fac01e3f9f08aa2a9ae59 IN  0x04d2d843e31017ca1d9a2801900cf6454103fc170 MATIC0.00148652832
0xf09bbda403d37dcd3b27d1d717190118d9cd043c9ec4d6d8ecccfb0f90c2be55Approve226281262021-12-17 10:33:5937 days 10 hrs ago0x4d0b108d89225a6ec0124d1afb45e66e86376e1f IN  0x04d2d843e31017ca1d9a2801900cf6454103fc170 MATIC0.00084972832
0x3bd1d9a5e4383b74bbf10b7cb6d658d9d5389b93c410ef49da621019838e94e7Approve225797502021-12-16 5:18:3238 days 16 hrs ago0x6ddc26aac1aca9882ef33054befbb9972bc7813f IN  0x04d2d843e31017ca1d9a2801900cf6454103fc170 MATIC0.0013936230
0x9e49623d9a67afeca07fd93681bc3e666d1bfdf4b1d0331e7b5cfb04da0570f5Approve225353182021-12-15 2:18:4439 days 19 hrs ago0x736c82e0fd1598ff4b385cf5fbaaff94b95bee85 IN  0x04d2d843e31017ca1d9a2801900cf6454103fc170 MATIC0.00148652832
0x304d06d860135ea119ef20d8494a41a1bf42c82dbaef18d1995c895fb75981c6Approve223773862021-12-11 0:46:4343 days 20 hrs ago0x1557b324c5666a5817e21567beb0396b1690c6f5 IN  0x04d2d843e31017ca1d9a2801900cf6454103fc170 MATIC0.00148652832
0x2ff7200ea7807c9354afb0717097dc05b3c047da0c28e03cfb19fc55a387bb6aApprove221299982021-12-04 15:35:3850 days 5 hrs ago0x8323d8331337e55b5caf35d6e884f5f9236a5205 IN  0x04d2d843e31017ca1d9a2801900cf6454103fc170 MATIC0.00148652832
0x66075716df1345b49ba7cddffcf182b548e3cf3e183c80e8d078a0c9ee2d689aApprove219767772021-11-30 14:22:5254 days 7 hrs ago0x6cafcf7ed75a470a5b3ace45a5f13b52ae36106b IN  0x04d2d843e31017ca1d9a2801900cf6454103fc170 MATIC0.00148652832
0x25056b7409258ff8594f33d2c12616fe3d3fea7ea90a0d0a77c3e47aefef89c6Approve217987832021-11-25 21:39:0458 days 23 hrs ago0xe5f204e458c9d1f6d8d229c8e5ebbb2841d7d83c IN  0x04d2d843e31017ca1d9a2801900cf6454103fc170 MATIC0.00148652832
[ Download CSV Export 
Latest 1 internal transaction
Parent Txn Hash Block From To Value
0xb134d99ba344b7745d28bc53182f16efcfb645a1185ab35ee50c80c0f86f0bee171382202021-07-22 8:18:45185 days 13 hrs ago 0x5bdd1cd910e3307582f213b33699e676e61dead9  Contract Creation0 MATIC
[ Download CSV Export 
Loading

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

Contract Name:
PolydexPair

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2021-07-21
*/

// Sources flattened with hardhat v2.3.0 https://hardhat.org

// File contracts/polydex/libraries/SafeMath.sol


pragma solidity =0.7.6;

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

library SafeMathPolydex {
    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/polydex/PolydexERC20.sol


pragma solidity =0.7.6;

contract PolydexERC20 {
    using SafeMathPolydex for uint;

    string public constant name = 'Polydex LP Token';
    string public constant symbol = 'Polydex-LP';
    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() {
        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, 'Polydex: 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, 'Polydex: INVALID_SIGNATURE');
        _approve(owner, spender, value);
    }
}


// File contracts/polydex/libraries/Math.sol


pragma solidity >=0.6.0 <0.8.0;

// 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/polydex/libraries/UQ112x112.sol


pragma solidity =0.7.6;

// 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/polydex/interfaces/IERC20.sol


pragma solidity >=0.6.0 <0.8.0;

interface IERC20Polydex {
    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/polydex/interfaces/IPolydexFactory.sol


pragma solidity >=0.6.0 <0.8.0;

interface IPolydexFactory {
    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/polydex/interfaces/IPolydexCallee.sol


pragma solidity >=0.6.0 <0.8.0;

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


// File contracts/polydex/PolydexPair.sol

// SPDX-License-Identifier: MIT

pragma solidity =0.7.6;






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

contract PolydexPair is PolydexERC20 {
    using SafeMathPolydex  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, 'Polydex: 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))), 'Polydex: 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() {
        factory = msg.sender;
    }

    // called once by the factory at time of deployment
    function initialize(address _token0, address _token1) external {
        require(msg.sender == factory, 'Polydex: 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), 'Polydex: 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 = IPolydexFactory(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 = IERC20Polydex(token0).balanceOf(address(this));
        uint balance1 = IERC20Polydex(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 = IPolydexFactory(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, 'Polydex: 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 = IERC20Polydex(_token0).balanceOf(address(this));
        uint balance1 = IERC20Polydex(_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, 'Polydex: INSUFFICIENT_LIQUIDITY_BURNED');
        _burn(address(this), liquidity);
        _safeTransfer(_token0, to, amount0);
        _safeTransfer(_token1, to, amount1);
        balance0 = IERC20Polydex(_token0).balanceOf(address(this));
        balance1 = IERC20Polydex(_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, 'Polydex: INSUFFICIENT_OUTPUT_AMOUNT');
        (uint112 _reserve0, uint112 _reserve1,) = getReserves(); // gas savings
        require(amount0Out < _reserve0 && amount1Out < _reserve1, 'Polydex: 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, 'Polydex: 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) IPolydexCallee(to).polydexCall(msg.sender, amount0Out, amount1Out, data);
        balance0 = IERC20Polydex(_token0).balanceOf(address(this));
        balance1 = IERC20Polydex(_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, 'Polydex: 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), 'Polydex: 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, IERC20Polydex(_token0).balanceOf(address(this)).sub(reserve0));
        _safeTransfer(_token1, to, IERC20Polydex(_token1).balanceOf(address(this)).sub(reserve1));
    }

    // force reserves to match balances
    function sync() external lock {
        _update(IERC20Polydex(token0).balanceOf(address(this)), IERC20Polydex(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"}]

60806040526001600c5534801561001557600080fd5b50604080518082018252601081526f2837b63cb232bc102628102a37b5b2b760811b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527fad967ef795712b19cbd7f80fd5bd3895a78d5ef51643f467e813a01a93672ace818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528351808303909101815260c09091019092528151910120600355600580546001600160a01b031916331790556123548061010e6000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80636a627842116100f9578063ba9a7a5611610097578063d21220a711610071578063d21220a714610534578063d505accf1461053c578063dd62ed3e1461058d578063fff6cae9146105bb576101a9565b8063ba9a7a56146104fe578063bc25cf7714610506578063c45a01551461052c576101a9565b80637ecebe00116100d35780637ecebe001461046557806389afcb441461048b57806395d89b41146104ca578063a9059cbb146104d2576101a9565b80636a6278421461041157806370a08231146104375780637464fc3d1461045d576101a9565b806323b872dd116101665780633644e515116101405780633644e515146103cb578063485cc955146103d35780635909c0d5146104015780635a3d549314610409576101a9565b806323b872dd1461036f57806330adf81f146103a5578063313ce567146103ad576101a9565b8063022c0d9f146101ae57806306fdde031461023c5780630902f1ac146102b9578063095ea7b3146102f15780630dfe16811461033157806318160ddd14610355575b600080fd5b61023a600480360360808110156101c457600080fd5b8135916020810135916001600160a01b0360408301351691908101906080810160608201356401000000008111156101fb57600080fd5b82018360208201111561020d57600080fd5b8035906020019184600183028401116401000000008311171561022f57600080fd5b5090925090506105c3565b005b610244610adb565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561027e578181015183820152602001610266565b50505050905090810190601f1680156102ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c1610b07565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b61031d6004803603604081101561030757600080fd5b506001600160a01b038135169060200135610b31565b604080519115158252519081900360200190f35b610339610b48565b604080516001600160a01b039092168252519081900360200190f35b61035d610b57565b60408051918252519081900360200190f35b61031d6004803603606081101561038557600080fd5b506001600160a01b03813581169160208101359091169060400135610b5d565b61035d610bf1565b6103b5610c15565b6040805160ff9092168252519081900360200190f35b61035d610c1a565b61023a600480360360408110156103e957600080fd5b506001600160a01b0381358116916020013516610c20565b61035d610ca2565b61035d610ca8565b61035d6004803603602081101561042757600080fd5b50356001600160a01b0316610cae565b61035d6004803603602081101561044d57600080fd5b50356001600160a01b0316611128565b61035d61113a565b61035d6004803603602081101561047b57600080fd5b50356001600160a01b0316611140565b6104b1600480360360208110156104a157600080fd5b50356001600160a01b0316611152565b6040805192835260208301919091528051918290030190f35b6102446114e4565b61031d600480360360408110156104e857600080fd5b506001600160a01b03813516906020013561150a565b61035d611517565b61023a6004803603602081101561051c57600080fd5b50356001600160a01b031661151d565b61033961168d565b61033961169c565b61023a600480360360e081101561055257600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356116ab565b61035d600480360360408110156105a357600080fd5b506001600160a01b03813581169160200135166118ab565b61023a6118c8565b600c5460011461060c576040805162461bcd60e51b815260206004820152600f60248201526e141bdb1e59195e0e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600c558415158061061f5750600084115b61065a5760405162461bcd60e51b815260040180806020018281038252602381526020018061228e6023913960400191505060405180910390fd5b600080610665610b07565b5091509150816001600160701b03168710801561068a5750806001600160701b031686105b6106db576040805162461bcd60e51b815260206004820152601f60248201527f506f6c796465783a20494e53554646494349454e545f4c495155494449545900604482015290519081900360640190fd5b60065460075460009182916001600160a01b039182169190811690891682148015906107195750806001600160a01b0316896001600160a01b031614155b610760576040805162461bcd60e51b8152602060048201526013602482015272506f6c796465783a20494e56414c49445f544f60681b604482015290519081900360640190fd5b8a1561077157610771828a8d611a28565b891561078257610782818a8c611a28565b861561083457886001600160a01b0316632049b8cc338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561081b57600080fd5b505af115801561082f573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561087a57600080fd5b505afa15801561088e573d6000803e3d6000fd5b505050506040513d60208110156108a457600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b1580156108f057600080fd5b505afa158015610904573d6000803e3d6000fd5b505050506040513d602081101561091a57600080fd5b5051925060009150506001600160701b0385168a9003831161093d57600061094c565b89856001600160701b03160383035b9050600089856001600160701b0316038311610969576000610978565b89856001600160701b03160383035b905060008211806109895750600081115b6109c45760405162461bcd60e51b81526004018080602001828103825260228152602001806122fd6022913960400191505060405180910390fd5b60006109e66109d4846003611bc1565b6109e0876103e8611bc1565b90611c24565b905060006109f86109d4846003611bc1565b9050610a1d620f4240610a176001600160701b038b8116908b16611bc1565b90611bc1565b610a278383611bc1565b1015610a67576040805162461bcd60e51b815260206004820152600a602482015269506f6c796465783a204b60b01b604482015290519081900360640190fd5b5050610a7584848888611c74565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600c55505050505050505050565b6040518060400160405280601081526020016f2837b63cb232bc102628102a37b5b2b760811b81525081565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610b3e338484611e31565b5060015b92915050565b6006546001600160a01b031681565b60005481565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610bdc576001600160a01b0384166000908152600260209081526040808320338452909152902054610bb79083611c24565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610be7848484611e93565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b6005546001600160a01b03163314610c74576040805162461bcd60e51b81526020600482015260126024820152712837b63cb232bc1d102327a92124a22222a760711b604482015290519081900360640190fd5b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b60095481565b600a5481565b6000600c54600114610cf9576040805162461bcd60e51b815260206004820152600f60248201526e141bdb1e59195e0e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600c81905580610d09610b07565b50600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015610d5d57600080fd5b505afa158015610d71573d6000803e3d6000fd5b505050506040513d6020811015610d8757600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610dda57600080fd5b505afa158015610dee573d6000803e3d6000fd5b505050506040513d6020811015610e0457600080fd5b505190506000610e1d836001600160701b038716611c24565b90506000610e34836001600160701b038716611c24565b90506000610e428787611f41565b600054909150806110195760055460408051637cd07e4760e01b815290516000926001600160a01b031691637cd07e47916004808301926020929190829003018186803b158015610e9257600080fd5b505afa158015610ea6573d6000803e3d6000fd5b505050506040513d6020811015610ebc57600080fd5b50519050336001600160a01b0382161415610f9757806001600160a01b03166340dc0e376040518163ffffffff1660e01b815260040160206040518083038186803b158015610f0a57600080fd5b505afa158015610f1e573d6000803e3d6000fd5b505050506040513d6020811015610f3457600080fd5b505199508915801590610f4957506000198a14155b610f92576040805162461bcd60e51b81526020600482015260156024820152744261642064657369726564206c697175696469747960581b604482015290519081900360640190fd5b611013565b6001600160a01b03811615610fec576040805162461bcd60e51b815260206004820152601660248201527526bab9ba103737ba103430bb329036b4b3b930ba37b960511b604482015290519081900360640190fd5b6110046103e86109e0610fff8888611bc1565b612081565b995061101360006103e86120d3565b5061105c565b6110596001600160701b0389166110308684611bc1565b8161103757fe5b046001600160701b03891661104c8685611bc1565b8161105357fe5b0461215d565b98505b6000891161109b5760405162461bcd60e51b81526004018080602001828103825260268152602001806122b16026913960400191505060405180910390fd5b6110a58a8a6120d3565b6110b186868a8a611c74565b81156110db576008546110d7906001600160701b0380821691600160701b900416611bc1565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600c5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600c5460011461119e576040805162461bcd60e51b815260206004820152600f60248201526e141bdb1e59195e0e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600c819055806111ae610b07565b50600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b15801561120a57600080fd5b505afa15801561121e573d6000803e3d6000fd5b505050506040513d602081101561123457600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b15801561128257600080fd5b505afa158015611296573d6000803e3d6000fd5b505050506040513d60208110156112ac57600080fd5b5051306000908152600160205260408120549192506112cb8888611f41565b600054909150806112dc8487611bc1565b816112e357fe5b049a50806112f18486611bc1565b816112f857fe5b04995060008b11801561130b575060008a115b6113465760405162461bcd60e51b81526004018080602001828103825260268152602001806122d76026913960400191505060405180910390fd5b6113503084612175565b61135b878d8d611a28565b611366868d8c611a28565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b1580156113ac57600080fd5b505afa1580156113c0573d6000803e3d6000fd5b505050506040513d60208110156113d657600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b15801561142257600080fd5b505afa158015611436573d6000803e3d6000fd5b505050506040513d602081101561144c57600080fd5b5051935061145c85858b8b611c74565b811561148657600854611482906001600160701b0380821691600160701b900416611bc1565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600c81905550915091565b6040518060400160405280600a8152602001690506f6c796465782d4c560b41b81525081565b6000610b3e338484611e93565b6103e881565b600c54600114611566576040805162461bcd60e51b815260206004820152600f60248201526e141bdb1e59195e0e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600c55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b03948516949093169261160f928592879261160a926001600160701b03169185916370a0823191602480820192602092909190829003018186803b1580156115d857600080fd5b505afa1580156115ec573d6000803e3d6000fd5b505050506040513d602081101561160257600080fd5b505190611c24565b611a28565b611683818461160a6008600e9054906101000a90046001600160701b03166001600160701b0316856001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156115d857600080fd5b50506001600c5550565b6005546001600160a01b031681565b6007546001600160a01b031681565b428410156116f3576040805162461bcd60e51b815260206004820152601060248201526f141bdb1e59195e0e881156141254915160821b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa15801561180e573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906118445750886001600160a01b0316816001600160a01b0316145b611895576040805162461bcd60e51b815260206004820152601a60248201527f506f6c796465783a20494e56414c49445f5349474e4154555245000000000000604482015290519081900360640190fd5b6118a0898989611e31565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b600c54600114611911576040805162461bcd60e51b815260206004820152600f60248201526e141bdb1e59195e0e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600c55600654604080516370a0823160e01b81523060048201529051611a21926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561196257600080fd5b505afa158015611976573d6000803e3d6000fd5b505050506040513d602081101561198c57600080fd5b5051600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156119d957600080fd5b505afa1580156119ed573d6000803e3d6000fd5b505050506040513d6020811015611a0357600080fd5b50516008546001600160701b0380821691600160701b900416611c74565b6001600c55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b17815292518151600094859489169392918291908083835b60208310611ad45780518252601f199092019160209182019101611ab5565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611b36576040519150601f19603f3d011682016040523d82523d6000602084013e611b3b565b606091505b5091509150818015611b69575080511580611b695750808060200190516020811015611b6657600080fd5b50515b611bba576040805162461bcd60e51b815260206004820152601860248201527f506f6c796465783a205452414e534645525f4641494c45440000000000000000604482015290519081900360640190fd5b5050505050565b6000811580611bdc57505080820282828281611bd957fe5b04145b610b42576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820382811115610b42576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160701b038411801590611c9257506001600160701b038311155b611cd7576040805162461bcd60e51b8152602060048201526011602482015270506f6c796465783a204f564552464c4f5760781b604482015290519081900360640190fd5b60085463ffffffff42811691600160e01b90048116820390811615801590611d0757506001600160701b03841615155b8015611d1b57506001600160701b03831615155b15611d86578063ffffffff16611d4385611d3486612207565b6001600160e01b031690612219565b600980546001600160e01b03929092169290920201905563ffffffff8116611d6e84611d3487612207565b600a80546001600160e01b0392909216929092020190555b600880546dffffffffffffffffffffffffffff19166001600160701b03888116919091176dffffffffffffffffffffffffffff60701b1916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316600090815260016020526040902054611eb69082611c24565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611ee5908261223e565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611f9257600080fd5b505afa158015611fa6573d6000803e3d6000fd5b505050506040513d6020811015611fbc57600080fd5b5051600b546001600160a01b03821615801594509192509061206d578015612068576000611ff9610fff6001600160701b03888116908816611bc1565b9050600061200683612081565b90508082111561206557600061202861201f8484611c24565b60005490611bc1565b905060006120418361203b866005611bc1565b9061223e565b9050600081838161204e57fe5b04905080156120615761206187826120d3565b5050505b50505b612079565b8015612079576000600b555b505092915050565b600060038211156120c4575080600160028204015b818110156120be578091506002818285816120ad57fe5b0401816120b657fe5b049050612096565b506120ce565b81156120ce575060015b919050565b6000546120e0908261223e565b60009081556001600160a01b038316815260016020526040902054612105908261223e565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600081831061216c578161216e565b825b9392505050565b6001600160a01b0382166000908152600160205260409020546121989082611c24565b6001600160a01b038316600090815260016020526040812091909155546121bf9082611c24565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b0384168161223657fe5b049392505050565b80820182811015610b42576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe506f6c796465783a20494e53554646494349454e545f4f55545055545f414d4f554e54506f6c796465783a20494e53554646494349454e545f4c49515549444954595f4d494e544544506f6c796465783a20494e53554646494349454e545f4c49515549444954595f4255524e4544506f6c796465783a20494e53554646494349454e545f494e5055545f414d4f554e54a2646970667358221220cecd10e494193294e666b3354414bbf1824c644a002562c06bd342bda4ba76bd64736f6c63430007060033

Deployed ByteCode Sourcemap

7819:10120:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15429:1889;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15429:1889:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15429:1889:0;;-1:-1:-1;15429:1889:0;-1:-1:-1;15429:1889:0;:::i;:::-;;851:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8825:231;;;:::i;:::-;;;;-1:-1:-1;;;;;8825:231:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2903:147;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2903:147:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;8116:21;;;:::i;:::-;;;;-1:-1:-1;;;;;8116:21:0;;;;;;;;;;;;;;999:24;;;:::i;:::-;;;;;;;;;;;;;;;;3205:301;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3205:301:0;;;;;;;;;;;;;;;;;:::i;1291:108::-;;;:::i;957:35::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1148:31;;;:::i;9876:208::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;9876:208:0;;;;;;;;;;:::i;8467:32::-;;;:::i;8506:::-;;;:::i;12064:1649::-;;;;;;;;;;;;;;;;-1:-1:-1;12064:1649:0;-1:-1:-1;;;;;12064:1649:0;;:::i;1030:41::-;;;;;;;;;;;;;;;;-1:-1:-1;1030:41:0;-1:-1:-1;;;;;1030:41:0;;:::i;8545:17::-;;;:::i;1406:38::-;;;;;;;;;;;;;;;;-1:-1:-1;1406:38:0;-1:-1:-1;;;;;1406:38:0;;:::i;13825:1492::-;;;;;;;;;;;;;;;;-1:-1:-1;13825:1492:0;-1:-1:-1;;;;;13825:1492:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;906:44;;;:::i;3058:139::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3058:139:0;;;;;;;;:::i;7937:46::-;;;:::i;17367:348::-;;;;;;;;;;;;;;;;-1:-1:-1;17367:348:0;-1:-1:-1;;;;;17367:348:0;;:::i;8087:22::-;;;:::i;8144:21::-;;;:::i;3514:670::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3514:670:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;1078:61::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1078:61:0;;;;;;;;;;:::i;17764:172::-;;;:::i;15429:1889::-;8718:8;;8730:1;8718:13;8710:41;;;;;-1:-1:-1;;;8710:41:0;;;;;;;;;;;;-1:-1:-1;;;8710:41:0;;;;;;;;;;;;;;;8773:1;8762:8;:12;15543:14;;;;:32:::1;;;15574:1;15561:10;:14;15543:32;15535:80;;;;-1:-1:-1::0;;;15535:80:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15627:17;15646::::0;15668:13:::1;:11;:13::i;:::-;15626:55;;;;;15728:9;-1:-1:-1::0;;;;;15715:22:0::1;:10;:22;:48;;;;;15754:9;-1:-1:-1::0;;;;;15741:22:0::1;:10;:22;15715:48;15707:92;;;::::0;;-1:-1:-1;;;15707:92:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;15944:6;::::0;15979::::1;::::0;15812:13:::1;::::0;;;-1:-1:-1;;;;;15944:6:0;;::::1;::::0;15979;;::::1;::::0;16004:13;::::1;::::0;::::1;::::0;::::1;::::0;:30:::1;;;16027:7;-1:-1:-1::0;;;;;16021:13:0::1;:2;-1:-1:-1::0;;;;;16021:13:0::1;;;16004:30;15996:62;;;::::0;;-1:-1:-1;;;15996:62:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;15996:62:0;;;;;;;;;;;;;::::1;;16073:14:::0;;16069:58:::1;;16089:38;16103:7;16112:2;16116:10;16089:13;:38::i;:::-;16176:14:::0;;16172:58:::1;;16192:38;16206:7;16215:2;16219:10;16192:13;:38::i;:::-;16279:15:::0;;16275:93:::1;;16311:2;-1:-1:-1::0;;;;;16296:30:0::1;;16327:10;16339;16351;16363:4;;16296:72;;;;;;;;;;;;;-1:-1:-1::0;;;;;16296:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16275:93;16390:47;::::0;;-1:-1:-1;;;16390:47:0;;16431:4:::1;16390:47;::::0;::::1;::::0;;;-1:-1:-1;;;;;16390:32:0;::::1;::::0;::::1;::::0;:47;;;;;::::1;::::0;;;;;;;;:32;:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;16390:47:0;16459::::1;::::0;;-1:-1:-1;;;16459:47:0;;16500:4:::1;16459:47;::::0;::::1;::::0;;;16390;;-1:-1:-1;;;;;;16459:32:0;::::1;::::0;::::1;::::0;:47;;;;;16390::::1;::::0;16459;;;;;;;;:32;:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;16459:47:0;;-1:-1:-1;16528:14:0::1;::::0;-1:-1:-1;;;;;;;16556:22:0;::::1;::::0;;::::1;16545:33:::0;::::1;:75;;16619:1;16545:75;;;16605:10;16593:9;-1:-1:-1::0;;;;;16593:22:0::1;;16581:8;:35;16545:75;16528:92;;16631:14;16671:10;16659:9;-1:-1:-1::0;;;;;16659:22:0::1;;16648:8;:33;:75;;16722:1;16648:75;;;16708:10;16696:9;-1:-1:-1::0;;;;;16696:22:0::1;;16684:8;:35;16648:75;16631:92;;16754:1;16742:9;:13;:30;;;;16771:1;16759:9;:13;16742:30;16734:77;;;;-1:-1:-1::0;;;16734:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16897:21;16921:40;16944:16;:9:::0;16958:1:::1;16944:13;:16::i;:::-;16921:18;:8:::0;16934:4:::1;16921:12;:18::i;:::-;:22:::0;::::1;:40::i;:::-;16897:64:::0;-1:-1:-1;16972:21:0::1;16996:40;17019:16;:9:::0;17033:1:::1;17019:13;:16::i;16996:40::-;16972:64:::0;-1:-1:-1;17097:43:0::1;17132:7;17097:30;-1:-1:-1::0;;;;;17097:15:0;;::::1;::::0;:30;::::1;:19;:30::i;:::-;:34:::0;::::1;:43::i;:::-;17055:38;:16:::0;17076;17055:20:::1;:38::i;:::-;:85;;17047:108;;;::::0;;-1:-1:-1;;;17047:108:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;17047:108:0;;;;;;;;;;;;;::::1;;8785:1;;17179:49;17187:8;17197;17207:9;17218;17179:7;:49::i;:::-;17244:66;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17244:66:0;::::1;::::0;17249:10:::1;::::0;17244:66:::1;::::0;;;;;;;::::1;-1:-1:-1::0;;8808:1:0;8797:8;:12;-1:-1:-1;;;;;;;;;15429:1889:0:o;851:48::-;;;;;;;;;;;;;;-1:-1:-1;;;851:48:0;;;;:::o;8825:231::-;8958:8;;-1:-1:-1;;;;;8958:8:0;;;;-1:-1:-1;;;8989:8:0;;;;;;-1:-1:-1;;;9030:18:0;;;;;8825:231::o;2903:147::-;2967:4;2984:36;2993:10;3005:7;3014:5;2984:8;:36::i;:::-;-1:-1:-1;3038:4:0;2903:147;;;;;:::o;8116:21::-;;;-1:-1:-1;;;;;8116:21:0;;:::o;999:24::-;;;;:::o;3205:301::-;-1:-1:-1;;;;;3304:15:0;;3283:4;3304:15;;;:9;:15;;;;;;;;3320:10;3304:27;;;;;;;;-1:-1:-1;;3304:39:0;3300:140;;-1:-1:-1;;;;;3390:15:0;;;;;;:9;:15;;;;;;;;3406:10;3390:27;;;;;;;;:38;;3422:5;3390:31;:38::i;:::-;-1:-1:-1;;;;;3360:15:0;;;;;;:9;:15;;;;;;;;3376:10;3360:27;;;;;;;:68;3300:140;3450:26;3460:4;3466:2;3470:5;3450:9;:26::i;:::-;-1:-1:-1;3494:4:0;3205:301;;;;;:::o;1291:108::-;1333:66;1291:108;:::o;957:35::-;990:2;957:35;:::o;1148:31::-;;;;:::o;9876:208::-;9972:7;;-1:-1:-1;;;;;9972:7:0;9958:10;:21;9950:52;;;;;-1:-1:-1;;;9950:52:0;;;;;;;;;;;;-1:-1:-1;;;9950:52:0;;;;;;;;;;;;;;;10033:6;:16;;-1:-1:-1;;;;;10033:16:0;;;-1:-1:-1;;;;;;10033:16:0;;;;;;;10060:6;:16;;;;;;;;;;;9876:208::o;8467:32::-;;;;:::o;8506:::-;;;;:::o;12064:1649::-;12113:14;8718:8;;8730:1;8718:13;8710:41;;;;;-1:-1:-1;;;8710:41:0;;;;;;;;;;;;-1:-1:-1;;;8710:41:0;;;;;;;;;;;;;;;8773:1;8762:8;:12;;;8773:1;12182:13:::1;:11;:13::i;:::-;-1:-1:-1::0;12251:6:0::1;::::0;12237:46:::1;::::0;;-1:-1:-1;;;12237:46:0;;12277:4:::1;12237:46;::::0;::::1;::::0;;;12140:55;;-1:-1:-1;12140:55:0;;-1:-1:-1;12221:13:0::1;::::0;-1:-1:-1;;;;;12251:6:0;;::::1;::::0;12237:31:::1;::::0;:46;;;;;::::1;::::0;;;;;;;;12251:6;12237:46;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;12237:46:0;12324:6:::1;::::0;12310:46:::1;::::0;;-1:-1:-1;;;12310:46:0;;12350:4:::1;12310:46;::::0;::::1;::::0;;;12237;;-1:-1:-1;12294:13:0::1;::::0;-1:-1:-1;;;;;12324:6:0;;::::1;::::0;12310:31:::1;::::0;:46;;;;;12237::::1;::::0;12310;;;;;;;;12324:6;12310:46;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;12310:46:0;;-1:-1:-1;12367:12:0::1;12382:23;:8:::0;-1:-1:-1;;;;;12382:23:0;::::1;:12;:23::i;:::-;12367:38:::0;-1:-1:-1;12416:12:0::1;12431:23;:8:::0;-1:-1:-1;;;;;12431:23:0;::::1;:12;:23::i;:::-;12416:38;;12467:10;12480:30;12489:9;12500;12480:8;:30::i;:::-;12521:17;12541:11:::0;12467:43;;-1:-1:-1;12645:17:0;12641:749:::1;;12714:7;::::0;12698:35:::1;::::0;;-1:-1:-1;;;12698:35:0;;;;12679:16:::1;::::0;-1:-1:-1;;;;;12714:7:0::1;::::0;12698:33:::1;::::0;:35:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;12714:7;12698:35;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;12698:35:0;;-1:-1:-1;12752:10:0::1;-1:-1:-1::0;;;;;12752:22:0;::::1;;12748:500;;;12817:8;-1:-1:-1::0;;;;;12807:36:0::1;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;12807:38:0;;-1:-1:-1;12872:13:0;;;;;:41:::1;;;-1:-1:-1::0;;12889:9:0::1;:24;;12872:41;12864:75;;;::::0;;-1:-1:-1;;;12864:75:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;12864:75:0;;;;;;;;;;;;;::::1;;12748:500;;;-1:-1:-1::0;;;;;12988:22:0;::::1;::::0;12980:57:::1;;;::::0;;-1:-1:-1;;;12980:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;12980:57:0;;;;;;;;;;;;;::::1;;13068:54;7978:5;13068:31;13078:20;:7:::0;13090;13078:11:::1;:20::i;:::-;13068:9;:31::i;:54::-;13056:66;;13141:36;13155:1;7978:5;13141;:36::i;:::-;12641:749;;;;13292:86;-1:-1:-1::0;;;;;13301:37:0;::::1;:25;:7:::0;13313:12;13301:11:::1;:25::i;:::-;:37;;;;;;-1:-1:-1::0;;;;;13340:37:0;::::1;:25;:7:::0;13352:12;13340:11:::1;:25::i;:::-;:37;;;;;;13292:8;:86::i;:::-;13280:98;;12641:749;13420:1;13408:9;:13;13400:64;;;;-1:-1:-1::0;;;13400:64:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13475:20;13481:2;13485:9;13475:5;:20::i;:::-;13508:49;13516:8;13526;13536:9;13547;13508:7;:49::i;:::-;13572:5;13568:47;;;13606:8;::::0;13587:28:::1;::::0;-1:-1:-1;;;;;13592:8:0;;::::1;::::0;-1:-1:-1;;;13606:8:0;::::1;;13587:18;:28::i;:::-;13579:5;:36:::0;13568:47:::1;13671:34;::::0;;;;;::::1;::::0;::::1;::::0;;;;;13676:10:::1;::::0;13671:34:::1;::::0;;;;;;::::1;-1:-1:-1::0;;8808:1:0;8797:8;:12;-1:-1:-1;12064:1649:0;;;-1:-1:-1;;;;;;12064:1649:0:o;1030:41::-;;;;;;;;;;;;;:::o;8545:17::-;;;;:::o;1406:38::-;;;;;;;;;;;;;:::o;13825:1492::-;13874:12;13888;8718:8;;8730:1;8718:13;8710:41;;;;;-1:-1:-1;;;8710:41:0;;;;;;;;;;;;-1:-1:-1;;;8710:41:0;;;;;;;;;;;;;;;8773:1;8762:8;:12;;;8773:1;13955:13:::1;:11;:13::i;:::-;-1:-1:-1::0;14012:6:0::1;::::0;14093::::1;::::0;14172:47:::1;::::0;;-1:-1:-1;;;14172:47:0;;14213:4:::1;14172:47;::::0;::::1;::::0;;;13913:55;;-1:-1:-1;13913:55:0;;-1:-1:-1;;;;;;14012:6:0;;::::1;::::0;14093;::::1;::::0;13994:15:::1;::::0;14012:6;;14172:32:::1;::::0;:47;;;;;::::1;::::0;;;;;;;;14012:6;14172:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;14172:47:0;14246::::1;::::0;;-1:-1:-1;;;14246:47:0;;14287:4:::1;14246:47;::::0;::::1;::::0;;;14172;;-1:-1:-1;14230:13:0::1;::::0;-1:-1:-1;;;;;14246:32:0;::::1;::::0;::::1;::::0;:47;;;;;14172::::1;::::0;14246;;;;;;;:32;:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;14246:47:0;14339:4:::1;14304:14;14321:24:::0;;;:9:::1;14246:47;14321:24:::0;;;;;14246:47;;-1:-1:-1;14371:30:0::1;14380:9:::0;14391;14371:8:::1;:30::i;:::-;14412:17;14432:11:::0;14358:43;;-1:-1:-1;14432:11:0;14542:23:::1;:9:::0;14556:8;14542:13:::1;:23::i;:::-;:38;;;;;;::::0;-1:-1:-1;14675:12:0;14649:23:::1;:9:::0;14663:8;14649:13:::1;:23::i;:::-;:38;;;;;;14639:48;;14764:1;14754:7;:11;:26;;;;;14779:1;14769:7;:11;14754:26;14746:77;;;;-1:-1:-1::0;;;14746:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14834:31;14848:4;14855:9;14834:5;:31::i;:::-;14876:35;14890:7;14899:2;14903:7;14876:13;:35::i;:::-;14922;14936:7;14945:2;14949:7;14922:13;:35::i;:::-;14979:47;::::0;;-1:-1:-1;;;14979:47:0;;15020:4:::1;14979:47;::::0;::::1;::::0;;;-1:-1:-1;;;;;14979:32:0;::::1;::::0;::::1;::::0;:47;;;;;::::1;::::0;;;;;;;;:32;:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;14979:47:0;15048::::1;::::0;;-1:-1:-1;;;15048:47:0;;15089:4:::1;15048:47;::::0;::::1;::::0;;;14979;;-1:-1:-1;;;;;;15048:32:0;::::1;::::0;::::1;::::0;:47;;;;;14979::::1;::::0;15048;;;;;;;;:32;:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;15048:47:0;;-1:-1:-1;15108:49:0::1;15116:8:::0;15048:47;15136:9;15147;15108:7:::1;:49::i;:::-;15172:5;15168:47;;;15206:8;::::0;15187:28:::1;::::0;-1:-1:-1;;;;;15192:8:0;;::::1;::::0;-1:-1:-1;;;15206:8:0;::::1;;15187:18;:28::i;:::-;15179:5;:36:::0;15168:47:::1;15271:38;::::0;;;;;::::1;::::0;::::1;::::0;;;;;-1:-1:-1;;;;;15271:38:0;::::1;::::0;15276:10:::1;::::0;15271:38:::1;::::0;;;;;;;;;::::1;8785:1;;;;;;;;;8808::::0;8797:8;:12;;;;13825:1492;;;:::o;906:44::-;;;;;;;;;;;;;;-1:-1:-1;;;906:44:0;;;;:::o;3058:139::-;3118:4;3135:32;3145:10;3157:2;3161:5;3135:9;:32::i;7937:46::-;7978:5;7937:46;:::o;17367:348::-;8718:8;;8730:1;8718:13;8710:41;;;;;-1:-1:-1;;;8710:41:0;;;;;;;;;;;;-1:-1:-1;;;8710:41:0;;;;;;;;;;;;;;;8773:1;8762:8;:12;17436:6:::1;::::0;17486::::1;::::0;17597:8:::1;::::0;17545:47:::1;::::0;;-1:-1:-1;;;17545:47:0;;17586:4:::1;17545:47;::::0;::::1;::::0;;;-1:-1:-1;;;;;17436:6:0;;::::1;::::0;17486;;::::1;::::0;17518:89:::1;::::0;17436:6;;17541:2;;17545:61:::1;::::0;-1:-1:-1;;;;;17597:8:0::1;::::0;17436:6;;17545:32:::1;::::0;:47;;;;;::::1;::::0;;;;;;;;;17436:6;17545:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;17545:47:0;;:51:::1;:61::i;:::-;17518:13;:89::i;:::-;17618;17632:7;17641:2;17645:61;17697:8;;;;;;;;;-1:-1:-1::0;;;;;17697:8:0::1;-1:-1:-1::0;;;;;17645:61:0::1;17659:7;-1:-1:-1::0;;;;;17645:32:0::1;;17686:4;17645:47;;;;;;;;;;;;;-1:-1:-1::0;;;;;17645:47:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;17618:89;-1:-1:-1::0;;8808:1:0;8797:8;:12;-1:-1:-1;17367:348:0:o;8087:22::-;;;-1:-1:-1;;;;;8087:22:0;;:::o;8144:21::-;;;-1:-1:-1;;;;;8144:21:0;;:::o;3514:670::-;3660:15;3648:8;:27;;3640:56;;;;;-1:-1:-1;;;3640:56:0;;;;;;;;;;;;-1:-1:-1;;;3640:56:0;;;;;;;;;;;;;;;3812:16;;-1:-1:-1;;;;;3908:13:0;;;3707:14;3908:13;;;:6;:13;;;;;;;;:15;;;;;;;;;3857:77;;1333:66;3857:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3847:88;;;;;;-1:-1:-1;;;3748:202:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3724:237;;;;;;;;;3999:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3707:14;;3908:15;3999:26;;;;;-1:-1:-1;;3999:26:0;;;;;;;;;;3908:15;3999:26;;;;;;;;;;;;;;;-1:-1:-1;;3999:26:0;;-1:-1:-1;;3999:26:0;;;-1:-1:-1;;;;;;;4044:30:0;;;;;;:59;;;4098:5;-1:-1:-1;;;;;4078:25:0;:16;-1:-1:-1;;;;;4078:25:0;;4044:59;4036:98;;;;;-1:-1:-1;;;4036:98:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;4145:31;4154:5;4161:7;4170:5;4145:8;:31::i;:::-;3514:670;;;;;;;;;:::o;1078:61::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;17764:172::-;8718:8;;8730:1;8718:13;8710:41;;;;;-1:-1:-1;;;8710:41:0;;;;;;;;;;;;-1:-1:-1;;;8710:41:0;;;;;;;;;;;;;;;8773:1;8762:8;:12;17827:6:::1;::::0;17813:46:::1;::::0;;-1:-1:-1;;;17813:46:0;;17853:4:::1;17813:46;::::0;::::1;::::0;;;17805:123:::1;::::0;-1:-1:-1;;;;;17827:6:0::1;::::0;17813:31:::1;::::0;:46;;;;;::::1;::::0;;;;;;;;17827:6;17813:46;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;17813:46:0;17875:6:::1;::::0;17861:46:::1;::::0;;-1:-1:-1;;;17861:46:0;;17901:4:::1;17861:46;::::0;::::1;::::0;;;-1:-1:-1;;;;;17875:6:0;;::::1;::::0;17861:31:::1;::::0;:46;;;;;17813::::1;::::0;17861;;;;;;;;17875:6;17861:46;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;17861:46:0;17909:8:::1;::::0;-1:-1:-1;;;;;17909:8:0;;::::1;::::0;-1:-1:-1;;;17919:8:0;::::1;;17805:7;:123::i;:::-;8808:1:::0;8797:8;:12;17764:172::o;9064:285::-;8042:34;;;;;;;;;;;;;;;;;9192:43;;-1:-1:-1;;;;;9192:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9192:43:0;-1:-1:-1;;;9192:43:0;;;9181:55;;;;9146:12;;;;9181:10;;;9192:43;9181:55;;;9192:43;9181:55;;9192:43;9181:55;;;;;;;;;;-1:-1:-1;;9181:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9145:91;;;;9255:7;:57;;;;-1:-1:-1;9267:11:0;;:16;;:44;;;9298:4;9287:24;;;;;;;;;;;;;;;-1:-1:-1;9287:24:0;9267:44;9247:94;;;;;-1:-1:-1;;;9247:94:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;9064:285;;;;;:::o;557:142::-;609:6;636;;;:30;;-1:-1:-1;;651:5:0;;;665:1;660;651:5;660:1;646:15;;;;;:20;636:30;628:63;;;;;-1:-1:-1;;;628:63:0;;;;;;;;;;;;-1:-1:-1;;;628:63:0;;;;;;;;;;;;;;420:129;504:5;;;499:16;;;;491:50;;;;;-1:-1:-1;;;491:50:0;;;;;;;;;;;;-1:-1:-1;;;491:50:0;;;;;;;;;;;;;;10169:858;-1:-1:-1;;;;;10281:23:0;;;;;:50;;-1:-1:-1;;;;;;10308:23:0;;;10281:50;10273:80;;;;;-1:-1:-1;;;10273:80:0;;;;;;;;;;;;-1:-1:-1;;;10273:80:0;;;;;;;;;;;;;;;10468:18;;10395:23;:15;:23;;;-1:-1:-1;;;10468:18:0;;;;10451:35;;;10524:15;;;;;;:33;;-1:-1:-1;;;;;;10543:14:0;;;;10524:33;:51;;;;-1:-1:-1;;;;;;10561:14:0;;;;10524:51;10520:336;;;10730:11;10677:64;;10682:44;10716:9;10682:27;10699:9;10682:16;:27::i;:::-;-1:-1:-1;;;;;10682:33:0;;;:44::i;:::-;10653:20;:88;;-1:-1:-1;;;;;10677:50:0;;;;:64;;;;10653:88;;;10780:64;;;10785:44;10819:9;10785:27;10802:9;10785:16;:27::i;:44::-;10756:20;:88;;-1:-1:-1;;;;;10780:50:0;;;;:64;;;;10756:88;;;10520:336;10866:8;:28;;-1:-1:-1;;10866:28:0;-1:-1:-1;;;;;10866:28:0;;;;;;;-1:-1:-1;;;;10905:28:0;-1:-1:-1;;;10905:28:0;;;;;;;;;-1:-1:-1;;;;;10944:35:0;-1:-1:-1;;;10944:35:0;;;;;;;;;10995:24;;;11000:8;;;10995:24;;11010:8;;;;;;;10995:24;;;;;;;;;;;;;;;;;10169:858;;;;;;:::o;2498:169::-;-1:-1:-1;;;;;2579:16:0;;;;;;;:9;:16;;;;;;;;:25;;;;;;;;;;;;;:33;;;2628:31;;;;;;;;;;;;;;;;;2498:169;;;:::o;2675:220::-;-1:-1:-1;;;;;2769:15:0;;;;;;:9;:15;;;;;;:26;;2789:5;2769:19;:26::i;:::-;-1:-1:-1;;;;;2751:15:0;;;;;;;:9;:15;;;;;;:44;;;;2822:13;;;;;;;:24;;2840:5;2822:17;:24::i;:::-;-1:-1:-1;;;;;2806:13:0;;;;;;;:9;:13;;;;;;;;;:40;;;;2862:25;;;;;;;2806:13;;2862:25;;;;;;;;;;;;;2675:220;;;:::o;11117:835::-;11190:10;11213:13;11245:7;;;;;;;;;-1:-1:-1;;;;;11245:7:0;-1:-1:-1;;;;;11229:30:0;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11229:32:0;11324:5;;-1:-1:-1;;;;;11280:19:0;;;;;;-1:-1:-1;11229:32:0;;-1:-1:-1;11324:5:0;11355:590;;11385:11;;11381:494;;11417:10;11430:41;11440:30;-1:-1:-1;;;;;11440:15:0;;;;:30;;:19;:30::i;11430:41::-;11417:54;;11490:14;11507:17;11517:6;11507:9;:17::i;:::-;11490:34;;11555:9;11547:5;:17;11543:317;;;11589:14;11606:37;11622:20;:5;11632:9;11622;:20::i;:::-;11606:11;;;:15;:37::i;:::-;11589:54;-1:-1:-1;11666:16:0;11685:27;11702:9;11685:12;:5;11695:1;11685:9;:12::i;:::-;:16;;:27::i;:::-;11666:46;;11735:14;11764:11;11752:9;:23;;;;;;;-1:-1:-1;11802:13:0;;11798:42;;11817:23;11823:5;11830:9;11817:5;:23::i;:::-;11543:317;;;;11381:494;;;11355:590;;;11896:11;;11892:53;;11932:1;11924:5;:9;11892:53;11117:835;;;;;;:::o;4567:303::-;4612:6;4639:1;4635;:5;4631:232;;;-1:-1:-1;4661:1:0;4694;4690;4686:5;;:9;4710:92;4721:1;4717;:5;4710:92;;;4747:1;4743:5;;4785:1;4780;4776;4772;:5;;;;;;:9;4771:15;;;;;;4767:19;;4710:92;;;4631:232;;;;4823:6;;4819:44;;-1:-1:-1;4850:1:0;4819:44;4567:303;;;:::o;2072:201::-;2145:11;;:22;;2161:5;2145:15;:22::i;:::-;2131:11;:36;;;-1:-1:-1;;;;;2194:13:0;;;;:9;:13;;;;;;:24;;2212:5;2194:17;:24::i;:::-;-1:-1:-1;;;;;2178:13:0;;;;;;:9;:13;;;;;;;;:40;;;;2234:31;;;;;;;2178:13;;;;2234:31;;;;;;;;;;2072:201;;:::o;4353:96::-;4405:6;4432:1;4428;:5;:13;;4440:1;4428:13;;;4436:1;4428:13;4424:17;4353:96;-1:-1:-1;;;4353:96:0:o;2281:209::-;-1:-1:-1;;;;;2360:15:0;;;;;;:9;:15;;;;;;:26;;2380:5;2360:19;:26::i;:::-;-1:-1:-1;;;;;2342:15:0;;;;;;:9;:15;;;;;:44;;;;2411:11;:22;;2427:5;2411:15;:22::i;:::-;2397:11;:36;;;2449:33;;;;;;;;-1:-1:-1;;;;;2449:33:0;;;;;;;;;;;;;2281:209;;:::o;5227:120::-;-1:-1:-1;;;;;5303:10:0;-1:-1:-1;;;5303:17:0;;5227:120::o;5418:108::-;5478:9;-1:-1:-1;;;;;5508:10:0;;-1:-1:-1;;;;;5504:14:0;;5508:10;5504:14;;;;;;5418:108;-1:-1:-1;;;5418:108:0:o;284:128::-;368:5;;;363:16;;;;355:49;;;;;-1:-1:-1;;;355:49:0;;;;;;;;;;;;-1:-1:-1;;;355:49:0;;;;;;;;;;;;;

Swarm Source

ipfs://cecd10e494193294e666b3354414bbf1824c644a002562c06bd342bda4ba76bd
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
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.