ETH Price: $2,679.73 (-1.16%)

Contract

0xbBCD93A1809239E3A4bEB1B02fa6f8a83f7000B2
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve214498662024-12-21 9:04:1157 days ago1734771851IN
Diamond: DIAMONDS Token
0 ETH0.0002565310.52543071
Claim203834622024-07-25 12:08:23206 days ago1721909303IN
Diamond: DIAMONDS Token
0 ETH0.000501582.99270254
Claim203829502024-07-25 10:24:59206 days ago1721903099IN
Diamond: DIAMONDS Token
0 ETH0.000799574.7706046
Claim203829392024-07-25 10:22:47206 days ago1721902967IN
Diamond: DIAMONDS Token
0 ETH0.000844555.03899037
Claim198587852024-05-13 4:43:59280 days ago1715575439IN
Diamond: DIAMONDS Token
0 ETH0.000607913.62708976
Set Exclude From...198258492024-05-08 14:10:47284 days ago1715177447IN
Diamond: DIAMONDS Token
0 ETH0.0005347311.52544684
Approve198257902024-05-08 13:58:47284 days ago1715176727IN
Diamond: DIAMONDS Token
0 ETH0.000344097.37500028
Approve198257642024-05-08 13:53:35284 days ago1715176415IN
Diamond: DIAMONDS Token
0 ETH0.000316536.79297097
Transfer198254472024-05-08 12:49:23284 days ago1715172563IN
Diamond: DIAMONDS Token
0 ETH0.001036435.70908732
Set Exlude From ...198254422024-05-08 12:48:23284 days ago1715172503IN
Diamond: DIAMONDS Token
0 ETH0.000271915.85522778
Approve194564722024-03-17 18:53:23336 days ago1710701603IN
Diamond: DIAMONDS Token
0 ETH0.0015390233.18219695
Approve194414322024-03-15 16:07:11338 days ago1710518831IN
Diamond: DIAMONDS Token
0 ETH0.0012600558.08841045
Approve194281022024-03-13 19:05:47340 days ago1710356747IN
Diamond: DIAMONDS Token
0 ETH0.003876583.53639672
Approve194228122024-03-13 1:15:11341 days ago1710292511IN
Diamond: DIAMONDS Token
0 ETH0.00204344.02551673
Transfer194088292024-03-11 2:19:59343 days ago1710123599IN
Diamond: DIAMONDS Token
0 ETH0.0009445942.93629794
Transfer194087732024-03-11 2:08:47343 days ago1710122927IN
Diamond: DIAMONDS Token
0 ETH0.0010505747.75352899
Approve194031792024-03-10 7:22:59343 days ago1710055379IN
Diamond: DIAMONDS Token
0 ETH0.0024249152.25544096
Approve193542842024-03-03 11:15:35350 days ago1709464535IN
Diamond: DIAMONDS Token
0 ETH0.0018566540.03049943
Approve193355032024-02-29 20:18:35353 days ago1709237915IN
Diamond: DIAMONDS Token
0 ETH0.0017752472.83659638
Approve193053562024-02-25 15:00:35357 days ago1708873235IN
Diamond: DIAMONDS Token
0 ETH0.0008527534.98783506
Claim190964762024-01-27 7:37:47386 days ago1706341067IN
Diamond: DIAMONDS Token
0 ETH0.002116612.62859434
Claim190964632024-01-27 7:35:11386 days ago1706340911IN
Diamond: DIAMONDS Token
0 ETH0.0020949812.4995849
Transfer189083262023-12-31 22:06:11413 days ago1704060371IN
Diamond: DIAMONDS Token
0 ETH0.0007628211.77320819
Approve185557222023-11-12 12:06:23462 days ago1699790783IN
Diamond: DIAMONDS Token
0 ETH0.0014774631.83858628
Approve184332712023-10-26 8:41:59479 days ago1698309719IN
Diamond: DIAMONDS Token
0 ETH0.0008327117.95837567
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
156639182022-10-03 0:02:35868 days ago1664755355
Diamond: DIAMONDS Token
0.10070927 ETH
156639182022-10-03 0:02:35868 days ago1664755355
Diamond: DIAMONDS Token
0.04316111 ETH
156639132022-10-03 0:01:35868 days ago1664755295
Diamond: DIAMONDS Token
0.08706732 ETH
153674432022-08-18 21:47:34913 days ago1660859254
Diamond: DIAMONDS Token
0.04093962 ETH
153674432022-08-18 21:47:34913 days ago1660859254
Diamond: DIAMONDS Token
0.04093962 ETH
153674352022-08-18 21:45:21913 days ago1660859121
Diamond: DIAMONDS Token
0.04210279 ETH
153674352022-08-18 21:45:21913 days ago1660859121
Diamond: DIAMONDS Token
0.04210279 ETH
153674272022-08-18 21:41:47913 days ago1660858907
Diamond: DIAMONDS Token
0.05829525 ETH
153674272022-08-18 21:41:47913 days ago1660858907
Diamond: DIAMONDS Token
0.05829525 ETH
153674222022-08-18 21:40:29913 days ago1660858829
Diamond: DIAMONDS Token
0.07484722 ETH
153674222022-08-18 21:40:29913 days ago1660858829
Diamond: DIAMONDS Token
0.07484722 ETH
153670462022-08-18 20:16:17913 days ago1660853777
Diamond: DIAMONDS Token
0.01845513 ETH
153670462022-08-18 20:16:17913 days ago1660853777
Diamond: DIAMONDS Token
0.01845513 ETH
153664672022-08-18 18:07:27913 days ago1660846047
Diamond: DIAMONDS Token
0.01247935 ETH
153664672022-08-18 18:07:27913 days ago1660846047
Diamond: DIAMONDS Token
0.01247935 ETH
153655852022-08-18 14:42:28913 days ago1660833748
Diamond: DIAMONDS Token
0.01511817 ETH
153655852022-08-18 14:42:28913 days ago1660833748
Diamond: DIAMONDS Token
0.01511817 ETH
153576762022-08-17 8:32:28914 days ago1660725148
Diamond: DIAMONDS Token
0.00212185 ETH
153576762022-08-17 8:32:28914 days ago1660725148
Diamond: DIAMONDS Token
0.00212185 ETH
153546672022-08-16 21:10:57915 days ago1660684257
Diamond: DIAMONDS Token
0.0236565 ETH
153546672022-08-16 21:10:57915 days ago1660684257
Diamond: DIAMONDS Token
0.0236565 ETH
153537182022-08-16 17:41:01915 days ago1660671661
Diamond: DIAMONDS Token
0.0048166 ETH
153537182022-08-16 17:41:01915 days ago1660671661
Diamond: DIAMONDS Token
0.0048166 ETH
153531662022-08-16 15:29:08915 days ago1660663748
Diamond: DIAMONDS Token
0.00243136 ETH
153531662022-08-16 15:29:08915 days ago1660663748
Diamond: DIAMONDS Token
0.00243136 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Diamond

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-03-25
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.11;

