Contract 0xdc683adb914edf91df4a36c33ee4f59ca41bc263

 
Txn Hash
Block
From
To
Value [Txn Fee]
0xecba3b71b1ff535caa2d098d5520f2e5b010e47b895a0ea72f4a2ef17639069172263212021-05-07 23:01:4810 mins ago0x917d87e2fd5f6419c2e9468c0b315b234134ae10 IN  0xdc683adb914edf91df4a36c33ee4f59ca41bc2630 BNB0.000072255
0xfcab80a254417580ab37dc11b380a8210edd4fe91fa6c4f48124099cee3e0b5372263112021-05-07 23:01:1810 mins ago0x3c987da275beaeba1a1c42a6ad81eabff5aadf59 IN  0xdc683adb914edf91df4a36c33ee4f59ca41bc2630 BNB0.00022143
0x07a1cf079368833e4d4dffff2ee7b5e61bab0205e8535ed867d94976738c10d272259042021-05-07 22:40:4931 mins ago0x413715ce3065896989fdfad0c4c42ee7742e76b3 IN  0xdc683adb914edf91df4a36c33ee4f59ca41bc2630 BNB0.00022143
0x4f5a07fab35d294a309a52b869ef5d0f84bad1f721699ea30f774a794ec0307772256432021-05-07 22:27:3444 mins ago0xe0842a8068ba3e4adbb31774467486a2f4ffcf76 IN  0xdc683adb914edf91df4a36c33ee4f59ca41bc2630 BNB0.00022143
0x798495b98cbd500e1b0b819bbf49a19b6e4e08e1e48485b8b73613a72968c07572255112021-05-07 22:20:3151 mins ago0x9212310709a8a78ebdcff68091b8399d0216e13b IN  0xdc683adb914edf91df4a36c33ee4f59ca41bc2630 BNB0.00022143
0x04f08d35bc8ebc79df7c7e66e7628c8b72fcedbe3a4e2660b36a3613c99eb88a72253232021-05-07 22:10:591 hr 1 min ago0x52ba98f48f7daef43f8a586ec5905e8d4069b498 IN  0xdc683adb914edf91df4a36c33ee4f59ca41bc2630 BNB0.00022143
0x1f2a01803313dfa7f1a4896bda6fc8bf551278563512b25abadc57ff788820a772250682021-05-07 21:58:141 hr 13 mins ago0xc894cadf9f9e6bc71ae5b1ad87335d57b360600c IN  0xdc683adb914edf91df4a36c33ee4f59ca41bc2630 BNB0.00022143
0x1b35a113302963950e9102709c7996e1b22afc10ac136a56a2e429cffb259c9c72248832021-05-07 21:48:111 hr 23 mins ago0x34b161e48482b1b371744c450dc16f45dacc9741 IN  0xdc683adb914edf91df4a36c33ee4f59ca41bc2630 BNB0.00022143
0x33532f9495baace0d9d12d5eed77f8e8aa6c2dacddf27884f8191a6cb9922e4a72247582021-05-07 21:41:471 hr 30 mins ago0xdfce5524f18bce916c58a6b932515be01a00032f IN  0xdc683adb914edf91df4a36c33ee4f59ca41bc2630 BNB0.00022143
0x3e008a52a4cdc5df826f72cd3ac60a7c753ab4f2b0d9206934f9f70112e2adb772247332021-05-07 21:40:321 hr 31 mins ago0x3436d3ae208b15b9e00de96566cc14d1d387ba84 IN  0xdc683adb914edf91df4a36c33ee4f59ca41bc2630 BNB0.00022143
0xcf5dc0036b40a51cc00aaaca94cd471069dcdd6df235135313e8292cb5b0d99572246272021-05-07 21:35:141 hr 36 mins ago0xb61178aec91b9aad71d7ef080317d59edfa44b78 IN  0xdc683adb914edf91df4a36c33ee4f59ca41bc2630 BNB0.00017998
0x0f4a8772c7dd9c7610ecfffed5da3327eab0fdd74d6ae58bdc7d3c371d23bcd472245682021-05-07 21:32:171 hr 39 mins ago0xa779376a68afe7e31aa8a2646d4bb102108fe31d IN  0xdc683adb914edf91df4a36c33ee4f59ca41bc2630 BNB0.00022143
0x662ed3a71788ad099629e52674c576a7bd30f1daac79ebd7d517cf65e61a070b72245642021-05-07 21:32:051 hr 39 mins ago0x573a45b2d96b535228d1ccb47bcadc7d81ce3042 IN  0xdc683adb914edf91df4a36c33ee4f59ca41bc2630 BNB0.00022143
0x005dd8c7c4a09f4021d8a9b9c14aaf633279e52f17108262a0162ebfe4fffe2072245112021-05-07 21:29:261 hr 42 mins ago0x0b82b8eb34c6a5f1695746dc7c9657036da38832 IN  0xdc683adb914edf91df4a36c33ee4f59ca41bc2630 BNB0.00022143
0x540f422bc342958e4ff804d575f9cd4238ecf840447b2e3d6ebb1857006924bd72242972021-05-07 21:18:251 hr 53 mins ago0xb04b9eb4691fa05f691678b5328877f1fac2511c IN  0xdc683adb914edf91df4a36c33ee4f59ca41bc2630 BNB0.00012543
0x71ddbb335d9cab9b624b1c899ad3a33bdeddbaae4d19534974666744beb7b15772242252021-05-07 21:14:491 hr 57 mins ago0xb04b9eb4691fa05f691678b5328877f1fac2511c IN  0xdc683adb914edf91df4a36c33ee4f59ca41bc2630 BNB0.00022143
0xd2414ccddf8cc24a8abe022f45ac0f750bae83b579c1884d30325a636b598b3e72241682021-05-07 21:11:442 hrs ago0x78b6849ca39cfb26b1de6742a3349ad54a18e02e IN  0xdc683adb914edf91df4a36c33ee4f59ca41bc2630 BNB0.00022143
0x0e39737d42608d294bdda4c71cec0b2c4cc9f6405194e9a72ef95227cf3d362672240612021-05-07 21:05:302 hrs 6 mins ago0xb9197a827adab6365e80c2e2996a6488cb38ddf8 IN  0xdc683adb914edf91df4a36c33ee4f59ca41bc2630 BNB0.000072255
0x059685e112f3bb9054d1ee2e59a48c54cb424d1589e6e8350ebf1bcec2c8807972239862021-05-07 21:01:162 hrs 10 mins ago0x78b6849ca39cfb26b1de6742a3349ad54a18e02e IN  0xdc683adb914edf91df4a36c33ee4f59ca41bc2630 BNB0.00022143
0xcda9f4a035554b1d7fdca2cd3901328fa191b23ef7634e546d6c930be1ce5e7c72239522021-05-07 20:59:282 hrs 12 mins ago0x0e3755d390801da61b8e22f00578e1a921d435b2 IN  0xdc683adb914edf91df4a36c33ee4f59ca41bc2630 BNB0.00018004
0x679e3e44bf8175b9784770d66d8012909f845cd3126d77903b6e025f2df0bae372238732021-05-07 20:55:312 hrs 16 mins ago0xeeb886f9952471b1dbf0ab65c4d53c9fcfc17460 IN  0xdc683adb914edf91df4a36c33ee4f59ca41bc2630 BNB0.00022143
0x4271b3e51b1f5a6b0727053cc3bde24472fd93494dd337014df05b6f3474486472238412021-05-07 20:53:552 hrs 18 mins ago0xe2f5ee5fece15469d0a5828a12520e0b4e15bd61 IN  0xdc683adb914edf91df4a36c33ee4f59ca41bc2630 BNB0.00022143
0xf97fe56ddae8d1876f8096f92c049c5a34c965a672b8d8d55d2fd85982de507872238332021-05-07 20:53:312 hrs 18 mins ago0x5372c0d9de5c3bf5bf56b715d5e02b275c2f7d10 IN  0xdc683adb914edf91df4a36c33ee4f59ca41bc2630 BNB0.00022143
0xc3cdd1a781bd4dda8a76461a2c6f0eaf9f4778b51cef309067159a68ce4f188672238232021-05-07 20:53:012 hrs 19 mins ago0x459a87c5be0dfc3273630d4c188a4896fe7a59a3 IN  0xdc683adb914edf91df4a36c33ee4f59ca41bc2630 BNB0.00022143
0xc5b4dc6cc44b8304483fb6ebd02a5b11b82c123ab8098ace9491e22b720af86872237612021-05-07 20:49:552 hrs 22 mins ago0xd8949bc47b78e5a8d294fbb9109655dafb18fbe9 IN  0xdc683adb914edf91df4a36c33ee4f59ca41bc2630 BNB0.00022143
[ Download CSV Export 
Latest 1 internal transaction
Parent Txn Hash Block From To Value
0x9eee4c7eab907a2dc0fa5e2fe9d25143575f3114df6fa806abca758144bdcd5657062792021-03-15 16:06:0453 days 7 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.