Contract 0xbb235450e897581c3c013ab92b1078b27270358e

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x6178845d0e23b139bc22d483c287cded4a543cd92240fbbc560823a82e6b7495Claim Dividend36853792022-07-14 12:38:30622 days 19 hrs ago0x7b25edf4058aefe5ce522531434b8f883d3fe77d IN  0xbb235450e897581c3c013ab92b1078b27270358e0 CRO6.082855401442 4,963.764718196
0x52b7208f2b2fcce045967a58d2ce21406dcdec9c915cd01295346b201efd7403Claim Dividend32122022022-06-13 8:24:42654 days 13 mins ago0x0d208bc028c5ee44c9c82363326b50446c1d8062 IN  0xbb235450e897581c3c013ab92b1078b27270358e0 CRO6.463137955570
0x5585c4e4e825241135dd3f2dbc18e414d723ca9f0815eaf30275b4983f1c43f2Claim Dividend32035762022-06-12 18:45:34654 days 13 hrs ago0xbdb300a1a4c5cd1f06debb80a6644f23fd53ea8d IN  0xbb235450e897581c3c013ab92b1078b27270358e0 CRO2.820538845408 4,982.03426951
0xb70238f8492e46c34b30c19c0e6344cb0af5c15d7625b7c598768f3a5d72cae6Claim Dividend31935252022-06-12 2:54:24655 days 5 hrs ago0x651f646865528b8b0c914a230bb80011fde1138a IN  0xbb235450e897581c3c013ab92b1078b27270358e0 CRO2.6784596388020
0xb32dc886fd0842825e0a5694cf376edcf4476ac8f7d5d032361d8ae33691baf6Claim Dividend31930272022-06-12 2:06:51655 days 6 hrs ago0x13f2d7bad024ed059a10f0c31841530d23d86bca IN  0xbb235450e897581c3c013ab92b1078b27270358e0 CRO3.3187289918210
0xbc953e484d3d87534a92d66cfeeb07851105ef86e02283d43880d194adec47acClaim Dividend31924092022-06-12 1:08:30655 days 7 hrs ago0xe9c437ef122f261d2358f0e403b208bd2cd309d3 IN  0xbb235450e897581c3c013ab92b1078b27270358e0 CRO2.9604808746520
0xb84e9f8906b7e8024b1b53812a93976a58bdc9c62294fef502a42c9d80c9f7a9Claim Dividend31885432022-06-11 19:03:15655 days 13 hrs ago0x971541c1f8368957411980354ce966dd4a27e0e3 IN  0xbb235450e897581c3c013ab92b1078b27270358e0 CRO3.3933244418120
0x211786a8c1485fc2cf4af8f4d56cd7c0c546d0731ceb7b6c772eb65a19a1cf45Claim Dividend31862662022-06-11 15:27:15655 days 17 hrs ago0x159c679dca151fb290703f6c311717c43cb1f2cd IN  0xbb235450e897581c3c013ab92b1078b27270358e0 CRO2.8209337605870
0xceffc155dab922a3225382f5502a8c2c9be5f3f780039ae2fc8d6b5851f6e833Claim Dividend31848162022-06-11 13:08:39655 days 19 hrs ago0x45b6da37906f27f643ebecb7a1d067750a2debee IN  0xbb235450e897581c3c013ab92b1078b27270358e0 CRO2.679449806242 4,984.281048853
0xb59389c7ae5f3237e5bf935de4f086def7614a5ff7774d78b055a785fbb863f9Claim Dividend31844732022-06-11 12:35:51655 days 20 hrs ago0x5691c4a04d5a8d7f810f1d0de1d2e4195436fa2c IN  0xbb235450e897581c3c013ab92b1078b27270358e0 CRO2.6786498834720
0xac2cbb74b6f7fa8b28f8c87a13bebafabf2102f1788bd82200a30c7991a1b74eClaim Dividend31842252022-06-11 12:12:12655 days 20 hrs ago0x5cc357ac31459d546af799d2fac28db65e18d18b IN  0xbb235450e897581c3c013ab92b1078b27270358e0 CRO2.960536846940
0x61ecf546bd4211c2fe6ffc5290a761e6f9787dc86fdada11b3e0cef93a3bbcaeClaim Dividend31820442022-06-11 8:43:10655 days 23 hrs agoCronos ID Name cryptocomcronos.cro IN  0xbb235450e897581c3c013ab92b1078b27270358e0 CRO3.394613456935 4,984.338229067
0x56b3391c385e894b94037dd284be2454211933dde18d212bc904d68ab10d0d10Claim Dividend28030152022-05-17 5:30:41681 days 3 hrs ago0x41ef7a9deb2cfd64ddcf7f7636c6feef33eae0ac IN  0xbb235450e897581c3c013ab92b1078b27270358e0 CRO2.8291779770370
0x38ffdc444a091000e8948f59d27aaa1ce36937f0da4116dd4e1a1ded39c6d2a5Claim Dividend27968452022-05-16 19:38:51681 days 12 hrs ago0x3a449c24bda22a7bb0cc6beeb922cbaedb31a695 IN  0xbb235450e897581c3c013ab92b1078b27270358e0 CRO2.9692890922280
0x8d122691494a3a2439e4f432d2beb39601ecf8aa7173752b1c77d02fda3c4fb7Claim Dividend27943212022-05-16 15:36:23681 days 17 hrs ago0x94f97d696e5b9518b41f82b719a1b30575d41868 IN  0xbb235450e897581c3c013ab92b1078b27270358e0 CRO2.5266361566550
0xab0c3903e03f27c6396fd1f9400620826494ecc1f2bc6cc9e807c28297fdaa0cClaim Dividend27805962022-05-15 17:35:44682 days 15 hrs agoCronos ID Name dezul.cro IN  0xbb235450e897581c3c013ab92b1078b27270358e0 CRO2.8296628469870
0x6fcccdf76c8374601d435dd310df0b3b0195803fb4f5df92e739b45b9dddec3fClaim Dividend27651602022-05-14 16:51:45683 days 15 hrs ago0x2eae7589bcbcd8dbc625c8ad4d6918f4ce7338db IN  0xbb235450e897581c3c013ab92b1078b27270358e0 CRO2.8296868270760
0x8a8b68306832679c1c7672769d3631fc04169276ecb412387b11f06e44cea9ffClaim Dividend27581962022-05-14 5:40:00684 days 2 hrs ago0x0e9ea9ef952f42acf0b86656d704cef63a52dbbd IN  0xbb235450e897581c3c013ab92b1078b27270358e0 CRO6.162676939749 4,998.84974173
0x889f941db20f4fae8eec2ea8dd1d5330f631b6439bfd001bd9bee08445beda23Claim Dividend27525612022-05-13 20:38:24684 days 12 hrs ago0x271a07045d23a5eb52f56355912b3afdac25daa4 IN  0xbb235450e897581c3c013ab92b1078b27270358e0 CRO3.33088393592 5,000.501322485
0x768136ac0025e2854d81af9b14bc397707a6626266c3088a00a0d5c708c851b5Claim Dividend27402652022-05-13 0:48:01685 days 7 hrs agoCronos ID Name mithras.cro IN  0xbb235450e897581c3c013ab92b1078b27270358e0 CRO2.687369162650
0xa4df64732d652805c5257ccc9f672469bb57a8e2b122b0b10a05f4613c8378c1Claim Dividend27331882022-05-12 13:19:21685 days 19 hrs ago0x971541c1f8368957411980354ce966dd4a27e0e3 IN  0xbb235450e897581c3c013ab92b1078b27270358e0 CRO2.8303674724860
0x651273d8e3002a892dd5d335185c7e902a02c2d3014ae13c86f0d40bbc9dd887Claim Dividend27331432022-05-12 13:14:57685 days 19 hrs ago0x9ca4e61baaa8539e5314b678f84bc6c6edc8ba57 IN  0xbb235450e897581c3c013ab92b1078b27270358e0 CRO3.0554754594040
0x62fe7de6f09d28bfb6392657690e635305486bc6e487f7dc0dd6147ddb1c1f3bClaim Dividend27166372022-05-11 10:20:45686 days 22 hrs ago0xfd6ae0747d606e18d02453925759d6db71a508f0 IN  0xbb235450e897581c3c013ab92b1078b27270358e0 CRO2.6876857251520
0x5b0807f4fabee20aba480bd9de1c20eadf3d8ef7cf2fa64e4e4e85939eefbad9Claim Dividend27068072022-05-10 18:29:53687 days 14 hrs ago0x717f24a71080e9f34f34ce860933d32fe67d4ea2 IN  0xbb235450e897581c3c013ab92b1078b27270358e0 CRO3.1957551379590
0xcedaa7c9173242cf151fb55d9702e3054072b3675f523a41c997682479f23de2Claim Dividend26797782022-05-08 22:07:49689 days 10 hrs agoCronos ID Name columbuscircle.cro IN  0xbb235450e897581c3c013ab92b1078b27270358e0 CRO6.189710
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x103e1a3dde1333c97fc2e137b787ccbd0ef2c21e3efe4a9e8ab85e4cd786aad2114267402023-12-03 3:06:15116 days 5 hrs ago 0xbb235450e897581c3c013ab92b1078b27270358e 0xec0a7a0c2439e8cb67b992b12ecd020ea943c7be1.704612641551732663 CRO
0x103e1a3dde1333c97fc2e137b787ccbd0ef2c21e3efe4a9e8ab85e4cd786aad2114267402023-12-03 3:06:15116 days 5 hrs ago CroKing: CRQ Token 0xbb235450e897581c3c013ab92b1078b27270358e1.704612641551732663 CRO
0x3f8a4e05cd3aa0bebbd1adbb7ab4acb0656ce30e76a0be627ab6afd314f6ec47101743082023-09-12 12:25:59197 days 20 hrs ago 0xbb235450e897581c3c013ab92b1078b27270358e 0xec0a7a0c2439e8cb67b992b12ecd020ea943c7be2.461346864641797483 CRO
0x3f8a4e05cd3aa0bebbd1adbb7ab4acb0656ce30e76a0be627ab6afd314f6ec47101743082023-09-12 12:25:59197 days 20 hrs ago CroKing: CRQ Token 0xbb235450e897581c3c013ab92b1078b27270358e2.461346864641797483 CRO
0x9231a4b97f62148018508b365c2a5b3ed12fd14d951c060f8bbd582ce49994ce100709492023-09-05 18:44:11204 days 13 hrs ago 0xbb235450e897581c3c013ab92b1078b27270358e 0xec0a7a0c2439e8cb67b992b12ecd020ea943c7be3.921300129144814303 CRO
0x9231a4b97f62148018508b365c2a5b3ed12fd14d951c060f8bbd582ce49994ce100709492023-09-05 18:44:11204 days 13 hrs ago CroKing: CRQ Token 0xbb235450e897581c3c013ab92b1078b27270358e3.921300129144814303 CRO
0x2a1dd480dcb9c10dc0d0202625b4c0d9e5258482b883f757a61a5aeb7734c7c896300482023-08-08 0:24:26233 days 8 hrs ago 0xbb235450e897581c3c013ab92b1078b27270358e 0xec0a7a0c2439e8cb67b992b12ecd020ea943c7be4.521851767550286694 CRO
0x2a1dd480dcb9c10dc0d0202625b4c0d9e5258482b883f757a61a5aeb7734c7c896300482023-08-08 0:24:26233 days 8 hrs ago CroKing: CRQ Token 0xbb235450e897581c3c013ab92b1078b27270358e4.521851767550286694 CRO
0x058a5b6eb47c0e7e4cac216f23fc7f729333769da120cf4da20c47d0a043a2ad92450492023-07-13 21:43:51258 days 10 hrs ago 0xbb235450e897581c3c013ab92b1078b27270358e 0xec0a7a0c2439e8cb67b992b12ecd020ea943c7be2.914890945463180805 CRO
0x058a5b6eb47c0e7e4cac216f23fc7f729333769da120cf4da20c47d0a043a2ad92450492023-07-13 21:43:51258 days 10 hrs ago CroKing: CRQ Token 0xbb235450e897581c3c013ab92b1078b27270358e2.914890945463180805 CRO
0xdc6468d9b8c5bb84510cfddcc89196b98c1a5cbeaab2b2a3e2a69865cc573ca292450422023-07-13 21:43:11258 days 10 hrs ago 0xbb235450e897581c3c013ab92b1078b27270358e 0xec0a7a0c2439e8cb67b992b12ecd020ea943c7be4.798701762105509756 CRO
0xdc6468d9b8c5bb84510cfddcc89196b98c1a5cbeaab2b2a3e2a69865cc573ca292450422023-07-13 21:43:11258 days 10 hrs ago CroKing: CRQ Token 0xbb235450e897581c3c013ab92b1078b27270358e4.798701762105509756 CRO
0xbd6ddbdc9e01f2dbee7c05a9e2470a433d8cb2013b4f20dec8699881b983d4ac92450262023-07-13 21:41:42258 days 10 hrs ago 0xbb235450e897581c3c013ab92b1078b27270358e 0xec0a7a0c2439e8cb67b992b12ecd020ea943c7be5.45834526339992012 CRO
0xbd6ddbdc9e01f2dbee7c05a9e2470a433d8cb2013b4f20dec8699881b983d4ac92450262023-07-13 21:41:42258 days 10 hrs ago CroKing: CRQ Token 0xbb235450e897581c3c013ab92b1078b27270358e5.45834526339992012 CRO
0x2a28c449bcb290561a105a54c31d99f1f1a0a9ab810fee84f8a5145e518c6dd692450132023-07-13 21:40:31258 days 10 hrs ago 0xbb235450e897581c3c013ab92b1078b27270358e 0xec0a7a0c2439e8cb67b992b12ecd020ea943c7be8.625336829704334538 CRO
0x2a28c449bcb290561a105a54c31d99f1f1a0a9ab810fee84f8a5145e518c6dd692450132023-07-13 21:40:31258 days 10 hrs ago CroKing: CRQ Token 0xbb235450e897581c3c013ab92b1078b27270358e8.625336829704334538 CRO
0x7c2eed3e6733dd89165d196f2bac3938d8d9edafb41a68a1e31fbbc6425f439d91939212023-07-10 13:42:18261 days 18 hrs ago 0xbb235450e897581c3c013ab92b1078b27270358e 0xec0a7a0c2439e8cb67b992b12ecd020ea943c7be64.98868166944344574 CRO
0x7c2eed3e6733dd89165d196f2bac3938d8d9edafb41a68a1e31fbbc6425f439d91939212023-07-10 13:42:18261 days 18 hrs ago CroKing: CRQ Token 0xbb235450e897581c3c013ab92b1078b27270358e64.98868166944344574 CRO
0x0526161ddf516bfb9224716de88425339c4c923571c210e1f9c3a232d8ebebf789495192023-06-24 16:01:00277 days 16 hrs ago 0xbb235450e897581c3c013ab92b1078b27270358e 0xec0a7a0c2439e8cb67b992b12ecd020ea943c7be3.348103777813607084 CRO
0x0526161ddf516bfb9224716de88425339c4c923571c210e1f9c3a232d8ebebf789495192023-06-24 16:01:00277 days 16 hrs ago CroKing: CRQ Token 0xbb235450e897581c3c013ab92b1078b27270358e3.348103777813607084 CRO
0x0c6900c24082c0439959715dadce7f09c6e93a358d744a3af524fb6bff840cc175108772023-03-22 12:04:35371 days 20 hrs ago 0xbb235450e897581c3c013ab92b1078b27270358e 0xec0a7a0c2439e8cb67b992b12ecd020ea943c7be1.713536841331255562 CRO
0x0c6900c24082c0439959715dadce7f09c6e93a358d744a3af524fb6bff840cc175108772023-03-22 12:04:35371 days 20 hrs ago CroKing: CRQ Token 0xbb235450e897581c3c013ab92b1078b27270358e1.713536841331255562 CRO
0xd7b0c90121c67211c03903ac2eecbb8823f9048862278a85bc33a708c8989a7474765992023-03-20 6:16:53374 days 2 hrs ago 0xbb235450e897581c3c013ab92b1078b27270358e 0xec0a7a0c2439e8cb67b992b12ecd020ea943c7be2.436218778616206675 CRO
0xd7b0c90121c67211c03903ac2eecbb8823f9048862278a85bc33a708c8989a7474765992023-03-20 6:16:53374 days 2 hrs ago CroKing: CRQ Token 0xbb235450e897581c3c013ab92b1078b27270358e2.436218778616206675 CRO
0x660862d6827a502d066075d9185162a7694df1160eed66dd3a63989ca8a5c90c74765922023-03-20 6:16:14374 days 2 hrs ago 0xbb235450e897581c3c013ab92b1078b27270358e 0xec0a7a0c2439e8cb67b992b12ecd020ea943c7be2.079086530352184369 CRO
[ Download CSV Export 
Index Block
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DividendDistributor

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

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

//SPDX-License-Identifier: Unlicensed

pragma solidity ^0.7.4;

library SafeMath {

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) { return 0; }
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }
}