interface IERC20 {
    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address to, 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 from,
        address to,
        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 IERC20Metadata is IERC20 {
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);
}

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account)
        public
        view
        virtual
        override
        returns (uint256)
    {
        return _balances[account];
    }

    function transfer(address to, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    function allowance(address owner, address spender)
        public
        view
        virtual
        override
        returns (uint256)
    {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue)
        public
        virtual
        returns (bool)
    {
        address owner = _msgSender();
        _approve(owner, spender, _allowances[owner][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue)
        public
        virtual
        returns (bool)
    {
        address owner = _msgSender();
        uint256 currentAllowance = _allowances[owner][spender];
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(
            fromBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(
                currentAllowance >= amount,
                "ERC20: insufficient allowance"
            );
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

library SafeMath {
    function tryAdd(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

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

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

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

library Counters {
    struct Counter {
        uint256 _value;
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

contract Ownable {
    address private _owner;
    address private _previousOwner;
    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    constructor() {
        _owner = msg.sender;
        emit OwnershipTransferred(address(0), _owner);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == msg.sender, "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
}

interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

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

    function factory() external pure returns (address);

    function WETH() external pure returns (address);

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

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

library SignedSafeMath {
    function mul(int256 a, int256 b) internal pure returns (int256) {
        return a * b;
    }

    function div(int256 a, int256 b) internal pure returns (int256) {
        return a / b;
    }

    function sub(int256 a, int256 b) internal pure returns (int256) {
        return a - b;
    }

    function add(int256 a, int256 b) internal pure returns (int256) {
        return a + b;
    }
}

library SafeCast {
    function toUint224(uint256 value) internal pure returns (uint224) {
        require(
            value <= type(uint224).max,
            "SafeCast: value doesn't fit in 224 bits"
        );
        return uint224(value);
    }

    function toUint128(uint256 value) internal pure returns (uint128) {
        require(
            value <= type(uint128).max,
            "SafeCast: value doesn't fit in 128 bits"
        );
        return uint128(value);
    }

    function toUint96(uint256 value) internal pure returns (uint96) {
        require(
            value <= type(uint96).max,
            "SafeCast: value doesn't fit in 96 bits"
        );
        return uint96(value);
    }

    function toUint64(uint256 value) internal pure returns (uint64) {
        require(
            value <= type(uint64).max,
            "SafeCast: value doesn't fit in 64 bits"
        );
        return uint64(value);
    }

    function toUint32(uint256 value) internal pure returns (uint32) {
        require(
            value <= type(uint32).max,
            "SafeCast: value doesn't fit in 32 bits"
        );
        return uint32(value);
    }

    function toUint16(uint256 value) internal pure returns (uint16) {
        require(
            value <= type(uint16).max,
            "SafeCast: value doesn't fit in 16 bits"
        );
        return uint16(value);
    }

    function toUint8(uint256 value) internal pure returns (uint8) {
        require(
            value <= type(uint8).max,
            "SafeCast: value doesn't fit in 8 bits"
        );
        return uint8(value);
    }

    function toUint256(int256 value) internal pure returns (uint256) {
        require(value >= 0, "SafeCast: value must be positive");
        return uint256(value);
    }

    function toInt128(int256 value) internal pure returns (int128) {
        require(
            value >= type(int128).min && value <= type(int128).max,
            "SafeCast: value doesn't fit in 128 bits"
        );
        return int128(value);
    }

    function toInt64(int256 value) internal pure returns (int64) {
        require(
            value >= type(int64).min && value <= type(int64).max,
            "SafeCast: value doesn't fit in 64 bits"
        );
        return int64(value);
    }

    function toInt32(int256 value) internal pure returns (int32) {
        require(
            value >= type(int32).min && value <= type(int32).max,
            "SafeCast: value doesn't fit in 32 bits"
        );
        return int32(value);
    }

    function toInt16(int256 value) internal pure returns (int16) {
        require(
            value >= type(int16).min && value <= type(int16).max,
            "SafeCast: value doesn't fit in 16 bits"
        );
        return int16(value);
    }

    function toInt8(int256 value) internal pure returns (int8) {
        require(
            value >= type(int8).min && value <= type(int8).max,
            "SafeCast: value doesn't fit in 8 bits"
        );
        return int8(value);
    }

    function toInt256(uint256 value) internal pure returns (int256) {
        require(
            value <= uint256(type(int256).max),
            "SafeCast: value doesn't fit in an int256"
        );
        return int256(value);
    }
}

interface DividendPayingTokenInterface {
    function dividendOf(address _owner) external view returns (uint256);

    function distributeDividends() external payable;

    function withdrawDividend() external;

    event DividendsDistributed(address indexed from, uint256 weiAmount);
    event DividendWithdrawn(
        address indexed to,
        uint256 weiAmount,
        address received
    );
}

interface DividendPayingTokenOptionalInterface {
    function withdrawableDividendOf(address _owner)
        external
        view
        returns (uint256);

    function withdrawnDividendOf(address _owner)
        external
        view
        returns (uint256);

    function accumulativeDividendOf(address _owner)
        external
        view
        returns (uint256);
}

abstract contract DividendPayingToken is
    ERC20,
    DividendPayingTokenInterface,
    DividendPayingTokenOptionalInterface
{
    using SafeMath for uint256;
    using SignedSafeMath for int256;
    using SafeCast for uint256;
    using SafeCast for int256;
    uint256 internal constant magnitude = 2**128;

    uint256 internal magnifiedDividendPerShare;

    mapping(address => int256) internal magnifiedDividendCorrections;
    mapping(address => uint256) internal withdrawnDividends;

    uint256 public totalDividendsDistributed;

    constructor(string memory _name, string memory _symbol)
        ERC20(_name, _symbol)
    {}

    receive() external payable {
        distributeDividends();
    }

    function distributeDividends() public payable override {
        require(totalSupply() > 0);

        if (msg.value > 0) {
            magnifiedDividendPerShare = magnifiedDividendPerShare.add(
                (msg.value).mul(magnitude) / totalSupply()
            );
            emit DividendsDistributed(msg.sender, msg.value);

            totalDividendsDistributed = totalDividendsDistributed.add(
                msg.value
            );
        }
    }

    function withdrawDividend() public virtual override {
        _withdrawDividendOfUser(payable(msg.sender), payable(msg.sender));
    }

    function _withdrawDividendOfUser(address payable user, address payable to)
        internal
        returns (uint256)
    {
        uint256 _withdrawableDividend = withdrawableDividendOf(user);
        if (_withdrawableDividend > 0) {
            withdrawnDividends[user] = withdrawnDividends[user].add(
                _withdrawableDividend
            );
            emit DividendWithdrawn(user, _withdrawableDividend, to);
            (bool success, ) = to.call{value: _withdrawableDividend}("");

            if (!success) {
                withdrawnDividends[user] = withdrawnDividends[user].sub(
                    _withdrawableDividend
                );
                return 0;
            }

            return _withdrawableDividend;
        }

        return 0;
    }

    function dividendOf(address _owner) public view override returns (uint256) {
        return withdrawableDividendOf(_owner);
    }

    function withdrawableDividendOf(address _owner)
        public
        view
        override
        returns (uint256)
    {
        return accumulativeDividendOf(_owner).sub(withdrawnDividends[_owner]);
    }

    function withdrawnDividendOf(address _owner)
        public
        view
        override
        returns (uint256)
    {
        return withdrawnDividends[_owner];
    }

    function accumulativeDividendOf(address _owner)
        public
        view
        override
        returns (uint256)
    {
        return
            magnifiedDividendPerShare
                .mul(balanceOf(_owner))
                .toInt256()
                .add(magnifiedDividendCorrections[_owner])
                .toUint256() / magnitude;
    }

    function _mint(address account, uint256 value) internal override {
        super._mint(account, value);

        magnifiedDividendCorrections[account] = magnifiedDividendCorrections[
            account
        ].sub((magnifiedDividendPerShare.mul(value)).toInt256());
    }

    function _burn(address account, uint256 value) internal override {
        super._burn(account, value);
        magnifiedDividendCorrections[account] = magnifiedDividendCorrections[
            account
        ].add((magnifiedDividendPerShare.mul(value)).toInt256());
    }

    function _setBalance(address account, uint256 newBalance) internal {
        uint256 currentBalance = balanceOf(account);

        if (newBalance > currentBalance) {
            uint256 mintAmount = newBalance.sub(currentBalance);
            _mint(account, mintAmount);
        } else if (newBalance < currentBalance) {
            uint256 burnAmount = currentBalance.sub(newBalance);
            _burn(account, burnAmount);
        }
    }

    function getAccount(address _account)
        public
        view
        returns (uint256 _withdrawableDividends, uint256 _withdrawnDividends)
    {
        _withdrawableDividends = withdrawableDividendOf(_account);
        _withdrawnDividends = withdrawnDividends[_account];
    }
}

contract DiamondDividendTracker is DividendPayingToken, Ownable {
    using SafeMath for uint256;
    using Counters for Counters.Counter;

    Counters.Counter private tokenHoldersCount;
    mapping(address => bool) private tokenHoldersMap;

    mapping(address => bool) public excludedFromDividends;

    uint256 public immutable minimumTokenBalanceForDividends;

    event ExcludeFromDividends(address indexed account);

    constructor()
        DividendPayingToken(
            "Diamond_Dividend_Tracker",
            "Diamond_Dividend_Tracker"
        )
    {
        minimumTokenBalanceForDividends = 10000 * 10**18;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    function _approve(
        address,
        address,
        uint256
    ) internal pure override {
        require(false, "Diamond_Dividend_Tracker: No approvals allowed");
    }

    function _transfer(
        address,
        address,
        uint256
    ) internal pure override {
        require(false, "Diamond_Dividend_Tracker: No transfers allowed");
    }

    function withdrawDividend() public pure override {
        require(
            false,
            "Diamond_Dividend_Tracker: withdrawDividend disabled. Use the 'claim' function on the main Diamond contract."
        );
    }

    function excludeFromDividends(address account) external onlyOwner {
        excludedFromDividends[account] = true;

        _setBalance(account, 0);

        if (tokenHoldersMap[account] == true) {
            tokenHoldersMap[account] = false;
            tokenHoldersCount.decrement();
        }

        emit ExcludeFromDividends(account);
    }

    function includeFromDividends(address account, uint256 balance)
        external
        onlyOwner
    {
        excludedFromDividends[account] = false;

        if (balance >= minimumTokenBalanceForDividends) {
            _setBalance(account, balance);

            if (tokenHoldersMap[account] == false) {
                tokenHoldersMap[account] = true;
                tokenHoldersCount.increment();
            }
        }

        emit ExcludeFromDividends(account);
    }

    function isExcludeFromDividends(address account)
        external
        view
        onlyOwner
        returns (bool)
    {
        return excludedFromDividends[account];
    }

    function getNumberOfTokenHolders() external view returns (uint256) {
        return tokenHoldersCount.current();
    }

    function setBalance(address payable account, uint256 newBalance)
        external
        onlyOwner
    {
        if (excludedFromDividends[account]) {
            return;
        }

        if (newBalance >= minimumTokenBalanceForDividends) {
            _setBalance(account, newBalance);

            if (tokenHoldersMap[account] == false) {
                tokenHoldersMap[account] = true;
                tokenHoldersCount.increment();
            }
        } else {
            _setBalance(account, 0);

            if (tokenHoldersMap[account] == true) {
                tokenHoldersMap[account] = false;
                tokenHoldersCount.decrement();
            }
        }
    }

    function processAccount(address account, address toAccount)
        public
        onlyOwner
        returns (uint256)
    {
        uint256 amount = _withdrawDividendOfUser(
            payable(account),
            payable(toAccount)
        );
        return amount;
    }
}

contract Diamond is ERC20, Ownable {
    using SafeMath for uint256;
    using Counters for Counters.Counter;

    string private constant _name = "Diamond";
    string private constant _symbol = "DIAMONDS";
    uint8 private constant _decimals = 18;
    uint256 private constant _tTotal = 1e12 * 10**18;

    IUniswapV2Router02 private uniswapV2Router =
        IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    bool private tradingOpen = false;
    uint256 private launchBlock = 0;
    address private uniswapV2Pair;

    IERC20 private MyBagsInstance;
    uint256 private minimumMyBagsToken = 1e8 * 10**18;
    uint256 private privateSaleTimestamp;
    uint256 private publicSaleTimestamp;

    mapping(address => bool) private automatedMarketMakerPairs;
    mapping(address => bool) public isExcludeFromFee;
    mapping(address => bool) public isBot;

    uint256 private walletLimitPercentage = 50;
    mapping(address => bool) public isExludeFromWalletLimit;

    uint256 private baseBuyTax = 10;
    uint256 public baseSellTax = 5;
    uint256 public sellPercentageOfHolding = 20;
    uint256 public minutesIntervalPerSell = 7200 minutes;
    mapping(address => uint256) public initialSellTimestamp;

    uint256 private autoLP = 27;
    uint256 private devFee = 40;
    uint256 private marketingFee = 33;

    uint256 public minContractTokensToSwap = 2e9 * 10**18;
    bool public swapAll = false;

    struct MinutesRangeTax {
        uint256 from;
        uint256 to;
        uint256 tax;
    }

    mapping(address => uint256) public initialBuyTimestamp;
    mapping(uint8 => MinutesRangeTax) public minutesRangeTaxes;
    uint8 public maxIndexMinutesRange;

    address private devWalletAddress;
    address private marketingWalletAddress;

    DiamondDividendTracker public dividendTracker;
    uint256 minimumTokenBalanceForDividends = 10000 * 10**18;
    mapping(address => uint256) public lastTransfer;

    uint256 public pendingTokensForReward;
    uint256 public minRewardTokensToSwap = 10000 * 10**18;

    uint256 public pendingEthReward;

    struct ClaimedEth {
        uint256 ethAmount;
        uint256 tokenAmount;
        uint256 timestamp;
    }

    Counters.Counter private claimedHistoryIds;

    mapping(uint256 => ClaimedEth) private claimedEthMap;
    mapping(address => uint256[]) private userClaimedIds;

    event BuyFees(address from, address to, uint256 amountTokens);
    event SellFees(address from, address to, uint256 amountTokens);
    event AddLiquidity(uint256 amountTokens, uint256 amountEth);
    event SwapTokensForEth(uint256 sentTokens, uint256 receivedEth);
    event SwapEthForTokens(uint256 sentEth, uint256 receivedTokens);
    event DistributeFees(uint256 devEth, uint256 remarketingEth);
    event AddRewardPool(uint256 _ethAmount);

    event SendDividends(uint256 amount);

    event DividendClaimed(
        uint256 ethAmount,
        uint256 tokenAmount,
        address account
    );

    constructor(
        address _devWalletAddress,
        address _marketingWalletAddress,
        address _myBagsTokenAddress
    ) ERC20(_name, _symbol) {
        devWalletAddress = _devWalletAddress;
        marketingWalletAddress = _marketingWalletAddress;

        MyBagsInstance = IERC20(_myBagsTokenAddress);

        isExcludeFromFee[owner()] = true;
        isExcludeFromFee[address(this)] = true;
        isExludeFromWalletLimit[owner()] = true;
        isExludeFromWalletLimit[address(this)] = true;
        isExludeFromWalletLimit[address(uniswapV2Router)] = true;

        dividendTracker = new DiamondDividendTracker();
        dividendTracker.excludeFromDividends(address(dividendTracker));
        dividendTracker.excludeFromDividends(address(this));
        dividendTracker.excludeFromDividends(owner());
        dividendTracker.excludeFromDividends(address(uniswapV2Router));
        minutesRangeTaxes[1].from = 0 minutes;
        minutesRangeTaxes[1].to = 7200 minutes;
        minutesRangeTaxes[1].tax = 30;
        minutesRangeTaxes[2].from = 7200 minutes;
        minutesRangeTaxes[2].to = 14400 minutes;
        minutesRangeTaxes[2].tax = 25;
        minutesRangeTaxes[3].from = 14400 minutes;
        minutesRangeTaxes[3].to = 21600 minutes;
        minutesRangeTaxes[3].tax = 20;
        minutesRangeTaxes[4].from = 21600 minutes;
        minutesRangeTaxes[4].to = 28800 minutes;
        minutesRangeTaxes[4].tax = 15;

        maxIndexMinutesRange = 4;

        _mint(owner(), _tTotal);
    }

    function openTrading(uint256 _launchTime, uint256 _minutesForPrivateSale)
        external
        onlyOwner
    {
        require(!tradingOpen, "Diamond: Trading is already open");
        require(_launchTime > block.timestamp, "Diamond: Invalid timestamp");
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(
                address(this),
                uniswapV2Router.WETH()
            );

        automatedMarketMakerPairs[uniswapV2Pair] = true;
        dividendTracker.excludeFromDividends(uniswapV2Pair);

        addLiquidity(balanceOf(address(this)), address(this).balance);
        IERC20(uniswapV2Pair).approve(
            address(uniswapV2Router),
            type(uint256).max
        );

        tradingOpen = true;
        privateSaleTimestamp = _launchTime;
        publicSaleTimestamp = _launchTime.add(
            _minutesForPrivateSale.mul(1 minutes)
        );
        launchBlock = block.number;
    }

    function manualSwap() external onlyOwner {
        uint256 totalTokens = balanceOf(address(this)).sub(
            pendingTokensForReward
        );

        swapTokensForEth(totalTokens);
    }

    function manualSend() external onlyOwner {
        uint256 totalEth = address(this).balance.sub(pendingEthReward);

        uint256 devFeesToSend = totalEth.mul(devFee).div(
            uint256(100).sub(autoLP)
        );
        uint256 marketingFeesToSend = totalEth.mul(marketingFee).div(
            uint256(100).sub(autoLP)
        );
        uint256 remainingEthForFees = totalEth.sub(devFeesToSend).sub(
            marketingFeesToSend
        );
        devFeesToSend = devFeesToSend.add(remainingEthForFees);

        sendEthToWallets(devFeesToSend, marketingFeesToSend);
    }

    function getTax(address _ad) public view returns (uint256) {
        uint256 tax = baseSellTax;

        for (uint8 x = 1; x <= maxIndexMinutesRange; x++) {
            if (
                (initialBuyTimestamp[_ad] + minutesRangeTaxes[x].from <=
                    block.timestamp &&
                    initialBuyTimestamp[_ad] + minutesRangeTaxes[x].to >=
                    block.timestamp)
            ) {
                tax = minutesRangeTaxes[x].tax;
                return tax;
            }
        }

        return tax;
    }

    function getTotalDividendsDistributed() external view returns (uint256) {
        return dividendTracker.totalDividendsDistributed();
    }

    function withdrawableDividendOf(address _account)
        public
        view
        returns (uint256)
    {
        return dividendTracker.withdrawableDividendOf(_account);
    }

    function dividendTokenBalanceOf(address _account)
        public
        view
        returns (uint256)
    {
        return dividendTracker.balanceOf(_account);
    }

    function claim() external {
        _claim(payable(msg.sender), false);
    }

    function reinvest() external {
        _claim(payable(msg.sender), true);
    }

    function _claim(address payable _account, bool _reinvest) private {
        uint256 withdrawableAmount = dividendTracker.withdrawableDividendOf(
            _account
        );
        require(
            withdrawableAmount > 0,
            "Diamond: Claimer has no withdrawable dividend"
        );
        uint256 ethAmount;
        uint256 tokenAmount;

        if (!_reinvest) {
            ethAmount = dividendTracker.processAccount(_account, _account);
        } else {
            ethAmount = dividendTracker.processAccount(_account, address(this));
            if (ethAmount > 0) {
                tokenAmount = swapEthForTokens(ethAmount, _account);
            }
        }
        if (ethAmount > 0) {
            claimedHistoryIds.increment();
            uint256 hId = claimedHistoryIds.current();
            claimedEthMap[hId].ethAmount = ethAmount;
            claimedEthMap[hId].tokenAmount = tokenAmount;
            claimedEthMap[hId].timestamp = block.timestamp;

            userClaimedIds[_account].push(hId);

            emit DividendClaimed(ethAmount, tokenAmount, _account);
        }
    }

    function getNumberOfDividendTokenHolders() external view returns (uint256) {
        return dividendTracker.getNumberOfTokenHolders();
    }

    function getAccount(address _account)
        public
        view
        returns (
            uint256 withdrawableDividends,
            uint256 withdrawnDividends,
            uint256 balance
        )
    {
        (withdrawableDividends, withdrawnDividends) = dividendTracker
            .getAccount(_account);
        return (withdrawableDividends, withdrawnDividends, balanceOf(_account));
    }

    function decimals() public view virtual override returns (uint8) {
        return _decimals;
    }

    function _transfer(
        address _from,
        address _to,
        uint256 _amount
    ) internal virtual override {
        require(!isBot[_from] && !isBot[_to]);

        uint256 transferAmount = _amount;
        uint256 prevWalletLimit = walletLimitPercentage;
        if (
            tradingOpen &&
            (automatedMarketMakerPairs[_from] ||
                automatedMarketMakerPairs[_to]) &&
            !isExcludeFromFee[_from] &&
            !isExcludeFromFee[_to]
        ) {
            require(
                privateSaleTimestamp <= block.timestamp,
                "Diamond: Private and public sale is not open"
            );
            if (
                privateSaleTimestamp <= block.timestamp &&
                publicSaleTimestamp > block.timestamp
            ) {
                walletLimitPercentage = 10;
                require(
                    MyBagsInstance.balanceOf(_to) >= minimumMyBagsToken,
                    "Diamond: Not enough $MyBagsToken"
                );
            }
            transferAmount = takeFees(_from, _to, _amount);
        }
        if (initialBuyTimestamp[_to] == 0) {
            initialBuyTimestamp[_to] = block.timestamp;
        }
        if (!automatedMarketMakerPairs[_to] && !isExludeFromWalletLimit[_to]) {
            uint256 addressBalance = balanceOf(_to).add(transferAmount);
            require(
                addressBalance <=
                    totalSupply().mul(walletLimitPercentage).div(10000),
                "Diamond: Wallet balance limit reached"
            );
        }

        super._transfer(_from, _to, transferAmount);
        walletLimitPercentage = prevWalletLimit;
        if (!dividendTracker.isExcludeFromDividends(_from)) {
            try
                dividendTracker.setBalance(payable(_from), balanceOf(_from))
            {} catch {}
        }
        if (!dividendTracker.isExcludeFromDividends(_to)) {
            try
                dividendTracker.setBalance(payable(_to), balanceOf(_to))
            {} catch {}
        }
    }

    function _setAutomatedMarketMakerPair(address _pair, bool _value) private {
        require(
            automatedMarketMakerPairs[_pair] != _value,
            "Diamond: Automated market maker pair is already set to that value"
        );
        automatedMarketMakerPairs[_pair] = _value;

        if (_value) {
            dividendTracker.excludeFromDividends(_pair);
        }
    }

    function setMinimumMyBagsToken(uint256 _minimumMyBagsToken)
        external
        onlyOwner
    {
        minimumMyBagsToken = _minimumMyBagsToken;
    }

    function setExcludeFromFee(address _address, bool _isExludeFromFee)
        external
        onlyOwner
    {
        isExcludeFromFee[_address] = _isExludeFromFee;
    }

    function setExludeFromDividends(
        address _address,
        bool _isExludeFromDividends
    ) external onlyOwner {
        if (_isExludeFromDividends) {
            dividendTracker.excludeFromDividends(_address);
        } else {
            dividendTracker.includeFromDividends(_address, balanceOf(_address));
        }
    }

    function setExludeFromWalletLimit(
        address _address,
        bool _isExludeFromWalletLimit
    ) external onlyOwner {
        isExludeFromWalletLimit[_address] = _isExludeFromWalletLimit;
    }

    function setWalletLimitPercentage(uint256 _percentage) external onlyOwner {
        walletLimitPercentage = _percentage;
    }

    function setTaxes(
        uint256 _baseBuyTax,
        uint256 _baseSellTax,
        uint256 _autoLP,
        uint256 _devFee,
        uint256 _marketingFee
    ) external onlyOwner {
        require(_baseBuyTax <= 10 && baseSellTax <= 5);

        baseBuyTax = _baseBuyTax;
        baseSellTax = _baseSellTax;
        autoLP = _autoLP;
        devFee = _devFee;
        marketingFee = _marketingFee;
    }

    function setMinContractTokensToSwap(uint256 _numToken) public onlyOwner {
        minContractTokensToSwap = _numToken;
    }

    function setMinRewardTokensToSwap(uint256 _numToken) public onlyOwner {
        minRewardTokensToSwap = _numToken;
    }

    function setSwapAll(bool _isWapAll) public onlyOwner {
        swapAll = _isWapAll;
    }

    function setMinutesRangeTax(
        uint8 _index,
        uint256 _from,
        uint256 _to,
        uint256 _tax
    ) external onlyOwner {
        minutesRangeTaxes[_index].from = _from.mul(1 minutes);
        minutesRangeTaxes[_index].to = _to.mul(1 minutes);
        minutesRangeTaxes[_index].tax = _tax;
    }

    function setMaxIndexMinutesRange(uint8 _maxIndex) external onlyOwner {
        maxIndexMinutesRange = _maxIndex;
    }

    function setPercentageOfHolding(
        uint256 _sellPercentageOfHolding,
        uint256 _minutesIntervalPerSell
    ) external onlyOwner {
        sellPercentageOfHolding = _sellPercentageOfHolding;
        minutesIntervalPerSell = _minutesIntervalPerSell.mul(1 minutes);
    }

    function setBots(address[] calldata _bots) public onlyOwner {
        for (uint256 i = 0; i < _bots.length; i++) {
            if (
                _bots[i] != uniswapV2Pair &&
                _bots[i] != address(uniswapV2Router)
            ) {
                isBot[_bots[i]] = true;
            }
        }
    }

    function setWalletAddress(address _devWallet, address _marketingWallet)
        external
        onlyOwner
    {
        devWalletAddress = _devWallet;
        marketingWalletAddress = _marketingWallet;
    }

    function takeFees(
        address _from,
        address _to,
        uint256 _amount
    ) private returns (uint256) {
        uint256 fees;
        uint256 remainingAmount;
        require(
            automatedMarketMakerPairs[_from] || automatedMarketMakerPairs[_to],
            "Diamond: No market makers found"
        );

        if (automatedMarketMakerPairs[_from]) {
            fees = _amount.mul(baseBuyTax).div(100);
            remainingAmount = _amount.sub(fees);

            super._transfer(_from, address(this), fees);

            emit BuyFees(_from, address(this), fees);
        } else {
            uint256 totalSellTax;
            if (isExcludeByInitialSell(_from, _amount)) {
                totalSellTax = baseSellTax;
            } else {
                totalSellTax = getTax(_from);
            }

            fees = _amount.mul(totalSellTax).div(100);
            uint256 rewardTokens = _amount
                .mul(totalSellTax.sub(baseSellTax))
                .div(100);
            pendingTokensForReward = pendingTokensForReward.add(rewardTokens);

            remainingAmount = _amount.sub(fees);

            super._transfer(_from, address(this), fees);
            uint256 tokensToSwap = balanceOf(address(this)).sub(
                pendingTokensForReward
            );

            if (tokensToSwap > minContractTokensToSwap) {
                if (!swapAll) {
                    tokensToSwap = minContractTokensToSwap;
                }

                distributeTokensEth(tokensToSwap);
            }
            if (pendingTokensForReward > minRewardTokensToSwap) {
                swapAndSendDividends(pendingTokensForReward);
            }

            emit SellFees(_from, address(this), fees);
        }

        return remainingAmount;
    }

    function distributeTokensEth(uint256 _tokenAmount) private {
        uint256 tokensForLiquidity = _tokenAmount.mul(autoLP).div(100);

        uint256 halfLiquidity = tokensForLiquidity.div(2);
        uint256 tokensForSwap = _tokenAmount.sub(halfLiquidity);

        uint256 totalEth = swapTokensForEth(tokensForSwap);

        uint256 ethForAddLP = totalEth.mul(autoLP).div(100);
        uint256 devFeesToSend = totalEth.mul(devFee).div(100);
        uint256 marketingFeesToSend = totalEth.mul(marketingFee).div(100);
        uint256 remainingEthForFees = totalEth
            .sub(ethForAddLP)
            .sub(devFeesToSend)
            .sub(marketingFeesToSend);
        devFeesToSend = devFeesToSend.add(remainingEthForFees);

        sendEthToWallets(devFeesToSend, marketingFeesToSend);

        if (halfLiquidity > 0 && ethForAddLP > 0) {
            addLiquidity(halfLiquidity, ethForAddLP);
        }
    }

    function sendEthToWallets(uint256 _devFees, uint256 _marketingFees)
        private
    {
        if (_devFees > 0) {
            payable(devWalletAddress).transfer(_devFees);
        }
        if (_marketingFees > 0) {
            payable(marketingWalletAddress).transfer(_marketingFees);
        }
        emit DistributeFees(_devFees, _marketingFees);
    }

    function swapTokensForEth(uint256 _tokenAmount) private returns (uint256) {
        uint256 initialEthBalance = address(this).balance;
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), _tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            _tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 receivedEth = address(this).balance.sub(initialEthBalance);

        emit SwapTokensForEth(_tokenAmount, receivedEth);
        return receivedEth;
    }

    function swapEthForTokens(uint256 _ethAmount, address _to)
        private
        returns (uint256)
    {
        uint256 initialTokenBalance = balanceOf(address(this));
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);

        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{
            value: _ethAmount
        }(0, path, _to, block.timestamp);

        uint256 receivedTokens = balanceOf(address(this)).sub(
            initialTokenBalance
        );

        emit SwapEthForTokens(_ethAmount, receivedTokens);
        return receivedTokens;
    }

    function addLiquidity(uint256 _tokenAmount, uint256 _ethAmount) private {
        _approve(address(this), address(uniswapV2Router), _tokenAmount);
        uniswapV2Router.addLiquidityETH{value: _ethAmount}(
            address(this),
            _tokenAmount,
            0,
            0,
            owner(),
            block.timestamp
        );
        emit AddLiquidity(_tokenAmount, _ethAmount);
    }

    function swapAndSendDividends(uint256 _tokenAmount) private {
        uint256 dividends = swapTokensForEth(_tokenAmount);

        pendingTokensForReward = pendingTokensForReward.sub(_tokenAmount);
        uint256 totalEthToSend = dividends.add(pendingEthReward);

        (bool success, ) = address(dividendTracker).call{value: totalEthToSend}(
            ""
        );

        if (success) {
            emit SendDividends(dividends);
        } else {
            pendingEthReward = pendingEthReward.add(dividends);
        }
    }

    function isExcludeByInitialSell(address _ad, uint256 _tokenAmount)
        private
        returns (bool)
    {
        if (
            initialSellTimestamp[_ad] + minutesIntervalPerSell <=
            block.timestamp
        ) {
            initialSellTimestamp[_ad] = block.timestamp;
            if (
                _tokenAmount <=
                balanceOf(_ad).mul(sellPercentageOfHolding).div(100)
            ) {
                return true;
            }
        }

        return false;
    }

    function availableContractTokenBalance() public view returns (uint256) {
        return balanceOf(address(this)).sub(pendingTokensForReward);
    }

    function getHistory(
        address _account,
        uint256 _limit,
        uint256 _pageNumber
    ) external view returns (ClaimedEth[] memory) {
        require(_limit > 0 && _pageNumber > 0, "Diamond: Invalid arguments");
        uint256 userClaimedCount = userClaimedIds[_account].length;
        uint256 end = _pageNumber * _limit;
        uint256 start = end - _limit;
        require(start < userClaimedCount, "Diamond: Out of range");
        uint256 limit = _limit;
        if (end > userClaimedCount) {
            end = userClaimedCount;
            limit = userClaimedCount % _limit;
        }

        ClaimedEth[] memory myClaimedEth = new ClaimedEth[](limit);
        uint256 currentIndex = 0;
        for (uint256 i = start; i < end; i++) {
            uint256 hId = userClaimedIds[_account][i];
            myClaimedEth[currentIndex] = claimedEthMap[hId];
            currentIndex += 1;
        }
        return myClaimedEth;
    }

    function getHistoryCount(address _account) external view returns (uint256) {
        return userClaimedIds[_account].length;
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_devWalletAddress","type":"address"},{"internalType":"address","name":"_marketingWalletAddress","type":"address"},{"internalType":"address","name":"_myBagsTokenAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountTokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountEth","type":"uint256"}],"name":"AddLiquidity","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_ethAmount","type":"uint256"}],"name":"AddRewardPool","type":"event"},{"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":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"BuyFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"devEth","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"remarketingEth","type":"uint256"}],"name":"DistributeFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"ethAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"DividendClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"SellFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SendDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"sentEth","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"receivedTokens","type":"uint256"}],"name":"SwapEthForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"sentTokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"receivedEth","type":"uint256"}],"name":"SwapTokensForEth","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"availableContractTokenBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"dividendTokenBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendTracker","outputs":[{"internalType":"contract DiamondDividendTracker","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getAccount","outputs":[{"internalType":"uint256","name":"withdrawableDividends","type":"uint256"},{"internalType":"uint256","name":"withdrawnDividends","type":"uint256"},{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_limit","type":"uint256"},{"internalType":"uint256","name":"_pageNumber","type":"uint256"}],"name":"getHistory","outputs":[{"components":[{"internalType":"uint256","name":"ethAmount","type":"uint256"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"internalType":"struct Diamond.ClaimedEth[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getHistoryCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfDividendTokenHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_ad","type":"address"}],"name":"getTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalDividendsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"initialBuyTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"initialSellTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludeFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExludeFromWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastTransfer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxIndexMinutesRange","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minContractTokensToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minRewardTokensToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minutesIntervalPerSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"}],"name":"minutesRangeTaxes","outputs":[{"internalType":"uint256","name":"from","type":"uint256"},{"internalType":"uint256","name":"to","type":"uint256"},{"internalType":"uint256","name":"tax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_launchTime","type":"uint256"},{"internalType":"uint256","name":"_minutesForPrivateSale","type":"uint256"}],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingEthReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingTokensForReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reinvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellPercentageOfHolding","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_bots","type":"address[]"}],"name":"setBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isExludeFromFee","type":"bool"}],"name":"setExcludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isExludeFromDividends","type":"bool"}],"name":"setExludeFromDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isExludeFromWalletLimit","type":"bool"}],"name":"setExludeFromWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_maxIndex","type":"uint8"}],"name":"setMaxIndexMinutesRange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numToken","type":"uint256"}],"name":"setMinContractTokensToSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numToken","type":"uint256"}],"name":"setMinRewardTokensToSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumMyBagsToken","type":"uint256"}],"name":"setMinimumMyBagsToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_index","type":"uint8"},{"internalType":"uint256","name":"_from","type":"uint256"},{"internalType":"uint256","name":"_to","type":"uint256"},{"internalType":"uint256","name":"_tax","type":"uint256"}],"name":"setMinutesRangeTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sellPercentageOfHolding","type":"uint256"},{"internalType":"uint256","name":"_minutesIntervalPerSell","type":"uint256"}],"name":"setPercentageOfHolding","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isWapAll","type":"bool"}],"name":"setSwapAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_baseBuyTax","type":"uint256"},{"internalType":"uint256","name":"_baseSellTax","type":"uint256"},{"internalType":"uint256","name":"_autoLP","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devWallet","type":"address"},{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"setWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_percentage","type":"uint256"}],"name":"setWalletLimitPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"withdrawableDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600780546001600160a81b031916737a250d5630b4cf539739df2c5dacb4c659f2488d17905560006008556a52b7d2dcc80cd2e4000000600b556032601155600a6013556005601490815560155562069780601655601b601881905560286019556021601a556b06765c793fa10079d00000009055601c805460ff1916905569021e19e0c9bab24000006022819055602555348015620000a357600080fd5b5060405162005ac038038062005ac0833981016040819052620000c691620007c1565b6040805180820182526007815266111a585b5bdb9960ca1b6020808301918252835180850190945260088452674449414d4f4e445360c01b9084015281519192916200011591600391620006f0565b5080516200012b906004906020840190620006f0565b5050600580546001600160a01b031916339081179091556040519091506000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3601f8054610100600160a81b0319166101006001600160a01b038681169190910291909117909155602080546001600160a01b0319908116858416178255600a80549091168484161790556005805483166000908152600f83526040808220805460ff199081166001908117909255308085528385208054831684179055945487168452601290955281832080548616821790559282528082208054851684179055600754909416815283902080549092161790555162000231906200077f565b604051809103906000f0801580156200024e573d6000803e3d6000fd5b50602180546001600160a01b0319166001600160a01b0392909216918217905560405163031e79db60e41b8152600481018290526331e79db090602401600060405180830381600087803b158015620002a657600080fd5b505af1158015620002bb573d6000803e3d6000fd5b505060215460405163031e79db60e41b81523060048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b1580156200030557600080fd5b505af11580156200031a573d6000803e3d6000fd5b50506021546001600160a01b031691506331e79db09050620003446005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b1580156200038657600080fd5b505af11580156200039b573d6000803e3d6000fd5b505060215460075460405163031e79db60e41b81526001600160a01b039182166004820152911692506331e79db09150602401600060405180830381600087803b158015620003e957600080fd5b505af1158015620003fe573d6000803e3d6000fd5b5050601e602081905260007f873299c6a6c39b8b92f01922bb622df4a3236ea2876aac2da76f6c092cf7e98f819055620697807f873299c6a6c39b8b92f01922bb622df4a3236ea2876aac2da76f6c092cf7e9908190557f873299c6a6c39b8b92f01922bb622df4a3236ea2876aac2da76f6c092cf7e991929092557f8a1ea6ccfdf9f988bdc16303c81231f9b192785454b34880c28e5c30362354c591909155620d2f007f8a1ea6ccfdf9f988bdc16303c81231f9b192785454b34880c28e5c30362354c681905560197f8a1ea6ccfdf9f988bdc16303c81231f9b192785454b34880c28e5c30362354c7557f4bbb14a9b8bdd7baf7e45936eef68b1d3b69ec665e4d3d9f22d086627a2b0880556213c6807f4bbb14a9b8bdd7baf7e45936eef68b1d3b69ec665e4d3d9f22d086627a2b088181905560147f4bbb14a9b8bdd7baf7e45936eef68b1d3b69ec665e4d3d9f22d086627a2b0882556004918290527f2eca6469c5988648711d819e241e59ec9e94a879e5d491ce337260f9e754141255621a5e007f2eca6469c5988648711d819e241e59ec9e94a879e5d491ce337260f9e754141355600f7f2eca6469c5988648711d819e241e59ec9e94a879e5d491ce337260f9e754141455601f805460ff191690911790555050600554620005ff906001600160a01b03166c0c9f2c9cd04674edea4000000062000608565b5050506200086e565b6001600160a01b038216620006635760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b80600260008282546200067791906200080b565b90915550506001600160a01b03821660009081526020819052604081208054839290620006a69084906200080b565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b828054620006fe9062000832565b90600052602060002090601f0160209004810192826200072257600085556200076d565b82601f106200073d57805160ff19168380011785556200076d565b828001600101855582156200076d579182015b828111156200076d57825182559160200191906001019062000750565b506200077b9291506200078d565b5090565b6119b9806200410783390190565b5b808211156200077b57600081556001016200078e565b80516001600160a01b0381168114620007bc57600080fd5b919050565b600080600060608486031215620007d757600080fd5b620007e284620007a4565b9250620007f260208501620007a4565b91506200080260408501620007a4565b90509250925092565b600082198211156200082d57634e487b7160e01b600052601160045260246000fd5b500190565b600181811c908216806200084757607f821691505b6020821081036200086857634e487b7160e01b600052602260045260246000fd5b50919050565b613889806200087e6000396000f3fe6080604052600436106103855760003560e01c80638aaa9389116101d1578063b579b29411610102578063e3402c67116100a0578063ec29f4e91161006f578063ec29f4e914610ab4578063f429389014610ae1578063fbcbc0f114610af6578063fdb5a03e14610b1657600080fd5b8063e3402c6714610a31578063e4441f0a14610a47578063e5fc10ed14610a74578063e7a919f914610a9457600080fd5b8063d2971059116100dc578063d297105914610995578063d539be5f146109ab578063dd62ed3e146109cb578063de30aad114610a1157600080fd5b8063b579b2941461094a578063b652ef3b14610960578063ba762ddd1461098057600080fd5b8063a457c2d71161016f578063af9549e011610149578063af9549e0146108ba578063b1fdb11b146108da578063b485430b14610910578063b515566a1461092a57600080fd5b8063a457c2d71461085a578063a8b9d2401461087a578063a9059cbb1461089a57600080fd5b806390677833116101ab57806390677833146107a157806395d89b41146107ce578063963bafa0146107e3578063a2923a0f1461083a57600080fd5b80638aaa9389146107335780638da5cb5b146107535780638e5916b21461077157600080fd5b80634297a7ca116102b657806366cc702611610254578063715018a611610223578063715018a6146106d25780637c4b492e146106e75780638954fb4a146106fd57806389a5c6911461071d57600080fd5b806366cc7026146106525780636843cd84146106725780636973cd091461069257806370a08231146106b257600080fd5b80635b6612ad116102905780635b6612ad146105da5780635b683e66146106075780635fcefa421461061d57806364b0f6531461063d57600080fd5b80634297a7ca146105805780634e71d92d146105b057806351bc3c85146105c557600080fd5b806323b872dd11610323578063313ce567116102fd578063313ce567146104f457806339509351146105165780633bbac579146105365780633e9ffbea1461056657600080fd5b806323b872dd146104875780632c1f5216146104a757806330bb4cff146104df57600080fd5b806312dfbd331161035f57806312dfbd3314610410578063168380131461043257806318160ddd146104525780631c08bc5d1461046757600080fd5b806306fdde03146103915780630866e0e9146103bc578063095ea7b3146103e057600080fd5b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6610b2b565b6040516103b39190613218565b60405180910390f35b3480156103c857600080fd5b506103d260155481565b6040519081526020016103b3565b3480156103ec57600080fd5b506104006103fb366004613285565b610bbd565b60405190151581526020016103b3565b34801561041c57600080fd5b5061043061042b3660046132b1565b610bd7565b005b34801561043e57600080fd5b5061043061044d3660046132ca565b610c0f565b34801561045e57600080fd5b506002546103d2565b34801561047357600080fd5b506104306104823660046132b1565b610c50565b34801561049357600080fd5b506104006104a23660046132ec565b610c7f565b3480156104b357600080fd5b506021546104c7906001600160a01b031681565b6040516001600160a01b0390911681526020016103b3565b3480156104eb57600080fd5b506103d2610ca3565b34801561050057600080fd5b5060125b60405160ff90911681526020016103b3565b34801561052257600080fd5b50610400610531366004613285565b610d16565b34801561054257600080fd5b5061040061055136600461332d565b60106020526000908152604090205460ff1681565b34801561057257600080fd5b50601c546104009060ff1681565b34801561058c57600080fd5b5061040061059b36600461332d565b60126020526000908152604090205460ff1681565b3480156105bc57600080fd5b50610430610d55565b3480156105d157600080fd5b50610430610d62565b3480156105e657600080fd5b506103d26105f536600461332d565b60236020526000908152604090205481565b34801561061357600080fd5b506103d260145481565b34801561062957600080fd5b5061043061063836600461334a565b610db2565b34801561064957600080fd5b506103d2610e10565b34801561065e57600080fd5b5061043061066d3660046132b1565b610e5a565b34801561067e57600080fd5b506103d261068d36600461332d565b610e89565b34801561069e57600080fd5b506104306106ad366004613385565b610ef9565b3480156106be57600080fd5b506103d26106cd36600461332d565b610f5b565b3480156106de57600080fd5b50610430610f76565b3480156106f357600080fd5b506103d260245481565b34801561070957600080fd5b506104306107183660046133cc565b610fea565b34801561072957600080fd5b506103d2601b5481565b34801561073f57600080fd5b5061043061074e3660046132b1565b6110ca565b34801561075f57600080fd5b506005546001600160a01b03166104c7565b34801561077d57600080fd5b5061040061078c36600461332d565b600f6020526000908152604090205460ff1681565b3480156107ad57600080fd5b506103d26107bc36600461332d565b601d6020526000908152604090205481565b3480156107da57600080fd5b506103a66110f9565b3480156107ef57600080fd5b5061081f6107fe366004613410565b601e6020526000908152604090208054600182015460029092015490919083565b604080519384526020840192909252908201526060016103b3565b34801561084657600080fd5b5061043061085536600461342b565b611108565b34801561086657600080fd5b50610400610875366004613285565b611183565b34801561088657600080fd5b506103d261089536600461332d565b611215565b3480156108a657600080fd5b506104006108b5366004613285565b611248565b3480156108c657600080fd5b506104306108d53660046133cc565b611256565b3480156108e657600080fd5b506103d26108f536600461332d565b6001600160a01b031660009081526029602052604090205490565b34801561091c57600080fd5b50601f546105049060ff1681565b34801561093657600080fd5b50610430610945366004613464565b6112ab565b34801561095657600080fd5b506103d260165481565b34801561096c57600080fd5b506103d261097b36600461332d565b6113d6565b34801561098c57600080fd5b506103d26114a4565b3480156109a157600080fd5b506103d260265481565b3480156109b757600080fd5b506104306109c6366004613410565b6114b5565b3480156109d757600080fd5b506103d26109e6366004613385565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a1d57600080fd5b50610430610a2c3660046134d9565b6114f5565b348015610a3d57600080fd5b506103d260255481565b348015610a5357600080fd5b506103d2610a6236600461332d565b60176020526000908152604090205481565b348015610a8057600080fd5b50610430610a8f3660046133cc565b611532565b348015610aa057600080fd5b50610430610aaf3660046132ca565b611587565b348015610ac057600080fd5b50610ad4610acf3660046134f6565b61191d565b6040516103b3919061352b565b348015610aed57600080fd5b50610430611b4e565b348015610b0257600080fd5b5061081f610b1136600461332d565b611c1b565b348015610b2257600080fd5b50610430611cac565b606060038054610b3a90613584565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6690613584565b8015610bb35780601f10610b8857610100808354040283529160200191610bb3565b820191906000526020600020905b815481529060010190602001808311610b9657829003601f168201915b5050505050905090565b600033610bcb818585611cb7565b60019150505b92915050565b6005546001600160a01b03163314610c0a5760405162461bcd60e51b8152600401610c01906135be565b60405180910390fd5b601b55565b6005546001600160a01b03163314610c395760405162461bcd60e51b8152600401610c01906135be565b6015829055610c4981603c611ddb565b6016555050565b6005546001600160a01b03163314610c7a5760405162461bcd60e51b8152600401610c01906135be565b602555565b600033610c8d858285611dee565b610c98858585611e7a565b506001949350505050565b602154604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa158015610ced573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1191906135f3565b905090565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190610bcb9082908690610d50908790613622565b611cb7565b610d603360006123b1565b565b6005546001600160a01b03163314610d8c5760405162461bcd60e51b8152600401610c01906135be565b6000610da3602454610d9d30610f5b565b9061264c565b9050610dae81612658565b5050565b6005546001600160a01b03163314610ddc5760405162461bcd60e51b8152600401610c01906135be565b600a8511158015610df05750600560145411155b610df957600080fd5b601394909455601492909255601855601955601a55565b602154604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde9160048083019260209291908290030181865afa158015610ced573d6000803e3d6000fd5b6005546001600160a01b03163314610e845760405162461bcd60e51b8152600401610c01906135be565b600b55565b6021546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b602060405180830381865afa158015610ed5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd191906135f3565b6005546001600160a01b03163314610f235760405162461bcd60e51b8152600401610c01906135be565b601f8054610100600160a81b0319166101006001600160a01b0394851602179055602080546001600160a01b03191691909216179055565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b03163314610fa05760405162461bcd60e51b8152600401610c01906135be565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146110145760405162461bcd60e51b8152600401610c01906135be565b801561107e5760215460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db0906024015b600060405180830381600087803b15801561106257600080fd5b505af1158015611076573d6000803e3d6000fd5b505050505050565b6021546001600160a01b03166318c18adb8361109981610f5b565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401611048565b6005546001600160a01b031633146110f45760405162461bcd60e51b8152600401610c01906135be565b601155565b606060048054610b3a90613584565b6005546001600160a01b031633146111325760405162461bcd60e51b8152600401610c01906135be565b61113d83603c611ddb565b60ff85166000908152601e602052604090205561115b82603c611ddb565b60ff9094166000908152601e6020526040902060018101949094556002909301929092555050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190838110156112085760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c01565b610c988286868403611cb7565b6021546040516302a2e74960e61b81526001600160a01b038381166004830152600092169063a8b9d24090602401610eb8565b600033610bcb818585611e7a565b6005546001600160a01b031633146112805760405162461bcd60e51b8152600401610c01906135be565b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146112d55760405162461bcd60e51b8152600401610c01906135be565b60005b818110156113d1576009546001600160a01b03168383838181106112fe576112fe61363a565b9050602002016020810190611313919061332d565b6001600160a01b03161415801561136457506007546001600160a01b03168383838181106113435761134361363a565b9050602002016020810190611358919061332d565b6001600160a01b031614155b156113bf576001601060008585858181106113815761138161363a565b9050602002016020810190611396919061332d565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790555b806113c981613650565b9150506112d8565b505050565b60145460009060015b601f5460ff9081169082161161149d5760ff81166000908152601e60209081526040808320546001600160a01b0388168452601d90925290912054429161142591613622565b1115801561146a575060ff81166000908152601e60209081526040808320600101546001600160a01b0388168452601d90925290912054429161146791613622565b10155b1561148b5760ff166000908152601e60205260409020600201549392505050565b8061149581613669565b9150506113df565b5092915050565b6000610d11602454610d9d30610f5b565b6005546001600160a01b031633146114df5760405162461bcd60e51b8152600401610c01906135be565b601f805460ff191660ff92909216919091179055565b6005546001600160a01b0316331461151f5760405162461bcd60e51b8152600401610c01906135be565b601c805460ff1916911515919091179055565b6005546001600160a01b0316331461155c5760405162461bcd60e51b8152600401610c01906135be565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146115b15760405162461bcd60e51b8152600401610c01906135be565b600754600160a01b900460ff161561160b5760405162461bcd60e51b815260206004820181905260248201527f4469616d6f6e643a2054726164696e6720697320616c7265616479206f70656e6044820152606401610c01565b42821161165a5760405162461bcd60e51b815260206004820152601a60248201527f4469616d6f6e643a20496e76616c69642074696d657374616d700000000000006044820152606401610c01565b600760009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d19190613688565b6001600160a01b031663c9c6539630600760009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611733573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117579190613688565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156117a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c89190613688565b600980546001600160a01b0319166001600160a01b0392831690811782556000908152600e602052604090819020805460ff191660011790556021549154905163031e79db60e41b815290831660048201529116906331e79db090602401600060405180830381600087803b15801561184057600080fd5b505af1158015611854573d6000803e3d6000fd5b5050505061186a61186430610f5b565b4761280d565b60095460075460405163095ea7b360e01b81526001600160a01b039182166004820152600019602482015291169063095ea7b3906044016020604051808303816000875af11580156118c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e491906136a5565b506007805460ff60a01b1916600160a01b179055600c82905561191261190b82603c611ddb565b839061291c565b600d55505043600855565b606060008311801561192f5750600082115b61197b5760405162461bcd60e51b815260206004820152601a60248201527f4469616d6f6e643a20496e76616c696420617267756d656e74730000000000006044820152606401610c01565b6001600160a01b0384166000908152602960205260408120549061199f85856136c2565b905060006119ad86836136e1565b90508281106119f65760405162461bcd60e51b81526020600482015260156024820152744469616d6f6e643a204f7574206f662072616e676560581b6044820152606401610c01565b8583831115611a0f57839250611a0c878461370e565b90505b60008167ffffffffffffffff811115611a2a57611a2a613722565b604051908082528060200260200182016040528015611a7f57816020015b611a6c60405180606001604052806000815260200160008152602001600081525090565b815260200190600190039081611a485790505b5090506000835b85811015611b3f576001600160a01b038b166000908152602960205260408120805483908110611ab857611ab861363a565b90600052602060002001549050602860008281526020019081526020016000206040518060600160405290816000820154815260200160018201548152602001600282015481525050848481518110611b1357611b1361363a565b6020908102919091010152611b29600184613622565b9250508080611b3790613650565b915050611a86565b50909998505050505050505050565b6005546001600160a01b03163314611b785760405162461bcd60e51b8152600401610c01906135be565b6000611b8f6026544761264c90919063ffffffff16565b90506000611bc0611bac601854606461264c90919063ffffffff16565b601954611bba908590611ddb565b90612928565b90506000611beb611bdd601854606461264c90919063ffffffff16565b601a54611bba908690611ddb565b90506000611bfd82610d9d868661264c565b9050611c09838261291c565b9250611c158383612934565b50505050565b60215460405163fbcbc0f160e01b81526001600160a01b038381166004830152600092839283929091169063fbcbc0f1906024016040805180830381865afa158015611c6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c8f9190613738565b90935091508282611c9f86610f5b565b9250925092509193909250565b610d603360016123b1565b6001600160a01b038316611d195760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c01565b6001600160a01b038216611d7a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c01565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000611de782846136c2565b9392505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114611c155781811015611e6d5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610c01565b611c158484848403611cb7565b6001600160a01b03831660009081526010602052604090205460ff16158015611ebc57506001600160a01b03821660009081526010602052604090205460ff16155b611ec557600080fd5b601154600754829190600160a01b900460ff168015611f1e57506001600160a01b0385166000908152600e602052604090205460ff1680611f1e57506001600160a01b0384166000908152600e602052604090205460ff165b8015611f4357506001600160a01b0385166000908152600f602052604090205460ff16155b8015611f6857506001600160a01b0384166000908152600f602052604090205460ff16155b156120bf5742600c541115611fd45760405162461bcd60e51b815260206004820152602c60248201527f4469616d6f6e643a205072697661746520616e64207075626c69632073616c6560448201526b1034b9903737ba1037b832b760a11b6064820152608401610c01565b42600c5411158015611fe7575042600d54115b156120b157600a6011819055600b5490546040516370a0823160e01b81526001600160a01b038781166004830152909116906370a0823190602401602060405180830381865afa15801561203f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206391906135f3565b10156120b15760405162461bcd60e51b815260206004820181905260248201527f4469616d6f6e643a204e6f7420656e6f75676820244d7942616773546f6b656e6044820152606401610c01565b6120bc8585856129f2565b91505b6001600160a01b0384166000908152601d602052604081205490036120fa576001600160a01b0384166000908152601d602052604090204290555b6001600160a01b0384166000908152600e602052604090205460ff1615801561213c57506001600160a01b03841660009081526012602052604090205460ff16155b156121d25760006121568361215087610f5b565b9061291c565b9050612173612710611bba60115461216d60025490565b90611ddb565b8111156121d05760405162461bcd60e51b815260206004820152602560248201527f4469616d6f6e643a2057616c6c65742062616c616e6365206c696d69742072656044820152641858da195960da1b6064820152608401610c01565b505b6121dd858584612c4c565b6011819055602154604051631b4a89ab60e11b81526001600160a01b03878116600483015290911690633695135690602401602060405180830381865afa15801561222c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061225091906136a5565b6122c8576021546001600160a01b031663e30443bc8661226f81610f5b565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156122b557600080fd5b505af19250505080156122c6575060015b505b602154604051631b4a89ab60e11b81526001600160a01b03868116600483015290911690633695135690602401602060405180830381865afa158015612312573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061233691906136a5565b6123aa576021546001600160a01b031663e30443bc8561235581610f5b565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561239b57600080fd5b505af192505050801561107657505b5050505050565b6021546040516302a2e74960e61b81526001600160a01b038481166004830152600092169063a8b9d24090602401602060405180830381865afa1580156123fc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242091906135f3565b9050600081116124885760405162461bcd60e51b815260206004820152602d60248201527f4469616d6f6e643a20436c61696d657220686173206e6f20776974686472617760448201526c18589b1948191a5d9a59195b99609a1b6064820152608401610c01565b6000808361250e576021546040516352b5f81d60e01b81526001600160a01b03878116600483018190526024830152909116906352b5f81d906044016020604051808303816000875af11580156124e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061250791906135f3565b9150612599565b6021546040516352b5f81d60e01b81526001600160a01b038781166004830152306024830152909116906352b5f81d906044016020604051808303816000875af1158015612560573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258491906135f3565b91508115612599576125968286612e1a565b90505b81156123aa576125ad602780546001019055565b60006125b860275490565b60008181526028602090815260408083208781556001808201889055426002909201919091556001600160a01b038b1680855260298452828520805492830181558552938390200184905580518781529182018690528101919091529091507f67dd3d116bf53e0ddda53bb148a5fdc129854e1c507c0eeda9190049a9bbc84f9060600160405180910390a1505050505050565b6000611de782846136e1565b60408051600280825260608201835260009247928492909160208301908036833701905050905030816000815181106126935761269361363a565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156126ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127109190613688565b816001815181106127235761272361363a565b6001600160a01b0392831660209182029290920101526007546127499130911686611cb7565b60075460405163791ac94760e01b81526001600160a01b039091169063791ac947906127829087906000908690309042906004016137a0565b600060405180830381600087803b15801561279c57600080fd5b505af11580156127b0573d6000803e3d6000fd5b5050505060006127c9834761264c90919063ffffffff16565b60408051878152602081018390529192507f4a6c12eb4e479a4ea28c8acad8efde466ef9bf69cf473501dd76865234496273910160405180910390a1949350505050565b6007546128259030906001600160a01b031684611cb7565b6007546001600160a01b031663f305d71982308560008061284e6005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156128b6573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906128db91906137dc565b505060408051848152602081018490527fcb1652de9aeec38545fc281847b3dbfc89aab56dfa907b1ab68466f602c36fb49250015b60405180910390a15050565b6000611de78284613622565b6000611de7828461380a565b811561297a57601f546040516101009091046001600160a01b0316906108fc8415029084906000818181858888f19350505050158015612978573d6000803e3d6000fd5b505b80156129bc576020546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156129ba573d6000803e3d6000fd5b505b60408051838152602081018390527f916ad8171ef8c567c7790377a142f0200f9565940680c06e30dd105cfd9249689101612910565b6001600160a01b0383166000908152600e60205260408120548190819060ff1680612a3557506001600160a01b0385166000908152600e602052604090205460ff165b612a815760405162461bcd60e51b815260206004820152601f60248201527f4469616d6f6e643a204e6f206d61726b6574206d616b65727320666f756e64006044820152606401610c01565b6001600160a01b0386166000908152600e602052604090205460ff1615612b2357612abc6064611bba60135487611ddb90919063ffffffff16565b9150612ac8848361264c565b9050612ad5863084612c4c565b604080516001600160a01b03881681523060208201529081018390527f6b0b46d0273ce53f1de696d2100b35dd3a405dcecbcbeede66215d858d5c401d9060600160405180910390a1612c43565b6000612b2f8786612fcc565b15612b3d5750601454612b49565b612b46876113d6565b90505b612b586064611bba8784611ddb565b92506000612b806064611bba612b796014548661264c90919063ffffffff16565b8990611ddb565b602454909150612b90908261291c565b602455612b9d868561264c565b9250612baa883086612c4c565b6000612bbb602454610d9d30610f5b565b9050601b54811115612bdf57601c5460ff16612bd65750601b545b612bdf81613044565b6025546024541115612bf657612bf660245461313a565b604080516001600160a01b038b1681523060208201529081018690527f4ab5e0df8ff1605133dbdd1b8e3f52edb9539abe64595f6f70b30d2fea7f204a9060600160405180910390a15050505b95945050505050565b6001600160a01b038316612cb05760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c01565b6001600160a01b038216612d125760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c01565b6001600160a01b03831660009081526020819052604090205481811015612d8a5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c01565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612dc1908490613622565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612e0d91815260200190565b60405180910390a3611c15565b600080612e2630610f5b565b60408051600280825260608201835292935060009290916020830190803683375050600754604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612e95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eb99190613688565b81600081518110612ecc57612ecc61363a565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110612f0057612f0061363a565b6001600160a01b03928316602091820292909201015260075460405163b6f9de9560e01b815291169063b6f9de95908790612f469060009086908a90429060040161381e565b6000604051808303818588803b158015612f5f57600080fd5b505af1158015612f73573d6000803e3d6000fd5b50505050506000612f8783610d9d30610f5b565b60408051888152602081018390529192507f2d5c8efb676a77fc04b6b50a19f6ccbf08ee66df0202de33576485f1f77b4b69910160405180910390a195945050505050565b6016546001600160a01b03831660009081526017602052604081205490914291612ff69190613622565b1161303b576001600160a01b038316600090815260176020526040902042905560155461302d90606490611bba9061216d87610f5b565b821161303b57506001610bd1565b50600092915050565b60006130606064611bba60185485611ddb90919063ffffffff16565b9050600061306f826002612928565b9050600061307d848361264c565b9050600061308a82612658565b905060006130a86064611bba60185485611ddb90919063ffffffff16565b905060006130c66064611bba60195486611ddb90919063ffffffff16565b905060006130e46064611bba601a5487611ddb90919063ffffffff16565b905060006130f882610d9d8581898961264c565b9050613104838261291c565b92506131108383612934565b6000871180156131205750600084115b1561312f5761312f878561280d565b505050505050505050565b600061314582612658565b602454909150613155908361264c565b60245560265460009061316990839061291c565b6021546040519192506000916001600160a01b039091169083908381818185875af1925050503d80600081146131bb576040519150601f19603f3d011682016040523d82523d6000602084013e6131c0565b606091505b505090508015613202576040518381527fb0cc2628d6d644cf6be9d8110e142297ac910d6d8026d795a99f272fd9ad60b19060200160405180910390a1611c15565b60265461320f908461291c565b60265550505050565b600060208083528351808285015260005b8181101561324557858101830151858201604001528201613229565b81811115613257576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461328257600080fd5b50565b6000806040838503121561329857600080fd5b82356132a38161326d565b946020939093013593505050565b6000602082840312156132c357600080fd5b5035919050565b600080604083850312156132dd57600080fd5b50508035926020909101359150565b60008060006060848603121561330157600080fd5b833561330c8161326d565b9250602084013561331c8161326d565b929592945050506040919091013590565b60006020828403121561333f57600080fd5b8135611de78161326d565b600080600080600060a0868803121561336257600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000806040838503121561339857600080fd5b82356133a38161326d565b915060208301356133b38161326d565b809150509250929050565b801515811461328257600080fd5b600080604083850312156133df57600080fd5b82356133ea8161326d565b915060208301356133b3816133be565b803560ff8116811461340b57600080fd5b919050565b60006020828403121561342257600080fd5b611de7826133fa565b6000806000806080858703121561344157600080fd5b61344a856133fa565b966020860135965060408601359560600135945092505050565b6000806020838503121561347757600080fd5b823567ffffffffffffffff8082111561348f57600080fd5b818501915085601f8301126134a357600080fd5b8135818111156134b257600080fd5b8660208260051b85010111156134c757600080fd5b60209290920196919550909350505050565b6000602082840312156134eb57600080fd5b8135611de7816133be565b60008060006060848603121561350b57600080fd5b83356135168161326d565b95602085013595506040909401359392505050565b602080825282518282018190526000919060409081850190868401855b828110156135775781518051855286810151878601528501518585015260609093019290850190600101613548565b5091979650505050505050565b600181811c9082168061359857607f821691505b6020821081036135b857634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561360557600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156136355761363561360c565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600182016136625761366261360c565b5060010190565b600060ff821660ff810361367f5761367f61360c565b60010192915050565b60006020828403121561369a57600080fd5b8151611de78161326d565b6000602082840312156136b757600080fd5b8151611de7816133be565b60008160001904831182151516156136dc576136dc61360c565b500290565b6000828210156136f3576136f361360c565b500390565b634e487b7160e01b600052601260045260246000fd5b60008261371d5761371d6136f8565b500690565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561374b57600080fd5b505080516020909101519092909150565b600081518084526020808501945080840160005b838110156137955781516001600160a01b031687529582019590820190600101613770565b509495945050505050565b85815284602082015260a0604082015260006137bf60a083018661375c565b6001600160a01b0394909416606083015250608001529392505050565b6000806000606084860312156137f157600080fd5b8351925060208401519150604084015190509250925092565b600082613819576138196136f8565b500490565b848152608060208201526000613837608083018661375c565b6001600160a01b0394909416604083015250606001529291505056fea26469706673582212202e540b5a3e7dcb0f75c128cf2474288c27365e453f8194004876824ba30e81e864736f6c634300080d003360a06040523480156200001157600080fd5b5060408051808201825260188082527f4469616d6f6e645f4469766964656e645f547261636b65720000000000000000602080840182815285518087019096529285528401528151919291839183916200006e91600391620000df565b50805162000084906004906020840190620000df565b5050600980546001600160a01b03191633908117909155604051909350600092507f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091508290a369021e19e0c9bab2400000608052620001c1565b828054620000ed9062000185565b90600052602060002090601f0160209004810192826200011157600085556200015c565b82601f106200012c57805160ff19168380011785556200015c565b828001600101855582156200015c579182015b828111156200015c5782518255916020019190600101906200013f565b506200016a9291506200016e565b5090565b5b808211156200016a57600081556001016200016f565b600181811c908216806200019a57607f821691505b602082108103620001bb57634e487b7160e01b600052602260045260246000fd5b50919050565b6080516117ce620001eb6000396000818161051c0152818161077d0152610cb101526117ce6000f3fe6080604052600436106101c65760003560e01c80636a474002116100f7578063a457c2d711610095578063be10b61411610064578063be10b6141461050a578063dd62ed3e1461053e578063e30443bc14610584578063fbcbc0f1146105a457600080fd5b8063a457c2d714610474578063a8b9d24014610494578063a9059cbb146104b4578063aafd847a146104d457600080fd5b806385a6b3ae116100d157806385a6b3ae146104015780638da5cb5b1461041757806391b89fba1461043f57806395d89b411461045f57600080fd5b80636a474002146103a157806370a08231146103b6578063715018a6146103ec57600080fd5b806327ce014711610164578063369513561161013e578063369513561461031157806339509351146103315780634e7b827f1461035157806352b5f81d1461038157600080fd5b806327ce0147146102b5578063313ce567146102d557806331e79db0146102f157600080fd5b806309bbedde116101a057806309bbedde1461023d57806318160ddd1461026057806318c18adb1461027557806323b872dd1461029557600080fd5b806303c83302146101da57806306fdde03146101e2578063095ea7b31461020d57600080fd5b366101d5576101d36105d9565b005b600080fd5b6101d36105d9565b3480156101ee57600080fd5b506101f761066c565b60405161020491906114f3565b60405180910390f35b34801561021957600080fd5b5061022d610228366004611560565b6106fe565b6040519015158152602001610204565b34801561024957600080fd5b50610252610718565b604051908152602001610204565b34801561026c57600080fd5b50600254610252565b34801561028157600080fd5b506101d3610290366004611560565b610728565b3480156102a157600080fd5b5061022d6102b036600461158c565b610839565b3480156102c157600080fd5b506102526102d03660046115cd565b61085d565b3480156102e157600080fd5b5060405160128152602001610204565b3480156102fd57600080fd5b506101d361030c3660046115cd565b6108b9565b34801561031d57600080fd5b5061022d61032c3660046115cd565b610997565b34801561033d57600080fd5b5061022d61034c366004611560565b6109e3565b34801561035d57600080fd5b5061022d61036c3660046115cd565b600d6020526000908152604090205460ff1681565b34801561038d57600080fd5b5061025261039c3660046115ea565b610a22565b3480156103ad57600080fd5b506101d3610a63565b3480156103c257600080fd5b506102526103d13660046115cd565b6001600160a01b031660009081526020819052604090205490565b3480156103f857600080fd5b506101d3610b0b565b34801561040d57600080fd5b5061025260085481565b34801561042357600080fd5b506009546040516001600160a01b039091168152602001610204565b34801561044b57600080fd5b5061025261045a3660046115cd565b610b7f565b34801561046b57600080fd5b506101f7610b8a565b34801561048057600080fd5b5061022d61048f366004611560565b610b99565b3480156104a057600080fd5b506102526104af3660046115cd565b610c2b565b3480156104c057600080fd5b5061022d6104cf366004611560565b610c57565b3480156104e057600080fd5b506102526104ef3660046115cd565b6001600160a01b031660009081526007602052604090205490565b34801561051657600080fd5b506102527f000000000000000000000000000000000000000000000000000000000000000081565b34801561054a57600080fd5b506102526105593660046115ea565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561059057600080fd5b506101d361059f366004611560565b610c65565b3480156105b057600080fd5b506105c46105bf3660046115cd565b610d93565b60408051928352602083019190915201610204565b60006105e460025490565b116105ee57600080fd5b341561066a5761062161060060025490565b61060e34600160801b610dc0565b6106189190611639565b60055490610dd3565b60055560405134815233907fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d784541165119060200160405180910390a26008546106669034610dd3565b6008555b565b60606003805461067b9061165b565b80601f01602080910402602001604051908101604052809291908181526020018280546106a79061165b565b80156106f45780601f106106c9576101008083540402835291602001916106f4565b820191906000526020600020905b8154815290600101906020018083116106d757829003601f168201915b5050505050905090565b60003361070c818585610ddf565b60019150505b92915050565b6000610723600b5490565b905090565b6009546001600160a01b0316331461075b5760405162461bcd60e51b815260040161075290611695565b60405180910390fd5b6001600160a01b0382166000908152600d60205260409020805460ff191690557f00000000000000000000000000000000000000000000000000000000000000008110610801576107ac8282610e43565b6001600160a01b0382166000908152600c602052604081205460ff1615159003610801576001600160a01b0382166000908152600c60205260409020805460ff19166001179055610801600b80546001019055565b6040516001600160a01b038316907fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b2590600090a25050565b600033610847858285610ea2565b610852858585610f2e565b506001949350505050565b6001600160a01b03811660009081526006602090815260408083205491839052822054600554600160801b926108af926108aa926108a49161089f9190610dc0565b610f8d565b90610ffb565b611007565b6107129190611639565b6009546001600160a01b031633146108e35760405162461bcd60e51b815260040161075290611695565b6001600160a01b0381166000908152600d60205260408120805460ff19166001179055610911908290610e43565b6001600160a01b0381166000908152600c602052604090205460ff161515600103610960576001600160a01b0381166000908152600c60205260409020805460ff19169055610960600b611059565b6040516001600160a01b038216907fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b2590600090a250565b6009546000906001600160a01b031633146109c45760405162461bcd60e51b815260040161075290611695565b506001600160a01b03166000908152600d602052604090205460ff1690565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919061070c9082908690610a1d9087906116ca565b610ddf565b6009546000906001600160a01b03163314610a4f5760405162461bcd60e51b815260040161075290611695565b6000610a5b84846110b0565b949350505050565b60405162461bcd60e51b815260206004820152606b60248201527f4469616d6f6e645f4469766964656e645f547261636b65723a2077697468647260448201527f61774469766964656e642064697361626c65642e20557365207468652027636c60648201527f61696d272066756e6374696f6e206f6e20746865206d61696e204469616d6f6e60848201526a321031b7b73a3930b1ba1760a91b60a482015260c401610752565b6009546001600160a01b03163314610b355760405162461bcd60e51b815260040161075290611695565b6009546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600980546001600160a01b0319169055565b600061071282610c2b565b60606004805461067b9061165b565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919083811015610c1e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610752565b6108528286868403610ddf565b6001600160a01b03811660009081526007602052604081205461071290610c518461085d565b90611206565b60003361070c818585610f2e565b6009546001600160a01b03163314610c8f5760405162461bcd60e51b815260040161075290611695565b6001600160a01b0382166000908152600d602052604090205460ff16610d35577f00000000000000000000000000000000000000000000000000000000000000008110610d3957610ce08282610e43565b6001600160a01b0382166000908152600c602052604081205460ff1615159003610d35576001600160a01b0382166000908152600c60205260409020805460ff19166001179055610d35600b80546001019055565b5050565b610d44826000610e43565b6001600160a01b0382166000908152600c602052604090205460ff161515600103610d35576001600160a01b0382166000908152600c60205260409020805460ff19169055610d35600b611059565b600080610d9f83610c2b565b6001600160a01b039093166000908152600760205260409020549293915050565b6000610dcc82846116e2565b9392505050565b6000610dcc82846116ca565b60405162461bcd60e51b815260206004820152602e60248201527f4469616d6f6e645f4469766964656e645f547261636b65723a204e6f2061707060448201526d1c9bdd985b1cc8185b1b1bddd95960921b6064820152608401610752565b505050565b6001600160a01b03821660009081526020819052604090205480821115610e82576000610e708383611206565b9050610e7c8482611212565b50505050565b80821015610e3e576000610e968284611206565b9050610e7c8482611276565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114610e7c5781811015610f215760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610752565b610e7c8484848403610ddf565b60405162461bcd60e51b815260206004820152602e60248201527f4469616d6f6e645f4469766964656e645f547261636b65723a204e6f2074726160448201526d1b9cd9995c9cc8185b1b1bddd95960921b6064820152608401610752565b60006001600160ff1b03821115610ff75760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604482015267371034b73a191a9b60c11b6064820152608401610752565b5090565b6000610dcc8284611701565b600080821215610ff75760405162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f7369746976656044820152606401610752565b8054806110a85760405162461bcd60e51b815260206004820152601b60248201527f436f756e7465723a2064656372656d656e74206f766572666c6f7700000000006044820152606401610752565b600019019055565b6000806110bc84610c2b565b905080156111fc576001600160a01b0384166000908152600760205260409020546110e79082610dd3565b6001600160a01b038516600081815260076020526040908190209290925590517feb063efb53b3790d2bc15284b59af7544466c8787c2883321ee27095647911b69061114890849087909182526001600160a01b0316602082015260400190565b60405180910390a26000836001600160a01b03168260405160006040518083038185875af1925050503d806000811461119d576040519150601f19603f3d011682016040523d82523d6000602084013e6111a2565b606091505b50509050806111f4576001600160a01b0385166000908152600760205260409020546111ce9083611206565b6001600160a01b0386166000908152600760205260408120919091559250610712915050565b509050610712565b5060009392505050565b6000610dcc8284611742565b61121c82826112ba565b61125661123761089f83600554610dc090919063ffffffff16565b6001600160a01b03841660009081526006602052604090205490611399565b6001600160a01b0390921660009081526006602052604090209190915550565b61128082826113a5565b61125661129b61089f83600554610dc090919063ffffffff16565b6001600160a01b03841660009081526006602052604090205490610ffb565b6001600160a01b0382166113105760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610752565b806002600082825461132291906116ca565b90915550506001600160a01b0382166000908152602081905260408120805483929061134f9084906116ca565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000610dcc8284611759565b6001600160a01b0382166114055760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610752565b6001600160a01b038216600090815260208190526040902054818110156114795760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610752565b6001600160a01b03831660009081526020819052604081208383039055600280548492906114a8908490611742565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b600060208083528351808285015260005b8181101561152057858101830151858201604001528201611504565b81811115611532576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461155d57600080fd5b50565b6000806040838503121561157357600080fd5b823561157e81611548565b946020939093013593505050565b6000806000606084860312156115a157600080fd5b83356115ac81611548565b925060208401356115bc81611548565b929592945050506040919091013590565b6000602082840312156115df57600080fd5b8135610dcc81611548565b600080604083850312156115fd57600080fd5b823561160881611548565b9150602083013561161881611548565b809150509250929050565b634e487b7160e01b600052601160045260246000fd5b60008261165657634e487b7160e01b600052601260045260246000fd5b500490565b600181811c9082168061166f57607f821691505b60208210810361168f57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600082198211156116dd576116dd611623565b500190565b60008160001904831182151516156116fc576116fc611623565b500290565b600080821280156001600160ff1b038490038513161561172357611723611623565b600160ff1b839003841281161561173c5761173c611623565b50500190565b60008282101561175457611754611623565b500390565b60008083128015600160ff1b85018412161561177757611777611623565b6001600160ff1b038401831381161561179257611792611623565b5050039056fea2646970667358221220a1a3e832f086de6cb61f3b31813c5ae482d8dd06bf6b057ed57fae724de6effc64736f6c634300080d00330000000000000000000000004f7a3ed9c0f94058174ee767a95c3055453bdfa3000000000000000000000000840b69f38634860897f925cd9d85b860a59c088a000000000000000000000000e8f3ac3f57ae08d1c1f12233dee069e5b84cb7d8

