Contract 0xc95b1750043fce5dfcc8539835ea3830ec002a89

 
Txn Hash
Block
From
To
Value [Txn Fee]
0xdd39c0de634ea3b88d43b66cc5c6db01d6eaa8da63a1d3e41d44597e8c8b6aaf82943312021-06-14 16:15:3525 secs ago0xce386a52fa6ff911e1dcc5e886de4af859c101d3 IN  0xc95b1750043fce5dfcc8539835ea3830ec002a890 BNB0.00022143
0xaa11ba6502c17ca1eae842ff690b143769288552b2f33d8e8f7457332edde8e982940112021-06-14 15:59:3516 mins ago0x87bb216ecf493b85238b7f0c484285cd54bfe64d IN  0xc95b1750043fce5dfcc8539835ea3830ec002a890 BNB0.00022143
0xa78bb4fc62d2cae5bff8fb07edeed3e87a21c8a51e6d78e35114cd6c9f996b1682938152021-06-14 15:49:4726 mins ago0x9cc78d69588bb5785301fc96632fd04988379e73 IN  0xc95b1750043fce5dfcc8539835ea3830ec002a890 BNB0.00022143
0xa162b9e506aa8c1bfdf690b2428c6c22065fb3ea764b4ff7b89a67695a18a15182935922021-06-14 15:38:3837 mins ago0x36d86eec205dd2694dccf9a7ff353d4d1d7f627f IN  0xc95b1750043fce5dfcc8539835ea3830ec002a890 BNB0.000265716
0x169a2b5fd62a0394b81ea9735d17c7f70438675ad4fbb659e210a0ae1bb4e6ca82934712021-06-14 15:32:3543 mins ago0xb6da3db73625ba13c6a5569d5ae523e75b5b086d IN  0xc95b1750043fce5dfcc8539835ea3830ec002a890 BNB0.00022143
0x3e51bf135b620ed5e2f6f9f2dead4385e824c9a100b6df0b90d425e3e51b4a5582933852021-06-14 15:28:1747 mins ago0x2a2fa7ed9f3fd74f76a503167770430ade06c0dd IN  0xc95b1750043fce5dfcc8539835ea3830ec002a890 BNB0.00022143
0x376d2dbbe9ae8da886c7195ed0e50d59e7ae1e2caa6397fb2b7f5ed5d7d0225f82933712021-06-14 15:27:3548 mins ago0x7ce1c12208fe82a3c5dce82450308c4da35f350c IN  0xc95b1750043fce5dfcc8539835ea3830ec002a890 BNB0.00018004
0x029df3a7ca42ab8da268a844936276ecbaa7237fa037e70b06052ceb9c3c0a7082933492021-06-14 15:26:2949 mins ago0x1feb56fe9b05dc9fb785f9eb5b24345497dc398e IN  0xc95b1750043fce5dfcc8539835ea3830ec002a890 BNB0.00018004
0xf2a003acd59b9c7ee8204024f709f27c7c3891e2a4d405f5482a2d087826962f82933062021-06-14 15:24:2051 mins ago0x1feb56fe9b05dc9fb785f9eb5b24345497dc398e IN  0xc95b1750043fce5dfcc8539835ea3830ec002a890 BNB0.0001375
0x30d2d623aa77f058a10c2b17a02c63e5ee602f6ea4e8f6917a2baf2f7f7612e782932252021-06-14 15:20:1755 mins ago0x4128ba5a81db5665b1e5407e9868eaba0e42f86f IN  0xc95b1750043fce5dfcc8539835ea3830ec002a890 BNB0.00022143
0xa75f479afd696b7bee13ec55d17c43f8714256b69470621e974239a48e2406fe82931832021-06-14 15:18:1057 mins ago0x072f5832277b6304d199836408ac4f8ee7bcc83b IN  0xc95b1750043fce5dfcc8539835ea3830ec002a890 BNB0.00022143
0x49a6c3562185f4954a221930e86457a7c32fdc746c6b5f70b8e7c0d693bd44ed82931392021-06-14 15:15:581 hr ago0x784763826d7e6bd98133d937854f6ca964c80694 IN  0xc95b1750043fce5dfcc8539835ea3830ec002a890 BNB0.00022143
0xc04341246f9faea195bcc58134ad61c53a81ea851090f7a68ab2a6b5dc0f166782930092021-06-14 15:09:141 hr 6 mins ago0xaeee1951adf284ed807a14234f81adf560cbc0e2 IN  0xc95b1750043fce5dfcc8539835ea3830ec002a890 BNB0.00022143
0xaba8a5b180f39547b8137669656d890d5d2aff170c9fd939828d3694c9850ed582930062021-06-14 15:09:051 hr 6 mins ago0x85dc708d2d4ce790bd1ed74f1bfdaa34a20c20c7 IN  0xc95b1750043fce5dfcc8539835ea3830ec002a890 BNB0.00022143
0xa6fb4f54786837412bdbb5c505483afdd1a992c39e8ebf67d2d2e2a493fbd73d82929912021-06-14 15:08:201 hr 7 mins ago0x4e00e94c314421cec8f84c8ed7e9fcd4c32199d0 IN  0xc95b1750043fce5dfcc8539835ea3830ec002a890 BNB0.00022143
0x994879cf4826683d5734f1550a5d044bccb8a17271e2a68e6996eca427f572c782929442021-06-14 15:05:591 hr 10 mins ago0xa6c859cb36c423b68048db1196a883954c600002 IN  0xc95b1750043fce5dfcc8539835ea3830ec002a890 BNB0.00022143
0x7ecd19908d6a8b2b7538127d53d32ed0d004b1db7b2d911cfd97088416d0388582928422021-06-14 15:00:531 hr 15 mins ago0x40d53268048f0d87f1482d56093b1991533cf778 IN  0xc95b1750043fce5dfcc8539835ea3830ec002a890 BNB0.00022143
0x02a1f27bd9c3ede4024966751ca7f2b7d1530cc03ec8696c82ab7a78c1b8cb5982927862021-06-14 14:58:051 hr 17 mins ago0x9200d2d4c22052dc699116aaf3f5f87fb0de4d26 IN  0xc95b1750043fce5dfcc8539835ea3830ec002a890 BNB0.00022143
0x22c6e2c2871315bd7bb4623127f27bc8206758c7e0fc8ead7da25165fb4f599182927012021-06-14 14:53:501 hr 22 mins ago0xd696574cdecbc9343aaeeb26c275703c43c14c97 IN  0xc95b1750043fce5dfcc8539835ea3830ec002a890 BNB0.00018004
0x3588c86ec7ecbf49b1664fe7edbbc58a748892eaa50b4df5ef82090b2728e30682926452021-06-14 14:51:021 hr 24 mins ago0xc429e9aa3219edcf195a5ec7dd473936c36d951e IN  0xc95b1750043fce5dfcc8539835ea3830ec002a890 BNB0.00022143
0x7f407e15cc6596efdc8c8eed75aa65a6a028f730feab6375491881969e21c83382926322021-06-14 14:50:231 hr 25 mins ago0x068423cda40ac8c4ba2e8196eeeea080af758fb2 IN  0xc95b1750043fce5dfcc8539835ea3830ec002a890 BNB0.00022143
0x8edf1546823f1c09871a54b08f6569e8e7f8b9c79b8bc2a559eabcf2a72ff5c282924932021-06-14 14:43:251 hr 32 mins ago0x9861cdf93df068a9564d152875690a17b23f901b IN  0xc95b1750043fce5dfcc8539835ea3830ec002a890 BNB0.00018004
0xe60d17a1cc0a1d3a92569f7b549711a1db82d3161993f88b098081d5d316ef5682924322021-06-14 14:40:221 hr 35 mins ago0x866da05174e709f15fdce696ef87fd986e05396b IN  0xc95b1750043fce5dfcc8539835ea3830ec002a890 BNB0.00022143
0x53dec85a1eeda2f9d75698a2a55cfaee97c995c2ca0f3e1cf879fce1f3a0143c82923292021-06-14 14:35:131 hr 40 mins ago0x3256a172d34a2fd616a68b2f7658ea54c6149553 IN  0xc95b1750043fce5dfcc8539835ea3830ec002a890 BNB0.00022143
0x6c8e2f060bd6388912d1608916cfb6a021280e2e51777c532e536a374f24751e82922222021-06-14 14:29:521 hr 46 mins ago0x7e3a0a5e1e6cc377e5096f406513e333e6cbcdbc IN  0xc95b1750043fce5dfcc8539835ea3830ec002a890 BNB0.00022143
[ Download CSV Export 
Latest 1 internal transaction
Parent Txn Hash Block From To Value
0x557981b65a6d60a01a24535f5df025ced07424da4409e879640a711302d6502857306522021-03-16 12:25:2790 days 3 hrs ago 0x3657952d7ba5a0a4799809b5b6fdff9ec5b46293  Contract Creation0 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Similar Match)
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0x686eBa05645E00eE0De01532C191793219ED7666