interface IBEP20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address _owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IDEXFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IDEXRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);

    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

interface IDividendDistributor {
    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external;
    function setShare(address shareholder, uint256 amount) external;
    function deposit() external payable;
    function process(uint256 gas) external;
}

contract DividendDistributor is IDividendDistributor {

    using SafeMath for uint256;
    address _token;

    struct Share {
        uint256 amount;
        uint256 totalExcluded;
        uint256 totalRealised;
    }

    IDEXRouter router;
    address routerAddress = 0xeC0A7a0C2439E8Cb67b992b12ecd020Ea943c7Be; //CroDex router
    IBEP20 RewardToken = IBEP20(0x065DE42E28E42d90c2052a1B49e7f83806Af0e1F); // CRK

    address[] shareholders;
    mapping (address => uint256) shareholderIndexes;
    mapping (address => uint256) shareholderClaims;
    mapping (address => Share) public shares;

    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed;
    uint256 public dividendsPerShare;
    uint256 public dividendsPerShareAccuracyFactor = 10 ** 36;

    uint256 public minPeriod = 1 hours;
    uint256 public minDistribution = 2500000000 * (10**18);

    uint256 currentIndex;

    bool initialized;
    modifier initialization() {
        require(!initialized);
        _;
        initialized = true;
    }

    modifier onlyToken() {
        require(msg.sender == _token); _;
    }

    constructor (address _router) {
        router = _router != address(0) ? IDEXRouter(_router) : IDEXRouter(routerAddress);
        _token = msg.sender;
    }

    function setDistributionCriteria(uint256 newMinPeriod, uint256 newMinDistribution) external override onlyToken {
        minPeriod = newMinPeriod;
        minDistribution = newMinDistribution;
    }

    function setShare(address shareholder, uint256 amount) external override onlyToken {

        if(shares[shareholder].amount > 0){
            distributeDividend(shareholder);
        }

        if(amount > 0 && shares[shareholder].amount == 0){
            addShareholder(shareholder);
        }else if(amount == 0 && shares[shareholder].amount > 0){
            removeShareholder(shareholder);
        }

        totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
        shares[shareholder].amount = amount;
        shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
    }

    function deposit() external payable override onlyToken {

        uint256 balanceBefore = RewardToken.balanceOf(address(this));

        address[] memory path = new address[](2);
        path[0] = router.WETH();
        path[1] = address(RewardToken);

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: msg.value}(
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amount = RewardToken.balanceOf(address(this)).sub(balanceBefore);
        totalDividends = totalDividends.add(amount);
        dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares));
    }

    function safeDividend(address token, address to, uint value) public onlyToken {
        // bytes4(keccak256(bytes('transfer(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FAILED');
    }

    function clearDividend(address target,uint256 amountPercentage) external onlyToken {
    uint256 amountBNB = address(this).balance;
    payable(target).transfer(amountBNB * amountPercentage / 100);
    }

    function process(uint256 gas) external override onlyToken {
        uint256 shareholderCount = shareholders.length;

        if(shareholderCount == 0) { return; }

        uint256 iterations = 0;
        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();

        while(gasUsed < gas && iterations < shareholderCount) {

            if(currentIndex >= shareholderCount){ currentIndex = 0; }

            if(shouldDistribute(shareholders[currentIndex])){
                distributeDividend(shareholders[currentIndex]);
            }

            gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
            gasLeft = gasleft();
            currentIndex++;
            iterations++;
        }
    }
    
    function shouldDistribute(address shareholder) internal view returns (bool) {
        return shareholderClaims[shareholder] + minPeriod < block.timestamp
                && getUnpaidEarnings(shareholder) > minDistribution;
    }

    function distributeDividend(address shareholder) internal {
        if(shares[shareholder].amount == 0){ return; }

        uint256 amount = getUnpaidEarnings(shareholder);
        if(amount > 0){
            totalDistributed = totalDistributed.add(amount);
            RewardToken.transfer(shareholder, amount);
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
        }
    }
    
    function claimDividend() external {

        require(shouldDistribute(msg.sender), "Too soon. Need to wait!");
        distributeDividend(msg.sender);
    }

    function getUnpaidEarnings(address shareholder) public view returns (uint256) {
        if(shares[shareholder].amount == 0){ return 0; }

        uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount);
        uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;

        if(shareholderTotalDividends <= shareholderTotalExcluded){ return 0; }

        return shareholderTotalDividends.sub(shareholderTotalExcluded);
    }

    function getCumulativeDividends(uint256 share) internal view returns (uint256) {
        return share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor);
    }

    function addShareholder(address shareholder) internal {
        shareholderIndexes[shareholder] = shareholders.length;
        shareholders.push(shareholder);
    }

    function removeShareholder(address shareholder) internal {
        shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length-1];
        shareholderIndexes[shareholders[shareholders.length-1]] = shareholderIndexes[shareholder];
        shareholders.pop();
    }
}