Deployed Bytecode

0x6080604052600436106103855760003560e01c80638aaa9389116101d1578063b579b29411610102578063e3402c67116100a0578063ec29f4e91161006f578063ec29f4e914610ab4578063f429389014610ae1578063fbcbc0f114610af6578063fdb5a03e14610b1657600080fd5b8063e3402c6714610a31578063e4441f0a14610a47578063e5fc10ed14610a74578063e7a919f914610a9457600080fd5b8063d2971059116100dc578063d297105914610995578063d539be5f146109ab578063dd62ed3e146109cb578063de30aad114610a1157600080fd5b8063b579b2941461094a578063b652ef3b14610960578063ba762ddd1461098057600080fd5b8063a457c2d71161016f578063af9549e011610149578063af9549e0146108ba578063b1fdb11b146108da578063b485430b14610910578063b515566a1461092a57600080fd5b8063a457c2d71461085a578063a8b9d2401461087a578063a9059cbb1461089a57600080fd5b806390677833116101ab57806390677833146107a157806395d89b41146107ce578063963bafa0146107e3578063a2923a0f1461083a57600080fd5b80638aaa9389146107335780638da5cb5b146107535780638e5916b21461077157600080fd5b80634297a7ca116102b657806366cc702611610254578063715018a611610223578063715018a6146106d25780637c4b492e146106e75780638954fb4a146106fd57806389a5c6911461071d57600080fd5b806366cc7026146106525780636843cd84146106725780636973cd091461069257806370a08231146106b257600080fd5b80635b6612ad116102905780635b6612ad146105da5780635b683e66146106075780635fcefa421461061d57806364b0f6531461063d57600080fd5b80634297a7ca146105805780634e71d92d146105b057806351bc3c85146105c557600080fd5b806323b872dd11610323578063313ce567116102fd578063313ce567146104f457806339509351146105165780633bbac579146105365780633e9ffbea1461056657600080fd5b806323b872dd146104875780632c1f5216146104a757806330bb4cff146104df57600080fd5b806312dfbd331161035f57806312dfbd3314610410578063168380131461043257806318160ddd146104525780631c08bc5d1461046757600080fd5b806306fdde03146103915780630866e0e9146103bc578063095ea7b3146103e057600080fd5b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6610b2b565b6040516103b39190613218565b60405180910390f35b3480156103c857600080fd5b506103d260155481565b6040519081526020016103b3565b3480156103ec57600080fd5b506104006103fb366004613285565b610bbd565b60405190151581526020016103b3565b34801561041c57600080fd5b5061043061042b3660046132b1565b610bd7565b005b34801561043e57600080fd5b5061043061044d3660046132ca565b610c0f565b34801561045e57600080fd5b506002546103d2565b34801561047357600080fd5b506104306104823660046132b1565b610c50565b34801561049357600080fd5b506104006104a23660046132ec565b610c7f565b3480156104b357600080fd5b506021546104c7906001600160a01b031681565b6040516001600160a01b0390911681526020016103b3565b3480156104eb57600080fd5b506103d2610ca3565b34801561050057600080fd5b5060125b60405160ff90911681526020016103b3565b34801561052257600080fd5b50610400610531366004613285565b610d16565b34801561054257600080fd5b5061040061055136600461332d565b60106020526000908152604090205460ff1681565b34801561057257600080fd5b50601c546104009060ff1681565b34801561058c57600080fd5b5061040061059b36600461332d565b60126020526000908152604090205460ff1681565b3480156105bc57600080fd5b50610430610d55565b3480156105d157600080fd5b50610430610d62565b3480156105e657600080fd5b506103d26105f536600461332d565b60236020526000908152604090205481565b34801561061357600080fd5b506103d260145481565b34801561062957600080fd5b5061043061063836600461334a565b610db2565b34801561064957600080fd5b506103d2610e10565b34801561065e57600080fd5b5061043061066d3660046132b1565b610e5a565b34801561067e57600080fd5b506103d261068d36600461332d565b610e89565b34801561069e57600080fd5b506104306106ad366004613385565b610ef9565b3480156106be57600080fd5b506103d26106cd36600461332d565b610f5b565b3480156106de57600080fd5b50610430610f76565b3480156106f357600080fd5b506103d260245481565b34801561070957600080fd5b506104306107183660046133cc565b610fea565b34801561072957600080fd5b506103d2601b5481565b34801561073f57600080fd5b5061043061074e3660046132b1565b6110ca565b34801561075f57600080fd5b506005546001600160a01b03166104c7565b34801561077d57600080fd5b5061040061078c36600461332d565b600f6020526000908152604090205460ff1681565b3480156107ad57600080fd5b506103d26107bc36600461332d565b601d6020526000908152604090205481565b3480156107da57600080fd5b506103a66110f9565b3480156107ef57600080fd5b5061081f6107fe366004613410565b601e6020526000908152604090208054600182015460029092015490919083565b604080519384526020840192909252908201526060016103b3565b34801561084657600080fd5b5061043061085536600461342b565b611108565b34801561086657600080fd5b50610400610875366004613285565b611183565b34801561088657600080fd5b506103d261089536600461332d565b611215565b3480156108a657600080fd5b506104006108b5366004613285565b611248565b3480156108c657600080fd5b506104306108d53660046133cc565b611256565b3480156108e657600080fd5b506103d26108f536600461332d565b6001600160a01b031660009081526029602052604090205490565b34801561091c57600080fd5b50601f546105049060ff1681565b34801561093657600080fd5b50610430610945366004613464565b6112ab565b34801561095657600080fd5b506103d260165481565b34801561096c57600080fd5b506103d261097b36600461332d565b6113d6565b34801561098c57600080fd5b506103d26114a4565b3480156109a157600080fd5b506103d260265481565b3480156109b757600080fd5b506104306109c6366004613410565b6114b5565b3480156109d757600080fd5b506103d26109e6366004613385565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a1d57600080fd5b50610430610a2c3660046134d9565b6114f5565b348015610a3d57600080fd5b506103d260255481565b348015610a5357600080fd5b506103d2610a6236600461332d565b60176020526000908152604090205481565b348015610a8057600080fd5b50610430610a8f3660046133cc565b611532565b348015610aa057600080fd5b50610430610aaf3660046132ca565b611587565b348015610ac057600080fd5b50610ad4610acf3660046134f6565b61191d565b6040516103b3919061352b565b348015610aed57600080fd5b50610430611b4e565b348015610b0257600080fd5b5061081f610b1136600461332d565b611c1b565b348015610b2257600080fd5b50610430611cac565b606060038054610b3a90613584565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6690613584565b8015610bb35780601f10610b8857610100808354040283529160200191610bb3565b820191906000526020600020905b815481529060010190602001808311610b9657829003601f168201915b5050505050905090565b600033610bcb818585611cb7565b60019150505b92915050565b6005546001600160a01b03163314610c0a5760405162461bcd60e51b8152600401610c01906135be565b60405180910390fd5b601b55565b6005546001600160a01b03163314610c395760405162461bcd60e51b8152600401610c01906135be565b6015829055610c4981603c611ddb565b6016555050565b6005546001600160a01b03163314610c7a5760405162461bcd60e51b8152600401610c01906135be565b602555565b600033610c8d858285611dee565b610c98858585611e7a565b506001949350505050565b602154604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa158015610ced573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1191906135f3565b905090565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190610bcb9082908690610d50908790613622565b611cb7565b610d603360006123b1565b565b6005546001600160a01b03163314610d8c5760405162461bcd60e51b8152600401610c01906135be565b6000610da3602454610d9d30610f5b565b9061264c565b9050610dae81612658565b5050565b6005546001600160a01b03163314610ddc5760405162461bcd60e51b8152600401610c01906135be565b600a8511158015610df05750600560145411155b610df957600080fd5b601394909455601492909255601855601955601a55565b602154604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde9160048083019260209291908290030181865afa158015610ced573d6000803e3d6000fd5b6005546001600160a01b03163314610e845760405162461bcd60e51b8152600401610c01906135be565b600b55565b6021546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b602060405180830381865afa158015610ed5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd191906135f3565b6005546001600160a01b03163314610f235760405162461bcd60e51b8152600401610c01906135be565b601f8054610100600160a81b0319166101006001600160a01b0394851602179055602080546001600160a01b03191691909216179055565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b03163314610fa05760405162461bcd60e51b8152600401610c01906135be565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146110145760405162461bcd60e51b8152600401610c01906135be565b801561107e5760215460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db0906024015b600060405180830381600087803b15801561106257600080fd5b505af1158015611076573d6000803e3d6000fd5b505050505050565b6021546001600160a01b03166318c18adb8361109981610f5b565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401611048565b6005546001600160a01b031633146110f45760405162461bcd60e51b8152600401610c01906135be565b601155565b606060048054610b3a90613584565b6005546001600160a01b031633146111325760405162461bcd60e51b8152600401610c01906135be565b61113d83603c611ddb565b60ff85166000908152601e602052604090205561115b82603c611ddb565b60ff9094166000908152601e6020526040902060018101949094556002909301929092555050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190838110156112085760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c01565b610c988286868403611cb7565b6021546040516302a2e74960e61b81526001600160a01b038381166004830152600092169063a8b9d24090602401610eb8565b600033610bcb818585611e7a565b6005546001600160a01b031633146112805760405162461bcd60e51b8152600401610c01906135be565b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146112d55760405162461bcd60e51b8152600401610c01906135be565b60005b818110156113d1576009546001600160a01b03168383838181106112fe576112fe61363a565b9050602002016020810190611313919061332d565b6001600160a01b03161415801561136457506007546001600160a01b03168383838181106113435761134361363a565b9050602002016020810190611358919061332d565b6001600160a01b031614155b156113bf576001601060008585858181106113815761138161363a565b9050602002016020810190611396919061332d565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790555b806113c981613650565b9150506112d8565b505050565b60145460009060015b601f5460ff9081169082161161149d5760ff81166000908152601e60209081526040808320546001600160a01b0388168452601d90925290912054429161142591613622565b1115801561146a575060ff81166000908152601e60209081526040808320600101546001600160a01b0388168452601d90925290912054429161146791613622565b10155b1561148b5760ff166000908152601e60205260409020600201549392505050565b8061149581613669565b9150506113df565b5092915050565b6000610d11602454610d9d30610f5b565b6005546001600160a01b031633146114df5760405162461bcd60e51b8152600401610c01906135be565b601f805460ff191660ff92909216919091179055565b6005546001600160a01b0316331461151f5760405162461bcd60e51b8152600401610c01906135be565b601c805460ff1916911515919091179055565b6005546001600160a01b0316331461155c5760405162461bcd60e51b8152600401610c01906135be565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146115b15760405162461bcd60e51b8152600401610c01906135be565b600754600160a01b900460ff161561160b5760405162461bcd60e51b815260206004820181905260248201527f4469616d6f6e643a2054726164696e6720697320616c7265616479206f70656e6044820152606401610c01565b42821161165a5760405162461bcd60e51b815260206004820152601a60248201527f4469616d6f6e643a20496e76616c69642074696d657374616d700000000000006044820152606401610c01565b600760009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d19190613688565b6001600160a01b031663c9c6539630600760009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611733573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117579190613688565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156117a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c89190613688565b600980546001600160a01b0319166001600160a01b0392831690811782556000908152600e602052604090819020805460ff191660011790556021549154905163031e79db60e41b815290831660048201529116906331e79db090602401600060405180830381600087803b15801561184057600080fd5b505af1158015611854573d6000803e3d6000fd5b5050505061186a61186430610f5b565b4761280d565b60095460075460405163095ea7b360e01b81526001600160a01b039182166004820152600019602482015291169063095ea7b3906044016020604051808303816000875af11580156118c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e491906136a5565b506007805460ff60a01b1916600160a01b179055600c82905561191261190b82603c611ddb565b839061291c565b600d55505043600855565b606060008311801561192f5750600082115b61197b5760405162461bcd60e51b815260206004820152601a60248201527f4469616d6f6e643a20496e76616c696420617267756d656e74730000000000006044820152606401610c01565b6001600160a01b0384166000908152602960205260408120549061199f85856136c2565b905060006119ad86836136e1565b90508281106119f65760405162461bcd60e51b81526020600482015260156024820152744469616d6f6e643a204f7574206f662072616e676560581b6044820152606401610c01565b8583831115611a0f57839250611a0c878461370e565b90505b60008167ffffffffffffffff811115611a2a57611a2a613722565b604051908082528060200260200182016040528015611a7f57816020015b611a6c60405180606001604052806000815260200160008152602001600081525090565b815260200190600190039081611a485790505b5090506000835b85811015611b3f576001600160a01b038b166000908152602960205260408120805483908110611ab857611ab861363a565b90600052602060002001549050602860008281526020019081526020016000206040518060600160405290816000820154815260200160018201548152602001600282015481525050848481518110611b1357611b1361363a565b6020908102919091010152611b29600184613622565b9250508080611b3790613650565b915050611a86565b50909998505050505050505050565b6005546001600160a01b03163314611b785760405162461bcd60e51b8152600401610c01906135be565b6000611b8f6026544761264c90919063ffffffff16565b90506000611bc0611bac601854606461264c90919063ffffffff16565b601954611bba908590611ddb565b90612928565b90506000611beb611bdd601854606461264c90919063ffffffff16565b601a54611bba908690611ddb565b90506000611bfd82610d9d868661264c565b9050611c09838261291c565b9250611c158383612934565b50505050565b60215460405163fbcbc0f160e01b81526001600160a01b038381166004830152600092839283929091169063fbcbc0f1906024016040805180830381865afa158015611c6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c8f9190613738565b90935091508282611c9f86610f5b565b9250925092509193909250565b610d603360016123b1565b6001600160a01b038316611d195760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c01565b6001600160a01b038216611d7a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c01565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000611de782846136c2565b9392505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114611c155781811015611e6d5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610c01565b611c158484848403611cb7565b6001600160a01b03831660009081526010602052604090205460ff16158015611ebc57506001600160a01b03821660009081526010602052604090205460ff16155b611ec557600080fd5b601154600754829190600160a01b900460ff168015611f1e57506001600160a01b0385166000908152600e602052604090205460ff1680611f1e57506001600160a01b0384166000908152600e602052604090205460ff165b8015611f4357506001600160a01b0385166000908152600f602052604090205460ff16155b8015611f6857506001600160a01b0384166000908152600f602052604090205460ff16155b156120bf5742600c541115611fd45760405162461bcd60e51b815260206004820152602c60248201527f4469616d6f6e643a205072697661746520616e64207075626c69632073616c6560448201526b1034b9903737ba1037b832b760a11b6064820152608401610c01565b42600c5411158015611fe7575042600d54115b156120b157600a6011819055600b5490546040516370a0823160e01b81526001600160a01b038781166004830152909116906370a0823190602401602060405180830381865afa15801561203f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206391906135f3565b10156120b15760405162461bcd60e51b815260206004820181905260248201527f4469616d6f6e643a204e6f7420656e6f75676820244d7942616773546f6b656e6044820152606401610c01565b6120bc8585856129f2565b91505b6001600160a01b0384166000908152601d602052604081205490036120fa576001600160a01b0384166000908152601d602052604090204290555b6001600160a01b0384166000908152600e602052604090205460ff1615801561213c57506001600160a01b03841660009081526012602052604090205460ff16155b156121d25760006121568361215087610f5b565b9061291c565b9050612173612710611bba60115461216d60025490565b90611ddb565b8111156121d05760405162461bcd60e51b815260206004820152602560248201527f4469616d6f6e643a2057616c6c65742062616c616e6365206c696d69742072656044820152641858da195960da1b6064820152608401610c01565b505b6121dd858584612c4c565b6011819055602154604051631b4a89ab60e11b81526001600160a01b03878116600483015290911690633695135690602401602060405180830381865afa15801561222c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061225091906136a5565b6122c8576021546001600160a01b031663e30443bc8661226f81610f5b565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156122b557600080fd5b505af19250505080156122c6575060015b505b602154604051631b4a89ab60e11b81526001600160a01b03868116600483015290911690633695135690602401602060405180830381865afa158015612312573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061233691906136a5565b6123aa576021546001600160a01b031663e30443bc8561235581610f5b565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561239b57600080fd5b505af192505050801561107657505b5050505050565b6021546040516302a2e74960e61b81526001600160a01b038481166004830152600092169063a8b9d24090602401602060405180830381865afa1580156123fc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242091906135f3565b9050600081116124885760405162461bcd60e51b815260206004820152602d60248201527f4469616d6f6e643a20436c61696d657220686173206e6f20776974686472617760448201526c18589b1948191a5d9a59195b99609a1b6064820152608401610c01565b6000808361250e576021546040516352b5f81d60e01b81526001600160a01b03878116600483018190526024830152909116906352b5f81d906044016020604051808303816000875af11580156124e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061250791906135f3565b9150612599565b6021546040516352b5f81d60e01b81526001600160a01b038781166004830152306024830152909116906352b5f81d906044016020604051808303816000875af1158015612560573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258491906135f3565b91508115612599576125968286612e1a565b90505b81156123aa576125ad602780546001019055565b60006125b860275490565b60008181526028602090815260408083208781556001808201889055426002909201919091556001600160a01b038b1680855260298452828520805492830181558552938390200184905580518781529182018690528101919091529091507f67dd3d116bf53e0ddda53bb148a5fdc129854e1c507c0eeda9190049a9bbc84f9060600160405180910390a1505050505050565b6000611de782846136e1565b60408051600280825260608201835260009247928492909160208301908036833701905050905030816000815181106126935761269361363a565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156126ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127109190613688565b816001815181106127235761272361363a565b6001600160a01b0392831660209182029290920101526007546127499130911686611cb7565b60075460405163791ac94760e01b81526001600160a01b039091169063791ac947906127829087906000908690309042906004016137a0565b600060405180830381600087803b15801561279c57600080fd5b505af11580156127b0573d6000803e3d6000fd5b5050505060006127c9834761264c90919063ffffffff16565b60408051878152602081018390529192507f4a6c12eb4e479a4ea28c8acad8efde466ef9bf69cf473501dd76865234496273910160405180910390a1949350505050565b6007546128259030906001600160a01b031684611cb7565b6007546001600160a01b031663f305d71982308560008061284e6005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156128b6573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906128db91906137dc565b505060408051848152602081018490527fcb1652de9aeec38545fc281847b3dbfc89aab56dfa907b1ab68466f602c36fb49250015b60405180910390a15050565b6000611de78284613622565b6000611de7828461380a565b811561297a57601f546040516101009091046001600160a01b0316906108fc8415029084906000818181858888f19350505050158015612978573d6000803e3d6000fd5b505b80156129bc576020546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156129ba573d6000803e3d6000fd5b505b60408051838152602081018390527f916ad8171ef8c567c7790377a142f0200f9565940680c06e30dd105cfd9249689101612910565b6001600160a01b0383166000908152600e60205260408120548190819060ff1680612a3557506001600160a01b0385166000908152600e602052604090205460ff165b612a815760405162461bcd60e51b815260206004820152601f60248201527f4469616d6f6e643a204e6f206d61726b6574206d616b65727320666f756e64006044820152606401610c01565b6001600160a01b0386166000908152600e602052604090205460ff1615612b2357612abc6064611bba60135487611ddb90919063ffffffff16565b9150612ac8848361264c565b9050612ad5863084612c4c565b604080516001600160a01b03881681523060208201529081018390527f6b0b46d0273ce53f1de696d2100b35dd3a405dcecbcbeede66215d858d5c401d9060600160405180910390a1612c43565b6000612b2f8786612fcc565b15612b3d5750601454612b49565b612b46876113d6565b90505b612b586064611bba8784611ddb565b92506000612b806064611bba612b796014548661264c90919063ffffffff16565b8990611ddb565b602454909150612b90908261291c565b602455612b9d868561264c565b9250612baa883086612c4c565b6000612bbb602454610d9d30610f5b565b9050601b54811115612bdf57601c5460ff16612bd65750601b545b612bdf81613044565b6025546024541115612bf657612bf660245461313a565b604080516001600160a01b038b1681523060208201529081018690527f4ab5e0df8ff1605133dbdd1b8e3f52edb9539abe64595f6f70b30d2fea7f204a9060600160405180910390a15050505b95945050505050565b6001600160a01b038316612cb05760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c01565b6001600160a01b038216612d125760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c01565b6001600160a01b03831660009081526020819052604090205481811015612d8a5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c01565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612dc1908490613622565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612e0d91815260200190565b60405180910390a3611c15565b600080612e2630610f5b565b60408051600280825260608201835292935060009290916020830190803683375050600754604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612e95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eb99190613688565b81600081518110612ecc57612ecc61363a565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110612f0057612f0061363a565b6001600160a01b03928316602091820292909201015260075460405163b6f9de9560e01b815291169063b6f9de95908790612f469060009086908a90429060040161381e565b6000604051808303818588803b158015612f5f57600080fd5b505af1158015612f73573d6000803e3d6000fd5b50505050506000612f8783610d9d30610f5b565b60408051888152602081018390529192507f2d5c8efb676a77fc04b6b50a19f6ccbf08ee66df0202de33576485f1f77b4b69910160405180910390a195945050505050565b6016546001600160a01b03831660009081526017602052604081205490914291612ff69190613622565b1161303b576001600160a01b038316600090815260176020526040902042905560155461302d90606490611bba9061216d87610f5b565b821161303b57506001610bd1565b50600092915050565b60006130606064611bba60185485611ddb90919063ffffffff16565b9050600061306f826002612928565b9050600061307d848361264c565b9050600061308a82612658565b905060006130a86064611bba60185485611ddb90919063ffffffff16565b905060006130c66064611bba60195486611ddb90919063ffffffff16565b905060006130e46064611bba601a5487611ddb90919063ffffffff16565b905060006130f882610d9d8581898961264c565b9050613104838261291c565b92506131108383612934565b6000871180156131205750600084115b1561312f5761312f878561280d565b505050505050505050565b600061314582612658565b602454909150613155908361264c565b60245560265460009061316990839061291c565b6021546040519192506000916001600160a01b039091169083908381818185875af1925050503d80600081146131bb576040519150601f19603f3d011682016040523d82523d6000602084013e6131c0565b606091505b505090508015613202576040518381527fb0cc2628d6d644cf6be9d8110e142297ac910d6d8026d795a99f272fd9ad60b19060200160405180910390a1611c15565b60265461320f908461291c565b60265550505050565b600060208083528351808285015260005b8181101561324557858101830151858201604001528201613229565b81811115613257576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461328257600080fd5b50565b6000806040838503121561329857600080fd5b82356132a38161326d565b946020939093013593505050565b6000602082840312156132c357600080fd5b5035919050565b600080604083850312156132dd57600080fd5b50508035926020909101359150565b60008060006060848603121561330157600080fd5b833561330c8161326d565b9250602084013561331c8161326d565b929592945050506040919091013590565b60006020828403121561333f57600080fd5b8135611de78161326d565b600080600080600060a0868803121561336257600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000806040838503121561339857600080fd5b82356133a38161326d565b915060208301356133b38161326d565b809150509250929050565b801515811461328257600080fd5b600080604083850312156133df57600080fd5b82356133ea8161326d565b915060208301356133b3816133be565b803560ff8116811461340b57600080fd5b919050565b60006020828403121561342257600080fd5b611de7826133fa565b6000806000806080858703121561344157600080fd5b61344a856133fa565b966020860135965060408601359560600135945092505050565b6000806020838503121561347757600080fd5b823567ffffffffffffffff8082111561348f57600080fd5b818501915085601f8301126134a357600080fd5b8135818111156134b257600080fd5b8660208260051b85010111156134c757600080fd5b60209290920196919550909350505050565b6000602082840312156134eb57600080fd5b8135611de7816133be565b60008060006060848603121561350b57600080fd5b83356135168161326d565b95602085013595506040909401359392505050565b602080825282518282018190526000919060409081850190868401855b828110156135775781518051855286810151878601528501518585015260609093019290850190600101613548565b5091979650505050505050565b600181811c9082168061359857607f821691505b6020821081036135b857634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561360557600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156136355761363561360c565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600182016136625761366261360c565b5060010190565b600060ff821660ff810361367f5761367f61360c565b60010192915050565b60006020828403121561369a57600080fd5b8151611de78161326d565b6000602082840312156136b757600080fd5b8151611de7816133be565b60008160001904831182151516156136dc576136dc61360c565b500290565b6000828210156136f3576136f361360c565b500390565b634e487b7160e01b600052601260045260246000fd5b60008261371d5761371d6136f8565b500690565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561374b57600080fd5b505080516020909101519092909150565b600081518084526020808501945080840160005b838110156137955781516001600160a01b031687529582019590820190600101613770565b509495945050505050565b85815284602082015260a0604082015260006137bf60a083018661375c565b6001600160a01b0394909416606083015250608001529392505050565b6000806000606084860312156137f157600080fd5b8351925060208401519150604084015190509250925092565b600082613819576138196136f8565b500490565b848152608060208201526000613837608083018661375c565b6001600160a01b0394909416604083015250606001529291505056fea26469706673582212202e540b5a3e7dcb0f75c128cf2474288c27365e453f8194004876824ba30e81e864736f6c634300080d0033

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