Contract Name:
WardenPair

Compiler Version
v0.5.16+commit.9c3226ce

Optimization Enabled:
Yes with 1000000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2021-03-14
*/

// SPDX-License-Identifier: MIT

// ((/*,                                                                    ,*((/,.
// &&@@&&%#/*.                                                        .*(#&&@@@@%. 
// &&@@@@@@@&%(.                                                    ,#%&@@@@@@@@%. 
// &&@@@@@@@@@&&(,                                                ,#&@@@@@@@@@@@%. 
// &&@@@@@@@@@@@&&/.                                            .(&&@@@@@@@@@@@@%. 
// %&@@@@@@@@@@@@@&(,                                          *#&@@@@@@@@@@@@@@%. 
// #&@@@@@@@@@@@@@@&#*                                       .*#@@@@@@@@@@@@@@@&#. 
// #&@@@@@@@@@@@@@@@@#.                                      ,%&@@@@@@@@@@@@@@@&#. 
// #&@@@@@@@@@@@@@@@@%(,                                    ,(&@@@@@@@@@@@@@@@@&#. 
// #&@@@@@@@@@@@@@@@@&&/                                   .(%&@@@@@@@@@@@@@@@@&#. 
// #%@@@@@@@@@@@@@@@@@@(.               ,(/,.              .#&@@@@@@@@@@@@@@@@@&#. 
// (%@@@@@@@@@@@@@@@@@@#*.            ./%&&&/.            .*%@@@@@@@@@@@@@@@@@@%(. 
// (%@@@@@@@@@@@@@@@@@@#*.           *#&@@@@&%*.          .*%@@@@@@@@@@@@@@@@@@%(. 
// (%@@@@@@@@@@@@@@@@@@#/.         ./#@@@@@@@@%(.         ./%@@@@@@@@@@@@@@@@@@%(. 
// (%@@@@@@@@@@@@@@@@@@#/.        ./&@@@@@@@@@@&(*        ,/%@@@@@@@@@@@@@@@@@@%(. 
// (%@@@@@@@@@@@@@@@@@@%/.       ,#&@@@@@@@@@@@@&#,.      ,/%@@@@@@@@@@@@@@@@@@%(. 
// /%@@@@@@@@@@@@@@@@@@#/.      *(&@@@@@@@@@@@@@@&&*      ./%@@@@@@@@@@@@@@@@@&%(. 
// /%@@@@@@@@@@@@@@@@@@#/.     .(&@@@@@@@@@@@@@@@@@#*.    ,/%@@@@@@@@@@@@@@@@@&#/. 
// ,#@@@@@@@@@@@@@@@@@@#/.    ./%@@@@@@@@@@@@@@@@@@&#,    ,/%@@@@@@@@@@@@@@@@@&(,  
//  /%&@@@@@@@@@@@@@@@@#/.    *#&@@@@@@@@@@@@@@@@@@@&*    ,/%@@@@@@@@@@@@@@@@&%*   
//  .*#&@@@@@@@@@@@@@@@#/.    /&&@@@@@@@@@@@@@@@@@@@&/.   ,/%@@@@@@@@@@@@@@@@#*.   
//    ,(&@@@@@@@@@@@@@@#/.    /@@@@@@@@@@@@@@@@@@@@@&(,   ,/%@@@@@@@@@@@@@@%(,     
//     .*(&&@@@@@@@@@@@#/.    /&&@@@@@@@@@@@@@@@@@@@&/,   ,/%@@@@@@@@@@@&%/,       
//        ./%&@@@@@@@@@#/.    *#&@@@@@@@@@@@@@@@@@@@%*    ,/%@@@@@@@@@&%*          
//           ,/#%&&@@@@#/.     ,#&@@@@@@@@@@@@@@@@@#/.    ,/%@@@@&&%(/,            
//               ./#&@@%/.      ,/&@@@@@@@@@@@@@@%(,      ,/%@@%#*.                
//                   .,,,         ,/%&@@@@@@@@&%(*        .,,,.                    
//                                   ,/%&@@@%(*.                                   
//  .,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,**((/*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
//                                                                                                                                                                                                                                                                                                            
//                                                                                             

