Contract 0xa670fe147fb4cab5715da79182982312745fb06e

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x1e1c541e05702605054f65f5489034fed5d94de4e37a96a638912e6470911d10Approve55323792022-11-12 21:14:0815 days 20 hrs ago0x3825b1457d5631024e4ab1095d8a393968cf6421 IN  0xa670fe147fb4cab5715da79182982312745fb06e0 CRO0.221770
0x58f90a9ec39a7f5b633a33f76ec63370a8101650820c2495e59cb511aa609600Approve53725032022-11-02 8:52:5726 days 9 hrs ago0x0281057b3f3b0faddc011b76ad5c8ec591dc5c27 IN  0xa670fe147fb4cab5715da79182982312745fb06e0 CRO0.2166596083030
0x5f752a8a80d0240c1145a918f62fd5fc14712b022972be701381027f05780b42Approve52733962022-10-26 20:51:4332 days 21 hrs ago0x856e30131985be369b4b760dc8aa598f8f0e7117 IN  0xa670fe147fb4cab5715da79182982312745fb06e0 CRO0.221770
0xb0a231777e63918a9f83e62498a9af5c5da9997a4e1056213dc0f3046f890727Approve51804612022-10-20 18:18:2838 days 23 hrs ago0xe7ece3af2f8100b2e6844d5be8a07ecce8d4864a IN  0xa670fe147fb4cab5715da79182982312745fb06e0 CRO0.22177 5,000
0x500fc2340c8600f027c07aa0802013dd2ac251db8e84b85c42c75692eb2205a0Approve51449942022-10-18 10:07:0541 days 7 hrs ago0x5c199ae480e69612b015f24d01ad87f1b174c147 IN  0xa670fe147fb4cab5715da79182982312745fb06e0 CRO0.2171238953230
0x7f612fcd7b75a4e024f2604660fd24bd5d3b1acb7ec444e9e736f0f31a9339b8Approve49444062022-10-05 5:38:1354 days 12 hrs ago0x31fb16419e710603d45dfb8acafdf651d8aa71bd IN  0xa670fe147fb4cab5715da79182982312745fb06e0 CRO0.22177 5,000
0xf515c7fb08dd8b99fd883e5ade7aca0641eb500c1be8f81a7edf05022f200217Approve49167242022-10-03 9:59:5756 days 8 hrs ago0x5e7418edec46729cf1fa90efa8282f27bc1053a6 IN  0xa670fe147fb4cab5715da79182982312745fb06e0 CRO0.217655991685 4,907.24605866
0xf459623302dca5b826c78a05e06c49f5974e67946649ef2f397c16d0f573d490Approve47799802022-09-24 10:08:2465 days 7 hrs ago0xbe28d08d38f131a102fd51453d1223730f537af1 IN  0xa670fe147fb4cab5715da79182982312745fb06e0 CRO0.217933302214 4,913.498268805
0x49951dbed11b7e36e5f276f3406fd0adafdf1acc386502598af181fac94322a4Approve47592212022-09-23 1:19:4566 days 16 hrs ago0x285d99f2f34087600b81498d1e9cb01a299d7fad IN  0xa670fe147fb4cab5715da79182982312745fb06e0 CRO0.221770
0x93d89b7d8c35b8fd36eba51bfd89c95d304bb107de1d0f4cfd66c780d5f565b6Approve46906332022-09-18 13:12:0471 days 4 hrs ago0x0827847061b1d12780b8428fe12c481a31b7662c IN  0xa670fe147fb4cab5715da79182982312745fb06e0 CRO0.22177 5,000
0x8f68facf060123b93b217333918cd6dcb5db1905a961e25f2b0a848a5a4bf079Approve46199572022-09-13 21:50:3675 days 20 hrs ago0xa5136bbce0a2fe00fe54d7d5a24a81084e9d0ac9 IN  0xa670fe147fb4cab5715da79182982312745fb06e0 CRO0.218259789065 4,920.859202447
0x4ec8dcad5e0792b18aa2cbfaac2a3c3bc27fe533754b8127b12462f96ef889f2Approve45742882022-09-10 21:56:3278 days 20 hrs ago0x0b1e8d96df22a20cb65e065393c46119ee838d83 IN  0xa670fe147fb4cab5715da79182982312745fb06e0 CRO0.2182871991710
0x743f5e48f1e429f02e3a1cc1e2909b29973d95c1f69e1b8f1d6b451ecfc102c0Approve44661942022-09-03 19:53:5585 days 22 hrs ago0xc31be81c89bec8e09e47af0f2154135ecce3c358 IN  0xa670fe147fb4cab5715da79182982312745fb06e0 CRO0.2185084692220
0xd9937d06f06bfecec0268e3c50882c6d2c36b12606faa30cd505d3aa78e91720Approve43451282022-08-26 21:28:3993 days 20 hrs ago0xe7ece3af2f8100b2e6844d5be8a07ecce8d4864a IN  0xa670fe147fb4cab5715da79182982312745fb06e0 CRO0.21882283037 4,933.553464628
0x2c4a3650722fb6c7471c11eaa6599e69486382a69305a0da769aeb6365b06554Approve43266392022-08-25 16:23:4695 days 1 hr ago0x440915122a939dbcfdbe86116a1e61559c040d5a IN  0xa670fe147fb4cab5715da79182982312745fb06e0 CRO0.2187939982530
0x6e9bb746d32f214ac9aef912b925a69ffa4c539a9abd45886dbd0ff5fa781632Approve43221872022-08-25 9:22:4595 days 8 hrs ago0x124eb2033730fe5610fcec2dde1e7656c6089c55 IN  0xa670fe147fb4cab5715da79182982312745fb06e0 CRO0.221770
0x62125139301bf00d80f360a2b22a1800b3dbf18d09fce8c52b490bb5d2ac44c2Approve41507952022-08-14 3:38:14106 days 14 hrs ago0x8b7230f45209306aee243cb0fee41438f1e15f94 IN  0xa670fe147fb4cab5715da79182982312745fb06e0 CRO0.2191537374120
0x784beb8c20eab5366bf4c0d9e9b4bed6d7a046fd065931c250af34802d8b795fApprove41481452022-08-13 23:28:31106 days 18 hrs ago0x56aa4fb42f77faa81b5ca0d2b3cab33f80899648 IN  0xa670fe147fb4cab5715da79182982312745fb06e0 CRO0.2191592043740
0x331fe37489755ec00fb98a5e75aa3798ccbc2cc6d6f5127ab5dc24783f4a8c1bApprove41247272022-08-12 10:34:47108 days 7 hrs ago0x0655689e0616e5ac6b99939ea9d2d974b6b60950 IN  0xa670fe147fb4cab5715da79182982312745fb06e0 CRO0.2192064321120
0x09ada50160540641974c2b22ddaaf6f61384b3f5c5d2de1554877b3a3fee97c5Approve40853722022-08-09 20:32:56110 days 21 hrs ago0x3167d7a85549703d4df020313f26912e00f424c9 IN  0xa670fe147fb4cab5715da79182982312745fb06e0 CRO0.21928603160
0x223b3a30b8ff8c5ce77c51e5765cbf0bb3107196fbf3bd71e1372db993b8e944Approve40589172022-08-08 2:48:24112 days 15 hrs ago0x81080a7e991bcdddba8c2302a70f45d6bd369ab5 IN  0xa670fe147fb4cab5715da79182982312745fb06e0 CRO0.219405523691 4,946.690798824
0x1eeb6ff8f182650781bb0a78e28d1556bc2e2b876fd05d59b3ef937095ef2c93Approve40129452022-08-05 2:28:04115 days 15 hrs ago0x68d700e4e19f130c04269f844331fdf8e706878e IN  0xa670fe147fb4cab5715da79182982312745fb06e0 CRO0.2194323872750
0xfb3ca079b901c8aebe88158245af0432af3fa24b778f7acabfe7d28b75d55bf5Approve40099452022-08-04 21:45:04115 days 20 hrs ago0x6c4d0c69e10df3c31b3680d46aa56a9ad79bce26 IN  0xa670fe147fb4cab5715da79182982312745fb06e0 CRO0.2194385473650
0x96a2133ae971c72e3116821d4b30597c3eb6e9bc14ebb4dd443a550ffb602023Approve39914182022-08-03 16:33:19117 days 1 hr ago0xe886449878c27c0512cb289e3c2a0047444a753e IN  0xa670fe147fb4cab5715da79182982312745fb06e0 CRO0.2194756683460
0xc9d1106691792eabdfc2ffb399958c03c33c6ef7b5ab5717c08539bbceff8826Approve39529552022-08-01 3:35:31119 days 14 hrs ago0xb994a1589a8aa353820defc6f7cf8c6bb231beba IN  0xa670fe147fb4cab5715da79182982312745fb06e0 CRO0.21961868157 4,951.496630973
[ Download CSV Export 
Latest 1 internal transaction
Parent Txn Hash Block From To Value
0xcf753d65a30262791cfc8291d9237b06807abadfc844808743454946ff36714023555082022-04-15 20:57:24226 days 21 hrs ago Cougar Exchange: Factory  Contract Creation0 CRO
[ Download CSV Export 
Loading

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

Contract Name:
CougarPair

Compiler Version
v0.5.16+commit.9c3226ce

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at cronoscan.com on 2022-03-22
*/

// File: contracts\interfaces\ICougarPair.sol

pragma solidity >=0.5.0;

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

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure 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);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

// File: contracts\interfaces\ICougarERC20.sol

pragma solidity >=0.5.0;

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

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure 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);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
}