abstract contract Auth {
    address internal owner;
    mapping (address => bool) internal authorizations;

    constructor(address _owner) {
        owner = _owner;
        authorizations[_owner] = true;
    }

    /**
     * Function modifier to require caller to be contract owner
     */
    modifier onlyOwner() {
        require(isOwner(msg.sender), "!OWNER"); _;
    }

    /**
     * Function modifier to require caller to be authorized
     */
    modifier authorized() {
        require(isAuthorized(msg.sender), "!AUTHORIZED"); _;
    }

    /**
     * Authorize address. Owner only
     */
    function authorize(address adr) public onlyOwner {
        authorizations[adr] = true;
    }

    /**
     * Remove address' authorization. Owner only
     */
    function unauthorize(address adr) public onlyOwner {
        authorizations[adr] = false;
    }

    /**
     * Check if address is owner
     */
    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

    /**
     * Return address' authorization status
     */
    function isAuthorized(address adr) public view returns (bool) {
        return authorizations[adr];
    }

    /**
     * Transfer ownership to new address. Caller must be owner. Leaves old owner authorized
     */
    function transferOwnership(address payable adr) public onlyOwner {
        owner = adr;
        authorizations[adr] = true;
        emit OwnershipTransferred(adr);
    }

    event OwnershipTransferred(address owner);
}