// File: contracts/interfaces/IWardenPair.sol

pragma solidity >=0.5.0;

interface IWardenPair {
    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/IWardenERC20.sol

pragma solidity >=0.5.0;

interface IWardenERC20 {
    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/WardenERC20.sol

pragma solidity =0.5.16;



contract WardenERC20 is IWardenERC20 {
    using SafeMath for uint;

    string public constant name = 'Warden LPs';
    string public constant symbol = 'WAD-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, 'Warden: 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, 'Warden: 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/IWardenFactory.sol

pragma solidity >=0.5.0;

interface IWardenFactory {
    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/IWardenCallee.sol

pragma solidity >=0.5.0;

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

// File: contracts/WardenPair.sol

pragma solidity =0.5.16;








contract WardenPair is IWardenPair, WardenERC20 {
    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, 'Warden: 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))), 'Warden: 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, 'Warden: 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), 'Warden: 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 = IWardenFactory(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 = 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, 'Warden: 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, 'Warden: 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, 'Warden: INSUFFICIENT_OUTPUT_AMOUNT');
        (uint112 _reserve0, uint112 _reserve1,) = getReserves(); // gas savings
        require(amount0Out < _reserve0 && amount1Out < _reserve1, 'Warden: 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, 'Warden: 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) IWardenCallee(to).wardenCall(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, 'Warden: 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), 'Warden: 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"}]

60806040526001600c5534801561001557600080fd5b506040514690806052612d0b8239604080519182900360520182208282018252600a83526957617264656e204c507360b01b6020938401528151808301835260018152603160f81b908401528151808401919091527f8d029a1bc58dd54668409f1856fd78e6bb8f84bb80e842d17f663f5e5c2418ab818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c09094019052825192019190912060035550600580546001600160a01b03191633179055612c06806101056000396000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c80636a627842116100f9578063ba9a7a5611610097578063d21220a711610071578063d21220a7146105da578063d505accf146105e2578063dd62ed3e14610640578063fff6cae91461067b576101b9565b8063ba9a7a5614610597578063bc25cf771461059f578063c45a0155146105d2576101b9565b80637ecebe00116100d35780637ecebe00146104d757806389afcb441461050a57806395d89b4114610556578063a9059cbb1461055e576101b9565b80636a6278421461046957806370a082311461049c5780637464fc3d146104cf576101b9565b806323b872dd116101665780633644e515116101405780633644e51514610416578063485cc9551461041e5780635909c0d5146104595780635a3d549314610461576101b9565b806323b872dd146103ad57806330adf81f146103f0578063313ce567146103f8576101b9565b8063095ea7b311610197578063095ea7b3146103155780630dfe16811461036257806318160ddd14610393576101b9565b8063022c0d9f146101be57806306fdde03146102595780630902f1ac146102d6575b600080fd5b610257600480360360808110156101d457600080fd5b81359160208101359173ffffffffffffffffffffffffffffffffffffffff604083013516919081019060808101606082013564010000000081111561021857600080fd5b82018360208201111561022a57600080fd5b8035906020019184600183028401116401000000008311171561024c57600080fd5b509092509050610683565b005b610261610d6d565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561029b578181015183820152602001610283565b50505050905090810190601f1680156102c85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102de610da6565b604080516dffffffffffffffffffffffffffff948516815292909316602083015263ffffffff168183015290519081900360600190f35b61034e6004803603604081101561032b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610dfb565b604080519115158252519081900360200190f35b61036a610e12565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61039b610e2e565b60408051918252519081900360200190f35b61034e600480360360608110156103c357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610e34565b61039b610f13565b610400610f37565b6040805160ff9092168252519081900360200190f35b61039b610f3c565b6102576004803603604081101561043457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610f42565b61039b61101b565b61039b611021565b61039b6004803603602081101561047f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611027565b61039b600480360360208110156104b257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166113e1565b61039b6113f3565b61039b600480360360208110156104ed57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166113f9565b61053d6004803603602081101561052057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661140b565b6040805192835260208301919091528051918290030190f35b6102616118a8565b61034e6004803603604081101561057457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356118e1565b61039b6118ee565b610257600480360360208110156105b557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166118f4565b61036a611aea565b61036a611b06565b610257600480360360e08110156105f857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135611b22565b61039b6004803603604081101561065657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516611dee565b610257611e0b565b600c546001146106f457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f57617264656e3a204c4f434b4544000000000000000000000000000000000000604482015290519081900360640190fd5b6000600c55841515806107075750600084115b61075c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180612b8b6022913960400191505060405180910390fd5b600080610767610da6565b5091509150816dffffffffffffffffffffffffffff168710801561079a5750806dffffffffffffffffffffffffffff1686105b61080557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f57617264656e3a20494e53554646494349454e545f4c49515549444954590000604482015290519081900360640190fd5b600654600754600091829173ffffffffffffffffffffffffffffffffffffffff91821691908116908916821480159061086a57508073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614155b6108d557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f57617264656e3a20494e56414c49445f544f0000000000000000000000000000604482015290519081900360640190fd5b8a156108e6576108e6828a8d611ff1565b89156108f7576108f7818a8c611ff1565b86156109d9578873ffffffffffffffffffffffffffffffffffffffff166346337f3a338d8d8c8c6040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b1580156109c057600080fd5b505af11580156109d4573d6000803e3d6000fd5b505050505b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff8416916370a08231916024808301926020929190829003018186803b158015610a4557600080fd5b505afa158015610a59573d6000803e3d6000fd5b505050506040513d6020811015610a6f57600080fd5b5051604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905191955073ffffffffffffffffffffffffffffffffffffffff8316916370a0823191602480820192602092909190829003018186803b158015610ae157600080fd5b505afa158015610af5573d6000803e3d6000fd5b505050506040513d6020811015610b0b57600080fd5b5051925060009150506dffffffffffffffffffffffffffff85168a90038311610b35576000610b4b565b89856dffffffffffffffffffffffffffff160383035b9050600089856dffffffffffffffffffffffffffff16038311610b6f576000610b85565b89856dffffffffffffffffffffffffffff160383035b90506000821180610b965750600081115b610beb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612b456021913960400191505060405180910390fd5b6000610c1f610c0184600363ffffffff6121fe16565b610c13876103e863ffffffff6121fe16565b9063ffffffff61228416565b90506000610c37610c0184600363ffffffff6121fe16565b9050610c6f620f4240610c636dffffffffffffffffffffffffffff8b8116908b1663ffffffff6121fe16565b9063ffffffff6121fe16565b610c7f838363ffffffff6121fe16565b1015610cec57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f57617264656e3a204b0000000000000000000000000000000000000000000000604482015290519081900360640190fd5b5050610cfa848488886122f6565b60408051838152602081018390528082018d9052606081018c9052905173ffffffffffffffffffffffffffffffffffffffff8b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600c55505050505050505050565b6040518060400160405280600a81526020017f57617264656e204c50730000000000000000000000000000000000000000000081525081565b6008546dffffffffffffffffffffffffffff808216926e0100000000000000000000000000008304909116917c0100000000000000000000000000000000000000000000000000000000900463ffffffff1690565b6000610e083384846125b2565b5060015b92915050565b60065473ffffffffffffffffffffffffffffffffffffffff1681565b60005481565b73ffffffffffffffffffffffffffffffffffffffff831660009081526002602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14610efe5773ffffffffffffffffffffffffffffffffffffffff84166000908152600260209081526040808320338452909152902054610ecc908363ffffffff61228416565b73ffffffffffffffffffffffffffffffffffffffff851660009081526002602090815260408083203384529091529020555b610f09848484612621565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b60055473ffffffffffffffffffffffffffffffffffffffff163314610fc857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f57617264656e3a20464f5242494444454e000000000000000000000000000000604482015290519081900360640190fd5b6006805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560078054929093169116179055565b60095481565b600a5481565b6000600c5460011461109a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f57617264656e3a204c4f434b4544000000000000000000000000000000000000604482015290519081900360640190fd5b6000600c819055806110aa610da6565b50600654604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905193955091935060009273ffffffffffffffffffffffffffffffffffffffff909116916370a08231916024808301926020929190829003018186803b15801561112457600080fd5b505afa158015611138573d6000803e3d6000fd5b505050506040513d602081101561114e57600080fd5b5051600754604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905192935060009273ffffffffffffffffffffffffffffffffffffffff909216916370a0823191602480820192602092909190829003018186803b1580156111c757600080fd5b505afa1580156111db573d6000803e3d6000fd5b505050506040513d60208110156111f157600080fd5b505190506000611217836dffffffffffffffffffffffffffff871663ffffffff61228416565b9050600061123b836dffffffffffffffffffffffffffff871663ffffffff61228416565b905060006112498787612702565b60005490915080611286576112726103e8610c1361126d878763ffffffff6121fe16565b61288e565b985061128160006103e86128e0565b6112e3565b6112e06dffffffffffffffffffffffffffff89166112aa868463ffffffff6121fe16565b816112b157fe5b046dffffffffffffffffffffffffffff89166112d3868563ffffffff6121fe16565b816112da57fe5b04612990565b98505b6000891161133c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180612bad6025913960400191505060405180910390fd5b6113468a8a6128e0565b61135286868a8a6122f6565b811561139457600854611390906dffffffffffffffffffffffffffff808216916e01000000000000000000000000000090041663ffffffff6121fe16565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600c5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600c5460011461147f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f57617264656e3a204c4f434b4544000000000000000000000000000000000000604482015290519081900360640190fd5b6000600c8190558061148f610da6565b50600654600754604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905194965092945073ffffffffffffffffffffffffffffffffffffffff9182169391169160009184916370a08231916024808301926020929190829003018186803b15801561151157600080fd5b505afa158015611525573d6000803e3d6000fd5b505050506040513d602081101561153b57600080fd5b5051604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905191925060009173ffffffffffffffffffffffffffffffffffffffff8516916370a08231916024808301926020929190829003018186803b1580156115af57600080fd5b505afa1580156115c3573d6000803e3d6000fd5b505050506040513d60208110156115d957600080fd5b5051306000908152600160205260408120549192506115f88888612702565b6000549091508061160f848763ffffffff6121fe16565b8161161657fe5b049a508061162a848663ffffffff6121fe16565b8161163157fe5b04995060008b118015611644575060008a115b611699576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180612b666025913960400191505060405180910390fd5b6116a330846129a8565b6116ae878d8d611ff1565b6116b9868d8c611ff1565b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff8916916370a08231916024808301926020929190829003018186803b15801561172557600080fd5b505afa158015611739573d6000803e3d6000fd5b505050506040513d602081101561174f57600080fd5b5051604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905191965073ffffffffffffffffffffffffffffffffffffffff8816916370a0823191602480820192602092909190829003018186803b1580156117c157600080fd5b505afa1580156117d5573d6000803e3d6000fd5b505050506040513d60208110156117eb57600080fd5b505193506117fb85858b8b6122f6565b811561183d57600854611839906dffffffffffffffffffffffffffff808216916e01000000000000000000000000000090041663ffffffff6121fe16565b600b555b604080518c8152602081018c9052815173ffffffffffffffffffffffffffffffffffffffff8f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600c81905550915091565b6040518060400160405280600681526020017f5741442d4c50000000000000000000000000000000000000000000000000000081525081565b6000610e08338484612621565b6103e881565b600c5460011461196557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f57617264656e3a204c4f434b4544000000000000000000000000000000000000604482015290519081900360640190fd5b6000600c55600654600754600854604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff9485169490931692611a419285928792611a3c926dffffffffffffffffffffffffffff169185916370a0823191602480820192602092909190829003018186803b158015611a0457600080fd5b505afa158015611a18573d6000803e3d6000fd5b505050506040513d6020811015611a2e57600080fd5b50519063ffffffff61228416565b611ff1565b600854604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051611ae09284928792611a3c926e01000000000000000000000000000090046dffffffffffffffffffffffffffff169173ffffffffffffffffffffffffffffffffffffffff8616916370a0823191602480820192602092909190829003018186803b158015611a0457600080fd5b50506001600c5550565b60055473ffffffffffffffffffffffffffffffffffffffff1681565b60075473ffffffffffffffffffffffffffffffffffffffff1681565b42841015611b9157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f57617264656e3a20455850495245440000000000000000000000000000000000604482015290519081900360640190fd5b60035473ffffffffffffffffffffffffffffffffffffffff80891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e0850182528051908301207f19010000000000000000000000000000000000000000000000000000000000006101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e2808201937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019281900390910190855afa158015611cf2573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590611d6d57508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b611dd857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f57617264656e3a20494e56414c49445f5349474e415455524500000000000000604482015290519081900360640190fd5b611de38989896125b2565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b600c54600114611e7c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f57617264656e3a204c4f434b4544000000000000000000000000000000000000604482015290519081900360640190fd5b6000600c55600654604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051611fea9273ffffffffffffffffffffffffffffffffffffffff16916370a08231916024808301926020929190829003018186803b158015611ef357600080fd5b505afa158015611f07573d6000803e3d6000fd5b505050506040513d6020811015611f1d57600080fd5b5051600754604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff909216916370a0823191602480820192602092909190829003018186803b158015611f9057600080fd5b505afa158015611fa4573d6000803e3d6000fd5b505050506040513d6020811015611fba57600080fd5b50516008546dffffffffffffffffffffffffffff808216916e0100000000000000000000000000009004166122f6565b6001600c55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e743235362900000000000000602091820152815173ffffffffffffffffffffffffffffffffffffffff85811660248301526044808301869052845180840390910181526064909201845291810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251815160009460609489169392918291908083835b602083106120f757805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016120ba565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612159576040519150601f19603f3d011682016040523d82523d6000602084013e61215e565b606091505b509150915081801561218c57508051158061218c575080806020019051602081101561218957600080fd5b50515b6121f757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f57617264656e3a205452414e534645525f4641494c4544000000000000000000604482015290519081900360640190fd5b5050505050565b60008115806122195750508082028282828161221657fe5b04145b610e0c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b80820382811115610e0c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6dffffffffffffffffffffffffffff841180159061232257506dffffffffffffffffffffffffffff8311155b61238d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f57617264656e3a204f564552464c4f5700000000000000000000000000000000604482015290519081900360640190fd5b60085463ffffffff428116917c0100000000000000000000000000000000000000000000000000000000900481168203908116158015906123dd57506dffffffffffffffffffffffffffff841615155b80156123f857506dffffffffffffffffffffffffffff831615155b156124a8578063ffffffff1661243b8561241186612a6d565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff169063ffffffff612a9116565b600980547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff929092169290920201905563ffffffff811661247b8461241187612a6d565b600a80547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff92909216929092020190555b600880547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000166dffffffffffffffffffffffffffff888116919091177fffffffff0000000000000000000000000000ffffffffffffffffffffffffffff166e0100000000000000000000000000008883168102919091177bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c010000000000000000000000000000000000000000000000000000000063ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b73ffffffffffffffffffffffffffffffffffffffff808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020526040902054612657908263ffffffff61228416565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160205260408082209390935590841681522054612699908263ffffffff612ad216565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b15801561276d57600080fd5b505afa158015612781573d6000803e3d6000fd5b505050506040513d602081101561279757600080fd5b5051600b5473ffffffffffffffffffffffffffffffffffffffff821615801594509192509061287a5780156128755760006127ee61126d6dffffffffffffffffffffffffffff88811690881663ffffffff6121fe16565b905060006127fb8361288e565b90508082111561287257600061282961281a848463ffffffff61228416565b6000549063ffffffff6121fe16565b9050600061284e8361284286600563ffffffff6121fe16565b9063ffffffff612ad216565b9050600081838161285b57fe5b049050801561286e5761286e87826128e0565b5050505b50505b612886565b8015612886576000600b555b505092915050565b600060038211156128d1575080600160028204015b818110156128cb578091506002818285816128ba57fe5b0401816128c357fe5b0490506128a3565b506128db565b81156128db575060015b919050565b6000546128f3908263ffffffff612ad216565b600090815573ffffffffffffffffffffffffffffffffffffffff831681526001602052604090205461292b908263ffffffff612ad216565b73ffffffffffffffffffffffffffffffffffffffff831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600081831061299f57816129a1565b825b9392505050565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600160205260409020546129de908263ffffffff61228416565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602052604081209190915554612a18908263ffffffff61228416565b600090815560408051838152905173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6dffffffffffffffffffffffffffff166e0100000000000000000000000000000290565b60006dffffffffffffffffffffffffffff82167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841681612aca57fe5b049392505050565b80820182811015610e0c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fdfe57617264656e3a20494e53554646494349454e545f494e5055545f414d4f554e5457617264656e3a20494e53554646494349454e545f4c49515549444954595f4255524e454457617264656e3a20494e53554646494349454e545f4f55545055545f414d4f554e5457617264656e3a20494e53554646494349454e545f4c49515549444954595f4d494e544544a265627a7a7231582013d314209118a9eeeb3ca312146a7c57631cc67d9e6fe0fd225d20efd7978f1c64736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429

Deployed ByteCode Sourcemap

13972:9636:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13972:9636:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21147:1868;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;21147:1868:0;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;21147:1868:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;21147: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;21147:1868:0;;-1:-1:-1;21147:1868:0;-1:-1:-1;21147:1868:0;:::i;:::-;;7420: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;7420:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14981:231;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9467:147;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9467:147:0;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;14273:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7558:24;;;:::i;:::-;;;;;;;;;;;;;;;;9769:301;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9769:301:0;;;;;;;;;;;;;;;;;;:::i;7850:108::-;;;:::i;7516:35::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7707:31;;;:::i;16038:207::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16038:207:0;;;;;;;;;;;:::i;14624:32::-;;;:::i;14663:::-;;;:::i;18223:1237::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18223:1237:0;;;;:::i;7589:41::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7589:41:0;;;;:::i;14702:17::-;;;:::i;7965:38::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7965:38:0;;;;:::i;19572:1463::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19572:1463:0;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;7469:40;;;:::i;9622:139::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9622:139:0;;;;;;;;;:::i;14094:46::-;;;:::i;23064:334::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23064:334:0;;;;:::i;14244:22::-;;;:::i;14301:21::-;;;:::i;10078:668::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;10078:668:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;7637:61::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7637:61:0;;;;;;;;;;;:::i;23447:158::-;;;:::i;21147:1868::-;14875:8;;14887:1;14875:13;14867:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14929:1;14918:8;:12;21261:14;;;;:32;;;21292:1;21279:10;:14;21261:32;21253:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21344:17;21363;21385:13;:11;:13::i;:::-;21343:55;;;;;21445:9;21432:22;;:10;:22;:48;;;;;21471:9;21458:22;;:10;:22;21432:48;21424:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21660:6;;21695;;21528:13;;;;21660:6;;;;;21695;;;;21720:13;;;;;;;:30;;;21743:7;21737:13;;:2;:13;;;;21720:30;21712:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21788:14;;21784:58;;21804:38;21818:7;21827:2;21831:10;21804:13;:38::i;:::-;21891:14;;21887:58;;21907:38;21921:7;21930:2;21934:10;21907:13;:38::i;:::-;21994:15;;21990:91;;22025:2;22011:28;;;22040:10;22052;22064;22076:4;;22011:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;22011:70:0;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22011:70:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22011:70:0;;;;21990:91;22103:40;;;;;;22137:4;22103:40;;;;;;:25;;;;;;:40;;;;;;;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;22103:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22103:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22103:40:0;22165;;;;;;22199:4;22165:40;;;;;;22103;;-1:-1:-1;22165:25:0;;;;;;:40;;;;;22103;;22165;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;22165:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22165:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22165:40:0;;-1:-1:-1;22227:14:0;;-1:-1:-1;;22255:22:0;;;;;;22244:33;;:75;;22318:1;22244:75;;;22304:10;22292:9;:22;;;22280:8;:35;22244:75;22227:92;;22330:14;22370:10;22358:9;:22;;;22347:8;:33;:75;;22421:1;22347:75;;;22407:10;22395:9;:22;;;22383:8;:35;22347:75;22330:92;;22453:1;22441:9;:13;:30;;;;22470:1;22458:9;:13;22441:30;22433:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22595:21;22619:40;22642:16;:9;22656:1;22642:16;:13;:16;:::i;:::-;22619:18;:8;22632:4;22619:18;:12;:18;:::i;:::-;:22;:40;:22;:40;:::i;:::-;22595:64;-1:-1:-1;22670:21:0;22694:40;22717:16;:9;22731:1;22717:16;:13;:16;:::i;22694:40::-;22670:64;-1:-1:-1;22795:43:0;22830:7;22795:30;;:15;;;;:30;;;:19;:30;:::i;:::-;:34;:43;:34;:43;:::i;:::-;22753:38;:16;22774;22753:38;:20;:38;:::i;:::-;:85;;22745:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14941:1;;22876:49;22884:8;22894;22904:9;22915;22876:7;:49::i;:::-;22941:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22946:10;;22941:66;;;;;;;;;-1:-1:-1;;14964:1:0;14953:8;:12;-1:-1:-1;;;;;;;;;21147:1868:0:o;7420:42::-;;;;;;;;;;;;;;;;;;;:::o;14981:231::-;15114:8;;;;;;;15145;;;;;;;15186:18;;;;;;14981:231::o;9467:147::-;9531:4;9548:36;9557:10;9569:7;9578:5;9548:8;:36::i;:::-;-1:-1:-1;9602:4:0;9467:147;;;;;:::o;14273:21::-;;;;;;:::o;7558:24::-;;;;:::o;9769:301::-;9868:15;;;9847:4;9868:15;;;:9;:15;;;;;;;;9884:10;9868:27;;;;;;;;9904:2;9868:39;9864:140;;9954:15;;;;;;;:9;:15;;;;;;;;9970:10;9954:27;;;;;;;;:38;;9986:5;9954:38;:31;:38;:::i;:::-;9924:15;;;;;;;:9;:15;;;;;;;;9940:10;9924:27;;;;;;;:68;9864:140;10014:26;10024:4;10030:2;10034:5;10014:9;:26::i;:::-;-1:-1:-1;10058:4:0;9769:301;;;;;:::o;7850:108::-;7892:66;7850:108;:::o;7516:35::-;7549:2;7516:35;:::o;7707:31::-;;;;:::o;16038:207::-;16134:7;;;;16120:10;:21;16112:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16194:6;:16;;;;;;;;;;;;;;16221:6;:16;;;;;;;;;;;16038:207::o;14624:32::-;;;;:::o;14663:::-;;;;:::o;18223:1237::-;18272:14;14875:8;;14887:1;14875:13;14867:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14929:1;14918:8;:12;;;14929:1;18341:13;:11;:13::i;:::-;-1:-1:-1;18403:6:0;;18396:39;;;;;;18429:4;18396:39;;;;;;18299:55;;-1:-1:-1;18299:55:0;;-1:-1:-1;18380:13:0;;18403:6;;;;;18396:24;;:39;;;;;;;;;;;;;;18403:6;18396:39;;;5:2:-1;;;;30:1;27;20:12;5:2;18396:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18396:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18396:39:0;18469:6;;18462:39;;;;;;18495:4;18462:39;;;;;;18396;;-1:-1:-1;18446:13:0;;18469:6;;;;;18462:24;;:39;;;;;18396;;18462;;;;;;;;18469:6;18462:39;;;5:2:-1;;;;30:1;27;20:12;5:2;18462:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18462:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18462:39:0;;-1:-1:-1;18512:12:0;18527:23;:8;:23;;;;:12;:23;:::i;:::-;18512:38;-1:-1:-1;18561:12:0;18576:23;:8;:23;;;;:12;:23;:::i;:::-;18561:38;;18612:10;18625:30;18634:9;18645;18625:8;:30::i;:::-;18666:17;18686:11;18612:43;;-1:-1:-1;18790:17:0;18786:352;;18836:54;14135:5;18836:31;18846:20;:7;18858;18846:20;:11;:20;:::i;:::-;18836:9;:31::i;:54::-;18824:66;;18904:36;18918:1;14135:5;18904;:36::i;:::-;18786:352;;;19040:86;19049:37;;;:25;:7;19061:12;19049:25;:11;:25;:::i;:::-;:37;;;;;;19088;;;:25;:7;19100:12;19088:25;:11;:25;:::i;:::-;:37;;;;;;19040:8;:86::i;:::-;19028:98;;18786:352;19168:1;19156:9;:13;19148:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19222:20;19228:2;19232:9;19222:5;:20::i;:::-;19255:49;19263:8;19273;19283:9;19294;19255:7;:49::i;:::-;19319:5;19315:47;;;19353:8;;19334:28;;19353:8;19339;;;;19353;;;;19334:28;:18;:28;:::i;:::-;19326:5;:36;19315:47;19418:34;;;;;;;;;;;;;;19423:10;;19418:34;;;;;;;;-1:-1:-1;;14964:1:0;14953:8;:12;-1:-1:-1;18223:1237:0;;;-1:-1:-1;;;;;;18223:1237:0:o;7589:41::-;;;;;;;;;;;;;:::o;14702:17::-;;;;:::o;7965:38::-;;;;;;;;;;;;;:::o;19572:1463::-;19621:12;19635;14875:8;;14887:1;14875:13;14867:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14929:1;14918:8;:12;;;14929:1;19702:13;:11;:13::i;:::-;-1:-1:-1;19759:6:0;;19840;;19919:40;;;;;;19953:4;19919:40;;;;;;19660:55;;-1:-1:-1;19660:55:0;;-1:-1:-1;19759:6:0;;;;;19840;;;19741:15;;19759:6;;19919:25;;:40;;;;;;;;;;;;;;19759:6;19919:40;;;5:2:-1;;;;30:1;27;20:12;5:2;19919:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19919:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19919:40:0;19986;;;;;;20020:4;19986:40;;;;;;19919;;-1:-1:-1;19970:13:0;;19986:25;;;;;;:40;;;;;19919;;19986;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;19986:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19986:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19986:40:0;20072:4;20037:14;20054:24;;;:9;19986:40;20054:24;;;;;19986:40;;-1:-1:-1;20104:30:0;20113:9;20124;20104:8;:30::i;:::-;20145:17;20165:11;20091:43;;-1:-1:-1;20165:11:0;20275:23;:9;20289:8;20275:23;:13;:23;:::i;:::-;:38;;;;;;;-1:-1:-1;20408:12:0;20382:23;:9;20396:8;20382:23;:13;:23;:::i;:::-;:38;;;;;;20372:48;;20497:1;20487:7;:11;:26;;;;;20512:1;20502:7;:11;20487:26;20479:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20566:31;20580:4;20587:9;20566:5;:31::i;:::-;20608:35;20622:7;20631:2;20635:7;20608:13;:35::i;:::-;20654;20668:7;20677:2;20681:7;20654:13;:35::i;:::-;20711:40;;;;;;20745:4;20711:40;;;;;;:25;;;;;;:40;;;;;;;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;20711:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20711:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20711:40:0;20773;;;;;;20807:4;20773:40;;;;;;20711;;-1:-1:-1;20773:25:0;;;;;;:40;;;;;20711;;20773;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;20773:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20773:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20773:40:0;;-1:-1:-1;20826:49:0;20834:8;20773:40;20854:9;20865;20826:7;:49::i;:::-;20890:5;20886:47;;;20924:8;;20905:28;;20924:8;20910;;;;20924;;;;20905:28;:18;:28;:::i;:::-;20897:5;:36;20886:47;20989:38;;;;;;;;;;;;;;;;;;20994:10;;20989:38;;;;;;;;;;;14941:1;;;;;;;;;14964;14953:8;:12;;;;19572:1463;;;:::o;7469:40::-;;;;;;;;;;;;;;;;;;;:::o;9622:139::-;9682:4;9699:32;9709:10;9721:2;9725:5;9699:9;:32::i;14094:46::-;14135:5;14094:46;:::o;23064:334::-;14875:8;;14887:1;14875:13;14867:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14929:1;14918:8;:12;23133:6;;23183;;23287:8;;23242:40;;;;;;23276:4;23242:40;;;;;;23133:6;;;;;23183;;;;23215:82;;23133:6;;23238:2;;23242:54;;23287:8;;;23133:6;;23242:25;;:40;;;;;;;;;;;;;;;23133:6;23242:40;;;5:2:-1;;;;30:1;27;20:12;5:2;23242:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23242:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23242:40:0;;:54;:44;:54;:::i;:::-;23215:13;:82::i;:::-;23380:8;;23335:40;;;;;;23369:4;23335:40;;;;;;23308:82;;23322:7;;23331:2;;23335:54;;23380:8;;;;;;23335:25;;;;;;:40;;;;;;;;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;23308:82:0;-1:-1:-1;;14964:1:0;14953:8;:12;-1:-1:-1;23064:334:0:o;14244:22::-;;;;;;:::o;14301:21::-;;;;;;:::o;10078:668::-;10224:15;10212:8;:27;;10204:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10375:16;;10471:13;;;;10270:14;10471:13;;;:6;:13;;;;;;;;:15;;;;;;;;;10420:77;;7892:66;10420:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;10420:77:0;;;;;10410:88;;;;;;10311:202;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;10311:202:0;;;;;;10287:237;;;;;;;;;10562:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10270:14;;10471:15;10562:26;;;;;-1:-1:-1;10562:26:0;;;;;;;;;;10471:15;10562:26;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;10562:26:0;;;;;;-1:-1:-1;;10607:30:0;;;;;;;:59;;;10661:5;10641:25;;:16;:25;;;10607:59;10599:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10707:31;10716:5;10723:7;10732:5;10707:8;:31::i;:::-;10078:668;;;;;;;;;:::o;7637:61::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;23447:158::-;14875:8;;14887:1;14875:13;14867:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14929:1;14918:8;:12;23503:6;;23496:39;;;;;;23529:4;23496:39;;;;;;23488:109;;23503:6;;;23496:24;;:39;;;;;;;;;;;;;;23503:6;23496:39;;;5:2:-1;;;;30:1;27;20:12;5:2;23496:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23496:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23496:39:0;23544:6;;23537:39;;;;;;23570:4;23537:39;;;;;;23544:6;;;;;23537:24;;:39;;;;;23496;;23537;;;;;;;;23544:6;23537:39;;;5:2:-1;;;;30:1;27;20:12;5:2;23537:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23537:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23537:39:0;23578:8;;;;;;;23588;;;;23488:7;:109::i;:::-;14964:1;14953:8;:12;23447:158::o;15220:284::-;14199:34;;;;;;;;;;;;;;;;;15348:43;;15337:10;15348:43;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;15348:43:0;;;;;;25:18:-1;;;61:17;;15348:43:0;182:15:-1;15348:43:0;179:29:-1;160:49;;15337:55:0;;;;15302:12;;15316:17;;15337:10;;;15348:43;15337:55;;;25:18:-1;15337:55:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;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;;;15337: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;;15301:91:0;;;;15411:7;:57;;;;-1:-1:-1;15423:11:0;;:16;;:44;;;15454:4;15443:24;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15443:24:0;15423:44;15403:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15220:284;;;;;:::o;7125:142::-;7177:6;7204;;;:30;;-1:-1:-1;;7219:5:0;;;7233:1;7228;7219:5;7228:1;7214:15;;;;;:20;7204:30;7196:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6988:129;7072:5;;;7067:16;;;;7059:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16330:857;16442:23;;;;;;:50;;-1:-1:-1;16469:23:0;;;;16442:50;16434:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16628:18;;16555:23;:15;:23;;;16628:18;;;;;16611:35;;;16684:15;;;;;;:33;;-1:-1:-1;16703:14:0;;;;;16684:33;:51;;;;-1:-1:-1;16721:14:0;;;;;16684:51;16680:336;;;16890:11;16837:64;;16842:44;16876:9;16842:27;16859:9;16842:16;:27::i;:::-;:33;;;:44;:33;:44;:::i;:::-;16813:20;:88;;16837:50;;;;;:64;;;;16813:88;;;16940:64;;;16945:44;16979:9;16945:27;16962:9;16945:16;:27::i;:44::-;16916:20;:88;;16940:50;;;;;:64;;;;16916:88;;;16680:336;17026:8;:28;;;;;;;;;;;;17065;;;;;;;;;;;;17104:35;;;;;;;;;;;;17155:24;;;17160:8;;;17155:24;;17170:8;;;;;;;17155:24;;;;;;;;;;;;;;;;;16330:857;;;;;;:::o;9062:169::-;9143:16;;;;;;;;:9;:16;;;;;;;;:25;;;;;;;;;;;;;:33;;;9192:31;;;;;;;;;;;;;;;;;9062:169;;;:::o;9239:220::-;9333:15;;;;;;;:9;:15;;;;;;:26;;9353:5;9333:26;:19;:26;:::i;:::-;9315:15;;;;;;;;:9;:15;;;;;;:44;;;;9386:13;;;;;;;:24;;9404:5;9386:24;:17;:24;:::i;:::-;9370:13;;;;;;;;:9;:13;;;;;;;;;:40;;;;9426:25;;;;;;;9370:13;;9426:25;;;;;;;;;;;;;9239:220;;;:::o;17277:834::-;17350:10;17373:13;17404:7;;;;;;;;;;;17389:29;;;:31;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17389:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17389:31:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17389:31:0;17483:5;;17439:19;;;;;;;-1:-1:-1;17389:31:0;;-1:-1:-1;17483:5:0;17514:590;;17544:11;;17540:494;;17576:10;17589:41;17599:30;;:15;;;;:30;;;:19;:30;:::i;17589:41::-;17576:54;;17649:14;17666:17;17676:6;17666:9;:17::i;:::-;17649:34;;17714:9;17706:5;:17;17702:317;;;17748:14;17765:37;17781:20;:5;17791:9;17781:20;:9;:20;:::i;:::-;17765:11;;;:37;:15;:37;:::i;:::-;17748:54;-1:-1:-1;17825:16:0;17844:27;17861:9;17844:12;:5;17854:1;17844:12;:9;:12;:::i;:::-;:16;:27;:16;:27;:::i;:::-;17825:46;;17894:14;17923:11;17911:9;:23;;;;;;;-1:-1:-1;17961:13:0;;17957:42;;17976:23;17982:5;17989:9;17976:5;:23::i;:::-;17702:317;;;;17540:494;;;17514:590;;;18055:11;;18051:53;;18091:1;18083:5;:9;18051:53;17277:834;;;;;;:::o;11111:303::-;11156:6;11183:1;11179;:5;11175:232;;;-1:-1:-1;11205:1:0;11238;11234;11230:5;;:9;11254:92;11265:1;11261;:5;11254:92;;;11291:1;11287:5;;11329:1;11324;11320;11316;:5;;;;;;:9;11315:15;;;;;;11311:19;;11254:92;;;11175:232;;;;11367:6;;11363:44;;-1:-1:-1;11394:1:0;11363:44;11111:303;;;:::o;8636:201::-;8709:11;;:22;;8725:5;8709:22;:15;:22;:::i;:::-;8695:11;:36;;;8758:13;;;;;:9;:13;;;;;;:24;;8776:5;8758:24;:17;:24;:::i;:::-;8742:13;;;;;;;:9;:13;;;;;;;;:40;;;;8798:31;;;;;;;8742:13;;;;8798:31;;;;;;;;;;8636:201;;:::o;10897:96::-;10949:6;10976:1;10972;:5;:13;;10984:1;10972:13;;;10980:1;10972:13;10968:17;10897:96;-1:-1:-1;;;10897:96:0:o;8845:209::-;8924:15;;;;;;;:9;:15;;;;;;:26;;8944:5;8924:26;:19;:26;:::i;:::-;8906:15;;;;;;;:9;:15;;;;;:44;;;;8975:11;:22;;8991:5;8975:22;:15;:22;:::i;:::-;8961:11;:36;;;9013:33;;;;;;;;;;;;;;;;;;;;;;8845:209;;:::o;11761:120::-;11837:10;;11706:6;11837:17;;11761:120::o;11952:108::-;12012:9;12042:10;;;12038:14;;;12042:10;12038:14;;;;;;11952:108;-1:-1:-1;;;11952:108:0:o;6852:128::-;6936:5;;;6931:16;;;;6923:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Swarm Source

bzzr://13d314209118a9eeeb3ca312146a7c57631cc67d9e6fe0fd225d20efd7978f1c
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.