// File: contracts\libraries\SafeMath.sol

pragma solidity =0.5.16;

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

library SafeMath {
    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\CougarERC20.sol

pragma solidity =0.5.16;



contract CougarERC20 is ICougarERC20 {
    using SafeMath for uint;

    string public constant name = 'Cougar LPs';
    string public constant symbol = 'CGS-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() 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, 'Cougar: 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, 'Cougar: INVALID_SIGNATURE');
        _approve(owner, spender, value);
    }
}

// File: contracts\libraries\Math.sol

pragma solidity =0.5.16;

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

pragma solidity =0.5.16;

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

pragma solidity >=0.5.0;

interface IERC20 {
    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\interfaces\ICougarFactory.sol

pragma solidity >=0.5.0;

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

    function feeTo() external view returns (address);
    function feeToSetter() 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;
}

// File: contracts\interfaces\ICougarCallee.sol

pragma solidity >=0.5.0;

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

// File: contracts\CougarPair.sol

pragma solidity =0.5.16;








contract CougarPair is ICougarPair, CougarERC20 {
    using SafeMath  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, 'Cougar: 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))), 'Cougar: 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, 'Cougar: 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), 'Cougar: 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 = ICougarFactory(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(3).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 = IERC20(token0).balanceOf(address(this));
        uint balance1 = IERC20(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) {
            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, 'Cougar: 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 = IERC20(_token0).balanceOf(address(this));
        uint balance1 = IERC20(_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, 'Cougar: INSUFFICIENT_LIQUIDITY_BURNED');
        _burn(address(this), liquidity);
        _safeTransfer(_token0, to, amount0);
        _safeTransfer(_token1, to, amount1);
        balance0 = IERC20(_token0).balanceOf(address(this));
        balance1 = IERC20(_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, 'Cougar: INSUFFICIENT_OUTPUT_AMOUNT');
        (uint112 _reserve0, uint112 _reserve1,) = getReserves(); // gas savings
        require(amount0Out < _reserve0 && amount1Out < _reserve1, 'Cougar: 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, 'Cougar: 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) ICougarCallee(to).cougarCall(msg.sender, amount0Out, amount1Out, data);
        balance0 = IERC20(_token0).balanceOf(address(this));
        balance1 = IERC20(_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, 'Cougar: INSUFFICIENT_INPUT_AMOUNT');
        { // scope for reserve{0,1}Adjusted, avoids stack too deep errors
        uint balance0Adjusted = balance0.mul(1000).sub(amount0In.mul(2));
        uint balance1Adjusted = balance1.mul(1000).sub(amount1In.mul(2));
        require(balance0Adjusted.mul(balance1Adjusted) >= uint(_reserve0).mul(_reserve1).mul(1000**2), 'Cougar: 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, IERC20(_token0).balanceOf(address(this)).sub(reserve0));
        _safeTransfer(_token1, to, IERC20(_token1).balanceOf(address(this)).sub(reserve1));
    }

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

Contract ABI

[{"inputs":[],"payable":false,"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"},{"constant":true,"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MINIMUM_LIQUIDITY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"burn","outputs":[{"internalType":"uint256","name":"amount0","type":"uint256"},{"internalType":"uint256","name":"amount1","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getReserves","outputs":[{"internalType":"uint112","name":"_reserve0","type":"uint112"},{"internalType":"uint112","name":"_reserve1","type":"uint112"},{"internalType":"uint32","name":"_blockTimestampLast","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_token0","type":"address"},{"internalType":"address","name":"_token1","type":"address"}],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"kLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"mint","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"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":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"price0CumulativeLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"price1CumulativeLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"skim","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"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":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"sync","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"token0","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"token1","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"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"}],"payable":false,"stateMutability":"nonpayable","type":"function"}]

60806040526001600c5534801561001557600080fd5b5060405146908060526123518239604080519182900360520182208282018252600a835269436f75676172204c507360b01b6020938401528151808301835260018152603160f81b908401528151808401919091527f47247fcfa32a829c5ffb8000633801bd71aeda0f75dd3e37c41914be8c82636c818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c09094019052825192019190912060035550600580546001600160a01b0319163317905561224c806101056000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80636a627842116100f9578063ba9a7a5611610097578063d21220a711610071578063d21220a714610534578063d505accf1461053c578063dd62ed3e1461058d578063fff6cae9146105bb576101a9565b8063ba9a7a56146104fe578063bc25cf7714610506578063c45a01551461052c576101a9565b80637ecebe00116100d35780637ecebe001461046557806389afcb441461048b57806395d89b41146104ca578063a9059cbb146104d2576101a9565b80636a6278421461041157806370a08231146104375780637464fc3d1461045d576101a9565b806323b872dd116101665780633644e515116101405780633644e515146103cb578063485cc955146103d35780635909c0d5146104015780635a3d549314610409576101a9565b806323b872dd1461036f57806330adf81f146103a5578063313ce567146103ad576101a9565b8063022c0d9f146101ae57806306fdde031461023c5780630902f1ac146102b9578063095ea7b3146102f15780630dfe16811461033157806318160ddd14610355575b600080fd5b61023a600480360360808110156101c457600080fd5b8135916020810135916001600160a01b0360408301351691908101906080810160608201356401000000008111156101fb57600080fd5b82018360208201111561020d57600080fd5b8035906020019184600183028401116401000000008311171561022f57600080fd5b5090925090506105c3565b005b610244610b0b565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561027e578181015183820152602001610266565b50505050905090810190601f1680156102ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c1610b31565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b61031d6004803603604081101561030757600080fd5b506001600160a01b038135169060200135610b5b565b604080519115158252519081900360200190f35b610339610b72565b604080516001600160a01b039092168252519081900360200190f35b61035d610b81565b60408051918252519081900360200190f35b61031d6004803603606081101561038557600080fd5b506001600160a01b03813581169160208101359091169060400135610b87565b61035d610c21565b6103b5610c45565b6040805160ff9092168252519081900360200190f35b61035d610c4a565b61023a600480360360408110156103e957600080fd5b506001600160a01b0381358116916020013516610c50565b61035d610cd1565b61035d610cd7565b61035d6004803603602081101561042757600080fd5b50356001600160a01b0316610cdd565b61035d6004803603602081101561044d57600080fd5b50356001600160a01b0316610fda565b61035d610fec565b61035d6004803603602081101561047b57600080fd5b50356001600160a01b0316610ff2565b6104b1600480360360208110156104a157600080fd5b50356001600160a01b0316611004565b6040805192835260208301919091528051918290030190f35b6102446113a7565b61031d600480360360408110156104e857600080fd5b506001600160a01b0381351690602001356113c9565b61035d6113d6565b61023a6004803603602081101561051c57600080fd5b50356001600160a01b03166113dc565b610339611544565b610339611553565b61023a600480360360e081101561055257600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135611562565b61035d600480360360408110156105a357600080fd5b506001600160a01b0381358116916020013516611761565b61023a61177e565b600c5460011461060b576040805162461bcd60e51b815260206004820152600e60248201526d10dbdd59d85c8e881313d0d2d15160921b604482015290519081900360640190fd5b6000600c558415158061061e5750600084115b6106595760405162461bcd60e51b815260040180806020018281038252602281526020018061218b6022913960400191505060405180910390fd5b600080610664610b31565b5091509150816001600160701b0316871080156106895750806001600160701b031686105b6106da576040805162461bcd60e51b815260206004820152601e60248201527f436f756761723a20494e53554646494349454e545f4c49515549444954590000604482015290519081900360640190fd5b60065460075460009182916001600160a01b039182169190811690891682148015906107185750806001600160a01b0316896001600160a01b031614155b61075e576040805162461bcd60e51b8152602060048201526012602482015271436f756761723a20494e56414c49445f544f60701b604482015290519081900360640190fd5b8a1561076f5761076f828a8d6118dd565b891561078057610780818a8c6118dd565b861561083b57886001600160a01b031663e02aa30f338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561082257600080fd5b505af1158015610836573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561088157600080fd5b505afa158015610895573d6000803e3d6000fd5b505050506040513d60208110156108ab57600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b1580156108f757600080fd5b505afa15801561090b573d6000803e3d6000fd5b505050506040513d602081101561092157600080fd5b5051925060009150506001600160701b0385168a90038311610944576000610953565b89856001600160701b03160383035b9050600089856001600160701b031603831161097057600061097f565b89856001600160701b03160383035b905060008211806109905750600081115b6109cb5760405162461bcd60e51b81526004018080602001828103825260218152602001806121ad6021913960400191505060405180910390fd5b60006109ff6109e184600263ffffffff611a7716565b6109f3876103e863ffffffff611a7716565b9063ffffffff611ada16565b90506000610a176109e184600263ffffffff611a7716565b9050610a48620f4240610a3c6001600160701b038b8116908b1663ffffffff611a7716565b9063ffffffff611a7716565b610a58838363ffffffff611a7716565b1015610a97576040805162461bcd60e51b8152602060048201526009602482015268436f756761723a204b60b81b604482015290519081900360640190fd5b5050610aa584848888611b2a565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600c55505050505050505050565b6040518060400160405280600a815260200169436f75676172204c507360b01b81525081565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610b68338484611cec565b5060015b92915050565b6006546001600160a01b031681565b60005481565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610c0c576001600160a01b0384166000908152600260209081526040808320338452909152902054610be7908363ffffffff611ada16565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610c17848484611d4e565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b6005546001600160a01b03163314610ca3576040805162461bcd60e51b815260206004820152601160248201527021b7bab3b0b91d102327a92124a22222a760791b604482015290519081900360640190fd5b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b60095481565b600a5481565b6000600c54600114610d27576040805162461bcd60e51b815260206004820152600e60248201526d10dbdd59d85c8e881313d0d2d15160921b604482015290519081900360640190fd5b6000600c81905580610d37610b31565b50600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015610d8b57600080fd5b505afa158015610d9f573d6000803e3d6000fd5b505050506040513d6020811015610db557600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610e0857600080fd5b505afa158015610e1c573d6000803e3d6000fd5b505050506040513d6020811015610e3257600080fd5b505190506000610e51836001600160701b03871663ffffffff611ada16565b90506000610e6e836001600160701b03871663ffffffff611ada16565b90506000610e7c8787611e08565b60005490915080610eb957610ea56103e86109f3610ea0878763ffffffff611a7716565b611f66565b9850610eb460006103e8611fb8565b610f08565b610f056001600160701b038916610ed6868463ffffffff611a7716565b81610edd57fe5b046001600160701b038916610ef8868563ffffffff611a7716565b81610eff57fe5b0461204e565b98505b60008911610f475760405162461bcd60e51b81526004018080602001828103825260258152602001806121f36025913960400191505060405180910390fd5b610f518a8a611fb8565b610f5d86868a8a611b2a565b8115610f8d57600854610f89906001600160701b0380821691600160701b90041663ffffffff611a7716565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600c5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600c5460011461104f576040805162461bcd60e51b815260206004820152600e60248201526d10dbdd59d85c8e881313d0d2d15160921b604482015290519081900360640190fd5b6000600c8190558061105f610b31565b50600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b1580156110bb57600080fd5b505afa1580156110cf573d6000803e3d6000fd5b505050506040513d60208110156110e557600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b15801561113357600080fd5b505afa158015611147573d6000803e3d6000fd5b505050506040513d602081101561115d57600080fd5b50513060009081526001602052604081205491925061117c8888611e08565b60005490915080611193848763ffffffff611a7716565b8161119a57fe5b049a50806111ae848663ffffffff611a7716565b816111b557fe5b04995060008b1180156111c8575060008a115b6112035760405162461bcd60e51b81526004018080602001828103825260258152602001806121ce6025913960400191505060405180910390fd5b61120d3084612066565b611218878d8d6118dd565b611223868d8c6118dd565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b15801561126957600080fd5b505afa15801561127d573d6000803e3d6000fd5b505050506040513d602081101561129357600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b1580156112df57600080fd5b505afa1580156112f3573d6000803e3d6000fd5b505050506040513d602081101561130957600080fd5b5051935061131985858b8b611b2a565b811561134957600854611345906001600160701b0380821691600160701b90041663ffffffff611a7716565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600c81905550915091565b6040518060400160405280600681526020016504347532d4c560d41b81525081565b6000610b68338484611d4e565b6103e881565b600c54600114611424576040805162461bcd60e51b815260206004820152600e60248201526d10dbdd59d85c8e881313d0d2d15160921b604482015290519081900360640190fd5b6000600c55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b0394851694909316926114d392859287926114ce926001600160701b03169185916370a0823191602480820192602092909190829003018186803b15801561149657600080fd5b505afa1580156114aa573d6000803e3d6000fd5b505050506040513d60208110156114c057600080fd5b50519063ffffffff611ada16565b6118dd565b600854604080516370a0823160e01b8152306004820152905161153a92849287926114ce92600160701b90046001600160701b0316916001600160a01b038616916370a0823191602480820192602092909190829003018186803b15801561149657600080fd5b50506001600c5550565b6005546001600160a01b031681565b6007546001600160a01b031681565b428410156115a9576040805162461bcd60e51b815260206004820152600f60248201526e10dbdd59d85c8e8811561412549151608a1b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa1580156116c4573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906116fa5750886001600160a01b0316816001600160a01b0316145b61174b576040805162461bcd60e51b815260206004820152601960248201527f436f756761723a20494e56414c49445f5349474e415455524500000000000000604482015290519081900360640190fd5b611756898989611cec565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b600c546001146117c6576040805162461bcd60e51b815260206004820152600e60248201526d10dbdd59d85c8e881313d0d2d15160921b604482015290519081900360640190fd5b6000600c55600654604080516370a0823160e01b815230600482015290516118d6926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561181757600080fd5b505afa15801561182b573d6000803e3d6000fd5b505050506040513d602081101561184157600080fd5b5051600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561188e57600080fd5b505afa1580156118a2573d6000803e3d6000fd5b505050506040513d60208110156118b857600080fd5b50516008546001600160701b0380821691600160701b900416611b2a565b6001600c55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b6020831061198a5780518252601f19909201916020918201910161196b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146119ec576040519150601f19603f3d011682016040523d82523d6000602084013e6119f1565b606091505b5091509150818015611a1f575080511580611a1f5750808060200190516020811015611a1c57600080fd5b50515b611a70576040805162461bcd60e51b815260206004820152601760248201527f436f756761723a205452414e534645525f4641494c4544000000000000000000604482015290519081900360640190fd5b5050505050565b6000811580611a9257505080820282828281611a8f57fe5b04145b610b6c576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820382811115610b6c576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160701b038411801590611b4857506001600160701b038311155b611b8c576040805162461bcd60e51b815260206004820152601060248201526f436f756761723a204f564552464c4f5760801b604482015290519081900360640190fd5b60085463ffffffff42811691600160e01b90048116820390811615801590611bbc57506001600160701b03841615155b8015611bd057506001600160701b03831615155b15611c41578063ffffffff16611bfe85611be986612104565b6001600160e01b03169063ffffffff61211616565b600980546001600160e01b03929092169290920201905563ffffffff8116611c2984611be987612104565b600a80546001600160e01b0392909216929092020190555b600880546dffffffffffffffffffffffffffff19166001600160701b03888116919091176dffffffffffffffffffffffffffff60701b1916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316600090815260016020526040902054611d77908263ffffffff611ada16565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611dac908263ffffffff61213b16565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611e5957600080fd5b505afa158015611e6d573d6000803e3d6000fd5b505050506040513d6020811015611e8357600080fd5b5051600b546001600160a01b038216158015945091925090611f52578015611f4d576000611ec6610ea06001600160701b0388811690881663ffffffff611a7716565b90506000611ed383611f66565b905080821115611f4a576000611f01611ef2848463ffffffff611ada16565b6000549063ffffffff611a7716565b90506000611f2683611f1a86600363ffffffff611a7716565b9063ffffffff61213b16565b90506000818381611f3357fe5b0490508015611f4657611f468782611fb8565b5050505b50505b611f5e565b8015611f5e576000600b555b505092915050565b60006003821115611fa9575080600160028204015b81811015611fa357809150600281828581611f9257fe5b040181611f9b57fe5b049050611f7b565b50611fb3565b8115611fb3575060015b919050565b600054611fcb908263ffffffff61213b16565b60009081556001600160a01b038316815260016020526040902054611ff6908263ffffffff61213b16565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600081831061205d578161205f565b825b9392505050565b6001600160a01b03821660009081526001602052604090205461208f908263ffffffff611ada16565b6001600160a01b038316600090815260016020526040812091909155546120bc908263ffffffff611ada16565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b0384168161213357fe5b049392505050565b80820182811015610b6c576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe436f756761723a20494e53554646494349454e545f4f55545055545f414d4f554e54436f756761723a20494e53554646494349454e545f494e5055545f414d4f554e54436f756761723a20494e53554646494349454e545f4c49515549444954595f4255524e4544436f756761723a20494e53554646494349454e545f4c49515549444954595f4d494e544544a265627a7a72315820b484be6c0b8a7845205f3bc842b125ed2416bd20dd4e18b777768defc4eba53f64736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429

Deployed ByteCode Sourcemap

11069:9636:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11069:9636:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18244:1868;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;18244:1868:0;;;;;;;;-1:-1:-1;;;;;18244:1868:0;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;18244:1868:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;18244:1868:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;18244:1868:0;;-1:-1:-1;18244:1868:0;-1:-1:-1;18244:1868:0;:::i;:::-;;4517:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;4517:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12078:231;;;:::i;:::-;;;;-1:-1:-1;;;;;12078:231:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6564:147;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;6564:147:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;11370:21;;;:::i;:::-;;;;-1:-1:-1;;;;;11370:21:0;;;;;;;;;;;;;;4655:24;;;:::i;:::-;;;;;;;;;;;;;;;;6866:301;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;6866:301:0;;;;;;;;;;;;;;;;;:::i;4947:108::-;;;:::i;4613:35::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4804:31;;;:::i;13135:207::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;13135:207:0;;;;;;;;;;:::i;11721:32::-;;;:::i;11760:::-;;;:::i;15320:1237::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15320:1237:0;-1:-1:-1;;;;;15320:1237:0;;:::i;4686:41::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4686:41:0;-1:-1:-1;;;;;4686:41:0;;:::i;11799:17::-;;;:::i;5062:38::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5062:38:0;-1:-1:-1;;;;;5062:38:0;;:::i;16669:1463::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16669:1463:0;-1:-1:-1;;;;;16669:1463:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;4566:40;;;:::i;6719:139::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;6719:139:0;;;;;;;;:::i;11191:46::-;;;:::i;20161:334::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20161:334:0;-1:-1:-1;;;;;20161:334:0;;:::i;11341:22::-;;;:::i;11398:21::-;;;:::i;7175:668::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;7175:668:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;4734:61::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;4734:61:0;;;;;;;;;;:::i;20544:158::-;;;:::i;18244:1868::-;11972:8;;11984:1;11972:13;11964:40;;;;;-1:-1:-1;;;11964:40:0;;;;;;;;;;;;-1:-1:-1;;;11964:40:0;;;;;;;;;;;;;;;12026:1;12015:8;:12;18358:14;;;;:32;;;18389:1;18376:10;:14;18358:32;18350:79;;;;-1:-1:-1;;;18350:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18441:17;18460;18482:13;:11;:13::i;:::-;18440:55;;;;;18542:9;-1:-1:-1;;;;;18529:22:0;:10;:22;:48;;;;;18568:9;-1:-1:-1;;;;;18555:22:0;:10;:22;18529:48;18521:91;;;;;-1:-1:-1;;;18521:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;18757:6;;18792;;18625:13;;;;-1:-1:-1;;;;;18757:6:0;;;;18792;;;;18817:13;;;;;;;:30;;;18840:7;-1:-1:-1;;;;;18834:13:0;:2;-1:-1:-1;;;;;18834:13:0;;;18817:30;18809:61;;;;;-1:-1:-1;;;18809:61:0;;;;;;;;;;;;-1:-1:-1;;;18809:61:0;;;;;;;;;;;;;;;18885:14;;18881:58;;18901:38;18915:7;18924:2;18928:10;18901:13;:38::i;:::-;18988:14;;18984:58;;19004:38;19018:7;19027:2;19031:10;19004:13;:38::i;:::-;19091:15;;19087:91;;19122:2;-1:-1:-1;;;;;19108:28:0;;19137:10;19149;19161;19173:4;;19108:70;;;;;;;;;;;;;-1:-1:-1;;;;;19108:70:0;-1:-1:-1;;;;;19108:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;19108:70:0;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19108:70:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19108:70:0;;;;19087:91;19200:40;;;-1:-1:-1;;;19200:40:0;;19234:4;19200:40;;;;;;-1:-1:-1;;;;;19200:25:0;;;;;:40;;;;;;;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;19200:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19200:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19200:40:0;19262;;;-1:-1:-1;;;19262:40:0;;19296:4;19262:40;;;;;;19200;;-1:-1:-1;;;;;;19262:25:0;;;;;:40;;;;;19200;;19262;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;19262:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19262:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19262:40:0;;-1:-1:-1;19324:14:0;;-1:-1:-1;;;;;;;19352:22:0;;;;;19341:33;;:75;;19415:1;19341:75;;;19401:10;19389:9;-1:-1:-1;;;;;19389:22:0;;19377:8;:35;19341:75;19324:92;;19427:14;19467:10;19455:9;-1:-1:-1;;;;;19455:22:0;;19444:8;:33;:75;;19518:1;19444:75;;;19504:10;19492:9;-1:-1:-1;;;;;19492:22:0;;19480:8;:35;19444:75;19427:92;;19550:1;19538:9;:13;:30;;;;19567:1;19555:9;:13;19538:30;19530:76;;;;-1:-1:-1;;;19530:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19692:21;19716:40;19739:16;:9;19753:1;19739:16;:13;:16;:::i;:::-;19716:18;:8;19729:4;19716:18;:12;:18;:::i;:::-;:22;:40;:22;:40;:::i;:::-;19692:64;-1:-1:-1;19767:21:0;19791:40;19814:16;:9;19828:1;19814:16;:13;:16;:::i;19791:40::-;19767:64;-1:-1:-1;19892:43:0;19927:7;19892:30;-1:-1:-1;;;;;19892:15:0;;;;:30;;;:19;:30;:::i;:::-;:34;:43;:34;:43;:::i;:::-;19850:38;:16;19871;19850:38;:20;:38;:::i;:::-;:85;;19842:107;;;;;-1:-1:-1;;;19842:107:0;;;;;;;;;;;;-1:-1:-1;;;19842:107:0;;;;;;;;;;;;;;;12038:1;;19973:49;19981:8;19991;20001:9;20012;19973:7;:49::i;:::-;20038:66;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20038:66:0;;;20043:10;;20038:66;;;;;;;;;-1:-1:-1;;12061:1:0;12050:8;:12;-1:-1:-1;;;;;;;;;18244:1868:0:o;4517:42::-;;;;;;;;;;;;;;-1:-1:-1;;;4517:42:0;;;;:::o;12078:231::-;12211:8;;-1:-1:-1;;;;;12211:8:0;;;;-1:-1:-1;;;12242:8:0;;;;;;-1:-1:-1;;;12283:18:0;;;;;12078:231::o;6564:147::-;6628:4;6645:36;6654:10;6666:7;6675:5;6645:8;:36::i;:::-;-1:-1:-1;6699:4:0;6564:147;;;;;:::o;11370:21::-;;;-1:-1:-1;;;;;11370:21:0;;:::o;4655:24::-;;;;:::o;6866:301::-;-1:-1:-1;;;;;6965:15:0;;6944:4;6965:15;;;:9;:15;;;;;;;;6981:10;6965:27;;;;;;;;-1:-1:-1;;6965:39:0;6961:140;;-1:-1:-1;;;;;7051:15:0;;;;;;:9;:15;;;;;;;;7067:10;7051:27;;;;;;;;:38;;7083:5;7051:38;:31;:38;:::i;:::-;-1:-1:-1;;;;;7021:15:0;;;;;;:9;:15;;;;;;;;7037:10;7021:27;;;;;;;:68;6961:140;7111:26;7121:4;7127:2;7131:5;7111:9;:26::i;:::-;-1:-1:-1;7155:4:0;6866:301;;;;;:::o;4947:108::-;4989:66;4947:108;:::o;4613:35::-;4646:2;4613:35;:::o;4804:31::-;;;;:::o;13135:207::-;13231:7;;-1:-1:-1;;;;;13231:7:0;13217:10;:21;13209:51;;;;;-1:-1:-1;;;13209:51:0;;;;;;;;;;;;-1:-1:-1;;;13209:51:0;;;;;;;;;;;;;;;13291:6;:16;;-1:-1:-1;;;;;13291:16:0;;;-1:-1:-1;;;;;;13291:16:0;;;;;;;13318:6;:16;;;;;;;;;;;13135:207::o;11721:32::-;;;;:::o;11760:::-;;;;:::o;15320:1237::-;15369:14;11972:8;;11984:1;11972:13;11964:40;;;;;-1:-1:-1;;;11964:40:0;;;;;;;;;;;;-1:-1:-1;;;11964:40:0;;;;;;;;;;;;;;;12026:1;12015:8;:12;;;12026:1;15438:13;:11;:13::i;:::-;-1:-1:-1;15500:6:0;;15493:39;;;-1:-1:-1;;;15493:39:0;;15526:4;15493:39;;;;;;15396:55;;-1:-1:-1;15396:55:0;;-1:-1:-1;15477:13:0;;-1:-1:-1;;;;;15500:6:0;;;;15493:24;;:39;;;;;;;;;;;;;;15500:6;15493:39;;;5:2:-1;;;;30:1;27;20:12;5:2;15493:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15493:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15493:39:0;15566:6;;15559:39;;;-1:-1:-1;;;15559:39:0;;15592:4;15559:39;;;;;;15493;;-1:-1:-1;15543:13:0;;-1:-1:-1;;;;;15566:6:0;;;;15559:24;;:39;;;;;15493;;15559;;;;;;;;15566:6;15559:39;;;5:2:-1;;;;30:1;27;20:12;5:2;15559:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15559:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15559:39:0;;-1:-1:-1;15609:12:0;15624:23;:8;-1:-1:-1;;;;;15624:23:0;;;:12;:23;:::i;:::-;15609:38;-1:-1:-1;15658:12:0;15673:23;:8;-1:-1:-1;;;;;15673:23:0;;;:12;:23;:::i;:::-;15658:38;;15709:10;15722:30;15731:9;15742;15722:8;:30::i;:::-;15763:17;15783:11;15709:43;;-1:-1:-1;15887:17:0;15883:352;;15933:54;11232:5;15933:31;15943:20;:7;15955;15943:20;:11;:20;:::i;:::-;15933:9;:31::i;:54::-;15921:66;;16001:36;16015:1;11232:5;16001;:36::i;:::-;15883:352;;;16137:86;-1:-1:-1;;;;;16146:37:0;;:25;:7;16158:12;16146:25;:11;:25;:::i;:::-;:37;;;;;;-1:-1:-1;;;;;16185:37:0;;:25;:7;16197:12;16185:25;:11;:25;:::i;:::-;:37;;;;;;16137:8;:86::i;:::-;16125:98;;15883:352;16265:1;16253:9;:13;16245:63;;;;-1:-1:-1;;;16245:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16319:20;16325:2;16329:9;16319:5;:20::i;:::-;16352:49;16360:8;16370;16380:9;16391;16352:7;:49::i;:::-;16416:5;16412:47;;;16450:8;;16431:28;;-1:-1:-1;;;;;16436:8:0;;;;-1:-1:-1;;;16450:8:0;;;16431:28;:18;:28;:::i;:::-;16423:5;:36;16412:47;16515:34;;;;;;;;;;;;;;16520:10;;16515:34;;;;;;;;-1:-1:-1;;12061:1:0;12050:8;:12;-1:-1:-1;15320:1237:0;;;-1:-1:-1;;;;;;15320:1237:0:o;4686:41::-;;;;;;;;;;;;;:::o;11799:17::-;;;;:::o;5062:38::-;;;;;;;;;;;;;:::o;16669:1463::-;16718:12;16732;11972:8;;11984:1;11972:13;11964:40;;;;;-1:-1:-1;;;11964:40:0;;;;;;;;;;;;-1:-1:-1;;;11964:40:0;;;;;;;;;;;;;;;12026:1;12015:8;:12;;;12026:1;16799:13;:11;:13::i;:::-;-1:-1:-1;16856:6:0;;16937;;17016:40;;;-1:-1:-1;;;17016:40:0;;17050:4;17016:40;;;;;;16757:55;;-1:-1:-1;16757:55:0;;-1:-1:-1;;;;;;16856:6:0;;;;16937;;;16838:15;;16856:6;;17016:25;;:40;;;;;;;;;;;;;;16856:6;17016:40;;;5:2:-1;;;;30:1;27;20:12;5:2;17016:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17016:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17016:40:0;17083;;;-1:-1:-1;;;17083:40:0;;17117:4;17083:40;;;;;;17016;;-1:-1:-1;17067:13:0;;-1:-1:-1;;;;;17083:25:0;;;;;:40;;;;;17016;;17083;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;17083:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17083:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17083:40:0;17169:4;17134:14;17151:24;;;:9;17083:40;17151:24;;;;;17083:40;;-1:-1:-1;17201:30:0;17210:9;17221;17201:8;:30::i;:::-;17242:17;17262:11;17188:43;;-1:-1:-1;17262:11:0;17372:23;:9;17386:8;17372:23;:13;:23;:::i;:::-;:38;;;;;;;-1:-1:-1;17505:12:0;17479:23;:9;17493:8;17479:23;:13;:23;:::i;:::-;:38;;;;;;17469:48;;17594:1;17584:7;:11;:26;;;;;17609:1;17599:7;:11;17584:26;17576:76;;;;-1:-1:-1;;;17576:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17663:31;17677:4;17684:9;17663:5;:31::i;:::-;17705:35;17719:7;17728:2;17732:7;17705:13;:35::i;:::-;17751;17765:7;17774:2;17778:7;17751:13;:35::i;:::-;17808:40;;;-1:-1:-1;;;17808:40:0;;17842:4;17808:40;;;;;;-1:-1:-1;;;;;17808:25:0;;;;;:40;;;;;;;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;17808:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17808:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17808:40:0;17870;;;-1:-1:-1;;;17870:40:0;;17904:4;17870:40;;;;;;17808;;-1:-1:-1;;;;;;17870:25:0;;;;;:40;;;;;17808;;17870;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;17870:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17870:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17870:40:0;;-1:-1:-1;17923:49:0;17931:8;17870:40;17951:9;17962;17923:7;:49::i;:::-;17987:5;17983:47;;;18021:8;;18002:28;;-1:-1:-1;;;;;18007:8:0;;;;-1:-1:-1;;;18021:8:0;;;18002:28;:18;:28;:::i;:::-;17994:5;:36;17983:47;18086:38;;;;;;;;;;;;;;-1:-1:-1;;;;;18086:38:0;;;18091:10;;18086:38;;;;;;;;;;;12038:1;;;;;;;;;12061;12050:8;:12;;;;16669:1463;;;:::o;4566:40::-;;;;;;;;;;;;;;-1:-1:-1;;;4566:40:0;;;;:::o;6719:139::-;6779:4;6796:32;6806:10;6818:2;6822:5;6796:9;:32::i;11191:46::-;11232:5;11191:46;:::o;20161:334::-;11972:8;;11984:1;11972:13;11964:40;;;;;-1:-1:-1;;;11964:40:0;;;;;;;;;;;;-1:-1:-1;;;11964:40:0;;;;;;;;;;;;;;;12026:1;12015:8;:12;20230:6;;20280;;20384:8;;20339:40;;;-1:-1:-1;;;20339:40:0;;20373:4;20339:40;;;;;;-1:-1:-1;;;;;20230:6:0;;;;20280;;;;20312:82;;20230:6;;20335:2;;20339:54;;-1:-1:-1;;;;;20384:8:0;;20230:6;;20339:25;;:40;;;;;;;;;;;;;;;20230:6;20339:40;;;5:2:-1;;;;30:1;27;20:12;5:2;20339:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20339:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20339:40:0;;:54;:44;:54;:::i;:::-;20312:13;:82::i;:::-;20477:8;;20432:40;;;-1:-1:-1;;;20432:40:0;;20466:4;20432:40;;;;;;20405:82;;20419:7;;20428:2;;20432:54;;-1:-1:-1;;;20477:8:0;;-1:-1:-1;;;;;20477:8:0;;-1:-1:-1;;;;;20432:25:0;;;;;:40;;;;;;;;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;20405:82:0;-1:-1:-1;;12061:1:0;12050:8;:12;-1:-1:-1;20161:334:0:o;11341:22::-;;;-1:-1:-1;;;;;11341:22:0;;:::o;11398:21::-;;;-1:-1:-1;;;;;11398:21:0;;:::o;7175:668::-;7321:15;7309:8;:27;;7301:55;;;;;-1:-1:-1;;;7301:55:0;;;;;;;;;;;;-1:-1:-1;;;7301:55:0;;;;;;;;;;;;;;;7472:16;;-1:-1:-1;;;;;7568:13:0;;;7367:14;7568:13;;;:6;:13;;;;;;;;:15;;;;;;;;;7517:77;;4989:66;7517:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;7517:77:0;;;;;7507:88;;;;;;-1:-1:-1;;;7408:202:0;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;7408:202:0;;;;;;7384:237;;;;;;;;;7659:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7367:14;;7568:15;7659:26;;;;;-1:-1:-1;;7659:26:0;;;;;;;;;;7568:15;7659:26;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;7659:26:0;;-1:-1:-1;;7659:26:0;;;-1:-1:-1;;;;;;;7704:30:0;;;;;;:59;;;7758:5;-1:-1:-1;;;;;7738:25:0;:16;-1:-1:-1;;;;;7738:25:0;;7704:59;7696:97;;;;;-1:-1:-1;;;7696:97:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;7804:31;7813:5;7820:7;7829:5;7804:8;:31::i;:::-;7175:668;;;;;;;;;:::o;4734:61::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;20544:158::-;11972:8;;11984:1;11972:13;11964:40;;;;;-1:-1:-1;;;11964:40:0;;;;;;;;;;;;-1:-1:-1;;;11964:40:0;;;;;;;;;;;;;;;12026:1;12015:8;:12;20600:6;;20593:39;;;-1:-1:-1;;;20593:39:0;;20626:4;20593:39;;;;;;20585:109;;-1:-1:-1;;;;;20600:6:0;;20593:24;;:39;;;;;;;;;;;;;;20600:6;20593:39;;;5:2:-1;;;;30:1;27;20:12;5:2;20593:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20593:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20593:39:0;20641:6;;20634:39;;;-1:-1:-1;;;20634:39:0;;20667:4;20634:39;;;;;;-1:-1:-1;;;;;20641:6:0;;;;20634:24;;:39;;;;;20593;;20634;;;;;;;;20641:6;20634:39;;;5:2:-1;;;;30:1;27;20:12;5:2;20634:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20634:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20634:39:0;20675:8;;-1:-1:-1;;;;;20675:8:0;;;;-1:-1:-1;;;20685:8:0;;;20585:7;:109::i;:::-;12061:1;12050:8;:12;20544:158::o;12317:284::-;11296:34;;;;;;;;;;;;;;;;;12445:43;;-1:-1:-1;;;;;12445:43:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;12445:43:0;;;;;;25:18:-1;;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;12434:55:0;;;;12399:12;;12413:17;;12434:10;;;12445:43;12434:55;;;25:18:-1;12434:55:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;12434:55:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;12398:91:0;;;;12508:7;:57;;;;-1:-1:-1;12520:11:0;;:16;;:44;;;12551:4;12540:24;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12540:24:0;12520:44;12500:93;;;;;-1:-1:-1;;;12500:93:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;12317:284;;;;;:::o;4222:142::-;4274:6;4301;;;:30;;-1:-1:-1;;4316:5:0;;;4330:1;4325;4316:5;4325:1;4311:15;;;;;:20;4301:30;4293:63;;;;;-1:-1:-1;;;4293:63:0;;;;;;;;;;;;-1:-1:-1;;;4293:63:0;;;;;;;;;;;;;;4085:129;4169:5;;;4164:16;;;;4156:50;;;;;-1:-1:-1;;;4156:50:0;;;;;;;;;;;;-1:-1:-1;;;4156:50:0;;;;;;;;;;;;;;13427:857;-1:-1:-1;;;;;13539:23:0;;;;;:50;;-1:-1:-1;;;;;;13566:23:0;;;13539:50;13531:79;;;;;-1:-1:-1;;;13531:79:0;;;;;;;;;;;;-1:-1:-1;;;13531:79:0;;;;;;;;;;;;;;;13725:18;;13652:23;:15;:23;;;-1:-1:-1;;;13725:18:0;;;;13708:35;;;13781:15;;;;;;:33;;-1:-1:-1;;;;;;13800:14:0;;;;13781:33;:51;;;;-1:-1:-1;;;;;;13818:14:0;;;;13781:51;13777:336;;;13987:11;13934:64;;13939:44;13973:9;13939:27;13956:9;13939:16;:27::i;:::-;-1:-1:-1;;;;;13939:33:0;;:44;:33;:44;:::i;:::-;13910:20;:88;;-1:-1:-1;;;;;13934:50:0;;;;:64;;;;13910:88;;;14037:64;;;14042:44;14076:9;14042:27;14059:9;14042:16;:27::i;:44::-;14013:20;:88;;-1:-1:-1;;;;;14037:50:0;;;;:64;;;;14013:88;;;13777:336;14123:8;:28;;-1:-1:-1;;14123:28:0;-1:-1:-1;;;;;14123:28:0;;;;;;;-1:-1:-1;;;;14162:28:0;-1:-1:-1;;;14162:28:0;;;;;;;;;-1:-1:-1;;;;;14201:35:0;-1:-1:-1;;;14201:35:0;;;;;;;;;14252:24;;;14257:8;;;14252:24;;14267:8;;;;;;;14252:24;;;;;;;;;;;;;;;;;13427:857;;;;;;:::o;6159:169::-;-1:-1:-1;;;;;6240:16:0;;;;;;;:9;:16;;;;;;;;:25;;;;;;;;;;;;;:33;;;6289:31;;;;;;;;;;;;;;;;;6159:169;;;:::o;6336:220::-;-1:-1:-1;;;;;6430:15:0;;;;;;:9;:15;;;;;;:26;;6450:5;6430:26;:19;:26;:::i;:::-;-1:-1:-1;;;;;6412:15:0;;;;;;;:9;:15;;;;;;:44;;;;6483:13;;;;;;;:24;;6501:5;6483:24;:17;:24;:::i;:::-;-1:-1:-1;;;;;6467:13:0;;;;;;;:9;:13;;;;;;;;;:40;;;;6523:25;;;;;;;6467:13;;6523:25;;;;;;;;;;;;;6336:220;;;:::o;14374:834::-;14447:10;14470:13;14501:7;;;;;;;;;-1:-1:-1;;;;;14501:7:0;-1:-1:-1;;;;;14486:29:0;;:31;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14486:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14486:31:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14486:31:0;14580:5;;-1:-1:-1;;;;;14536:19:0;;;;;;-1:-1:-1;14486:31:0;;-1:-1:-1;14580:5:0;14611:590;;14641:11;;14637:494;;14673:10;14686:41;14696:30;-1:-1:-1;;;;;14696:15:0;;;;:30;;;:19;:30;:::i;14686:41::-;14673:54;;14746:14;14763:17;14773:6;14763:9;:17::i;:::-;14746:34;;14811:9;14803:5;:17;14799:317;;;14845:14;14862:37;14878:20;:5;14888:9;14878:20;:9;:20;:::i;:::-;14862:11;;;:37;:15;:37;:::i;:::-;14845:54;-1:-1:-1;14922:16:0;14941:27;14958:9;14941:12;:5;14951:1;14941:12;:9;:12;:::i;:::-;:16;:27;:16;:27;:::i;:::-;14922:46;;14991:14;15020:11;15008:9;:23;;;;;;;-1:-1:-1;15058:13:0;;15054:42;;15073:23;15079:5;15086:9;15073:5;:23::i;:::-;14799:317;;;;14637:494;;;14611:590;;;15152:11;;15148:53;;15188:1;15180:5;:9;15148:53;14374:834;;;;;;:::o;8208:303::-;8253:6;8280:1;8276;:5;8272:232;;;-1:-1:-1;8302:1:0;8335;8331;8327:5;;:9;8351:92;8362:1;8358;:5;8351:92;;;8388:1;8384:5;;8426:1;8421;8417;8413;:5;;;;;;:9;8412:15;;;;;;8408:19;;8351:92;;;8272:232;;;;8464:6;;8460:44;;-1:-1:-1;8491:1:0;8460:44;8208:303;;;:::o;5733:201::-;5806:11;;:22;;5822:5;5806:22;:15;:22;:::i;:::-;5792:11;:36;;;-1:-1:-1;;;;;5855:13:0;;;;:9;:13;;;;;;:24;;5873:5;5855:24;:17;:24;:::i;:::-;-1:-1:-1;;;;;5839:13:0;;;;;;:9;:13;;;;;;;;:40;;;;5895:31;;;;;;;5839:13;;;;5895:31;;;;;;;;;;5733:201;;:::o;7994:96::-;8046:6;8073:1;8069;:5;:13;;8081:1;8069:13;;;8077:1;8069:13;8065:17;7994:96;-1:-1:-1;;;7994:96:0:o;5942:209::-;-1:-1:-1;;;;;6021:15:0;;;;;;:9;:15;;;;;;:26;;6041:5;6021:26;:19;:26;:::i;:::-;-1:-1:-1;;;;;6003:15:0;;;;;;:9;:15;;;;;:44;;;;6072:11;:22;;6088:5;6072:22;:15;:22;:::i;:::-;6058:11;:36;;;6110:33;;;;;;;;-1:-1:-1;;;;;6110:33:0;;;;;;;;;;;;;5942:209;;:::o;8858:120::-;-1:-1:-1;;;;;8934:10:0;-1:-1:-1;;;8934:17:0;;8858:120::o;9049:108::-;9109:9;-1:-1:-1;;;;;9139:10:0;;-1:-1:-1;;;;;9135:14:0;;9139:10;9135:14;;;;;;9049:108;-1:-1:-1;;;9049:108:0:o;3949:128::-;4033:5;;;4028:16;;;;4020:49;;;;;-1:-1:-1;;;4020:49:0;;;;;;;;;;;;-1:-1:-1;;;4020:49:0;;;;;;;;;;;;;

Swarm Source

bzzr://b484be6c0b8a7845205f3bc842b125ed2416bd20dd4e18b777768defc4eba53f
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.