0000000000000000000000004F7a3ed9C0F94058174EE767A95c3055453BDfA3000000000000000000000000840b69F38634860897f925cd9d85b860a59C088A000000000000000000000000e8f3ac3f57ae08d1c1f12233dee069e5b84cb7d8

-----Decoded View---------------
Arg [0] : _devWalletAddress (address): 0x4F7a3ed9C0F94058174EE767A95c3055453BDfA3
Arg [1] : _marketingWalletAddress (address): 0x840b69F38634860897f925cd9d85b860a59C088A
Arg [2] : _myBagsTokenAddress (address): 0xe8F3ac3f57aE08D1C1f12233DEe069E5B84cb7d8

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000004F7a3ed9C0F94058174EE767A95c3055453BDfA3
Arg [1] : 000000000000000000000000840b69F38634860897f925cd9d85b860a59C088A
Arg [2] : 000000000000000000000000e8f3ac3f57ae08d1c1f12233dee069e5b84cb7d8


Deployed Bytecode Sourcemap

24692:22607:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1707:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25782:43;;;;;;;;;;;;;;;;;;;762:25:1;;;750:2;735:18;25782:43:0;616:177:1;2780:242:0;;;;;;;;;;-1:-1:-1;2780:242:0;;;;;:::i;:::-;;:::i;:::-;;;1419:14:1;;1412:22;1394:41;;1382:2;1367:18;2780:242:0;1254:187:1;38216:126:0;;;;;;;;;;-1:-1:-1;38216:126:0;;;;;:::i;:::-;;:::i;:::-;;39040:286;;;;;;;;;;-1:-1:-1;39040:286:0;;;;;:::i;:::-;;:::i;2028:108::-;;;;;;;;;;-1:-1:-1;2116:12:0;;2028:108;;38350:122;;;;;;;;;;-1:-1:-1;38350:122:0;;;;;:::i;:::-;;:::i;3030:295::-;;;;;;;;;;-1:-1:-1;3030:295:0;;;;;:::i;:::-;;:::i;26520:45::-;;;;;;;;;;-1:-1:-1;26520:45:0;;;;-1:-1:-1;;;;;26520:45:0;;;;;;-1:-1:-1;;;;;2548:32:1;;;2530:51;;2518:2;2503:18;26520:45:0;2345:242:1;31683:141:0;;;;;;;;;;;;;:::i;34109:100::-;;;;;;;;;;-1:-1:-1;24945:2:0;34109:100;;;2764:4:1;2752:17;;;2734:36;;2722:2;2707:18;34109:100:0;2592:184:1;3333:272:0;;;;;;;;;;-1:-1:-1;3333:272:0;;;;;:::i;:::-;;:::i;25548:37::-;;;;;;;;;;-1:-1:-1;25548:37:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;26125:27;;;;;;;;;;-1:-1:-1;26125:27:0;;;;;;;;25643:55;;;;;;;;;;-1:-1:-1;25643:55:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;32207:79;;;;;;;;;;;;;:::i;30303:200::-;;;;;;;;;;;;;:::i;26635:47::-;;;;;;;;;;-1:-1:-1;26635:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;25745:30;;;;;;;;;;;;;;;;37787:421;;;;;;;;;;-1:-1:-1;37787:421:0;;;;;:::i;:::-;;:::i;33537:142::-;;;;;;;;;;;;;:::i;36736:161::-;;;;;;;;;;-1:-1:-1;36736:161:0;;;;;:::i;:::-;;:::i;32026:173::-;;;;;;;;;;-1:-1:-1;32026:173:0;;;;;:::i;:::-;;:::i;39666:214::-;;;;;;;;;;-1:-1:-1;39666:214:0;;;;;:::i;:::-;;:::i;2144:177::-;;;;;;;;;;-1:-1:-1;2144:177:0;;;;;:::i;:::-;;:::i;10791:148::-;;;;;;;;;;;;;:::i;26691:37::-;;;;;;;;;;;;;;;;37087:342;;;;;;;;;;-1:-1:-1;37087:342:0;;;;;:::i;:::-;;:::i;26065:53::-;;;;;;;;;;;;;;;;37651:128;;;;;;;;;;-1:-1:-1;37651:128:0;;;;;:::i;:::-;;:::i;10579:79::-;;;;;;;;;;-1:-1:-1;10644:6:0;;-1:-1:-1;;;;;10644:6:0;10579:79;;25493:48;;;;;;;;;;-1:-1:-1;25493:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;26266:54;;;;;;;;;;-1:-1:-1;26266:54:0;;;;;:::i;:::-;;;;;;;;;;;;;;1815:104;;;;;;;;;;;;;:::i;26327:58::-;;;;;;;;;;-1:-1:-1;26327:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5153:25:1;;;5209:2;5194:18;;5187:34;;;;5237:18;;;5230:34;5141:2;5126:18;26327:58:0;4951:319:1;38579:325:0;;;;;;;;;;-1:-1:-1;38579:325:0;;;;;:::i;:::-;;:::i;3613:507::-;;;;;;;;;;-1:-1:-1;3613:507:0;;;;;:::i;:::-;;:::i;31832:186::-;;;;;;;;;;-1:-1:-1;31832:186:0;;;;;:::i;:::-;;:::i;2329:234::-;;;;;;;;;;-1:-1:-1;2329:234:0;;;;;:::i;:::-;;:::i;36905:174::-;;;;;;;;;;-1:-1:-1;36905:174:0;;;;;:::i;:::-;;:::i;47127:132::-;;;;;;;;;;-1:-1:-1;47127:132:0;;;;;:::i;:::-;-1:-1:-1;;;;;47220:24:0;47193:7;47220:24;;;:14;:24;;;;;:31;;47127:132;26392:33;;;;;;;;;;-1:-1:-1;26392:33:0;;;;;;;;39334:324;;;;;;;;;;-1:-1:-1;39334:324:0;;;;;:::i;:::-;;:::i;25832:52::-;;;;;;;;;;;;;;;;31120:555;;;;;;;;;;-1:-1:-1;31120:555:0;;;;;:::i;:::-;;:::i;45986:149::-;;;;;;;;;;;;;:::i;26797:31::-;;;;;;;;;;;;;;;;38912:120;;;;;;;;;;-1:-1:-1;38912:120:0;;;;;:::i;:::-;;:::i;2571:201::-;;;;;;;;;;-1:-1:-1;2571:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;2737:18:0;;;2705:7;2737:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;2571:201;38480:91;;;;;;;;;;-1:-1:-1;38480:91:0;;;;;:::i;:::-;;:::i;26735:53::-;;;;;;;;;;;;;;;;25891:55;;;;;;;;;;-1:-1:-1;25891:55:0;;;;;:::i;:::-;;;;;;;;;;;;;;37437:206;;;;;;;;;;-1:-1:-1;37437:206:0;;;;;:::i;:::-;;:::i;29312:983::-;;;;;;;;;;-1:-1:-1;29312:983:0;;;;;:::i;:::-;;:::i;46143:976::-;;;;;;;;;;-1:-1:-1;46143:976:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;30511:601::-;;;;;;;;;;;;;:::i;33687:414::-;;;;;;;;;;-1:-1:-1;33687:414:0;;;;;:::i;:::-;;:::i;32294:81::-;;;;;;;;;;;;;:::i;1707:100::-;1761:13;1794:5;1787:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1707:100;:::o;2780:242::-;2899:4;1167:10;2960:32;1167:10;2976:7;2985:6;2960:8;:32::i;:::-;3010:4;3003:11;;;2780:242;;;;;:::o;38216:126::-;10706:6;;-1:-1:-1;;;;;10706:6:0;10716:10;10706:20;10698:65;;;;-1:-1:-1;;;10698:65:0;;;;;;;:::i;:::-;;;;;;;;;38299:23:::1;:35:::0;38216:126::o;39040:286::-;10706:6;;-1:-1:-1;;;;;10706:6:0;10716:10;10706:20;10698:65;;;;-1:-1:-1;;;10698:65:0;;;;;;;:::i;:::-;39194:23:::1;:50:::0;;;39280:38:::1;:23:::0;39308:9:::1;39280:27;:38::i;:::-;39255:22;:63:::0;-1:-1:-1;;39040:286:0:o;38350:122::-;10706:6;;-1:-1:-1;;;;;10706:6:0;10716:10;10706:20;10698:65;;;;-1:-1:-1;;;10698:65:0;;;;;;;:::i;:::-;38431:21:::1;:33:::0;38350:122::o;3030:295::-;3161:4;1167:10;3219:38;3235:4;1167:10;3250:6;3219:15;:38::i;:::-;3268:27;3278:4;3284:2;3288:6;3268:9;:27::i;:::-;-1:-1:-1;3313:4:0;;3030:295;-1:-1:-1;;;;3030:295:0:o;31683:141::-;31773:15;;:43;;;-1:-1:-1;;;31773:43:0;;;;31746:7;;-1:-1:-1;;;;;31773:15:0;;:41;;:43;;;;;;;;;;;;;;:15;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31766:50;;31683:141;:::o;3333:272::-;1167:10;3448:4;3534:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;3534:27:0;;;;;;;;;;3448:4;;1167:10;3509:66;;1167:10;;3534:27;;:40;;3564:10;;3534:40;:::i;:::-;3509:8;:66::i;32207:79::-;32244:34;32259:10;32272:5;32244:6;:34::i;:::-;32207:79::o;30303:200::-;10706:6;;-1:-1:-1;;;;;10706:6:0;10716:10;10706:20;10698:65;;;;-1:-1:-1;;;10698:65:0;;;;;;;:::i;:::-;30355:19:::1;30377:76;30420:22;;30377:24;30395:4;30377:9;:24::i;:::-;:28:::0;::::1;:76::i;:::-;30355:98;;30466:29;30483:11;30466:16;:29::i;:::-;;30344:159;30303:200::o:0;37787:421::-;10706:6;;-1:-1:-1;;;;;10706:6:0;10716:10;10706:20;10698:65;;;;-1:-1:-1;;;10698:65:0;;;;;;;:::i;:::-;38010:2:::1;37995:11;:17;;:37;;;;;38031:1;38016:11;;:16;;37995:37;37987:46;;;::::0;::::1;;38046:10;:24:::0;;;;38081:11:::1;:26:::0;;;;38118:6:::1;:16:::0;38145:6:::1;:16:::0;38172:12:::1;:28:::0;37787:421::o;33537:142::-;33630:15;;:41;;;-1:-1:-1;;;33630:41:0;;;;33603:7;;-1:-1:-1;;;;;33630:15:0;;:39;;:41;;;;;;;;;;;;;;:15;:41;;;;;;;;;;;;;;36736:161;10706:6;;-1:-1:-1;;;;;10706:6:0;10716:10;10706:20;10698:65;;;;-1:-1:-1;;;10698:65:0;;;;;;;:::i;:::-;36849:18:::1;:40:::0;36736:161::o;32026:173::-;32156:15;;:35;;-1:-1:-1;;;32156:35:0;;-1:-1:-1;;;;;2548:32:1;;;32156:35:0;;;2530:51:1;32124:7:0;;32156:15;;:25;;2503:18:1;;32156:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;39666:214::-;10706:6;;-1:-1:-1;;;;;10706:6:0;10716:10;10706:20;10698:65;;;;-1:-1:-1;;;10698:65:0;;;;;;;:::i;:::-;39791:16:::1;:29:::0;;-1:-1:-1;;;;;;39791:29:0::1;;-1:-1:-1::0;;;;;39791:29:0;;::::1;;;::::0;;39831:22:::1;:41:::0;;-1:-1:-1;;;;;;39831:41:0::1;::::0;;;::::1;;::::0;;39666:214::o;2144:177::-;-1:-1:-1;;;;;2295:18:0;2263:7;2295:18;;;;;;;;;;;;2144:177::o;10791:148::-;10706:6;;-1:-1:-1;;;;;10706:6:0;10716:10;10706:20;10698:65;;;;-1:-1:-1;;;10698:65:0;;;;;;;:::i;:::-;10882:6:::1;::::0;10861:40:::1;::::0;10898:1:::1;::::0;-1:-1:-1;;;;;10882:6:0::1;::::0;10861:40:::1;::::0;10898:1;;10861:40:::1;10912:6;:19:::0;;-1:-1:-1;;;;;;10912:19:0::1;::::0;;10791:148::o;37087:342::-;10706:6;;-1:-1:-1;;;;;10706:6:0;10716:10;10706:20;10698:65;;;;-1:-1:-1;;;10698:65:0;;;;;;;:::i;:::-;37225:22:::1;37221:201;;;37264:15;::::0;:46:::1;::::0;-1:-1:-1;;;37264:46:0;;-1:-1:-1;;;;;2548:32:1;;;37264:46:0::1;::::0;::::1;2530:51:1::0;37264:15:0;;::::1;::::0;:36:::1;::::0;2503:18:1;;37264:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;30466:29;30344:159;30303:200::o:0;37221:201::-:1;37343:15;::::0;-1:-1:-1;;;;;37343:15:0::1;:36;37380:8:::0;37390:19:::1;37380:8:::0;37390:9:::1;:19::i;:::-;37343:67;::::0;-1:-1:-1;;;;;;37343:67:0::1;::::0;;;;;;-1:-1:-1;;;;;9167:32:1;;;37343:67:0::1;::::0;::::1;9149:51:1::0;9216:18;;;9209:34;9122:18;;37343:67:0::1;8975:274:1::0;37651:128:0;10706:6;;-1:-1:-1;;;;;10706:6:0;10716:10;10706:20;10698:65;;;;-1:-1:-1;;;10698:65:0;;;;;;;:::i;:::-;37736:21:::1;:35:::0;37651:128::o;1815:104::-;1871:13;1904:7;1897:14;;;;;:::i;38579:325::-;10706:6;;-1:-1:-1;;;;;10706:6:0;10716:10;10706:20;10698:65;;;;-1:-1:-1;;;10698:65:0;;;;;;;:::i;:::-;38769:20:::1;:5:::0;38779:9:::1;38769;:20::i;:::-;38736:25;::::0;::::1;;::::0;;;:17:::1;:25;::::0;;;;:53;38831:18:::1;:3:::0;38839:9:::1;38831:7;:18::i;:::-;38800:25;::::0;;::::1;;::::0;;;:17:::1;:25;::::0;;;;:28:::1;::::0;::::1;:49:::0;;;;38860:29:::1;::::0;;::::1;:36:::0;;;;-1:-1:-1;;38579:325:0:o;3613:507::-;1167:10;3733:4;3821:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;3821:27:0;;;;;;;;;;3733:4;;1167:10;3881:35;;;;3859:122;;;;-1:-1:-1;;;3859:122:0;;9456:2:1;3859:122:0;;;9438:21:1;9495:2;9475:18;;;9468:30;9534:34;9514:18;;;9507:62;-1:-1:-1;;;9585:18:1;;;9578:35;9630:19;;3859:122:0;9254:401:1;3859:122:0;4017:60;4026:5;4033:7;4061:15;4042:16;:34;4017:8;:60::i;31832:186::-;31962:15;;:48;;-1:-1:-1;;;31962:48:0;;-1:-1:-1;;;;;2548:32:1;;;31962:48:0;;;2530:51:1;31930:7:0;;31962:15;;:38;;2503:18:1;;31962:48:0;2345:242:1;2329:234:0;2444:4;1167:10;2505:28;1167:10;2522:2;2526:6;2505:9;:28::i;36905:174::-;10706:6;;-1:-1:-1;;;;;10706:6:0;10716:10;10706:20;10698:65;;;;-1:-1:-1;;;10698:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37026:26:0;;;::::1;;::::0;;;:16:::1;:26;::::0;;;;:45;;-1:-1:-1;;37026:45:0::1;::::0;::::1;;::::0;;;::::1;::::0;;36905:174::o;39334:324::-;10706:6;;-1:-1:-1;;;;;10706:6:0;10716:10;10706:20;10698:65;;;;-1:-1:-1;;;10698:65:0;;;;;;;:::i;:::-;39410:9:::1;39405:246;39425:16:::0;;::::1;39405:246;;;39497:13;::::0;-1:-1:-1;;;;;39497:13:0::1;39485:5:::0;;39491:1;39485:8;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;39485:25:0::1;;;:82;;;;-1:-1:-1::0;39551:15:0::1;::::0;-1:-1:-1;;;;;39551:15:0::1;39531:5:::0;;39537:1;39531:8;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;39531:36:0::1;;;39485:82;39463:177;;;39620:4;39602:5;:15;39608:5;;39614:1;39608:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;39602:15:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;39602:15:0;:22;;-1:-1:-1;;39602:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;39463:177:::1;39443:3:::0;::::1;::::0;::::1;:::i;:::-;;;;39405:246;;;;39334:324:::0;;:::o;31120:555::-;31204:11;;31170:7;;31243:1;31228:417;31251:20;;;;;;31246:25;;;;31228:417;;31343:20;;;;;;;:17;:20;;;;;;;;:25;-1:-1:-1;;;;;31316:24:0;;;;:19;:24;;;;;;;31393:15;;31316:52;;;:::i;:::-;:92;;:207;;;;-1:-1:-1;31460:20:0;;;;;;;:17;:20;;;;;;;;:23;;;-1:-1:-1;;;;;31433:24:0;;;;:19;:24;;;;;;;31508:15;;31433:50;;;:::i;:::-;:90;;31316:207;31293:341;;;31565:20;;;;;;:17;:20;;;;;:24;;;;31120:555;-1:-1:-1;;;31120:555:0:o;31293:341::-;31273:3;;;;:::i;:::-;;;;31228:417;;;-1:-1:-1;31664:3:0;31120:555;-1:-1:-1;;31120:555:0:o;45986:149::-;46048:7;46075:52;46104:22;;46075:24;46093:4;46075:9;:24::i;38912:120::-;10706:6;;-1:-1:-1;;;;;10706:6:0;10716:10;10706:20;10698:65;;;;-1:-1:-1;;;10698:65:0;;;;;;;:::i;:::-;38992:20:::1;:32:::0;;-1:-1:-1;;38992:32:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;38912:120::o;38480:91::-;10706:6;;-1:-1:-1;;;;;10706:6:0;10716:10;10706:20;10698:65;;;;-1:-1:-1;;;10698:65:0;;;;;;;:::i;:::-;38544:7:::1;:19:::0;;-1:-1:-1;;38544:19:0::1;::::0;::::1;;::::0;;;::::1;::::0;;38480:91::o;37437:206::-;10706:6;;-1:-1:-1;;;;;10706:6:0;10716:10;10706:20;10698:65;;;;-1:-1:-1;;;10698:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37575:33:0;;;::::1;;::::0;;;:23:::1;:33;::::0;;;;:60;;-1:-1:-1;;37575:60:0::1;::::0;::::1;;::::0;;;::::1;::::0;;37437:206::o;29312:983::-;10706:6;;-1:-1:-1;;;;;10706:6:0;10716:10;10706:20;10698:65;;;;-1:-1:-1;;;10698:65:0;;;;;;;:::i;:::-;29448:11:::1;::::0;-1:-1:-1;;;29448:11:0;::::1;;;29447:12;29439:57;;;::::0;-1:-1:-1;;;29439:57:0;;10314:2:1;29439:57:0::1;::::0;::::1;10296:21:1::0;;;10333:18;;;10326:30;10392:34;10372:18;;;10365:62;10444:18;;29439:57:0::1;10112:356:1::0;29439:57:0::1;29529:15;29515:11;:29;29507:68;;;::::0;-1:-1:-1;;;29507:68:0;;10675:2:1;29507:68:0::1;::::0;::::1;10657:21:1::0;10714:2;10694:18;;;10687:30;10753:28;10733:18;;;10726:56;10799:18;;29507:68:0::1;10473:350:1::0;29507:68:0::1;29620:15;;;;;;;;;-1:-1:-1::0;;;;;29620:15:0::1;-1:-1:-1::0;;;;;29620:23:0::1;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29602:55:0::1;;29684:4;29708:15;;;;;;;;;-1:-1:-1::0;;;;;29708:15:0::1;-1:-1:-1::0;;;;;29708:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29602:143;::::0;-1:-1:-1;;;;;;29602:143:0::1;::::0;;;;;;-1:-1:-1;;;;;11314:15:1;;;29602:143:0::1;::::0;::::1;11296:34:1::0;11366:15;;11346:18;;;11339:43;11231:18;;29602:143:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29586:13;:159:::0;;-1:-1:-1;;;;;;29586:159:0::1;-1:-1:-1::0;;;;;29586:159:0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;29758:40:0;;;:25:::1;:40;::::0;;;;;;:47;;-1:-1:-1;;29758:47:0::1;-1:-1:-1::0;29758:47:0::1;::::0;;29816:15:::1;::::0;29853:13;;29816:51;;-1:-1:-1;;;29816:51:0;;29853:13;;::::1;29816:51;::::0;::::1;2530::1::0;29816:15:0;::::1;::::0;:36:::1;::::0;2503:18:1;;29816:51:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;29880:61;29893:24;29911:4;29893:9;:24::i;:::-;29919:21;29880:12;:61::i;:::-;29959:13;::::0;30004:15:::1;::::0;29952:111:::1;::::0;-1:-1:-1;;;29952:111:0;;-1:-1:-1;;;;;30004:15:0;;::::1;29952:111;::::0;::::1;9149:51:1::0;-1:-1:-1;;9216:18:1;;;9209:34;29959:13:0;::::1;::::0;29952:29:::1;::::0;9122:18:1;;29952:111:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;30076:11:0::1;:18:::0;;-1:-1:-1;;;;30076:18:0::1;-1:-1:-1::0;;;30076:18:0::1;::::0;;30105:20:::1;:34:::0;;;30172:78:::1;30202:37;:22:::0;30229:9:::1;30202:26;:37::i;:::-;30172:11:::0;;:15:::1;:78::i;:::-;30150:19;:100:::0;-1:-1:-1;;30275:12:0::1;30261:11;:26:::0;29312:983::o;46143:976::-;46275:19;46324:1;46315:6;:10;:29;;;;;46343:1;46329:11;:15;46315:29;46307:68;;;;-1:-1:-1;;;46307:68:0;;11845:2:1;46307:68:0;;;11827:21:1;11884:2;11864:18;;;11857:30;11923:28;11903:18;;;11896:56;11969:18;;46307:68:0;11643:350:1;46307:68:0;-1:-1:-1;;;;;46413:24:0;;46386;46413;;;:14;:24;;;;;:31;;46469:20;46483:6;46469:11;:20;:::i;:::-;46455:34;-1:-1:-1;46500:13:0;46516:12;46522:6;46455:34;46516:12;:::i;:::-;46500:28;;46555:16;46547:5;:24;46539:58;;;;-1:-1:-1;;;46539:58:0;;12503:2:1;46539:58:0;;;12485:21:1;12542:2;12522:18;;;12515:30;-1:-1:-1;;;12561:18:1;;;12554:51;12622:18;;46539:58:0;12301:345:1;46539:58:0;46624:6;46645:22;;;46641:125;;;46690:16;;-1:-1:-1;46729:25:0;46748:6;46690:16;46729:25;:::i;:::-;46721:33;;46641:125;46778:32;46830:5;46813:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;46813:23:0;;;;;;;;;;;;;;;;-1:-1:-1;46778:58:0;-1:-1:-1;46847:20:0;46899:5;46882:200;46910:3;46906:1;:7;46882:200;;;-1:-1:-1;;;;;46949:24:0;;46935:11;46949:24;;;:14;:24;;;;;:27;;46974:1;;46949:27;;;;;;:::i;:::-;;;;;;;;;46935:41;;47020:13;:18;47034:3;47020:18;;;;;;;;;;;46991:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:12;47004;46991:26;;;;;;;;:::i;:::-;;;;;;;;;;:47;47053:17;47069:1;47053:17;;:::i;:::-;;;46920:162;46915:3;;;;;:::i;:::-;;;;46882:200;;;-1:-1:-1;47099:12:0;;46143:976;-1:-1:-1;;;;;;;;;46143:976:0:o;30511:601::-;10706:6;;-1:-1:-1;;;;;10706:6:0;10716:10;10706:20;10698:65;;;;-1:-1:-1;;;10698:65:0;;;;;;;:::i;:::-;30563:16:::1;30582:43;30608:16;;30582:21;:25;;:43;;;;:::i;:::-;30563:62;;30638:21;30662:74;30701:24;30718:6;;30709:3;30701:16;;:24;;;;:::i;:::-;30675:6;::::0;30662:20:::1;::::0;:8;;:12:::1;:20::i;:::-;:24:::0;::::1;:74::i;:::-;30638:98;;30747:27;30777:80;30822:24;30839:6;;30830:3;30822:16;;:24;;;;:::i;:::-;30790:12;::::0;30777:26:::1;::::0;:8;;:12:::1;:26::i;:80::-;30747:110:::0;-1:-1:-1;30868:27:0::1;30898:76;30747:110:::0;30898:27:::1;:8:::0;30911:13;30898:12:::1;:27::i;:76::-;30868:106:::0;-1:-1:-1;31001:38:0::1;:13:::0;30868:106;31001:17:::1;:38::i;:::-;30985:54;;31052:52;31069:13;31084:19;31052:16;:52::i;:::-;30552:560;;;;30511:601::o:0;33687:414::-;33961:15;;:50;;-1:-1:-1;;;33961:50:0;;-1:-1:-1;;;;;2548:32:1;;;33961:50:0;;;2530:51:1;33787:29:0;;;;;;33961:15;;;;:40;;2503:18:1;;33961:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33915:96;;-1:-1:-1;33915:96:0;-1:-1:-1;33915:96:0;;34073:19;34083:8;34073:9;:19::i;:::-;34022:71;;;;;;33687:414;;;;;:::o;32294:81::-;32334:33;32349:10;32362:4;32334:6;:33::i;5850:380::-;-1:-1:-1;;;;;5986:19:0;;5978:68;;;;-1:-1:-1;;;5978:68:0;;13484:2:1;5978:68:0;;;13466:21:1;13523:2;13503:18;;;13496:30;13562:34;13542:18;;;13535:62;-1:-1:-1;;;13613:18:1;;;13606:34;13657:19;;5978:68:0;13282:400:1;5978:68:0;-1:-1:-1;;;;;6065:21:0;;6057:68;;;;-1:-1:-1;;;6057:68:0;;13889:2:1;6057:68:0;;;13871:21:1;13928:2;13908:18;;;13901:30;13967:34;13947:18;;;13940:62;-1:-1:-1;;;14018:18:1;;;14011:32;14060:19;;6057:68:0;13687:398:1;6057:68:0;-1:-1:-1;;;;;6138:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;6190:32;;762:25:1;;;6190:32:0;;735:18:1;6190:32:0;;;;;;;5850:380;;;:::o;8524:98::-;8582:7;8609:5;8613:1;8609;:5;:::i;:::-;8602:12;8524:98;-1:-1:-1;;;8524:98:0:o;6238:502::-;-1:-1:-1;;;;;2737:18:0;;;6373:24;2737:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;6440:37:0;;6436:297;;6540:6;6520:16;:26;;6494:117;;;;-1:-1:-1;;;6494:117:0;;14292:2:1;6494:117:0;;;14274:21:1;14331:2;14311:18;;;14304:30;14370:31;14350:18;;;14343:59;14419:18;;6494:117:0;14090:353:1;6494:117:0;6655:51;6664:5;6671:7;6699:6;6680:16;:25;6655:8;:51::i;34217:2107::-;-1:-1:-1;;;;;34361:12:0;;;;;;:5;:12;;;;;;;;34360:13;:28;;;;-1:-1:-1;;;;;;34378:10:0;;;;;;:5;:10;;;;;;;;34377:11;34360:28;34352:37;;;;;;34471:21;;34521:11;;34427:7;;34471:21;-1:-1:-1;;;34521:11:0;;;;:113;;;;-1:-1:-1;;;;;;34550:32:0;;;;;;:25;:32;;;;;;;;;:83;;-1:-1:-1;;;;;;34603:30:0;;;;;;:25;:30;;;;;;;;34550:83;34521:154;;;;-1:-1:-1;;;;;;34652:23:0;;;;;;:16;:23;;;;;;;;34651:24;34521:154;:193;;;;-1:-1:-1;;;;;;34693:21:0;;;;;;:16;:21;;;;;;;;34692:22;34521:193;34503:842;;;34791:15;34767:20;;:39;;34741:145;;;;-1:-1:-1;;;34741:145:0;;14650:2:1;34741:145:0;;;14632:21:1;14689:2;14669:18;;;14662:30;14728:34;14708:18;;;14701:62;-1:-1:-1;;;14779:18:1;;;14772:42;14831:19;;34741:145:0;14448:408:1;34741:145:0;34947:15;34923:20;;:39;;:97;;;;;35005:15;34983:19;;:37;34923:97;34901:372;;;35079:2;35055:21;:26;;;35163:18;;35130:14;;:29;;-1:-1:-1;;;35130:29:0;;-1:-1:-1;;;;;2548:32:1;;;35130:29:0;;;2530:51:1;35130:14:0;;;;:24;;2503:18:1;;35130:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:51;;35100:157;;;;-1:-1:-1;;;35100:157:0;;15063:2:1;35100:157:0;;;15045:21:1;;;15082:18;;;15075:30;15141:34;15121:18;;;15114:62;15193:18;;35100:157:0;14861:356:1;35100:157:0;35304:29;35313:5;35320:3;35325:7;35304:8;:29::i;:::-;35287:46;;34503:842;-1:-1:-1;;;;;35359:24:0;;;;;;:19;:24;;;;;;:29;;35355:104;;-1:-1:-1;;;;;35405:24:0;;;;;;:19;:24;;;;;35432:15;35405:42;;35355:104;-1:-1:-1;;;;;35474:30:0;;;;;;:25;:30;;;;;;;;35473:31;:64;;;;-1:-1:-1;;;;;;35509:28:0;;;;;;:23;:28;;;;;;;;35508:29;35473:64;35469:360;;;35554:22;35579:34;35598:14;35579;35589:3;35579:9;:14::i;:::-;:18;;:34::i;:::-;35554:59;;35693:51;35738:5;35693:40;35711:21;;35693:13;2116:12;;;2028:108;35693:13;:17;;:40::i;:51::-;35654:14;:90;;35628:189;;;;-1:-1:-1;;;35628:189:0;;15424:2:1;35628:189:0;;;15406:21:1;15463:2;15443:18;;;15436:30;15502:34;15482:18;;;15475:62;-1:-1:-1;;;15553:18:1;;;15546:35;15598:19;;35628:189:0;15222:401:1;35628:189:0;35539:290;35469:360;35841:43;35857:5;35864:3;35869:14;35841:15;:43::i;:::-;35895:21;:39;;;35950:15;;:45;;-1:-1:-1;;;35950:45:0;;-1:-1:-1;;;;;2548:32:1;;;35950:45:0;;;2530:51:1;35950:15:0;;;;:38;;2503:18:1;;35950:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35945:184;;36033:15;;-1:-1:-1;;;;;36033:15:0;:26;36068:5;36076:16;36068:5;36076:9;:16::i;:::-;36033:60;;-1:-1:-1;;;;;;36033:60:0;;;;;;;-1:-1:-1;;;;;9167:32:1;;;36033:60:0;;;9149:51:1;9216:18;;;9209:34;9122:18;;36033:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36012:106;;36144:15;;:43;;-1:-1:-1;;;36144:43:0;;-1:-1:-1;;;;;2548:32:1;;;36144:43:0;;;2530:51:1;36144:15:0;;;;:38;;2503:18:1;;36144:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36139:178;;36225:15;;-1:-1:-1;;;;;36225:15:0;:26;36260:3;36266:14;36260:3;36266:9;:14::i;:::-;36225:56;;-1:-1:-1;;;;;;36225:56:0;;;;;;;-1:-1:-1;;;;;9167:32:1;;;36225:56:0;;;9149:51:1;9216:18;;;9209:34;9122:18;;36225:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36204:102;34341:1983;;34217:2107;;;:::o;32383:1146::-;32489:15;;:72;;-1:-1:-1;;;32489:72:0;;-1:-1:-1;;;;;2548:32:1;;;32489:72:0;;;2530:51:1;32460:26:0;;32489:15;;:38;;2503:18:1;;32489:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32460:101;;32615:1;32594:18;:22;32572:117;;;;-1:-1:-1;;;32572:117:0;;16341:2:1;32572:117:0;;;16323:21:1;16380:2;16360:18;;;16353:30;16419:34;16399:18;;;16392:62;-1:-1:-1;;;16470:18:1;;;16463:43;16523:19;;32572:117:0;16139:409:1;32572:117:0;32700:17;32728:19;32765:9;32760:324;;32803:15;;:50;;-1:-1:-1;;;32803:50:0;;-1:-1:-1;;;;;11314:15:1;;;32803:50:0;;;11296:34:1;;;11346:18;;;11339:43;32803:15:0;;;;:30;;11231:18:1;;32803:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32791:62;;32760:324;;;32898:15;;:55;;-1:-1:-1;;;32898:55:0;;-1:-1:-1;;;;;11314:15:1;;;32898:55:0;;;11296:34:1;32947:4:0;11346:18:1;;;11339:43;32898:15:0;;;;:30;;11231:18:1;;32898:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32886:67;-1:-1:-1;32972:13:0;;32968:105;;33020:37;33037:9;33048:8;33020:16;:37::i;:::-;33006:51;;32968:105;33098:13;;33094:428;;33128:29;:17;9874:19;;9892:1;9874:19;;;9785:127;33128:29;33172:11;33186:27;:17;9755:14;;9663:114;33186:27;33228:18;;;;:13;:18;;;;;;;;:40;;;33283:30;;;;:44;;;33373:15;33342:28;;;;:46;;;;-1:-1:-1;;;;;33405:24:0;;;;;:14;:24;;;;;:34;;;;;;;;;;;;;;;;;33461:49;;17405:25:1;;;17446:18;;;17439:34;;;17489:18;;17482:60;;;;33228:18:0;;-1:-1:-1;33461:49:0;;17393:2:1;17378:18;33461:49:0;;;;;;;33113:409;32449:1080;;;32383:1146;;:::o;8418:98::-;8476:7;8503:5;8507:1;8503;:5;:::i;43068:721::-;43237:16;;;43251:1;43237:16;;;;;;;;43133:7;;43181:21;;43133:7;;43237:16;;;;;;;;;;;;-1:-1:-1;43237:16:0;43213:40;;43282:4;43264;43269:1;43264:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;43264:23:0;;;:7;;;;;;;;;;:23;;;;43308:15;;:22;;;-1:-1:-1;;;43308:22:0;;;;:15;;;;;:20;;:22;;;;;43264:7;;43308:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43298:4;43303:1;43298:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;43298:32:0;;;:7;;;;;;;;;:32;43373:15;;43341:63;;43358:4;;43373:15;43391:12;43341:8;:63::i;:::-;43415:15;;:197;;-1:-1:-1;;;43415:197:0;;-1:-1:-1;;;;;43415:15:0;;;;:66;;:197;;43496:12;;43415:15;;43539:4;;43566;;43586:15;;43415:197;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43625:19;43647:44;43673:17;43647:21;:25;;:44;;;;:::i;:::-;43709:43;;;18780:25:1;;;18836:2;18821:18;;18814:34;;;43625:66:0;;-1:-1:-1;43709:43:0;;18753:18:1;43709:43:0;;;;;;;43770:11;43068:721;-1:-1:-1;;;;43068:721:0:o;44472:419::-;44587:15;;44555:63;;44572:4;;-1:-1:-1;;;;;44587:15:0;44605:12;44555:8;:63::i;:::-;44629:15;;-1:-1:-1;;;;;44629:15:0;:31;44668:10;44702:4;44722:12;44629:15;;44781:7;10644:6;;-1:-1:-1;;;;;10644:6:0;;10579:79;44781:7;44629:200;;;;;;-1:-1:-1;;;;;;44629:200:0;;;-1:-1:-1;;;;;19218:15:1;;;44629:200:0;;;19200:34:1;19250:18;;;19243:34;;;;19293:18;;;19286:34;;;;19336:18;;;19329:34;19400:15;;;19379:19;;;19372:44;44803:15:0;19432:19:1;;;19425:35;19134:19;;44629:200:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;44845:38:0;;;18780:25:1;;;18836:2;18821:18;;18814:34;;;44845:38:0;;-1:-1:-1;18753:18:1;44845:38:0;;;;;;;;44472:419;;:::o;8312:98::-;8370:7;8397:5;8401:1;8397;:5;:::i;8630:98::-;8688:7;8715:5;8719:1;8715;:5;:::i;42690:370::-;42795:12;;42791:89;;42832:16;;42824:44;;42832:16;;;;-1:-1:-1;;;;;42832:16:0;;42824:44;;;;;;;;;;;;42832:16;42824:44;;;;;;;;;;;;;;;;;;;;;42791:89;42894:18;;42890:107;;42937:22;;42929:56;;-1:-1:-1;;;;;42937:22:0;;;;42929:56;;;;;42970:14;;42937:22;42929:56;42937:22;42929:56;42970:14;42937:22;42929:56;;;;;;;;;;;;;;;;;;;;;42890:107;43012:40;;;18780:25:1;;;18836:2;18821:18;;18814:34;;;43012:40:0;;18753:18:1;43012:40:0;18606:248:1;39888:1848:0;-1:-1:-1;;;;;40101:32:0;;40002:7;40101:32;;;:25;:32;;;;;;40002:7;;;;40101:32;;;:66;;-1:-1:-1;;;;;;40137:30:0;;;;;;:25;:30;;;;;;;;40101:66;40079:147;;;;-1:-1:-1;;;40079:147:0;;20109:2:1;40079:147:0;;;20091:21:1;20148:2;20128:18;;;20121:30;20187:33;20167:18;;;20160:61;20238:18;;40079:147:0;19907:355:1;40079:147:0;-1:-1:-1;;;;;40243:32:0;;;;;;:25;:32;;;;;;;;40239:1455;;;40299:32;40327:3;40299:23;40311:10;;40299:7;:11;;:23;;;;:::i;:32::-;40292:39;-1:-1:-1;40364:17:0;:7;40292:39;40364:11;:17::i;:::-;40346:35;;40398:43;40414:5;40429:4;40436;40398:15;:43::i;:::-;40463:35;;;-1:-1:-1;;;;;20525:15:1;;20507:34;;40486:4:0;20572:2:1;20557:18;;20550:43;20609:18;;;20602:34;;;40463:35:0;;20457:2:1;20442:18;40463:35:0;;;;;;;40239:1455;;;40531:20;40570:38;40593:5;40600:7;40570:22;:38::i;:::-;40566:174;;;-1:-1:-1;40644:11:0;;40566:174;;;40711:13;40718:5;40711:6;:13::i;:::-;40696:28;;40566:174;40763:34;40793:3;40763:25;:7;40775:12;40763:11;:25::i;:34::-;40756:41;;40812:20;40835:87;40918:3;40835:60;40865:29;40882:11;;40865:12;:16;;:29;;;;:::i;:::-;40835:7;;:29;:60::i;:87::-;40962:22;;40812:110;;-1:-1:-1;40962:40:0;;40812:110;40962:26;:40::i;:::-;40937:22;:65;41037:17;:7;41049:4;41037:11;:17::i;:::-;41019:35;;41071:43;41087:5;41102:4;41109;41071:15;:43::i;:::-;41129:20;41152:84;41199:22;;41152:24;41170:4;41152:9;:24::i;:84::-;41129:107;;41272:23;;41257:12;:38;41253:227;;;41321:7;;;;41316:95;;-1:-1:-1;41368:23:0;;41316:95;41431:33;41451:12;41431:19;:33::i;:::-;41523:21;;41498:22;;:46;41494:131;;;41565:44;41586:22;;41565:20;:44::i;:::-;41646:36;;;-1:-1:-1;;;;;20525:15:1;;20507:34;;41670:4:0;20572:2:1;20557:18;;20550:43;20609:18;;;20602:34;;;41646:36:0;;20457:2:1;20442:18;41646:36:0;;;;;;;40516:1178;;;40239:1455;41713:15;39888:1848;-1:-1:-1;;;;;39888:1848:0:o;4128:708::-;-1:-1:-1;;;;;4259:18:0;;4251:68;;;;-1:-1:-1;;;4251:68:0;;20849:2:1;4251:68:0;;;20831:21:1;20888:2;20868:18;;;20861:30;20927:34;20907:18;;;20900:62;-1:-1:-1;;;20978:18:1;;;20971:35;21023:19;;4251:68:0;20647:401:1;4251:68:0;-1:-1:-1;;;;;4338:16:0;;4330:64;;;;-1:-1:-1;;;4330:64:0;;21255:2:1;4330:64:0;;;21237:21:1;21294:2;21274:18;;;21267:30;21333:34;21313:18;;;21306:62;-1:-1:-1;;;21384:18:1;;;21377:33;21427:19;;4330:64:0;21053:399:1;4330:64:0;-1:-1:-1;;;;;4480:15:0;;4458:19;4480:15;;;;;;;;;;;4528:21;;;;4506:109;;;;-1:-1:-1;;;4506:109:0;;21659:2:1;4506:109:0;;;21641:21:1;21698:2;21678:18;;;21671:30;21737:34;21717:18;;;21710:62;-1:-1:-1;;;21788:18:1;;;21781:36;21834:19;;4506:109:0;21457:402:1;4506:109:0;-1:-1:-1;;;;;4651:15:0;;;:9;:15;;;;;;;;;;;4669:20;;;4651:38;;4711:13;;;;;;;;:23;;4683:6;;4651:9;4711:23;;4683:6;;4711:23;:::i;:::-;;;;;;;;4767:2;-1:-1:-1;;;;;4752:26:0;4761:4;-1:-1:-1;;;;;4752:26:0;;4771:6;4752:26;;;;762:25:1;;750:2;735:18;;616:177;4752:26:0;;;;;;;;4791:37;39334:324;43797:667;43891:7;43916:27;43946:24;43964:4;43946:9;:24::i;:::-;44005:16;;;44019:1;44005:16;;;;;;;;43916:54;;-1:-1:-1;43981:21:0;;44005:16;;;;;;;;;;-1:-1:-1;;44042:15:0;;:22;;;-1:-1:-1;;;44042:22:0;;;;43981:40;;-1:-1:-1;;;;;;44042:15:0;;;;:20;;-1:-1:-1;44042:22:0;;;;;;;;;;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44032:4;44037:1;44032:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;44032:32:0;;;-1:-1:-1;;;;;44032:32:0;;;;;44093:4;44075;44080:1;44075:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;44075:23:0;;;:7;;;;;;;;;:23;44111:15;;:140;;-1:-1:-1;;;44111:140:0;;:15;;;:66;;44199:10;;44111:140;;:15;;44224:4;;44230:3;;44235:15;;44111:140;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44264:22;44289:73;44332:19;44289:24;44307:4;44289:9;:24::i;:73::-;44380:44;;;18780:25:1;;;18836:2;18821:18;;18814:34;;;44264:98:0;;-1:-1:-1;44380:44:0;;18753:18:1;44380:44:0;;;;;;;44442:14;43797:667;-1:-1:-1;;;;;43797:667:0:o;45457:521::-;45627:22;;-1:-1:-1;;;;;45599:25:0;;45559:4;45599:25;;;:20;:25;;;;;;45559:4;;45666:15;;45599:50;;45627:22;45599:50;:::i;:::-;:82;45581:365;;-1:-1:-1;;;;;45708:25:0;;;;;;:20;:25;;;;;45736:15;45708:43;;45840:23;;45821:52;;45869:3;;45821:43;;:14;45729:3;45821:9;:14::i;:52::-;45788:12;:85;45766:169;;-1:-1:-1;45915:4:0;45908:11;;45766:169;-1:-1:-1;45965:5:0;45457:521;;;;:::o;41744:938::-;41814:26;41843:33;41872:3;41843:24;41860:6;;41843:12;:16;;:24;;;;:::i;:33::-;41814:62;-1:-1:-1;41889:21:0;41913:25;41814:62;41936:1;41913:22;:25::i;:::-;41889:49;-1:-1:-1;41949:21:0;41973:31;:12;41889:49;41973:16;:31::i;:::-;41949:55;;42017:16;42036:31;42053:13;42036:16;:31::i;:::-;42017:50;;42080:19;42102:29;42127:3;42102:20;42115:6;;42102:8;:12;;:20;;;;:::i;:29::-;42080:51;;42142:21;42166:29;42191:3;42166:20;42179:6;;42166:8;:12;;:20;;;;:::i;:29::-;42142:53;;42206:27;42236:35;42267:3;42236:26;42249:12;;42236:8;:12;;:26;;;;:::i;:35::-;42206:65;-1:-1:-1;42282:27:0;42312:111;42206:65;42312:72;42370:13;42312:72;:8;42339:11;42312:26;:39::i;:111::-;42282:141;-1:-1:-1;42450:38:0;:13;42282:141;42450:17;:38::i;:::-;42434:54;;42501:52;42518:13;42533:19;42501:16;:52::i;:::-;42586:1;42570:13;:17;:36;;;;;42605:1;42591:11;:15;42570:36;42566:109;;;42623:40;42636:13;42651:11;42623:12;:40::i;:::-;41803:879;;;;;;;;41744:938;:::o;44899:550::-;44970:17;44990:30;45007:12;44990:16;:30::i;:::-;45058:22;;44970:50;;-1:-1:-1;45058:40:0;;45085:12;45058:26;:40::i;:::-;45033:22;:65;45148:16;;45109:22;;45134:31;;:9;;:13;:31::i;:::-;45205:15;;45197:80;;45109:56;;-1:-1:-1;45179:12:0;;-1:-1:-1;;;;;45205:15:0;;;;45109:56;;45179:12;45197:80;45179:12;45197:80;45109:56;45205:15;45197:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45178:99;;;45294:7;45290:152;;;45323:24;;762:25:1;;;45323:24:0;;750:2:1;735:18;45323:24:0;;;;;;;45290:152;;;45399:16;;:31;;45420:9;45399:20;:31::i;:::-;45380:16;:50;44959:490;;;44899:550;:::o;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;798:131::-;-1:-1:-1;;;;;873:31:1;;863:42;;853:70;;919:1;916;909:12;853:70;798:131;:::o;934:315::-;1002:6;1010;1063:2;1051:9;1042:7;1038:23;1034:32;1031:52;;;1079:1;1076;1069:12;1031:52;1118:9;1105:23;1137:31;1162:5;1137:31;:::i;:::-;1187:5;1239:2;1224:18;;;;1211:32;;-1:-1:-1;;;934:315:1:o;1446:180::-;1505:6;1558:2;1546:9;1537:7;1533:23;1529:32;1526:52;;;1574:1;1571;1564:12;1526:52;-1:-1:-1;1597:23:1;;1446:180;-1:-1:-1;1446:180:1:o;1631:248::-;1699:6;1707;1760:2;1748:9;1739:7;1735:23;1731:32;1728:52;;;1776:1;1773;1766:12;1728:52;-1:-1:-1;;1799:23:1;;;1869:2;1854:18;;;1841:32;;-1:-1:-1;1631:248:1:o;1884:456::-;1961:6;1969;1977;2030:2;2018:9;2009:7;2005:23;2001:32;1998:52;;;2046:1;2043;2036:12;1998:52;2085:9;2072:23;2104:31;2129:5;2104:31;:::i;:::-;2154:5;-1:-1:-1;2211:2:1;2196:18;;2183:32;2224:33;2183:32;2224:33;:::i;:::-;1884:456;;2276:7;;-1:-1:-1;;;2330:2:1;2315:18;;;;2302:32;;1884:456::o;2781:247::-;2840:6;2893:2;2881:9;2872:7;2868:23;2864:32;2861:52;;;2909:1;2906;2899:12;2861:52;2948:9;2935:23;2967:31;2992:5;2967:31;:::i;3033:454::-;3128:6;3136;3144;3152;3160;3213:3;3201:9;3192:7;3188:23;3184:33;3181:53;;;3230:1;3227;3220:12;3181:53;-1:-1:-1;;3253:23:1;;;3323:2;3308:18;;3295:32;;-1:-1:-1;3374:2:1;3359:18;;3346:32;;3425:2;3410:18;;3397:32;;-1:-1:-1;3476:3:1;3461:19;3448:33;;-1:-1:-1;3033:454:1;-1:-1:-1;3033:454:1:o;3492:388::-;3560:6;3568;3621:2;3609:9;3600:7;3596:23;3592:32;3589:52;;;3637:1;3634;3627:12;3589:52;3676:9;3663:23;3695:31;3720:5;3695:31;:::i;:::-;3745:5;-1:-1:-1;3802:2:1;3787:18;;3774:32;3815:33;3774:32;3815:33;:::i;:::-;3867:7;3857:17;;;3492:388;;;;;:::o;3885:118::-;3971:5;3964:13;3957:21;3950:5;3947:32;3937:60;;3993:1;3990;3983:12;4008:382;4073:6;4081;4134:2;4122:9;4113:7;4109:23;4105:32;4102:52;;;4150:1;4147;4140:12;4102:52;4189:9;4176:23;4208:31;4233:5;4208:31;:::i;:::-;4258:5;-1:-1:-1;4315:2:1;4300:18;;4287:32;4328:30;4287:32;4328:30;:::i;4603:156::-;4669:20;;4729:4;4718:16;;4708:27;;4698:55;;4749:1;4746;4739:12;4698:55;4603:156;;;:::o;4764:182::-;4821:6;4874:2;4862:9;4853:7;4849:23;4845:32;4842:52;;;4890:1;4887;4880:12;4842:52;4913:27;4930:9;4913:27;:::i;5275:387::-;5359:6;5367;5375;5383;5436:3;5424:9;5415:7;5411:23;5407:33;5404:53;;;5453:1;5450;5443:12;5404:53;5476:27;5493:9;5476:27;:::i;:::-;5466:37;5550:2;5535:18;;5522:32;;-1:-1:-1;5601:2:1;5586:18;;5573:32;;5652:2;5637:18;5624:32;;-1:-1:-1;5275:387:1;-1:-1:-1;;;5275:387:1:o;5667:615::-;5753:6;5761;5814:2;5802:9;5793:7;5789:23;5785:32;5782:52;;;5830:1;5827;5820:12;5782:52;5870:9;5857:23;5899:18;5940:2;5932:6;5929:14;5926:34;;;5956:1;5953;5946:12;5926:34;5994:6;5983:9;5979:22;5969:32;;6039:7;6032:4;6028:2;6024:13;6020:27;6010:55;;6061:1;6058;6051:12;6010:55;6101:2;6088:16;6127:2;6119:6;6116:14;6113:34;;;6143:1;6140;6133:12;6113:34;6196:7;6191:2;6181:6;6178:1;6174:14;6170:2;6166:23;6162:32;6159:45;6156:65;;;6217:1;6214;6207:12;6156:65;6248:2;6240:11;;;;;6270:6;;-1:-1:-1;5667:615:1;;-1:-1:-1;;;;5667:615:1:o;6287:241::-;6343:6;6396:2;6384:9;6375:7;6371:23;6367:32;6364:52;;;6412:1;6409;6402:12;6364:52;6451:9;6438:23;6470:28;6492:5;6470:28;:::i;6533:383::-;6610:6;6618;6626;6679:2;6667:9;6658:7;6654:23;6650:32;6647:52;;;6695:1;6692;6685:12;6647:52;6734:9;6721:23;6753:31;6778:5;6753:31;:::i;:::-;6803:5;6855:2;6840:18;;6827:32;;-1:-1:-1;6906:2:1;6891:18;;;6878:32;;6533:383;-1:-1:-1;;;6533:383:1:o;6921:849::-;7148:2;7200:21;;;7270:13;;7173:18;;;7292:22;;;7119:4;;7148:2;7333;;7351:18;;;;7392:15;;;7119:4;7435:309;7449:6;7446:1;7443:13;7435:309;;;7508:13;;7546:9;;7534:22;;7596:11;;;7590:18;7576:12;;;7569:40;7649:11;;7643:18;7629:12;;;7622:40;7691:4;7682:14;;;;7719:15;;;;7471:1;7464:9;7435:309;;;-1:-1:-1;7761:3:1;;6921:849;-1:-1:-1;;;;;;;6921:849:1:o;7775:380::-;7854:1;7850:12;;;;7897;;;7918:61;;7972:4;7964:6;7960:17;7950:27;;7918:61;8025:2;8017:6;8014:14;7994:18;7991:38;7988:161;;8071:10;8066:3;8062:20;8059:1;8052:31;8106:4;8103:1;8096:15;8134:4;8131:1;8124:15;7988:161;;7775:380;;;:::o;8160:356::-;8362:2;8344:21;;;8381:18;;;8374:30;8440:34;8435:2;8420:18;;8413:62;8507:2;8492:18;;8160:356::o;8521:184::-;8591:6;8644:2;8632:9;8623:7;8619:23;8615:32;8612:52;;;8660:1;8657;8650:12;8612:52;-1:-1:-1;8683:16:1;;8521:184;-1:-1:-1;8521:184:1:o;8710:127::-;8771:10;8766:3;8762:20;8759:1;8752:31;8802:4;8799:1;8792:15;8826:4;8823:1;8816:15;8842:128;8882:3;8913:1;8909:6;8906:1;8903:13;8900:39;;;8919:18;;:::i;:::-;-1:-1:-1;8955:9:1;;8842:128::o;9660:127::-;9721:10;9716:3;9712:20;9709:1;9702:31;9752:4;9749:1;9742:15;9776:4;9773:1;9766:15;9792:135;9831:3;9852:17;;;9849:43;;9872:18;;:::i;:::-;-1:-1:-1;9919:1:1;9908:13;;9792:135::o;9932:175::-;9969:3;10013:4;10006:5;10002:16;10042:4;10033:7;10030:17;10027:43;;10050:18;;:::i;:::-;10099:1;10086:15;;9932:175;-1:-1:-1;;9932:175:1:o;10828:251::-;10898:6;10951:2;10939:9;10930:7;10926:23;10922:32;10919:52;;;10967:1;10964;10957:12;10919:52;10999:9;10993:16;11018:31;11043:5;11018:31;:::i;11393:245::-;11460:6;11513:2;11501:9;11492:7;11488:23;11484:32;11481:52;;;11529:1;11526;11519:12;11481:52;11561:9;11555:16;11580:28;11602:5;11580:28;:::i;11998:168::-;12038:7;12104:1;12100;12096:6;12092:14;12089:1;12086:21;12081:1;12074:9;12067:17;12063:45;12060:71;;;12111:18;;:::i;:::-;-1:-1:-1;12151:9:1;;11998:168::o;12171:125::-;12211:4;12239:1;12236;12233:8;12230:34;;;12244:18;;:::i;:::-;-1:-1:-1;12281:9:1;;12171:125::o;12651:127::-;12712:10;12707:3;12703:20;12700:1;12693:31;12743:4;12740:1;12733:15;12767:4;12764:1;12757:15;12783:112;12815:1;12841;12831:35;;12846:18;;:::i;:::-;-1:-1:-1;12880:9:1;;12783:112::o;12900:127::-;12961:10;12956:3;12952:20;12949:1;12942:31;12992:4;12989:1;12982:15;13016:4;13013:1;13006:15;13032:245;13111:6;13119;13172:2;13160:9;13151:7;13147:23;13143:32;13140:52;;;13188:1;13185;13178:12;13140:52;-1:-1:-1;;13211:16:1;;13267:2;13252:18;;;13246:25;13211:16;;13246:25;;-1:-1:-1;13032:245:1:o;17553:461::-;17606:3;17644:5;17638:12;17671:6;17666:3;17659:19;17697:4;17726:2;17721:3;17717:12;17710:19;;17763:2;17756:5;17752:14;17784:1;17794:195;17808:6;17805:1;17802:13;17794:195;;;17873:13;;-1:-1:-1;;;;;17869:39:1;17857:52;;17929:12;;;;17964:15;;;;17905:1;17823:9;17794:195;;;-1:-1:-1;18005:3:1;;17553:461;-1:-1:-1;;;;;17553:461:1:o;18019:582::-;18318:6;18307:9;18300:25;18361:6;18356:2;18345:9;18341:18;18334:34;18404:3;18399:2;18388:9;18384:18;18377:31;18281:4;18425:57;18477:3;18466:9;18462:19;18454:6;18425:57;:::i;:::-;-1:-1:-1;;;;;18518:32:1;;;;18513:2;18498:18;;18491:60;-1:-1:-1;18582:3:1;18567:19;18560:35;18417:65;18019:582;-1:-1:-1;;;18019:582:1:o;19471:306::-;19559:6;19567;19575;19628:2;19616:9;19607:7;19603:23;19599:32;19596:52;;;19644:1;19641;19634:12;19596:52;19673:9;19667:16;19657:26;;19723:2;19712:9;19708:18;19702:25;19692:35;;19767:2;19756:9;19752:18;19746:25;19736:35;;19471:306;;;;;:::o;19782:120::-;19822:1;19848;19838:35;;19853:18;;:::i;:::-;-1:-1:-1;19887:9:1;;19782:120::o;21864:510::-;22135:6;22124:9;22117:25;22178:3;22173:2;22162:9;22158:18;22151:31;22098:4;22199:57;22251:3;22240:9;22236:19;22228:6;22199:57;:::i;:::-;-1:-1:-1;;;;;22292:32:1;;;;22287:2;22272:18;;22265:60;-1:-1:-1;22356:2:1;22341:18;22334:34;22191:65;21864:510;-1:-1:-1;;21864:510:1:o

Swarm Source

ipfs://a1a3e832f086de6cb61f3b31813c5ae482d8dd06bf6b057ed57fae724de6effc

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

OVERVIEW

Diamond deals to both issues via a tax structure that wrecks JEETS, and a utility that slashes GAS.

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.