contract CroQueen is IBEP20, Auth {
    
    using SafeMath for uint256;

    string constant _name = "CroQueen";
    string constant _symbol = "CRQ";
    uint8 constant _decimals = 18;

    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;
    address routerAddress = 0xeC0A7a0C2439E8Cb67b992b12ecd020Ea943c7Be; //CroDex router
    address RewardToken = 0x065DE42E28E42d90c2052a1B49e7f83806Af0e1F; // CRK

    uint256 _totalSupply = 1000000000000000 * (10 ** _decimals);

    bool public tradingIsEnabled = false; 

    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) _allowances;

    mapping (address => bool) public isFeeExempt;
    mapping (address => bool) public isDividendExempt;
    mapping (address => bool) private _reducedFeesFor;

    uint256 public CRKRewardsFee = 20;
    uint256 public buybackFee    = 10; 
    uint256 public liquidityFee  = 5;
    uint256 public nftRewardsFee = 15;
    uint256 public teamFee       = 10;
    uint256 public totalFees     = CRKRewardsFee + buybackFee + liquidityFee + nftRewardsFee + teamFee;
    uint256 public additionalFeeOnSell = 40;
    uint256 public feeDenominator = 1000;
    uint256 public reducedFeePercentage = 0;

    address public buybackWallet = 0xAec2FBB9102D544215beeeF9326bf245dBb58d66;
    address public nftRewardsWallet = 0xAA966Aa9Df9Ca6DDf8b5136f2a3EE52fd4f515F6;
    address public teamWallet = 0xE62eCFEc962F02a91f0823d513a9b5561d20ceae;

    IDEXRouter public router;
    address public pair;

    DividendDistributor public dividendDistributor;
    uint256 distributorGas = 500000;

    // max wallet tools
    mapping(address => bool) private _isExcludedFromMaxWallet;
    bool private enableMaxWallet = true;
    uint256 private maxWalletRate = 20;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public swapAndLiquifyByLimitOnly = false;

    uint256 public swapThreshold = _totalSupply / 1000;
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor () Auth(msg.sender) {
        
        router = IDEXRouter(routerAddress);
        pair = IDEXFactory(router.factory()).createPair(router.WETH(), address(this));
        _allowances[address(this)][address(router)] = uint256(-1);

        dividendDistributor = new DividendDistributor(address(router));

        isFeeExempt[msg.sender] = true;
        isFeeExempt[address(this)] = true;

        isDividendExempt[pair] = true;
        isDividendExempt[msg.sender] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[DEAD] = true;
        isDividendExempt[ZERO] = true;

        // exclude from max wallet limit
        _isExcludedFromMaxWallet[msg.sender] = true;
        _isExcludedFromMaxWallet[address(0)] = true;
        _isExcludedFromMaxWallet[address(this)] = true;
        _isExcludedFromMaxWallet[DEAD] = true;

        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    receive() external payable { }

    function name() external pure override returns (string memory) { return _name; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function getOwner() external view override returns (address) { return owner; }

    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }

    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function approveMax(address spender) external returns (bool) {
        return approve(spender, uint256(-1));
    }

    function enableTrading() external onlyOwner {
        require(!tradingIsEnabled, "Trading is already enabled");
        tradingIsEnabled = true;
    }
    
    function setIsFeeExempt(address holder, bool exempt) external authorized {
        isFeeExempt[holder] = exempt;
    }

    function setIsDividendExempt(address holder, bool exempt) external authorized {
        require(holder != address(this) && holder != pair);
        isDividendExempt[holder] = exempt;
        
        if(exempt){
            dividendDistributor.setShare(holder, 0);
        }else{
            dividendDistributor.setShare(holder, _balances[holder]);
        }
    }

    function setFeeRates(uint256 _CRKRewardsFee, uint256 _buybackFee, uint256 _liquidityFee, uint256 _nftRewardsFee, uint256 _teamFee, uint256 _additionalFeeOnSell, uint256 _feeDenominator) public onlyOwner {
            CRKRewardsFee = _CRKRewardsFee;
            buybackFee = _buybackFee;
            liquidityFee = _liquidityFee;
            nftRewardsFee = _nftRewardsFee;
            teamFee = _teamFee;
            totalFees = _CRKRewardsFee + _buybackFee + _liquidityFee + _nftRewardsFee + _teamFee;
            additionalFeeOnSell = _additionalFeeOnSell;
            feeDenominator = _feeDenominator;
            require(totalFees + _additionalFeeOnSell <= _feeDenominator / 4, "max 25%");
    }

    function setBuybackWallet(address payable wallet) external onlyOwner{
        buybackWallet = wallet;
    }

    function setNftRewardsWallet(address payable wallet) external onlyOwner{
        nftRewardsWallet = wallet;
    }

    function setTeamWallet(address payable wallet) external onlyOwner{
        teamWallet = wallet;
    }

    function reduceFeesFor(address account, bool reduce) public onlyOwner {
        require(_reducedFeesFor[account] != reduce, "Account already has reduced fees");
        _reducedFeesFor[account] = reduce;
    }

    function reduceFeesForMultipleAccounts(address[] calldata accounts, bool reduce) public onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++) {
            _reducedFeesFor[accounts[i]] = reduce;
        }
    }

    function setReducedFeePercentage(uint256 percentage) public onlyOwner{
        require(percentage < 100);
        reducedFeePercentage = percentage;
    }

    function isReducedFeesFor(address account) public view returns(bool) {
        return _reducedFeesFor[account];
    }

    function isExcludedFromMaxWallet(address account) public view returns(bool) {
        return _isExcludedFromMaxWallet[account];
    }

    function maxWalletAmount() public view returns (uint256) {
        return getCirculatingSupply().mul(maxWalletRate).div(1000);
    }

    function setmaxWalletAmountRateDenominator1000(uint256 _val) public onlyOwner {
        require(_val > 9, "Max wallet percentage cannot be lower than 1%");
        maxWalletRate = _val;
    }

    function setExcludeFromMaxWallet(address account, bool exclude) public onlyOwner {
          _isExcludedFromMaxWallet[account] = exclude;
    }

    function setenableMaxWallet(bool _val) public onlyOwner {
        enableMaxWallet = _val;
    }

    function changeSwapBackSettings(bool enableSwapBack, uint256 newSwapBackLimit) external authorized {
        swapAndLiquifyEnabled  = enableSwapBack;
        swapThreshold = newSwapBackLimit;
    }

    function changeDistributionCriteria(uint256 newinPeriod, uint256 newMinDistribution) external authorized {
        dividendDistributor.setDistributionCriteria(newinPeriod, newMinDistribution);
    }

    function changeDistributorSettings(uint256 gas) external authorized {
        require(gas < 750000);
        distributorGas = gas;
    }
    
    function transfer(address recipient, uint256 amount) external override returns (bool) {
        return _transferFrom(msg.sender, recipient, amount);
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        
        if(_allowances[sender][msg.sender] != uint256(-1)){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance");
        }
        return _transferFrom(sender, recipient, amount);
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        require(tradingIsEnabled || (isFeeExempt[sender] || isFeeExempt[recipient]), "Trading is disabled");
        if(inSwapAndLiquify){ return _basicTransfer(sender, recipient, amount); }

        if (enableMaxWallet && maxWalletAmount() > 0) {
            if (
                _isExcludedFromMaxWallet[sender] == false
                && _isExcludedFromMaxWallet[recipient] == false &&
                recipient != pair
            ) {
                uint balance  = balanceOf(recipient);
                require(balance + amount <= maxWalletAmount(), "MaxWallet: Transfer amount exceeds the maxWalletAmount");
            }
        }

        if(msg.sender != pair && !inSwapAndLiquify && swapAndLiquifyEnabled && _balances[address(this)] >= swapThreshold){ swapBack(); }

        bool takeFee = !inSwapAndLiquify;

        //Exchange tokens
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

        if(isFeeExempt[sender] || isFeeExempt[recipient]) {
            takeFee = false;
        }
        // no fee for wallet to wallet transfers
        if(sender != pair && recipient != pair) {
            takeFee = false;
        }
        
        uint256 finalAmount = amount;

        if(takeFee) {
            finalAmount = takeFees(sender, recipient, amount);
        }

        _balances[recipient] = _balances[recipient].add(finalAmount);

        // Dividend tracker
        if(!isDividendExempt[sender]) {
            try dividendDistributor.setShare(sender, _balances[sender]) {} catch {}
        }

        if(!isDividendExempt[recipient]) {
            try dividendDistributor.setShare(recipient, _balances[recipient]) {} catch {} 
        }

        try dividendDistributor.process(distributorGas) {} catch {}

        emit Transfer(sender, recipient, finalAmount);
        return true;
    }
    
    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function takeFees(address sender, address recipient, uint256 amount) internal returns (uint256) {
        if (recipient == pair) {
            totalFees += additionalFeeOnSell;
        }

    	uint256 feeAmount = amount.mul(totalFees).div(feeDenominator);

        if (_reducedFeesFor[sender] || 
            _reducedFeesFor[recipient]) {
                feeAmount -= feeAmount.div(100).mul(reducedFeePercentage);
        } 

        if (recipient == pair) {
            totalFees -= additionalFeeOnSell;
        }

        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);

        return amount.sub(feeAmount);
    }

    function swapBack() internal lockTheSwap {
        
        uint256 tokensToLiquify = _balances[address(this)];
        uint256 amountToLiquify = tokensToLiquify.mul(liquidityFee).div(totalFees).div(2);
        uint256 amountToSwap = tokensToLiquify.sub(amountToLiquify);

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amountCRO = address(this).balance;

        uint256 totalCroFee = totalFees.sub(liquidityFee.div(2));
        
        uint256 amountCroLiquidity = amountCRO.mul(liquidityFee).div(totalCroFee).div(2);
        uint256 amountCroBuyback = amountCRO.mul(buybackFee).div(totalCroFee);
        uint256 amountCroNftHolders = amountCRO.mul(nftRewardsFee).div(totalCroFee);
        uint256 amountCroReflection = amountCRO.mul(CRKRewardsFee).div(totalCroFee);
        uint256 amountCroTeam = amountCRO.sub(amountCroLiquidity).sub(amountCroBuyback).sub(amountCroNftHolders).sub(amountCroReflection);

        try dividendDistributor.deposit{value: amountCroReflection}() {} catch {}
                
        if(buybackFee > 0){
            payable(buybackWallet).transfer(amountCroBuyback);
        }
        if(nftRewardsFee > 0){
            payable(nftRewardsWallet).transfer(amountCroNftHolders);
        }
        if(buybackFee > 0){
            payable(teamWallet).transfer(amountCroTeam);
        }

        if(amountToLiquify > 0){
            router.addLiquidityETH{value: amountCroLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                DEAD,
                block.timestamp
            );
            emit AutoLiquify(amountCroLiquidity, amountToLiquify);
        }
    }

    event AutoLiquify(uint256 amountBNB, uint256 amountBOG);

}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"claimDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"clearDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"dividendsPerShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendsPerShareAccuracyFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"}],"name":"getUnpaidEarnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minDistribution","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"process","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"safeDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMinPeriod","type":"uint256"},{"internalType":"uint256","name":"newMinDistribution","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setShare","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"shares","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"totalExcluded","type":"uint256"},{"internalType":"uint256","name":"totalRealised","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

6080604052600280546001600160a01b031990811673ec0a7a0c2439e8cb67b992b12ecd020ea943c7be179091556003805490911673065de42e28e42d90c2052a1b49e7f83806af0e1f1790556ec097ce7bc90715b34b9f1000000000600c55610e10600d556b0813f3978f89409844000000600e5534801561008157600080fd5b506040516111e43803806111e4833981810160405260208110156100a457600080fd5b50516001600160a01b0381166100c5576002546001600160a01b03166100c7565b805b600180546001600160a01b03929092166001600160a01b03199283161790556000805490911633179055506110e3806101016000396000f3fe6080604052600436106100f35760003560e01c8063997664d71161008a578063efca2eed11610059578063efca2eed146102e6578063f0fc6bca146102fb578063ffb2c47914610310578063ffd49c841461033a576100f3565b8063997664d714610263578063ce7c2ac214610278578063d0e30db0146102c9578063e2d2e219146102d1576100f3565b80632d48e896116100c65780632d48e896146101c65780633a98ef39146101f65780634fab0ae81461020b578063657ef0a214610220576100f3565b80630d692ed5146100f857806311ce023d1461013357806314b6ca961461015a57806328fd319814610193575b600080fd5b34801561010457600080fd5b506101316004803603604081101561011b57600080fd5b506001600160a01b03813516906020013561034f565b005b34801561013f57600080fd5b506101486103a8565b60408051918252519081900360200190f35b34801561016657600080fd5b506101316004803603604081101561017d57600080fd5b506001600160a01b0381351690602001356103ae565b34801561019f57600080fd5b50610148600480360360208110156101b657600080fd5b50356001600160a01b03166104d3565b3480156101d257600080fd5b50610131600480360360408110156101e957600080fd5b508035906020013561055f565b34801561020257600080fd5b50610148610581565b34801561021757600080fd5b50610148610587565b34801561022c57600080fd5b506101316004803603606081101561024357600080fd5b506001600160a01b0381358116916020810135909116906040013561058d565b34801561026f57600080fd5b5061014861070d565b34801561028457600080fd5b506102ab6004803603602081101561029b57600080fd5b50356001600160a01b0316610713565b60408051938452602084019290925282820152519081900360600190f35b610131610734565b3480156102dd57600080fd5b50610148610a2a565b3480156102f257600080fd5b50610148610a30565b34801561030757600080fd5b50610131610a36565b34801561031c57600080fd5b506101316004803603602081101561033357600080fd5b5035610a9b565b34801561034657600080fd5b50610148610b7b565b6000546001600160a01b0316331461036657600080fd5b60405147906001600160a01b0384169060648484020480156108fc02916000818181858888f193505050501580156103a2573d6000803e3d6000fd5b50505050565b600c5481565b6000546001600160a01b031633146103c557600080fd5b6001600160a01b038216600090815260076020526040902054156103ec576103ec82610b81565b60008111801561041257506001600160a01b038216600090815260076020526040902054155b156104255761042082610ca9565b610458565b8015801561044a57506001600160a01b03821660009081526007602052604090205415155b156104585761045882610d0a565b6001600160a01b03821660009081526007602052604090205460085461048991839161048391610df7565b90610e42565b6008556001600160a01b03821660009081526007602052604090208190556104b081610e9c565b6001600160a01b0390921660009081526007602052604090206001019190915550565b6001600160a01b0381166000908152600760205260408120546104f85750600061055a565b6001600160a01b03821660009081526007602052604081205461051a90610e9c565b6001600160a01b03841660009081526007602052604090206001015490915080821161054b5760009250505061055a565b6105558282610df7565b925050505b919050565b6000546001600160a01b0316331461057657600080fd5b600d91909155600e55565b60085481565b600e5481565b6000546001600160a01b031633146105a457600080fd5b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1781529251825160009485949389169392918291908083835b602083106106205780518252601f199092019160209182019101610601565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610682576040519150601f19603f3d011682016040523d82523d6000602084013e610687565b606091505b50915091508180156106b55750805115806106b557508080602001905160208110156106b257600080fd5b50515b610706576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b60095481565b60076020526000908152604090208054600182015460029092015490919083565b6000546001600160a01b0316331461074b57600080fd5b600354604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561079657600080fd5b505afa1580156107aa573d6000803e3d6000fd5b505050506040513d60208110156107c057600080fd5b505160408051600280825260608201835292935060009290916020830190803683375050600154604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561082c57600080fd5b505afa158015610840573d6000803e3d6000fd5b505050506040513d602081101561085657600080fd5b50518151829060009061086557fe5b6001600160a01b03928316602091820292909201015260035482519116908290600190811061089057fe5b6001600160a01b0392831660209182029290920181019190915260015460405163b6f9de9560e01b815260006004820181815230604484018190524260648501819052608060248601908152895160848701528951969098169763b6f9de9597349795968b969495939460a49091019187810191028083838b5b8381101561092257818101518382015260200161090a565b50505050905001955050505050506000604051808303818588803b15801561094957600080fd5b505af115801561095d573d6000803e3d6000fd5b5050600354604080516370a0823160e01b81523060048201529051600095506109e894508793506001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156109b657600080fd5b505afa1580156109ca573d6000803e3d6000fd5b505050506040513d60208110156109e057600080fd5b505190610df7565b6009549091506109f89082610e42565b600955600854600c54610a2291610a1991610a139085610eb9565b90610f12565b600b5490610e42565b600b55505050565b600b5481565b600a5481565b610a3f33610f54565b610a90576040805162461bcd60e51b815260206004820152601760248201527f546f6f20736f6f6e2e204e65656420746f207761697421000000000000000000604482015290519081900360640190fd5b610a9933610b81565b565b6000546001600160a01b03163314610ab257600080fd5b60045480610ac05750610b78565b60008060005a90505b8482108015610ad757508383105b156107065783600f5410610aeb576000600f555b610b176004600f5481548110610afd57fe5b6000918252602090912001546001600160a01b0316610f54565b15610b4857610b486004600f5481548110610b2e57fe5b6000918252602090912001546001600160a01b0316610b81565b610b5d610b565a8390610df7565b8390610e42565b91505a600f8054600190810190915593909301929050610ac9565b50565b600d5481565b6001600160a01b038116600090815260076020526040902054610ba357610b78565b6000610bae826104d3565b90508015610ca557600a54610bc39082610e42565b600a556003546040805163a9059cbb60e01b81526001600160a01b038581166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b158015610c1c57600080fd5b505af1158015610c30573d6000803e3d6000fd5b505050506040513d6020811015610c4657600080fd5b50506001600160a01b03821660009081526006602090815260408083204290556007909152902060020154610c7b9082610e42565b6001600160a01b03831660009081526007602052604090206002810191909155546104b090610e9c565b5050565b600480546001600160a01b039092166000818152600560205260408120849055600184018355919091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90910180546001600160a01b0319169091179055565b600480546000198101908110610d1c57fe5b60009182526020808320909101546001600160a01b0384811684526005909252604090922054600480549290931692918110610d5457fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559183168152600591829052604081205460048054919392916000198101908110610da257fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020556004805480610dd257fe5b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000610e3983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610f90565b90505b92915050565b600082820183811015610e39576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000610e3c600c54610a13600b5485610eb990919063ffffffff16565b600082610ec857506000610e3c565b82820282848281610ed557fe5b0414610e395760405162461bcd60e51b815260040180806020018281038252602181526020018061108d6021913960400191505060405180910390fd5b6000610e3983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611027565b600d546001600160a01b0382166000908152600660205260408120549091429101108015610e3c5750600e54610f89836104d3565b1192915050565b6000818484111561101f5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610fe4578181015183820152602001610fcc565b50505050905090810190601f1680156110115780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836110765760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610fe4578181015183820152602001610fcc565b50600083858161108257fe5b049594505050505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a26469706673582212201184442430240a42d221318ee636d34a66693127dde9f69c2e21abb49962facf64736f6c63430007060033000000000000000000000000ec0a7a0c2439e8cb67b992b12ecd020ea943c7be

Deployed Bytecode

0x6080604052600436106100f35760003560e01c8063997664d71161008a578063efca2eed11610059578063efca2eed146102e6578063f0fc6bca146102fb578063ffb2c47914610310578063ffd49c841461033a576100f3565b8063997664d714610263578063ce7c2ac214610278578063d0e30db0146102c9578063e2d2e219146102d1576100f3565b80632d48e896116100c65780632d48e896146101c65780633a98ef39146101f65780634fab0ae81461020b578063657ef0a214610220576100f3565b80630d692ed5146100f857806311ce023d1461013357806314b6ca961461015a57806328fd319814610193575b600080fd5b34801561010457600080fd5b506101316004803603604081101561011b57600080fd5b506001600160a01b03813516906020013561034f565b005b34801561013f57600080fd5b506101486103a8565b60408051918252519081900360200190f35b34801561016657600080fd5b506101316004803603604081101561017d57600080fd5b506001600160a01b0381351690602001356103ae565b34801561019f57600080fd5b50610148600480360360208110156101b657600080fd5b50356001600160a01b03166104d3565b3480156101d257600080fd5b50610131600480360360408110156101e957600080fd5b508035906020013561055f565b34801561020257600080fd5b50610148610581565b34801561021757600080fd5b50610148610587565b34801561022c57600080fd5b506101316004803603606081101561024357600080fd5b506001600160a01b0381358116916020810135909116906040013561058d565b34801561026f57600080fd5b5061014861070d565b34801561028457600080fd5b506102ab6004803603602081101561029b57600080fd5b50356001600160a01b0316610713565b60408051938452602084019290925282820152519081900360600190f35b610131610734565b3480156102dd57600080fd5b50610148610a2a565b3480156102f257600080fd5b50610148610a30565b34801561030757600080fd5b50610131610a36565b34801561031c57600080fd5b506101316004803603602081101561033357600080fd5b5035610a9b565b34801561034657600080fd5b50610148610b7b565b6000546001600160a01b0316331461036657600080fd5b60405147906001600160a01b0384169060648484020480156108fc02916000818181858888f193505050501580156103a2573d6000803e3d6000fd5b50505050565b600c5481565b6000546001600160a01b031633146103c557600080fd5b6001600160a01b038216600090815260076020526040902054156103ec576103ec82610b81565b60008111801561041257506001600160a01b038216600090815260076020526040902054155b156104255761042082610ca9565b610458565b8015801561044a57506001600160a01b03821660009081526007602052604090205415155b156104585761045882610d0a565b6001600160a01b03821660009081526007602052604090205460085461048991839161048391610df7565b90610e42565b6008556001600160a01b03821660009081526007602052604090208190556104b081610e9c565b6001600160a01b0390921660009081526007602052604090206001019190915550565b6001600160a01b0381166000908152600760205260408120546104f85750600061055a565b6001600160a01b03821660009081526007602052604081205461051a90610e9c565b6001600160a01b03841660009081526007602052604090206001015490915080821161054b5760009250505061055a565b6105558282610df7565b925050505b919050565b6000546001600160a01b0316331461057657600080fd5b600d91909155600e55565b60085481565b600e5481565b6000546001600160a01b031633146105a457600080fd5b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1781529251825160009485949389169392918291908083835b602083106106205780518252601f199092019160209182019101610601565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610682576040519150601f19603f3d011682016040523d82523d6000602084013e610687565b606091505b50915091508180156106b55750805115806106b557508080602001905160208110156106b257600080fd5b50515b610706576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b60095481565b60076020526000908152604090208054600182015460029092015490919083565b6000546001600160a01b0316331461074b57600080fd5b600354604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561079657600080fd5b505afa1580156107aa573d6000803e3d6000fd5b505050506040513d60208110156107c057600080fd5b505160408051600280825260608201835292935060009290916020830190803683375050600154604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561082c57600080fd5b505afa158015610840573d6000803e3d6000fd5b505050506040513d602081101561085657600080fd5b50518151829060009061086557fe5b6001600160a01b03928316602091820292909201015260035482519116908290600190811061089057fe5b6001600160a01b0392831660209182029290920181019190915260015460405163b6f9de9560e01b815260006004820181815230604484018190524260648501819052608060248601908152895160848701528951969098169763b6f9de9597349795968b969495939460a49091019187810191028083838b5b8381101561092257818101518382015260200161090a565b50505050905001955050505050506000604051808303818588803b15801561094957600080fd5b505af115801561095d573d6000803e3d6000fd5b5050600354604080516370a0823160e01b81523060048201529051600095506109e894508793506001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156109b657600080fd5b505afa1580156109ca573d6000803e3d6000fd5b505050506040513d60208110156109e057600080fd5b505190610df7565b6009549091506109f89082610e42565b600955600854600c54610a2291610a1991610a139085610eb9565b90610f12565b600b5490610e42565b600b55505050565b600b5481565b600a5481565b610a3f33610f54565b610a90576040805162461bcd60e51b815260206004820152601760248201527f546f6f20736f6f6e2e204e65656420746f207761697421000000000000000000604482015290519081900360640190fd5b610a9933610b81565b565b6000546001600160a01b03163314610ab257600080fd5b60045480610ac05750610b78565b60008060005a90505b8482108015610ad757508383105b156107065783600f5410610aeb576000600f555b610b176004600f5481548110610afd57fe5b6000918252602090912001546001600160a01b0316610f54565b15610b4857610b486004600f5481548110610b2e57fe5b6000918252602090912001546001600160a01b0316610b81565b610b5d610b565a8390610df7565b8390610e42565b91505a600f8054600190810190915593909301929050610ac9565b50565b600d5481565b6001600160a01b038116600090815260076020526040902054610ba357610b78565b6000610bae826104d3565b90508015610ca557600a54610bc39082610e42565b600a556003546040805163a9059cbb60e01b81526001600160a01b038581166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b158015610c1c57600080fd5b505af1158015610c30573d6000803e3d6000fd5b505050506040513d6020811015610c4657600080fd5b50506001600160a01b03821660009081526006602090815260408083204290556007909152902060020154610c7b9082610e42565b6001600160a01b03831660009081526007602052604090206002810191909155546104b090610e9c565b5050565b600480546001600160a01b039092166000818152600560205260408120849055600184018355919091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90910180546001600160a01b0319169091179055565b600480546000198101908110610d1c57fe5b60009182526020808320909101546001600160a01b0384811684526005909252604090922054600480549290931692918110610d5457fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559183168152600591829052604081205460048054919392916000198101908110610da257fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020556004805480610dd257fe5b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000610e3983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610f90565b90505b92915050565b600082820183811015610e39576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000610e3c600c54610a13600b5485610eb990919063ffffffff16565b600082610ec857506000610e3c565b82820282848281610ed557fe5b0414610e395760405162461bcd60e51b815260040180806020018281038252602181526020018061108d6021913960400191505060405180910390fd5b6000610e3983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611027565b600d546001600160a01b0382166000908152600660205260408120549091429101108015610e3c5750600e54610f89836104d3565b1192915050565b6000818484111561101f5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610fe4578181015183820152602001610fcc565b50505050905090810190601f1680156110115780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836110765760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610fe4578181015183820152602001610fcc565b50600083858161108257fe5b049594505050505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a26469706673582212201184442430240a42d221318ee636d34a66693127dde9f69c2e21abb49962facf64736f6c63430007060033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000ec0a7a0c2439e8cb67b992b12ecd020ea943c7be

-----Decoded View---------------
Arg [0] : _router (address): 0xec0a7a0c2439e8cb67b992b12ecd020ea943c7be

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000ec0a7a0c2439e8cb67b992b12ecd020ea943c7be


Deployed ByteCode Sourcemap

3870:6403:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7178:206;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7178:206:0;;-1:-1:-1;;;;;7178:206:0;;;;;;:::i;:::-;;4637:57;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;5430:646;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5430:646:0;;-1:-1:-1;;;;;5430:646:0;;;;;;:::i;9142:479::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9142:479:0;-1:-1:-1;;;;;9142:479:0;;:::i;5221:201::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5221:201:0;;;;;;;:::i;4491:26::-;;;;;;;;;;;;;:::i;4744:54::-;;;;;;;;;;;;;:::i;6801:369::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;6801:369:0;;;;;;;;;;;;;;;;;:::i;4524:29::-;;;;;;;;;;;;;:::i;4442:40::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4442:40:0;-1:-1:-1;;;;;4442:40:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;6084:709;;;:::i;4598:32::-;;;;;;;;;;;;;:::i;4560:31::-;;;;;;;;;;;;;:::i;8974:160::-;;;;;;;;;;;;;:::i;7392:723::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7392:723:0;;:::i;4703:34::-;;;;;;;;;;;;;:::i;7178:206::-;5028:6;;-1:-1:-1;;;;;5028:6:0;5014:10;:20;5006:29;;;;;;7316:60:::1;::::0;7288:21:::1;::::0;-1:-1:-1;;;;;7316:24:0;::::1;::::0;7372:3:::1;7341:28:::0;;::::1;:34;7316:60:::0;::::1;;;::::0;::::1;::::0;;;7341:34;7316:24;:60;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;5037:1;7178:206:::0;;:::o;4637:57::-;;;;:::o;5430:646::-;5028:6;;-1:-1:-1;;;;;5028:6:0;5014:10;:20;5006:29;;;;;;-1:-1:-1;;;;;5529:19:0;::::1;5558:1;5529:19:::0;;;:6:::1;:19;::::0;;;;:26;:30;5526:92:::1;;5575:31;5594:11;5575:18;:31::i;:::-;5642:1;5633:6;:10;:45;;;;-1:-1:-1::0;;;;;;5647:19:0;::::1;;::::0;;;:6:::1;:19;::::0;;;;:26;:31;5633:45:::1;5630:214;;;5694:27;5709:11;5694:14;:27::i;:::-;5630:214;;;5741:11:::0;;:45;::::1;;;-1:-1:-1::0;;;;;;5756:19:0;::::1;5785:1;5756:19:::0;;;:6:::1;:19;::::0;;;;:26;:30;;5741:45:::1;5738:106;;;5802:30;5820:11;5802:17;:30::i;:::-;-1:-1:-1::0;;;;;5886:19:0;::::1;;::::0;;;:6:::1;:19;::::0;;;;:26;5870:11:::1;::::0;:55:::1;::::0;5918:6;;5870:43:::1;::::0;:15:::1;:43::i;:::-;:47:::0;::::1;:55::i;:::-;5856:11;:69:::0;-1:-1:-1;;;;;5936:19:0;::::1;;::::0;;;:6:::1;:19;::::0;;;;:35;;;6018:50:::1;5936:35:::0;6018:22:::1;:50::i;:::-;-1:-1:-1::0;;;;;5982:19:0;;;::::1;;::::0;;;:6:::1;:19;::::0;;;;-1:-1:-1;5982:33:0::1;:86:::0;;;;-1:-1:-1;5430:646:0:o;9142:479::-;-1:-1:-1;;;;;9234:19:0;;9211:7;9234:19;;;:6;:19;;;;;:26;9231:48;;-1:-1:-1;9275:1:0;9268:8;;9231:48;-1:-1:-1;;;;;9350:19:0;;9291:33;9350:19;;;:6;:19;;;;;:26;9327:50;;:22;:50::i;:::-;-1:-1:-1;;;;;9423:19:0;;9388:32;9423:19;;;:6;:19;;;;;-1:-1:-1;9423:33:0;;9291:86;;-1:-1:-1;9472:53:0;;;9469:70;;9535:1;9528:8;;;;;;9469:70;9558:55;:25;9588:24;9558:29;:55::i;:::-;9551:62;;;;9142:479;;;;:::o;5221:201::-;5028:6;;-1:-1:-1;;;;;5028:6:0;5014:10;:20;5006:29;;;;;;5343:9:::1;:24:::0;;;;5378:15:::1;:36:::0;5221:201::o;4491:26::-;;;;:::o;4744:54::-;;;;:::o;6801:369::-;5028:6;;-1:-1:-1;;;;;5028:6:0;5014:10;:20;5006:29;;;;;;7004:45:::1;::::0;;-1:-1:-1;;;;;7004:45:0;;::::1;;::::0;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;7004:45:0::1;-1:-1:-1::0;;;7004:45:0::1;::::0;;6993:57;;;;-1:-1:-1;;;;6993:10:0;;::::1;::::0;7004:45;6993:57;;;7004:45;6993:57;;7004:45;6993:57:::1;;;;;;::::0;;;;-1:-1:-1;;6993:57:0;;;;::::1;::::0;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6957:93;;;;7069:7;:57;;;;-1:-1:-1::0;7081:11:0;;:16;;:44:::1;;;7112:4;7101:24;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;7101:24:0;7081:44:::1;7061:101;;;::::0;;-1:-1:-1;;;7061:101:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;5037:1;;6801:369:::0;;;:::o;4524:29::-;;;;:::o;4442:40::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;6084:709::-;5028:6;;-1:-1:-1;;;;;5028:6:0;5014:10;:20;5006:29;;;;;;6176:11:::1;::::0;:36:::1;::::0;;-1:-1:-1;;;6176:36:0;;6206:4:::1;6176:36;::::0;::::1;::::0;;;-1:-1:-1;;;;;;;6176:11:0::1;::::0;-1:-1:-1;;6176:36:0;;;;;::::1;::::0;;;;;;;;:11;:36;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;6176:36:0;6249:16:::1;::::0;;6263:1:::1;6249:16:::0;;;;;::::1;::::0;;6176:36;;-1:-1:-1;6225:21:0::1;::::0;6249:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;6286:6:0::1;::::0;:13:::1;::::0;;-1:-1:-1;;;6286:13:0;;;;6225:40;;-1:-1:-1;;;;;;6286:6:0;;::::1;::::0;:11:::1;::::0;-1:-1:-1;6286:13:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:6;:13;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;6286:13:0;6276:7;;:4;;6281:1:::1;::::0;6276:7:::1;;;;-1:-1:-1::0;;;;;6276:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;6328:11:::1;::::0;6310:7;;6328:11;::::1;::::0;6310:7;;-1:-1:-1;;6310:7:0;::::1;;;;;-1:-1:-1::0;;;;;6310:30:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:30;;;;-1:-1:-1;6353:6:0;:179:::1;::::0;-1:-1:-1;;;6353:179:0;;:6:::1;:179;::::0;::::1;::::0;;;6486:4:::1;6353:179:::0;;;;;;6506:15:::1;6353:179:::0;;;;;;;;;;;;;;;;;;;;;:6;;;::::1;::::0;-1:-1:-1;;6418:9:0::1;::::0;6353:6;;:179;;6486:4;;6506:15;;6353:179;;;;;;;::::1;::::0;::::1;::::0;;;:6;:179:::1;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;6562:11:0::1;::::0;:36:::1;::::0;;-1:-1:-1;;;6562:36:0;;6592:4:::1;6562:36;::::0;::::1;::::0;;;-1:-1:-1;;;6562:55:0::1;::::0;-1:-1:-1;6603:13:0;;-1:-1:-1;;;;;;6562:11:0;;::::1;::::0;-1:-1:-1;;6562:36:0;;;;;::::1;::::0;;;;;;;;;:11;:36;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;6562:36:0;;:40:::1;:55::i;:::-;6645:14;::::0;6545:72;;-1:-1:-1;6645:26:0::1;::::0;6545:72;6645:18:::1;:26::i;:::-;6628:14;:43:::0;6772:11:::1;::::0;6724:31:::1;::::0;6702:83:::1;::::0;6724:60:::1;::::0;:43:::1;::::0;6760:6;6724:35:::1;:43::i;:::-;:47:::0;::::1;:60::i;:::-;6702:17;::::0;;:21:::1;:83::i;:::-;6682:17;:103:::0;-1:-1:-1;;;6084:709:0:o;4598:32::-;;;;:::o;4560:31::-;;;;:::o;8974:160::-;9029:28;9046:10;9029:16;:28::i;:::-;9021:64;;;;;-1:-1:-1;;;9021:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;9096:30;9115:10;9096:18;:30::i;:::-;8974:160::o;7392:723::-;5028:6;;-1:-1:-1;;;;;5028:6:0;5014:10;:20;5006:29;;;;;;7488:12:::1;:19:::0;7523:21;7520:37:::1;;7548:7;;;7520:37;7569:18;7602:15:::0;7632::::1;7650:9;7632:27;;7672:436;7688:3;7678:7;:13;:46;;;;;7708:16;7695:10;:29;7678:46;7672:436;;;7762:16;7746:12;;:32;7743:57;;7796:1;7781:12;:16:::0;7743:57:::1;7819:44;7836:12;7849;;7836:26;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;7836:26:0::1;7819:16;:44::i;:::-;7816:129;;;7883:46;7902:12;7915;;7902:26;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;7902:26:0::1;7883:18;:46::i;:::-;7971:35;7983:22;7995:9;7983:7:::0;;:11:::1;:22::i;:::-;7971:7:::0;;:11:::1;:35::i;:::-;7961:45;;8031:9;8055:12;:14:::0;;::::1;::::0;;::::1;::::0;;;8084:12;;;::::1;::::0;8021:19;-1:-1:-1;7672:436:0::1;;5037:1;7392:723:::0;:::o;4703:34::-;;;;:::o;8366:596::-;-1:-1:-1;;;;;8438:19:0;;;;;;:6;:19;;;;;:26;8435:46;;8472:7;;8435:46;8493:14;8510:30;8528:11;8510:17;:30::i;:::-;8493:47;-1:-1:-1;8554:10:0;;8551:404;;8599:16;;:28;;8620:6;8599:20;:28::i;:::-;8580:16;:47;8642:11;;:41;;;-1:-1:-1;;;8642:41:0;;-1:-1:-1;;;;;8642:41:0;;;;;;;;;;;;;;;:11;;;;;-1:-1:-1;;8642:41:0;;;;;;;;;;;;;;-1:-1:-1;8642:11:0;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;8698:30:0;;;;;;:17;8642:41;8698:30;;;;;;;8731:15;8698:48;;8797:6;:19;;;;;:33;;;:45;;8835:6;8797:37;:45::i;:::-;-1:-1:-1;;;;;8761:19:0;;;;;;:6;:19;;;;;:33;;;:81;;;;8916:26;8893:50;;:22;:50::i;8551:404::-;8366:596;;:::o;9807:167::-;9906:12;:19;;-1:-1:-1;;;;;9872:31:0;;;;;;;;:18;:31;;;;;:53;;;-1:-1:-1;9936:30:0;;;;;;;;;;;;;;-1:-1:-1;;;;;;9936:30:0;;;;;;9807:167::o;9982:288::-;10098:12;10111:19;;-1:-1:-1;;10111:21:0;;;10098:35;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10063:31:0;;;;;:18;:31;;;;;;;;10050:12;:45;;10098:35;;;;;10050:12;:45;;;;;;;;;;;;;;;;;;:83;;-1:-1:-1;;;;;;10050:83:0;-1:-1:-1;;;;;10050:83:0;;;;;;10202:31;;;;;:18;:31;;;;;;;;10163:12;10176:19;;10202:31;;:18;10050:45;-1:-1:-1;;10176:21:0;;;10163:35;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10163:35:0;10144:55;;;;;;;;;;;;:89;10244:12;:18;;;;;;;;;;;;;;-1:-1:-1;;10244:18:0;;;;;;;-1:-1:-1;;;;;;10244:18:0;;;;;;-1:-1:-1;9982:288:0:o;281:136::-;339:7;366:43;370:1;373;366:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;359:50;;281:136;;;;;:::o;94:179::-;152:7;184:5;;;208:6;;;;200:46;;;;;-1:-1:-1;;;200:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;9629:170;9699:7;9726:65;9759:31;;9726:28;9736:17;;9726:5;:9;;:28;;;;:::i;623:224::-;681:7;705:6;701:25;;-1:-1:-1;722:1:0;715:8;;701:25;748:5;;;752:1;748;:5;:1;772:5;;;;;:10;764:56;;;;-1:-1:-1;;;764:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;855:132;913:7;940:39;944:1;947;940:39;;;;;;;;;;;;;;;;;:3;:39::i;8127:231::-;8254:9;;-1:-1:-1;;;;;8221:30:0;;8197:4;8221:30;;;:17;:30;;;;;;8197:4;;8266:15;8221:42;;:60;:129;;;;;8335:15;;8302:30;8320:11;8302:17;:30::i;:::-;:48;;8127:231;-1:-1:-1;;8127:231:0:o;425:190::-;511:7;547:12;539:6;;;;531:29;;;;-1:-1:-1;;;531:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;583:5:0;;;425:190::o;995:189::-;1081:7;1116:12;1109:5;1101:28;;;;-1:-1:-1;;;1101:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1101:28:0;;;;;;;;;;;;;;;;;;1140:9;1156:1;1152;:5;;;;;;;995:189;-1:-1:-1;;;;;995:189:0:o

Swarm Source

ipfs://1184442430240a42d221318ee636d34a66693127dde9f69c2e21abb49962facf
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.