ETH Price: $3,392.23 (+1.72%)

Token

EverRise 2.0 (RISE2.0)
 

Overview

Max Total Supply

100,000,000,000 RISE2.0

Holders

71

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
ablue.eth
Balance
178,767.446255878185994585 RISE2.0

Value
$0.00
0x0152aeb9E07f64aA6EE041F18AC647c75100000B
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
EverRise2

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-07-19
*/

// ██████  ███████ ██    ██  ██████  ██      ██    ██ ███████ ██  ██████  ███    ██                   
// ██   ██ ██      ██    ██ ██    ██ ██      ██    ██     ██  ██ ██    ██ ████   ██                  
// ██████  █████   ██    ██ ██    ██ ██      ██    ██   ██    ██ ██    ██ ██ ██  ██                   
// ██   ██ ██       ██  ██  ██    ██ ██      ██    ██  ██     ██ ██    ██ ██  ██ ██                   
// ██   ██ ███████   ████    ██████  ███████  ██████  ███████ ██  ██████  ██   ████    

// SAFU CONTRACT BY REVOLUZION

//Revoluzion Ecosystem
//WEB: https://revoluzion.io
//DAPP: https://revoluzion.app

// SPDX-License-Identifier: MIT
pragma solidity 0.8.18;

/********************************************************************************************
  INTERFACE
********************************************************************************************/

interface IERC20 {
    
    // EVENT 

    event Transfer(address indexed from, address indexed to, uint256 value);
    
    event Approval(address indexed owner, address indexed spender, uint256 value);

    // FUNCTION

    function name() external view returns (string memory);
    
    function symbol() external view returns (string memory);
    
    function decimals() external view returns (uint8);
    
    function totalSupply() external view returns (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);
}

interface IFactory {

    // FUNCTION

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

interface IRouter {

    // FUNCTION

    function WETH() external pure returns (address);
        
    function factory() external pure returns (address);

    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 swapExactTokensForTokens(uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline) external returns (uint256[] memory amounts);
}

interface IAuthError {

    // ERROR

    error InvalidOwner(address account);

    error UnauthorizedAccount(address account);

    error InvalidAuthorizedAccount(address account);

    error CurrentAuthorizedState(address account, bool state);
}

interface ICommonError {

    // ERROR

    error CannotUseCurrentAddress(address current);

    error CannotUseCurrentValue(uint256 current);

    error CannotUseCurrentState(bool current);

    error InvalidAddress(address invalid);

    error InvalidValue(uint256 invalid);
}

interface IRewardDistributor {

    // FUNCTION

    function isRewardDistributor() external pure returns (bool);
    
    function setDistributionCriteria(uint256 distribution) external;

    function setShare(address shareholder, uint256 amount) external;

    function deposit(uint256 amountToRedeem) external;

    function process(uint256 gas) external;

    function distributeReward(address shareholder) external;

}

/********************************************************************************************
  ACCESS
********************************************************************************************/

abstract contract Auth is IAuthError {
    
    // DATA

    address private _owner;

    // MAPPING

    mapping(address => bool) public authorization;

    // MODIFIER

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    modifier authorized() {
        _checkAuthorized();
        _;
    }

    // CONSTRUCCTOR

    constructor(address initialOwner) {
        _transferOwnership(initialOwner);
        authorization[initialOwner] = true;
        if (initialOwner != msg.sender) {
            authorization[msg.sender] = true;
        }
    }

    // EVENT
    
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    event UpdateAuthorizedAccount(address authorizedAccount, address caller, bool state, uint256 timestamp);

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

    function _checkOwner() internal view virtual {
        if (owner() != msg.sender) {
            revert UnauthorizedAccount(msg.sender);
        }
    }

    function _checkAuthorized() internal view virtual {
        if (!authorization[msg.sender]) {
            revert UnauthorizedAccount(msg.sender);
        }
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        if (newOwner == address(0)) {
            revert InvalidOwner(address(0));
        }
        _transferOwnership(newOwner);
    }

    function authorize(address account) public virtual onlyOwner {
        if (account == address(0) || account == address(0xdead)) {
            revert InvalidAuthorizedAccount(account);
        }
        _authorization(account, msg.sender, true);
    }

    function unauthorize(address account) public virtual onlyOwner {
        if (account == address(0) || account == address(0xdead)) {
            revert InvalidAuthorizedAccount(account);
        }
        _authorization(account, msg.sender, false);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }

    function _authorization(address account, address caller, bool state) internal virtual {
        if (authorization[account] == state) {
            revert CurrentAuthorizedState(account, state);
        }
        authorization[account] = state;
        emit UpdateAuthorizedAccount(account, caller, state, block.timestamp);
    }
}

/********************************************************************************************
  REWARD
********************************************************************************************/

contract RewardDistributor is Auth, ICommonError, IRewardDistributor {

    // DATA

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

    IRouter public router;

    bool private constant ISREWARDDISTRIBUTOR = true;

    uint256 public minDistribution = 1 gwei;
    uint256 public maxContinuousDistribution = 10;
    uint256 public rewardsPerShare = 0;
    uint256 public currentIndex = 0;
    uint256 public totalShares = 0;
    uint256 public totalRewards = 0; 
    uint256 public totalDistributed = 0;

    uint256 public constant ACCURACY = 1_000_000_000_000_000_000 ether;

    address[] public shareholders;

    address public immutable token;

    // MAPPING

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

    // MODIFIER

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

    // CONSTRUCTOR 

    constructor (
        address tokenAddress,
        address newOwner, 
        address routerAddress
    ) Auth (newOwner) {
        if (tokenAddress == address(0)) { revert InvalidAddress(address(0)); }
        token = tokenAddress;
        _transferOwnership(newOwner);

        router = IRouter(routerAddress);
        shareholderClaims[newOwner] = 0;
    }

    // EVENT

    event UpdateRouter(address oldRouter, address newRouter, uint256 timestamp);

    event UpdateMaxContinuousDistribution(uint256 oldMaxContinuousDistribution, uint256 newMaxContinuousDistribution, uint256 timestamp);

    event TotalSharesUpdates(uint256 initialTotal, uint256 totalShares, uint256 timestamp);

    // FUNCTION

    /* General */

    receive() external payable {}
    
    function wNative() external onlyOwner {
        address beneficiary = token;
        payable(beneficiary).transfer(address(this).balance);
    }

    function isRewardDistributor() external override pure returns (bool) {
        return ISREWARDDISTRIBUTOR;
    } 

    /* Update */

    function updateMaxContinuousDistribution(uint256 newMaxContinuousDistribution) external authorized {
        require(maxContinuousDistribution <= 20, "Update Max Continuous Distribution: Max distribution for reward should be lesser or equal to 20 at one time.");
        if (newMaxContinuousDistribution == maxContinuousDistribution) { revert CannotUseCurrentValue(newMaxContinuousDistribution); }
        uint256 oldMaxContinuousDistribution = maxContinuousDistribution;
        maxContinuousDistribution = newMaxContinuousDistribution;
        emit UpdateMaxContinuousDistribution(oldMaxContinuousDistribution, newMaxContinuousDistribution, block.timestamp);
    }

    function updateRouter(address newRouter) external authorized {
        if (address(router) == newRouter) { revert CannotUseCurrentAddress(newRouter); }
        address oldRouter = address(router);
        router = IRouter(newRouter);
        emit UpdateRouter(oldRouter, newRouter, block.timestamp);
    }

    function setDistributionCriteria(uint256 distributionMin) external override authorized {
        if (minDistribution == distributionMin) { revert CannotUseCurrentValue(distributionMin); }
        minDistribution = distributionMin;
    }

    /* Check */

    function shouldDistribute(address shareholder) internal view returns (bool) {
        return getUnpaidEarnings(shareholder) > minDistribution;
    }

    function getCumulativeRewards(uint256 share) internal view returns (uint256) {
        return share * rewardsPerShare / ACCURACY;
    }

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

        uint256 shareholderTotalRewards = getCumulativeRewards(shares[shareholder].amount);
        uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;

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

        return shareholderTotalRewards - shareholderTotalExcluded;
    }

    /* Reward */

    function deposit(uint256 amount) external override {
        totalRewards = totalRewards + amount;
        rewardsPerShare = rewardsPerShare + (ACCURACY * amount / totalShares);
        IERC20(token).transferFrom(address(token), address(this), amount);
    }

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

        if (shareholderCount == 0) {
            return;
        }

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

        while (gasUsed < gas && iterations < maxContinuousDistribution && iterations < shareholderCount) {
            if (currentIndex >= shareholderCount) {
                currentIndex -= shareholderCount;
            }

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

            gasUsed = gasUsed + (gasLeft - gasleft());
            gasLeft = gasleft();
            iterations++;
        }
        
    }

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

        uint256 amount = getUnpaidEarnings(shareholder);
        
        if (amount > 0) {
            totalDistributed += amount;
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder].totalRealised + amount;
            shares[shareholder].totalExcluded = getCumulativeRewards(shares[shareholder].amount);
            require(IERC20(token).transfer(shareholder, amount), "Distribute Reward: There's something wrong with transfer function.");
        }
    }

    function tallyReward(uint256 initialShares, uint256 amount, address shareholder) internal {
        if (initialShares == 0) {
            return;
        }

        if (amount > 0) {
            totalDistributed += amount;
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder].totalRealised + amount;
            shares[shareholder].totalExcluded = getCumulativeRewards(initialShares);
            require(IERC20(token).transfer(shareholder, amount), "Tally Reward: There's something wrong with transfer function.");
        }
    }

    function claimReward() external {
        distributeReward(msg.sender);
    }

    /* Shares */
    
    function setShare(address shareholder, uint256 amount) external override onlyToken {
        uint256 initialShares = shares[shareholder].amount;
        uint256 unpaid = getUnpaidEarnings(shareholder);

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

        uint256 initialTotal = totalShares;
        totalShares = totalShares - shares[shareholder].amount + amount;
        emit TotalSharesUpdates(initialTotal, totalShares, block.timestamp);
        shares[shareholder].amount = amount;
        shares[shareholder].totalExcluded = getCumulativeRewards(shares[shareholder].amount);

        if (initialShares > 0) {
            tallyReward(initialShares, unpaid, shareholder);
        }
    } 

    /* Shareholders */

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

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

/********************************************************************************************
  TOKEN
********************************************************************************************/

contract EverRise2 is Auth, ICommonError, IERC20 {

    // DATA

    IRouter public router;

    IRewardDistributor public immutable distributor;

    string private constant NAME = "EverRise 2.0";
    string private constant SYMBOL = "RISE2.0";

    uint8 private constant DECIMALS = 18;

    uint256 private _totalSupply;
    
    uint256 public constant FEEDENOMINATOR = 10_000;
    uint256 public constant TRIGGERZEUSCOOLDOWN = 12 hours;

    uint256 public buyMarketingFee = 100;
    uint256 public buyBuybackFee = 100;
    uint256 public buyRewardFee = 100;
    uint256 public sellMarketingFee = 100;
    uint256 public sellBuybackFee = 100;
    uint256 public sellRewardFee = 100;
    uint256 public transferMarketingFee = 0;
    uint256 public transferBuybackFee = 0;
    uint256 public transferRewardFee = 0;
    uint256 public marketingFeeCollected = 0;
    uint256 public buybackFeeCollected = 0;
    uint256 public rewardFeeCollected = 0;
    uint256 public totalFeeCollected = 0;
    uint256 public marketingFeeRedeemed = 0;
    uint256 public buybackFeeRedeemed = 0;
    uint256 public rewardFeeRedeemed = 0;
    uint256 public totalFeeRedeemed = 0;
    uint256 public totalTriggerZeusBuyback = 0;
    uint256 public lastTriggerZeusTimestamp = 0;
    uint256 public distributorGas = 30_000;
    uint256 public minSwap = 100 ether;

    bool private constant ISRISE2 = true;

    bool public tradeEnabled = false;
    bool public presaleFinalized = false;
    bool public isRewardActive = false;
    bool public isFeeActive = false;
    bool public isFeeLocked = false;
    bool public isSwapEnabled = false;
    bool public inSwap = false;

    address public immutable projectOwner;

    address public constant ZERO = address(0);
    address public constant DEAD = address(0xdead);

    address public marketingReceiver = 0x60968dF59FDD7865aBb1fd837cD06504c6a1a65a;

    address public pair;
    address public presaleAddress;
    address public presaleFactory;
    
    // MAPPING

    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) public isExcludeFromFees;
    mapping(address => bool) public isRewardExempt;

    // MODIFIER

    modifier swapping() {
        inSwap = true;
        _;
        inSwap = false;
    }

    // ERROR

    error InvalidRewardDistributor(IRewardDistributor distributorAddres);

    error InvalidTotalFee(uint256 current, uint256 max);

    error InvalidTradeEnabledState(bool current);

    error InvalidFeeActiveState(bool current);

    error InvalidRewardActiveState(bool current);

    error InvalidSwapEnabledState(bool current);

    error PresaleAlreadyFinalized(bool current);

    error TriggerZeusBuybackInCooldown(uint256 timeleft);

    error FeeLocked();

    // CONSTRUCTOR

    constructor(
        address routerAddress,
        address projectOwnerAddress
    ) Auth (msg.sender) {
        _mint(msg.sender, 100_000_000_000 * 10**DECIMALS);
        if (projectOwnerAddress == ZERO) { revert InvalidAddress(projectOwnerAddress); }
        projectOwner = projectOwnerAddress;

        distributor = new RewardDistributor(address(this), msg.sender, routerAddress);
        router = IRouter(routerAddress);
        pair = IFactory(router.factory()).createPair(address(this), router.WETH());

        isExcludeFromFees[msg.sender] = true;
        isExcludeFromFees[projectOwner] = true;
        isExcludeFromFees[address(router)] = true;
        isExcludeFromFees[address(distributor)] = true;

        isRewardExempt[pair] = true;
        isRewardExempt[DEAD] = true;
        isRewardExempt[ZERO] = true;
        isRewardExempt[address(this)] = true;
        isRewardExempt[address(distributor)] = true;

        authorize(address(distributor));
    }

    // EVENT

    event UpdateRouter(address oldRouter, address newRouter, address caller, uint256 timestamp);

    event UpdateMinSwap(uint256 oldMinSwap, uint256 newMinSwap, address caller, uint256 timestamp);

    event UpdateDistributorGas(uint256 oldDistributorGas, uint256 newDistributorGas, address caller, uint256 timestamp);

    event UpdateFeeActive(bool oldStatus, bool newStatus, address caller, uint256 timestamp);

    event UpdateBuyFee(uint256 oldBuyMarketingFee, uint256 oldBuyBuybackFee, uint256 oldBuyRewardFee, uint256 newBuyMarketingFee, uint256 newBuyBuybackFee, uint256 newBuyRewardFee, address caller, uint256 timestamp);

    event UpdateSellFee(uint256 oldSellMarketingFee, uint256 oldSellBuybackFee, uint256 oldSellRewardFee, uint256 newSellMarketingFee, uint256 newSellBuybackFee, uint256 newSellRewardFee, address caller, uint256 timestamp);

    event UpdateTransferFee(uint256 oldTransferMarketingFee, uint256 oldTransferBuybackFee, uint256 oldTransferRewardFee, uint256 newTransferMarketingFee, uint256 newTransferBuybackFee, uint256 newTransferRewardFee, address caller, uint256 timestamp);

    event UpdateSwapEnabled(bool oldStatus, bool newStatus, address caller, uint256 timestamp);

    event UpdateMarketingReceiver(address oldMarketingReceiver, address newMarketingReceiver, address caller, uint256 timestamp);
        
    event AutoRedeem(uint256 marketingFeeDistribution, uint256 buybackFeeDistribution, uint256 rewardFeeDistribution, uint256 amountToRedeem, address caller, uint256 timestamp);

    event SetPresaleAddress(address adr, address caller, uint256 timestamp);

    event SetPresaleFactory(address adr, address caller, uint256 timestamp);

    // FUNCTION

    /* General */

    receive() external payable {}

    function enableTrading() external onlyOwner {
        if (tradeEnabled) { revert InvalidTradeEnabledState(tradeEnabled); }
        if (isFeeActive) { revert InvalidFeeActiveState(isFeeActive); }
        if (isSwapEnabled) { revert InvalidSwapEnabledState(isSwapEnabled); }
        tradeEnabled = true;
        isFeeActive = true;
        isSwapEnabled = true;
        presaleFinalized = true;
        isRewardActive = true;
    }

    function finalizePresale() external authorized {
        if (presaleFinalized) { revert PresaleAlreadyFinalized(presaleFinalized); }
        if (isFeeActive) { revert InvalidFeeActiveState(isFeeActive); }
        if (isSwapEnabled) { revert InvalidSwapEnabledState(isSwapEnabled); }
        isFeeActive = true;
        isSwapEnabled = true;
        presaleFinalized = true;
    }

    function lockFees() external onlyOwner {
        if (isFeeLocked) { revert FeeLocked(); }
        isFeeLocked = true;
    }

    /* Reward */

    function claimReward() external {
        if (!distributor.isRewardDistributor()) { revert InvalidRewardDistributor(distributor); }
        try distributor.distributeReward(msg.sender) {} catch {}
    }

    /* Redeem */

    function redeemAllMarketingFee() external {
        uint256 amountToRedeem = marketingFeeCollected - marketingFeeRedeemed;
        
        _redeemMarketingFee(amountToRedeem);
    }

    function redeemPartialMarketingFee(uint256 amountToRedeem) external {
        require(amountToRedeem <= marketingFeeCollected - marketingFeeRedeemed, "Redeem Partial Marketing Fee: Insufficient marketing fee collected.");
        
        _redeemMarketingFee(amountToRedeem);
    }

    function _redeemMarketingFee(uint256 amountToRedeem) internal swapping { 
        marketingFeeRedeemed += amountToRedeem;
        totalFeeRedeemed += amountToRedeem;
 
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

        _approve(address(this), address(router), amountToRedeem);

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToRedeem,
            0,
            path,
            marketingReceiver,
            block.timestamp
        );
    }

    function redeemAllBuybackFee() external {
        uint256 amountToRedeem = buybackFeeCollected - buybackFeeRedeemed;
        
        _redeemBuybackFee(amountToRedeem);
    }

    function redeemPartialBuybackFee(uint256 amountToRedeem) external {
        require(amountToRedeem <= buybackFeeCollected - buybackFeeRedeemed, "Redeem Partial Buyback Fee: Insufficient marketing fee collected.");
        
        _redeemBuybackFee(amountToRedeem);
    }

    function _redeemBuybackFee(uint256 amountToRedeem) internal swapping { 
        buybackFeeRedeemed += amountToRedeem;
        totalFeeRedeemed += amountToRedeem;

        _basicTransfer(address(this), DEAD, amountToRedeem);
    }

    function redeemAllRewardFee() external {
        uint256 amountToRedeem = rewardFeeCollected - rewardFeeRedeemed;
        
        _redeemRewardFee(amountToRedeem);
    }

    function redeemPartialRewardFee(uint256 amountToRedeem) external {
        require(amountToRedeem <= rewardFeeCollected - rewardFeeRedeemed, "Redeem Partial Reward Fee: Insufficient reward fee collected.");
        
        _redeemRewardFee(amountToRedeem);
    }

    function _redeemRewardFee(uint256 amountToRedeem) internal swapping {        
        if (!distributor.isRewardDistributor()) { revert InvalidRewardDistributor(distributor); }
        rewardFeeRedeemed += amountToRedeem;
        totalFeeRedeemed += amountToRedeem;

        _approve(address(this), address(router), amountToRedeem);

        try distributor.deposit(amountToRedeem) {} catch {}
    }

    function autoRedeem(uint256 amountToRedeem) public swapping {  
        uint256 marketingToRedeem = marketingFeeCollected - marketingFeeRedeemed;
        uint256 buybackToRedeem = buybackFeeCollected - buybackFeeRedeemed;
        uint256 totalToRedeem = totalFeeCollected - totalFeeRedeemed;

        uint256 marketingFeeDistribution = amountToRedeem * marketingToRedeem / totalToRedeem;
        uint256 buybackFeeDistribution = amountToRedeem * buybackToRedeem / totalToRedeem;
        uint256 rewardFeeDistribution = amountToRedeem - marketingFeeDistribution - buybackFeeDistribution;
        
        marketingFeeRedeemed += marketingFeeDistribution;
        buybackFeeRedeemed += buybackFeeDistribution;
        rewardFeeRedeemed += rewardFeeDistribution;
        totalFeeRedeemed += amountToRedeem;

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

        _approve(address(this), address(router), amountToRedeem);
        
        emit AutoRedeem(marketingFeeDistribution, buybackFeeDistribution, rewardFeeDistribution, amountToRedeem, msg.sender, block.timestamp);

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            marketingFeeDistribution,
            0,
            path,
            marketingReceiver,
            block.timestamp
        );

        _basicTransfer(address(this), DEAD, buybackFeeRedeemed);

        try distributor.deposit(rewardFeeDistribution) {} catch {}
    }

    /* Check */

    function isRise2() external pure returns (bool) {
        return ISRISE2;
    }

    function circulatingSupply() external view returns (uint256) {
        return totalSupply() - balanceOf(DEAD) - balanceOf(ZERO);
    }

    /* Update */

    function updateRewardContingencyAllowance(uint256 amount) external onlyOwner {
        _approve(address(this), address(distributor), amount);
        _approve(address(this), address(router), amount);
    }

    function updateRewardContingencyMaxAllowance() external onlyOwner {
        _approve(address(this), address(distributor), type(uint256).max);
        _approve(address(this), address(router), type(uint256).max);
    }

    function resetRewardContingencyAllowance() external onlyOwner {
        _approve(address(this), address(distributor), 0);
        _approve(address(this), address(router), 0);
    }

    function updateRouter(address newRouter) external onlyOwner {
        if (address(router) == newRouter) { revert CannotUseCurrentAddress(newRouter); }
        address oldRouter = address(router);
        router = IRouter(newRouter);
        
        isExcludeFromFees[newRouter] = true;

        emit UpdateRouter(oldRouter, newRouter, msg.sender, block.timestamp);
        pair = IFactory(router.factory()).createPair(address(this), router.WETH());
    }

    function updateMinSwap(uint256 newMinSwap) external onlyOwner {
        if (minSwap == newMinSwap) { revert CannotUseCurrentValue(newMinSwap); }
        if (minSwap < 100 * 10**DECIMALS) { revert InvalidValue(100 * 10**DECIMALS); }
        uint256 oldMinSwap = minSwap;
        minSwap = newMinSwap;
        emit UpdateMinSwap(oldMinSwap, newMinSwap, msg.sender, block.timestamp);
    }

    function updateDistributorGas(uint256 newDistributorGas) external authorized {
        if (distributorGas == newDistributorGas) { revert CannotUseCurrentValue(newDistributorGas); }
        if (distributorGas < 10_000) { revert InvalidValue(10_000); }
        if (distributorGas > 750_000) { revert InvalidValue(750_000); }
        uint256 oldDistributorGas = distributorGas;
        distributorGas = newDistributorGas;
        emit UpdateDistributorGas(oldDistributorGas, newDistributorGas, msg.sender, block.timestamp);
    }

    function updateBuyFee(uint256 newMarketingFee, uint256 newBuybackFee, uint256 newRewardFee) external onlyOwner {
        if (isFeeLocked) { revert FeeLocked(); }
        if (newMarketingFee + newBuybackFee + newRewardFee > 1000) { revert InvalidTotalFee(newMarketingFee + newBuybackFee + newRewardFee, 1000); }
        uint256 oldMarketingFee = buyMarketingFee;
        uint256 oldBuybackFee = buyBuybackFee;
        uint256 oldRewardFee = buyRewardFee;
        buyMarketingFee = newMarketingFee;
        buyBuybackFee = oldBuybackFee;
        buyRewardFee = newRewardFee;
        emit UpdateBuyFee(oldMarketingFee, oldRewardFee, oldBuybackFee, newMarketingFee, oldBuybackFee, newRewardFee, msg.sender, block.timestamp);
    }

    function updateSellFee(uint256 newMarketingFee, uint256 newBuybackFee, uint256 newRewardFee) external onlyOwner {
        if (isFeeLocked) { revert FeeLocked(); }
        if (newMarketingFee + newBuybackFee + newRewardFee > 1000) { revert InvalidTotalFee(newMarketingFee + newBuybackFee + newRewardFee, 1000); }
        uint256 oldMarketingFee = sellMarketingFee;
        uint256 oldBuybackFee = sellBuybackFee;
        uint256 oldRewardFee = sellRewardFee;
        sellMarketingFee = newMarketingFee;
        sellBuybackFee = newBuybackFee;
        sellRewardFee = newRewardFee;
        emit UpdateSellFee(oldMarketingFee, oldRewardFee, oldBuybackFee, newMarketingFee, oldBuybackFee, newRewardFee, msg.sender, block.timestamp);
    }

    function updateTransferFee(uint256 newMarketingFee, uint256 newBuybackFee, uint256 newRewardFee) external onlyOwner {
        if (isFeeLocked) { revert FeeLocked(); }
        if (newMarketingFee + newBuybackFee + newRewardFee > 1000) { revert InvalidTotalFee(newMarketingFee + newBuybackFee + newRewardFee, 1000); }
        uint256 oldMarketingFee = transferMarketingFee;
        uint256 oldBuybackFee = transferBuybackFee;
        uint256 oldRewardFee = transferRewardFee;
        transferMarketingFee = newMarketingFee;
        transferBuybackFee = newBuybackFee;
        transferRewardFee = newRewardFee;
        emit UpdateTransferFee(oldMarketingFee, oldRewardFee, oldBuybackFee, newMarketingFee, oldBuybackFee, newRewardFee, msg.sender, block.timestamp);
    }

    function updateFeeActive(bool newStatus) external authorized {
        if (isFeeActive == newStatus) { revert CannotUseCurrentState(newStatus); }
        bool oldStatus = isFeeActive;
        isFeeActive = newStatus;
        emit UpdateFeeActive(oldStatus, newStatus, msg.sender, block.timestamp);
    }

    function updateSwapEnabled(bool newStatus) external authorized {
        if (isSwapEnabled == newStatus) { revert CannotUseCurrentState(newStatus); }
        bool oldStatus = isSwapEnabled;
        isSwapEnabled = newStatus;
        emit UpdateSwapEnabled(oldStatus, newStatus, msg.sender, block.timestamp);
    }

    function updateMarketingReceiver(address newMarketingReceiver) external onlyOwner {
        if (marketingReceiver == newMarketingReceiver) { revert CannotUseCurrentAddress(newMarketingReceiver); }
        address oldMarketingReceiver = marketingReceiver;
        marketingReceiver = newMarketingReceiver;
        emit UpdateMarketingReceiver(oldMarketingReceiver, newMarketingReceiver, msg.sender, block.timestamp);
    }

    function setPresaleFactory(address adr) external authorized {
        if (presaleFinalized) { revert PresaleAlreadyFinalized(presaleFinalized); }
        if (adr == ZERO) { revert InvalidAddress(ZERO); }
        if (adr == presaleFactory) { revert CannotUseCurrentAddress(presaleFactory); }
        presaleFactory = adr;
        isExcludeFromFees[adr] = true;
        isRewardExempt[adr] = true;
        emit SetPresaleFactory(adr, msg.sender, block.timestamp);
    }

    function setPresaleAddress(address adr) external authorized {
        if (presaleFinalized) { revert PresaleAlreadyFinalized(presaleFinalized); }
        if (adr == ZERO) { revert InvalidAddress(ZERO); }
        if (adr == presaleAddress) { revert CannotUseCurrentAddress(presaleAddress); }
        presaleAddress = adr;
        isExcludeFromFees[adr] = true;
        isRewardExempt[adr] = true;
        emit SetPresaleAddress(adr, msg.sender, block.timestamp);
    }

    function setExcludeFromFees(address user, bool status) external authorized {
        if (isExcludeFromFees[user] == status) { revert CannotUseCurrentState(status); }
        isExcludeFromFees[user] = status;
    }

    function setExemptFromReward(address user, bool status) external authorized {
        if (isRewardExempt[user] == status) { revert CannotUseCurrentState(status); }
        isRewardExempt[user] = status;
    }
    
    function setDistributionCriteria(uint256 distributionMin) external authorized {
        if (!distributor.isRewardDistributor()) { revert InvalidRewardDistributor(distributor); }
        try distributor.setDistributionCriteria(distributionMin) {} catch {}
    }

    /* Fee */

    function takeBuyFee(address from, uint256 amount) internal swapping returns (uint256) {
        uint256 feeTotal = buyMarketingFee + buyBuybackFee + buyRewardFee;
        uint256 feeAmount = amount * feeTotal / FEEDENOMINATOR;
        uint256 newAmount = amount - feeAmount;
        tallyBuyFee(from, feeAmount, feeTotal);
        return newAmount;
    }

    function takeSellFee(address from, uint256 amount) internal swapping returns (uint256) {
        uint256 feeTotal = sellMarketingFee + sellBuybackFee + sellRewardFee;
        uint256 feeAmount = amount * feeTotal / FEEDENOMINATOR;
        uint256 newAmount = amount - feeAmount;
        tallySellFee(from, feeAmount, feeTotal);
        return newAmount;
    }

    function takeTransferFee(address from, uint256 amount) internal swapping returns (uint256) {
        uint256 feeTotal = transferMarketingFee + sellBuybackFee + transferRewardFee;
        uint256 feeAmount = amount * feeTotal / FEEDENOMINATOR;
        uint256 newAmount = amount - feeAmount;
        tallyTransferFee(from, feeAmount, feeTotal);
        return newAmount;
    }

    function tallyBuyFee(address from, uint256 amount, uint256 fee) internal swapping {
        uint256 collectMarketing = amount * buyMarketingFee / fee;
        uint256 collectBuyback = amount * buyBuybackFee / fee;
        uint256 collectReward = amount - collectMarketing - collectBuyback;
        tallyCollection(collectMarketing, collectBuyback, collectReward, amount);
        
        _balances[from] -= amount;
        _balances[address(this)] += amount;
    }

    function tallySellFee(address from, uint256 amount, uint256 fee) internal swapping {
        uint256 collectMarketing = amount * sellMarketingFee / fee;
        uint256 collectBuyback = amount * sellBuybackFee / fee;
        uint256 collectReward = amount - collectMarketing - collectBuyback;
        tallyCollection(collectMarketing, collectBuyback, collectReward, amount);
        
        _balances[from] -= amount;
        _balances[address(this)] += amount;
    }

    function tallyTransferFee(address from, uint256 amount, uint256 fee) internal swapping {
        uint256 collectMarketing = amount * transferMarketingFee / fee;
        uint256 collectBuyback = amount * transferBuybackFee / fee;
        uint256 collectReward = amount - collectMarketing - collectBuyback;
        tallyCollection(collectMarketing, collectBuyback, collectReward, amount);

        _balances[from] -= amount;
        _balances[address(this)] += amount;
    }

    function tallyCollection(uint256 collectMarketing, uint256 collectBuyback, uint256 collectReward, uint256 amount) internal swapping {
        marketingFeeCollected += collectMarketing;
        buybackFeeCollected += collectBuyback;
        rewardFeeCollected += collectReward;
        totalFeeCollected += amount;
    }

    /* Buyback */

    function triggerZeusBuyback(uint256 amount) external authorized {
        if (amount > 5 ether) { revert InvalidValue(5 ether); }
        if (block.timestamp - lastTriggerZeusTimestamp < TRIGGERZEUSCOOLDOWN) { revert TriggerZeusBuybackInCooldown(block.timestamp - lastTriggerZeusTimestamp); }
        buyTokens(amount, DEAD);
        totalTriggerZeusBuyback += amount;
        lastTriggerZeusTimestamp = block.timestamp;
    }

    function buyTokens(uint256 amount, address to) internal swapping {
        if (msg.sender == DEAD) { revert InvalidAddress(DEAD); }
        address[] memory path = new address[](2);
        path[0] = router.WETH();
        path[1] = address(this);

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{
            value: amount
        } (0, path, to, block.timestamp);
    }

    /* ERC20 Standard */

    function name() external view virtual override returns (string memory) {
        return NAME;
    }
    
    function symbol() external view virtual override returns (string memory) {
        return SYMBOL;
    }
    
    function decimals() external view virtual override returns (uint8) {
        return DECIMALS;
    }
    
    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) external virtual override returns (bool) {
        address provider = msg.sender;
        return _transfer(provider, to, amount);
    }
    
    function allowance(address provider, address spender) public view virtual override returns (uint256) {
        return _allowances[provider][spender];
    }
    
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address provider = msg.sender;
        _approve(provider, spender, amount);
        return true;
    }
    
    function transferFrom(address from, address to, uint256 amount) external virtual override returns (bool) {
        address spender = msg.sender;
        _spendAllowance(from, spender, amount);
        return _transfer(from, to, amount);
    }
    
    function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {
        address provider = msg.sender;
        _approve(provider, spender, allowance(provider, spender) + addedValue);
        return true;
    }
    
    function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool) {
        address provider = msg.sender;
        uint256 currentAllowance = allowance(provider, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(provider, spender, currentAllowance - subtractedValue);
        }

        return true;
    }
    
    function _mint(address account, uint256 amount) internal virtual {
        if (account == ZERO) { revert InvalidAddress(account); }

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

    function _approve(address provider, address spender, uint256 amount) internal virtual {
        if (provider == ZERO) { revert InvalidAddress(provider); }
        if (spender == ZERO) { revert InvalidAddress(spender); }

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

    /* Additional */

    function _basicTransfer(address from, address to, uint256 amount ) internal returns (bool) {
        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);
        return true;
    }
    
    /* Overrides */
 
    function _transfer(address from, address to, uint256 amount) internal virtual returns (bool) {
        if (from == ZERO) { revert InvalidAddress(from); }
        if (to == ZERO) { revert InvalidAddress(to); }
        
        if (!tradeEnabled) {
            require(msg.sender == projectOwner || msg.sender == presaleFactory || msg.sender == owner() || msg.sender == presaleAddress, "ERC20: Only operator, owner or presale addresses can call this function since trading is not yet enabled.");

            if (from == owner()) {
                require(to != pair, "ERC20: Owner and operator are not allowed to sell if trading is not yet enabled.");
            }
        }

        if (inSwap || isExcludeFromFees[from]) {
            return _basicTransfer(from, to, amount);
        }

        if (from != pair && isSwapEnabled && totalFeeCollected - totalFeeRedeemed >= minSwap) {
            autoRedeem(minSwap);
        }

        uint256 newAmount = amount;

        if (isFeeActive && !isExcludeFromFees[from] && !isExcludeFromFees[to]) {
            newAmount = _beforeTokenTransfer(from, to, amount);
        }

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

        emit Transfer(from, to, newAmount);

        if (isRewardActive) {
            _afterTokenTransfer(from, to);
        }

        return true;
    }

    function _beforeTokenTransfer(address from, address to, uint256 amount) internal swapping virtual returns (uint256) {
        if (from == pair && (buyMarketingFee + buyRewardFee > 0)) {
            return takeBuyFee(from, amount);
        }
        if (to == pair && (sellMarketingFee + sellRewardFee > 0)) {
            return takeSellFee(from, amount);
        }
        if (from != pair && to != pair && (transferMarketingFee + transferRewardFee > 0)) {
            return takeTransferFee(from, amount);
        }
        return amount;
    }

    function _afterTokenTransfer(address from, address to) internal virtual {
        if (!distributor.isRewardDistributor()) { revert InvalidRewardDistributor(distributor); }

        if (!isRewardExempt[from]) {
            try distributor.setShare(from, _balances[from]) {} catch {}
        }
        if (!isRewardExempt[to]) {
            try distributor.setShare(to, _balances[to]) {} catch {}
        }

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

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"routerAddress","type":"address"},{"internalType":"address","name":"projectOwnerAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"current","type":"address"}],"name":"CannotUseCurrentAddress","type":"error"},{"inputs":[{"internalType":"bool","name":"current","type":"bool"}],"name":"CannotUseCurrentState","type":"error"},{"inputs":[{"internalType":"uint256","name":"current","type":"uint256"}],"name":"CannotUseCurrentValue","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"CurrentAuthorizedState","type":"error"},{"inputs":[],"name":"FeeLocked","type":"error"},{"inputs":[{"internalType":"address","name":"invalid","type":"address"}],"name":"InvalidAddress","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"InvalidAuthorizedAccount","type":"error"},{"inputs":[{"internalType":"bool","name":"current","type":"bool"}],"name":"InvalidFeeActiveState","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"InvalidOwner","type":"error"},{"inputs":[{"internalType":"bool","name":"current","type":"bool"}],"name":"InvalidRewardActiveState","type":"error"},{"inputs":[{"internalType":"contract IRewardDistributor","name":"distributorAddres","type":"address"}],"name":"InvalidRewardDistributor","type":"error"},{"inputs":[{"internalType":"bool","name":"current","type":"bool"}],"name":"InvalidSwapEnabledState","type":"error"},{"inputs":[{"internalType":"uint256","name":"current","type":"uint256"},{"internalType":"uint256","name":"max","type":"uint256"}],"name":"InvalidTotalFee","type":"error"},{"inputs":[{"internalType":"bool","name":"current","type":"bool"}],"name":"InvalidTradeEnabledState","type":"error"},{"inputs":[{"internalType":"uint256","name":"invalid","type":"uint256"}],"name":"InvalidValue","type":"error"},{"inputs":[{"internalType":"bool","name":"current","type":"bool"}],"name":"PresaleAlreadyFinalized","type":"error"},{"inputs":[{"internalType":"uint256","name":"timeleft","type":"uint256"}],"name":"TriggerZeusBuybackInCooldown","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"UnauthorizedAccount","type":"error"},{"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":"uint256","name":"marketingFeeDistribution","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buybackFeeDistribution","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rewardFeeDistribution","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountToRedeem","type":"uint256"},{"indexed":false,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"AutoRedeem","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":"adr","type":"address"},{"indexed":false,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"SetPresaleAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"adr","type":"address"},{"indexed":false,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"SetPresaleFactory","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"authorizedAccount","type":"address"},{"indexed":false,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"bool","name":"state","type":"bool"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"UpdateAuthorizedAccount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldBuyMarketingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldBuyBuybackFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldBuyRewardFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBuyMarketingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBuyBuybackFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBuyRewardFee","type":"uint256"},{"indexed":false,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"UpdateBuyFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldDistributorGas","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newDistributorGas","type":"uint256"},{"indexed":false,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"UpdateDistributorGas","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"oldStatus","type":"bool"},{"indexed":false,"internalType":"bool","name":"newStatus","type":"bool"},{"indexed":false,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"UpdateFeeActive","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldMarketingReceiver","type":"address"},{"indexed":false,"internalType":"address","name":"newMarketingReceiver","type":"address"},{"indexed":false,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"UpdateMarketingReceiver","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldMinSwap","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newMinSwap","type":"uint256"},{"indexed":false,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"UpdateMinSwap","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldRouter","type":"address"},{"indexed":false,"internalType":"address","name":"newRouter","type":"address"},{"indexed":false,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"UpdateRouter","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldSellMarketingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldSellBuybackFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldSellRewardFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newSellMarketingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newSellBuybackFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newSellRewardFee","type":"uint256"},{"indexed":false,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"UpdateSellFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"oldStatus","type":"bool"},{"indexed":false,"internalType":"bool","name":"newStatus","type":"bool"},{"indexed":false,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"UpdateSwapEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldTransferMarketingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldTransferBuybackFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldTransferRewardFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newTransferMarketingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newTransferBuybackFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newTransferRewardFee","type":"uint256"},{"indexed":false,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"UpdateTransferFee","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FEEDENOMINATOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TRIGGERZEUSCOOLDOWN","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ZERO","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"provider","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":[{"internalType":"address","name":"","type":"address"}],"name":"authorization","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountToRedeem","type":"uint256"}],"name":"autoRedeem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBuybackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyRewardFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackFeeCollected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackFeeRedeemed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"circulatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimReward","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":[],"name":"distributor","outputs":[{"internalType":"contract IRewardDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distributorGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"finalizePresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"inSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"isExcludeFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isFeeActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isFeeLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isRewardActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isRewardExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isRise2","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"isSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastTriggerZeusTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingFeeCollected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeRedeemed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleFactory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleFinalized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"projectOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"redeemAllBuybackFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"redeemAllMarketingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"redeemAllRewardFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountToRedeem","type":"uint256"}],"name":"redeemPartialBuybackFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountToRedeem","type":"uint256"}],"name":"redeemPartialMarketingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountToRedeem","type":"uint256"}],"name":"redeemPartialRewardFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"resetRewardContingencyAllowance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardFeeCollected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardFeeRedeemed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellBuybackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellRewardFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"distributionMin","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setExcludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setExemptFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"setPresaleAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"setPresaleFactory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeeCollected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeeRedeemed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTriggerZeusBuyback","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradeEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"transferBuybackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"transferMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferRewardFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"triggerZeusBuyback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMarketingFee","type":"uint256"},{"internalType":"uint256","name":"newBuybackFee","type":"uint256"},{"internalType":"uint256","name":"newRewardFee","type":"uint256"}],"name":"updateBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newDistributorGas","type":"uint256"}],"name":"updateDistributorGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newStatus","type":"bool"}],"name":"updateFeeActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingReceiver","type":"address"}],"name":"updateMarketingReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMinSwap","type":"uint256"}],"name":"updateMinSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateRewardContingencyAllowance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updateRewardContingencyMaxAllowance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"updateRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMarketingFee","type":"uint256"},{"internalType":"uint256","name":"newBuybackFee","type":"uint256"},{"internalType":"uint256","name":"newRewardFee","type":"uint256"}],"name":"updateSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newStatus","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMarketingFee","type":"uint256"},{"internalType":"uint256","name":"newBuybackFee","type":"uint256"},{"internalType":"uint256","name":"newRewardFee","type":"uint256"}],"name":"updateTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526064600481905560058190556006819055600781905560088190556009556000600a819055600b819055600c819055600d819055600e819055600f81905560108190556011819055601281905560138190556014819055601581905560165561753060175568056bc75e2d63100000601855601980546001600160d81b0319167a60968df59fdd7865abb1fd837cd06504c6a1a65a00000000000000179055348015620000b057600080fd5b506040516200633d3803806200633d833981016040819052620000d3916200070d565b33620000df816200047d565b6001600160a01b0381166000818152600160208190526040909120805460ff1916909117905533146200012a57336000908152600160208190526040909120805460ff191690911790555b5062000155336200013e6012600a6200085a565b6200014f9064174876e80062000872565b620004cd565b6001600160a01b0381166200018d57604051634726455360e11b81526001600160a01b03821660048201526024015b60405180910390fd5b6001600160a01b03811660a052604051309033908490620001ae90620006e2565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015620001eb573d6000803e3d6000fd5b506001600160a01b03908116608052600280546001600160a01b03191691841691821790556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156200024c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200027291906200088c565b6001600160a01b031663c9c6539630600260009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002fb91906200088c565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000349573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036f91906200088c565b601a80546001600160a01b0319166001600160a01b03928316178155336000908152601f60209081526040808320805460ff19908116600190811790925560a05187168552828520805482168317905560025487168552828520805482168317905560805180881680875284872080548416851790559654909716855292805281842080548416821790557fcbaad361c71be11fa6bdbe0e740c6259be964b32182da2da47b54472477c6a1780548416821790557f29ab76e7ca72530a8284597fb76b039d796325740b21528d71ade454c6f2dbe9805484168217905530845281842080548416821790559383529091208054909116909117905562000475906200056e565b5050620008c0565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0382166200050157604051634726455360e11b81526001600160a01b038316600482015260240162000184565b8060036000828254620005159190620008aa565b90915550506001600160a01b0382166000818152601d60209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b62000578620005d5565b6001600160a01b03811615806200059957506001600160a01b03811661dead145b15620005c457604051635077b8ed60e11b81526001600160a01b038216600482015260240162000184565b620005d28133600162000616565b50565b33620005e96000546001600160a01b031690565b6001600160a01b03161462000614576040516332b2baa360e01b815233600482015260240162000184565b565b6001600160a01b03831660009081526001602052604090205481151560ff9091161515036200066c57604051635ce75a3b60e01b81526001600160a01b0384166004820152811515602482015260440162000184565b6001600160a01b03838116600081815260016020908152604091829020805460ff19168615159081179091558251938452938616908301528101919091524260608201527fff1d0a27274ca0cc8403b0e8f4a70b968164366f4856d18f7569eba542e9aae49060800160405180910390a1505050565b6118038062004b3a83390190565b80516001600160a01b03811681146200070857600080fd5b919050565b600080604083850312156200072157600080fd5b6200072c83620006f0565b91506200073c60208401620006f0565b90509250929050565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200079c57816000190482111562000780576200078062000745565b808516156200078e57918102915b93841c939080029062000760565b509250929050565b600082620007b55750600162000854565b81620007c45750600062000854565b8160018114620007dd5760028114620007e85762000808565b600191505062000854565b60ff841115620007fc57620007fc62000745565b50506001821b62000854565b5060208310610133831016604e8410600b84101617156200082d575081810a62000854565b6200083983836200075b565b806000190482111562000850576200085062000745565b0290505b92915050565b60006200086b60ff841683620007a4565b9392505050565b808202811582820484141762000854576200085462000745565b6000602082840312156200089f57600080fd5b6200086b82620006f0565b8082018082111562000854576200085462000745565b60805160a0516141cf6200096b60003960008181610afc0152612bcc015260008181610cda0152818161122b0152818161149901528181611c8e01528181611d2901528181611d6c015281816120c20152818161210d015281816121ad015281816122480152818161228a015281816133ae01528181613438015281816134c3015281816136f90152818161379401528181613817015281816138c6015261393c01526141cf6000f3fe6080604052600436106104da5760003560e01c80639213691311610281578063b908de8c1161015a578063d974c792116100cc578063e43504da11610085578063e43504da14610e72578063f0b37c0414610e93578063f0f56b2c14610eb3578063f2a4268714610ee2578063f2fde38b14610f12578063f887ea4014610f3257600080fd5b8063d974c79214610de7578063da4daf7114610dfb578063db0dcf3814610e11578063dcf56d2714610e26578063dd62ed3e14610e3c578063de0aad5314610e5c57600080fd5b8063cbe129691161011e578063cbe1296914610d1c578063d4e2799a14610d4c578063d621e81314610d6c578063d63cad2214610d86578063d76b456e14610da6578063d830678614610dc657600080fd5b8063b908de8c14610c70578063b9b2b5cd14610c92578063bdb9f28d14610ca8578063bfe1092814610cc8578063c851cc3214610cfc57600080fd5b8063a5949bcf116101f3578063ab28a04c116101b7578063ab28a04c14610bdb578063ab36629214610bf1578063adca4d9c14610c06578063b2dffb5c14610c26578063b6a5d7de14610c3b578063b88a802f14610c5b57600080fd5b8063a5949bcf14610b3e578063a6d4ec3214610b65578063a8aa1b3114610b85578063a9059cbb14610ba5578063aa87ca9114610bc557600080fd5b806397e1b9d31161024557806397e1b9d314610a7f57806398e5bfee14610a955780639a51320814610ab5578063a0a6e94014610ad5578063a4475ce414610aea578063a457c2d714610b1e57600080fd5b806392136913146109ef578063924de9b714610a0557806392f1a8e814610a255780639358928b14610a3a57806395d89b4114610a4f57600080fd5b80633d6362d6116103b3578063715018a6116103255780637bce5a04116102e95780637bce5a041461095b5780637cf95ea8146109715780637e8c95ab1461098657806385c5b319146109a65780638a8c523c146109bc5780638da5cb5b146109d157600080fd5b8063715018a6146108e457806371538eed146108f957806371a515221461090f57806371dbdb671461092557806375fed3c71461093b57600080fd5b806360e719621161037757806360e719621461082d57806361a2785b1461084357806363a95492146108595780636883b732146108795780636d4980931461088f57806370a08231146108ae57600080fd5b80633d6362d6146107ac5780634578b91d146107cc578063540ba552146107ec57806358fa63ca1461080257806359cd90311461081757600080fd5b806323b872dd1161044c578063313ce56711610410578063313ce567146106f957806333830fe514610715578063351a964d1461073557806339509351146107565780633aef6291146107765780633bf314541461078c57600080fd5b806323b872dd1461067857806326b875a814610698578063273ab050146106ae57806329667b23146106c45780632e4cfd01146106d957600080fd5b80630cfe2f3f1161049e5780630cfe2f3f146105c9578063122fe685146105ed57806312bf71561461060d578063177aedb21461062d57806318160ddd146106435780631d0e98f31461065857600080fd5b806301295143146104e657806303fd2a451461050857806306fdde031461053b578063095ea7b3146105795780630a8c65f1146105a957600080fd5b366104e157005b600080fd5b3480156104f257600080fd5b50610506610501366004613ce3565b610f52565b005b34801561051457600080fd5b5061051e61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561054757600080fd5b5060408051808201909152600c81526b0457665725269736520322e360a41b60208201525b6040516105329190613cfc565b34801561058557600080fd5b50610599610594366004613d5f565b6112a1565b6040519015158152602001610532565b3480156105b557600080fd5b506105066105c4366004613d8b565b6112bb565b3480156105d557600080fd5b506105df60065481565b604051908152602001610532565b3480156105f957600080fd5b50601b5461051e906001600160a01b031681565b34801561061957600080fd5b50610506610628366004613d8b565b6113b6565b34801561063957600080fd5b506105df600d5481565b34801561064f57600080fd5b506003546105df565b34801561066457600080fd5b506019546105999062010000900460ff1681565b34801561068457600080fd5b50610599610693366004613db7565b611467565b3480156106a457600080fd5b506105df60115481565b3480156106ba57600080fd5b506105df60125481565b3480156106d057600080fd5b5061050661148b565b3480156106e557600080fd5b506105066106f4366004613ce3565b6114da565b34801561070557600080fd5b5060405160128152602001610532565b34801561072157600080fd5b50610506610730366004613ce3565b611577565b34801561074157600080fd5b5060195461059990600160281b900460ff1681565b34801561076257600080fd5b50610599610771366004613d5f565b61160f565b34801561078257600080fd5b506105df61a8c081565b34801561079857600080fd5b506105066107a7366004613e06565b611631565b3480156107b857600080fd5b506105066107c7366004613e23565b6116e5565b3480156107d857600080fd5b506105066107e7366004613e23565b6117a9565b3480156107f857600080fd5b506105df60055481565b34801561080e57600080fd5b5061051e600081565b34801561082357600080fd5b506105df60185481565b34801561083957600080fd5b506105df60175481565b34801561084f57600080fd5b506105df60135481565b34801561086557600080fd5b50610506610874366004613ce3565b6118df565b34801561088557600080fd5b506105df600f5481565b34801561089b57600080fd5b5060195461059990610100900460ff1681565b3480156108ba57600080fd5b506105df6108c9366004613e23565b6001600160a01b03166000908152601d602052604090205490565b3480156108f057600080fd5b50610506611984565b34801561090557600080fd5b506105df60145481565b34801561091b57600080fd5b506105df60085481565b34801561093157600080fd5b506105df600b5481565b34801561094757600080fd5b50610506610956366004613ce3565b611996565b34801561096757600080fd5b506105df60045481565b34801561097d57600080fd5b50610506611a64565b34801561099257600080fd5b50601c5461051e906001600160a01b031681565b3480156109b257600080fd5b506105df600a5481565b3480156109c857600080fd5b50610506611a81565b3480156109dd57600080fd5b506000546001600160a01b031661051e565b3480156109fb57600080fd5b506105df60075481565b348015610a1157600080fd5b50610506610a20366004613e06565b611b49565b348015610a3157600080fd5b50610506611bf7565b348015610a4657600080fd5b506105df611c14565b348015610a5b57600080fd5b50604080518082019091526007815266052495345322e360cc1b602082015261056c565b348015610a8b57600080fd5b506105df60165481565b348015610aa157600080fd5b50610506610ab0366004613ce3565b611c84565b348015610ac157600080fd5b50610506610ad0366004613e40565b611dd1565b348015610ae157600080fd5b50610506611e46565b348015610af657600080fd5b5061051e7f000000000000000000000000000000000000000000000000000000000000000081565b348015610b2a57600080fd5b50610599610b39366004613d5f565b611f16565b348015610b4a57600080fd5b5060195461051e90600160381b90046001600160a01b031681565b348015610b7157600080fd5b50610506610b80366004613d8b565b611f9c565b348015610b9157600080fd5b50601a5461051e906001600160a01b031681565b348015610bb157600080fd5b50610599610bc0366004613d5f565b612053565b348015610bd157600080fd5b506105df600c5481565b348015610be757600080fd5b506105df61271081565b348015610bfd57600080fd5b50610506612069565b348015610c1257600080fd5b50610506610c21366004613ce3565b6120b4565b348015610c3257600080fd5b506105066120ff565b348015610c4757600080fd5b50610506610c56366004613e23565b61214e565b348015610c6757600080fd5b506105066121ab565b348015610c7c57600080fd5b5060195461059990640100000000900460ff1681565b348015610c9e57600080fd5b506105df60105481565b348015610cb457600080fd5b50610506610cc3366004613e23565b6122ee565b348015610cd457600080fd5b5061051e7f000000000000000000000000000000000000000000000000000000000000000081565b348015610d0857600080fd5b50610506610d17366004613e23565b61241d565b348015610d2857600080fd5b50610599610d37366004613e23565b60016020526000908152604090205460ff1681565b348015610d5857600080fd5b50610506610d67366004613ce3565b612676565b348015610d7857600080fd5b506019546105999060ff1681565b348015610d9257600080fd5b50610506610da1366004613e40565b612745565b348015610db257600080fd5b50610506610dc1366004613ce3565b6127bc565b348015610dd257600080fd5b5060195461059990600160301b900460ff1681565b348015610df357600080fd5b506001610599565b348015610e0757600080fd5b506105df60155481565b348015610e1d57600080fd5b5061050661284a565b348015610e3257600080fd5b506105df600e5481565b348015610e4857600080fd5b506105df610e57366004613e79565b612867565b348015610e6857600080fd5b506105df60095481565b348015610e7e57600080fd5b50601954610599906301000000900460ff1681565b348015610e9f57600080fd5b50610506610eae366004613e23565b612892565b348015610ebf57600080fd5b50610599610ece366004613e23565b602080526000908152604090205460ff1681565b348015610eee57600080fd5b50610599610efd366004613e23565b601f6020526000908152604090205460ff1681565b348015610f1e57600080fd5b50610506610f2d366004613e23565b6128ef565b348015610f3e57600080fd5b5060025461051e906001600160a01b031681565b6019805460ff60301b1916600160301b179055601154600d54600091610f7791613ebd565b90506000601254600e54610f8b9190613ebd565b90506000601454601054610f9f9190613ebd565b9050600081610fae8587613ed0565b610fb89190613ee7565b9050600082610fc78588613ed0565b610fd19190613ee7565b9050600081610fe08489613ebd565b610fea9190613ebd565b90508260116000828254610ffe9190613f09565b9250508190555081601260008282546110179190613f09565b9250508190555080601360008282546110309190613f09565b9250508190555086601460008282546110499190613f09565b9091555050604080516002808252606082018352600092602083019080368337019050509050308160008151811061108357611083613f1c565b6001600160a01b03928316602091820292909201810191909152600254604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156110dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111009190613f32565b8160018151811061111357611113613f1c565b6001600160a01b039283166020918202929092010152600254611139913091168a61292a565b6040805185815260208101859052908101839052606081018990523360808201524260a08201527f095046c58a377d54685857e96b2bbfd471ec5fe130ece4bd1fbf1369b1be25e49060c00160405180910390a160025460195460405163791ac94760e01b81526001600160a01b039283169263791ac947926111d39289926000928892600160381b909104909116904290600401613f93565b600060405180830381600087803b1580156111ed57600080fd5b505af1158015611201573d6000803e3d6000fd5b505050506112143061dead6012546129ef565b5060405163b6b55f2560e01b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063b6b55f2590602401600060405180830381600087803b15801561127757600080fd5b505af1925050508015611288575060015b505b50506019805460ff60301b19169055505050505050565b6000336112af81858561292a565b60019150505b92915050565b6112c3612a9b565b601954640100000000900460ff16156112ef5760405163882d29d360e01b815260040160405180910390fd5b6103e8816112fd8486613f09565b6113079190613f09565b111561134c57806113188385613f09565b6113229190613f09565b60405163211a907760e11b815260048101919091526103e860248201526044015b60405180910390fd5b600a8054600b8054600c8054948890559186905590849055604051919290917fd728aed4076f96b00527a08c6e0591cad410f3e75fb1471564c174a18e3668a6906113a6908590849086908b9082908b9033904290613fcf565b60405180910390a1505050505050565b6113be612a9b565b601954640100000000900460ff16156113ea5760405163882d29d360e01b815260040160405180910390fd5b6103e8816113f88486613f09565b6114029190613f09565b111561141357806113188385613f09565b600480546005546006805493879055849055604051919290917f5932f216d0a2d3d0c643474e41a1540022e0eb58874326af8ee47d8908fb1b85906113a6908590849086908b9082908b9033904290613fcf565b600033611475858285612ad7565b611480858585612b51565b9150505b9392505050565b611493612a9b565b6114bf307f0000000000000000000000000000000000000000000000000000000000000000600061292a565b6002546114d89030906001600160a01b0316600061292a565b565b601154600d546114ea9190613ebd565b81111561156b5760405162461bcd60e51b815260206004820152604360248201527f52656465656d205061727469616c204d61726b6574696e67204665653a20496e60448201527f73756666696369656e74206d61726b6574696e672066656520636f6c6c65637460648201526232b21760e91b608482015260a401611343565b61157481612f5b565b50565b601254600e546115879190613ebd565b8111156116065760405162461bcd60e51b815260206004820152604160248201527f52656465656d205061727469616c204275796261636b204665653a20496e737560448201527f6666696369656e74206d61726b6574696e672066656520636f6c6c65637465646064820152601760f91b608482015260a401611343565b61157481613115565b6000336112af8185856116228383612867565b61162c9190613f09565b61292a565b61163961317a565b801515601960039054906101000a900460ff1615150361166f5760405162a7e72d60e41b81528115156004820152602401611343565b60198054821515630100000081810263ff000000198416179093556040805160ff94909304939093168015158352602083019190915233928201929092524260608201527ff99f9d4d81f67d0980beea494b4404ba3b8af1a0a2d493230f1a883efa027f2f906080015b60405180910390a15050565b6116ed612a9b565b6019546001600160a01b03808316600160381b909204160361172d5760405163a936636960e01b81526001600160a01b0382166004820152602401611343565b601980546001600160a01b03838116600160381b818102670100000000000000600160d81b0319851617909455604080519490930490911680845260208401919091523391830191909152426060830152907f962c9954d0c3e9da3b1c12a71326e2956e36e5a05e6a5cce4c80a2d9d13ebd4c906080016116d9565b6117b161317a565b601954610100900460ff16156117e857601954604051624dc03960e01b815261010090910460ff1615156004820152602401611343565b6001600160a01b03811661181257604051634726455360e11b815260006004820152602401611343565b601c546001600160a01b039081169082160361185057601c5460405163a936636960e01b81526001600160a01b039091166004820152602401611343565b601c80546001600160a01b0319166001600160a01b0383169081179091556000818152601f60209081526040808320805460ff199081166001908117909255838052938290208054909416179092558151928352339083015242908201527f91e9ca83b2cea3dc47a586b13da0fbefddf12f84b31b51ca27d26bebc367675c906060015b60405180910390a150565b6118e761317a565b674563918244f4000081111561191a5760405163181c9d0b60e21b8152674563918244f400006004820152602401611343565b61a8c06016544261192b9190613ebd565b101561195a5760165461193e9042613ebd565b60405163079c6b2d60e31b815260040161134391815260200190565b6119668161dead6131ac565b80601560008282546119789190613f09565b90915550504260165550565b61198c612a9b565b6114d8600061332e565b61199e612a9b565b80601854036119c35760405163657e16cf60e01b815260048101829052602401611343565b6119cf6012600a6140f2565b6119da906064613ed0565b6018541015611a16576119ef6012600a6140f2565b6119fa906064613ed0565b60405163181c9d0b60e21b815260040161134391815260200190565b6018805490829055604080518281526020810184905233918101919091524260608201527f9a9f4704ac409fe039e92a996e415370980275aaff2992936ed5b432886c55c5906080016116d9565b6000601354600f54611a769190613ebd565b90506115748161337e565b611a89612a9b565b60195460ff1615611ab8576019546040516301bf623960e61b815260ff90911615156004820152602401611343565b6019546301000000900460ff1615611af457601954604051630eff900b60e21b8152630100000090910460ff1615156004820152602401611343565b601954600160281b900460ff1615611b305760195460405163610a8e6760e01b8152600160281b90910460ff1615156004820152602401611343565b6019805465ff00ffffffff191665010001010101179055565b611b5161317a565b801515601960059054906101000a900460ff16151503611b875760405162a7e72d60e41b81528115156004820152602401611343565b60198054821515600160281b81810265ff0000000000198416179093556040805160ff94909304939093168015158352602083019190915233928201929092524260608201527fa9eb6c000d17475b17651469533695f7b673c93327fdbadf4341ebeb2607a044906080016116d9565b6000601254600e54611c099190613ebd565b905061157481613115565b601d6020527f0a51588b1664495f089dd83d2d26f247920f94a57a4a09f20cf068efc8f82bd45461dead60009081527ffa758cef5bd0db441ee78e87b9ceab03f7b5d7b78ff593b3cf8150611abcb99954600354919291611c759190613ebd565b611c7f9190613ebd565b905090565b611c8c61317a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ff10302a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0e9190614101565b611d5657604051630e2665e160e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166004820152602401611343565b604051634c72dff760e11b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906398e5bfee90602401600060405180830381600087803b158015611db857600080fd5b505af1925050508015611dc9575060015b156115745750565b611dd961317a565b6001600160a01b038216600090815260208052604090205481151560ff909116151503611e1c5760405162a7e72d60e41b81528115156004820152602401611343565b6001600160a01b039190911660009081526020805260409020805460ff1916911515919091179055565b611e4e61317a565b601954610100900460ff1615611e8557601954604051624dc03960e01b815261010090910460ff1615156004820152602401611343565b6019546301000000900460ff1615611ec157601954604051630eff900b60e21b8152630100000090910460ff1615156004820152602401611343565b601954600160281b900460ff1615611efd5760195460405163610a8e6760e01b8152600160281b90910460ff1615156004820152602401611343565b6019805465ff00ff00ff00191665010001000100179055565b60003381611f248286612867565b905083811015611f845760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401611343565b611f91828686840361292a565b506001949350505050565b611fa4612a9b565b601954640100000000900460ff1615611fd05760405163882d29d360e01b815260040160405180910390fd5b6103e881611fde8486613f09565b611fe89190613f09565b1115611ff957806113188385613f09565b600780546008805460098054948890559186905590849055604051919290917f849ba5c56c6e9cf1a4224a7de933ce31ef95842fd802f56c478315d9cad597f2906113a6908590849086908b9082908b9033904290613fcf565b600033612061818585612b51565b949350505050565b612071612a9b565b601954640100000000900460ff161561209d5760405163882d29d360e01b815260040160405180910390fd5b6019805464ff000000001916640100000000179055565b6120bc612a9b565b6120e7307f00000000000000000000000000000000000000000000000000000000000000008361292a565b6002546115749030906001600160a01b03168361292a565b612107612a9b565b612134307f000000000000000000000000000000000000000000000000000000000000000060001961292a565b6002546114d89030906001600160a01b031660001961292a565b612156612a9b565b6001600160a01b038116158061217657506001600160a01b03811661dead145b1561219f57604051635077b8ed60e11b81526001600160a01b0382166004820152602401611343565b6115748133600161352d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ff10302a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612209573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061222d9190614101565b61227557604051630e2665e160e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166004820152602401611343565b60405163092193ab60e01b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063092193ab90602401600060405180830381600087803b1580156122d657600080fd5b505af19250505080156122e7575060015b156114d857565b6122f661317a565b601954610100900460ff161561232d57601954604051624dc03960e01b815261010090910460ff1615156004820152602401611343565b6001600160a01b03811661235757604051634726455360e11b815260006004820152602401611343565b601b546001600160a01b039081169082160361239557601b5460405163a936636960e01b81526001600160a01b039091166004820152602401611343565b601b80546001600160a01b0319166001600160a01b0383169081179091556000818152601f60209081526040808320805460ff199081166001908117909255838052938290208054909416179092558151928352339083015242908201527f7d502148437cd458c511207c44811876c0b03fc02cb2e08366ed8a84058c25a3906060016118d4565b612425612a9b565b6002546001600160a01b0380831691160361245e5760405163a936636960e01b81526001600160a01b0382166004820152602401611343565b600280546001600160a01b031981166001600160a01b038481169182179093556000818152601f6020908152604091829020805460ff19166001179055815194909316808552928401919091523390830152426060830152907fe1cb783288eddc7b22c25642a832d886a558be0dd900747310a34156b9fdcbbb9060800160405180910390a1600260009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612537573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061255b9190613f32565b6001600160a01b031663c9c6539630600260009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e19190613f32565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561262e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126529190613f32565b601a80546001600160a01b0319166001600160a01b03929092169190911790555050565b61267e61317a565b80601754036126a35760405163657e16cf60e01b815260048101829052602401611343565b61271060175410156126cc5760405163181c9d0b60e21b81526127106004820152602401611343565b620b71b060175411156126f75760405163181c9d0b60e21b8152620b71b06004820152602401611343565b6017805490829055604080518281526020810184905233918101919091524260608201527f45e0e8e205e8f5cd9c66ecc65823c45bcc06cfae7b9f4902a0f7a1adca5b8839906080016116d9565b61274d61317a565b6001600160a01b0382166000908152601f602052604090205481151560ff9091161515036127915760405162a7e72d60e41b81528115156004820152602401611343565b6001600160a01b03919091166000908152601f60205260409020805460ff1916911515919091179055565b601354600f546127cc9190613ebd565b8111156128415760405162461bcd60e51b815260206004820152603d60248201527f52656465656d205061727469616c20526577617264204665653a20496e73756660448201527f66696369656e74207265776172642066656520636f6c6c65637465642e0000006064820152608401611343565b6115748161337e565b6000601154600d5461285c9190613ebd565b905061157481612f5b565b6001600160a01b039182166000908152601e6020908152604080832093909416825291909152205490565b61289a612a9b565b6001600160a01b03811615806128ba57506001600160a01b03811661dead145b156128e357604051635077b8ed60e11b81526001600160a01b0382166004820152602401611343565b6115748133600061352d565b6128f7612a9b565b6001600160a01b0381166129215760405163b20f76e360e01b815260006004820152602401611343565b6115748161332e565b6001600160a01b03831661295c57604051634726455360e11b81526001600160a01b0384166004820152602401611343565b6001600160a01b03821661298e57604051634726455360e11b81526001600160a01b0383166004820152602401611343565b6001600160a01b038381166000818152601e602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166000908152601d602052604081205482811015612a285760405162461bcd60e51b81526004016113439061411e565b6001600160a01b038086166000818152601d602052604080822087860390559287168082529083902080548701905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612a889087815260200190565b60405180910390a3506001949350505050565b33612aae6000546001600160a01b031690565b6001600160a01b0316146114d8576040516332b2baa360e01b8152336004820152602401611343565b6000612ae38484612867565b90506000198114612b4b5781811015612b3e5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401611343565b612b4b848484840361292a565b50505050565b60006001600160a01b038416612b8557604051634726455360e11b81526001600160a01b0385166004820152602401611343565b6001600160a01b038316612bb757604051634726455360e11b81526001600160a01b0384166004820152602401611343565b60195460ff16612d9757336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480612c025750601c546001600160a01b031633145b80612c1757506000546001600160a01b031633145b80612c2c5750601b546001600160a01b031633145b612cd65760405162461bcd60e51b815260206004820152606960248201527f45524332303a204f6e6c79206f70657261746f722c206f776e6572206f72207060448201527f726573616c65206164647265737365732063616e2063616c6c2074686973206660648201527f756e6374696f6e2073696e63652074726164696e67206973206e6f74207965746084820152681032b730b13632b21760b91b60a482015260c401611343565b6000546001600160a01b03166001600160a01b0316846001600160a01b031603612d9757601a546001600160a01b0390811690841603612d975760405162461bcd60e51b815260206004820152605060248201527f45524332303a204f776e657220616e64206f70657261746f7220617265206e6f60448201527f7420616c6c6f77656420746f2073656c6c2069662074726164696e672069732060648201526f3737ba103cb2ba1032b730b13632b21760811b608482015260a401611343565b601954600160301b900460ff1680612dc757506001600160a01b0384166000908152601f602052604090205460ff165b15612dde57612dd78484846129ef565b9050611484565b601a546001600160a01b03858116911614801590612e055750601954600160281b900460ff165b8015612e225750601854601454601054612e1f9190613ebd565b10155b15612e3257612e32601854610f52565b60195482906301000000900460ff168015612e6657506001600160a01b0385166000908152601f602052604090205460ff16155b8015612e8b57506001600160a01b0384166000908152601f602052604090205460ff16155b15612e9e57612e9b8585856135f7565b90505b6001600160a01b0385166000908152601d6020526040902054811115612ed65760405162461bcd60e51b81526004016113439061411e565b6001600160a01b038086166000818152601d6020526040808220805486900390559287168082529083902080548501905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612f389085815260200190565b60405180910390a360195462010000900460ff1615611f9157611f9185856136f7565b6019805460ff60301b1916600160301b17905560118054829190600090612f83908490613f09565b925050819055508060146000828254612f9c9190613f09565b90915550506040805160028082526060820183526000926020830190803683370190505090503081600081518110612fd657612fd6613f1c565b6001600160a01b03928316602091820292909201810191909152600254604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561302f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130539190613f32565b8160018151811061306657613066613f1c565b6001600160a01b03928316602091820292909201015260025461308c913091168461292a565b60025460195460405163791ac94760e01b81526001600160a01b039283169263791ac947926130d29287926000928892600160381b909104909116904290600401613f93565b600060405180830381600087803b1580156130ec57600080fd5b505af1158015613100573d6000803e3d6000fd5b50506019805460ff60301b1916905550505050565b6019805460ff60301b1916600160301b1790556012805482919060009061313d908490613f09565b9250508190555080601460008282546131569190613f09565b9091555061316990503061dead836129ef565b50506019805460ff60301b19169055565b3360009081526001602052604090205460ff166114d8576040516332b2baa360e01b8152336004820152602401611343565b6019805460ff60301b1916600160301b17905561deac1933016131e657604051634726455360e11b815261dead6004820152602401611343565b6040805160028082526060820183526000926020830190803683375050600254604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015613250573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132749190613f32565b8160008151811061328757613287613f1c565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106132bb576132bb613f1c565b6001600160a01b03928316602091820292909201015260025460405163b6f9de9560e01b815291169063b6f9de9590859061330190600090869088904290600401614164565b6000604051808303818588803b15801561331a57600080fd5b505af115801561128a573d6000803e3d6000fd5b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6019805460ff60301b1916600160301b1790556040805160016277e7eb60e11b0319815290516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163ff10302a9160048083019260209291908290030181865afa1580156133f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061341d9190614101565b61346557604051630e2665e160e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166004820152602401611343565b80601360008282546134779190613f09565b9250508190555080601460008282546134909190613f09565b90915550506002546134ad9030906001600160a01b03168361292a565b60405163b6b55f2560e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063b6b55f2590602401600060405180830381600087803b15801561350f57600080fd5b505af19250505080156131695750506019805460ff60301b19169055565b6001600160a01b03831660009081526001602052604090205481151560ff90911615150361358157604051635ce75a3b60e01b81526001600160a01b03841660048201528115156024820152604401611343565b6001600160a01b03838116600081815260016020908152604091829020805460ff19168615159081179091558251938452938616908301528101919091524260608201527fff1d0a27274ca0cc8403b0e8f4a70b968164366f4856d18f7569eba542e9aae49060800160405180910390a1505050565b6019805460ff60301b1916600160301b179055601a546000906001600160a01b038581169116148015613639575060006006546004546136379190613f09565b115b1561364f57613648848361399e565b90506136e3565b601a546001600160a01b03848116911614801561367b575060006009546007546136799190613f09565b115b1561368a576136488483613a21565b601a546001600160a01b038581169116148015906136b65750601a546001600160a01b03848116911614155b80156136d157506000600c54600a546136cf9190613f09565b115b156136e0576136488483613a8e565b50805b6019805460ff60301b191690559392505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ff10302a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613755573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137799190614101565b6137c157604051630e2665e160e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166004820152602401611343565b6001600160a01b038216600090815260208052604090205460ff16613870576001600160a01b038281166000818152601d602052604090819020549051630a5b654b60e11b8152600481019290925260248201527f0000000000000000000000000000000000000000000000000000000000000000909116906314b6ca9690604401600060405180830381600087803b15801561385d57600080fd5b505af192505050801561386e575060015b505b6001600160a01b038116600090815260208052604090205460ff1661391f576001600160a01b038181166000818152601d602052604090819020549051630a5b654b60e11b8152600481019290925260248201527f0000000000000000000000000000000000000000000000000000000000000000909116906314b6ca9690604401600060405180830381600087803b15801561390c57600080fd5b505af192505050801561391d575060015b505b6017546040516001624d3b8760e01b0319815260048101919091527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063ffb2c47990602401600060405180830381600087803b15801561398857600080fd5b505af1925050508015613999575060015b505050565b6019805460ff60301b1916600160301b179055600654600554600454600092839290916139cb9190613f09565b6139d59190613f09565b905060006127106139e68386613ed0565b6139f09190613ee7565b905060006139fe8286613ebd565b9050613a0b868385613afb565b6019805460ff60301b1916905595945050505050565b6019805460ff60301b1916600160301b17905560095460085460075460009283929091613a4e9190613f09565b613a589190613f09565b90506000612710613a698386613ed0565b613a739190613ee7565b90506000613a818286613ebd565b9050613a0b868385613bd4565b6019805460ff60301b1916600160301b179055600c54600854600a5460009283929091613abb9190613f09565b613ac59190613f09565b90506000612710613ad68386613ed0565b613ae09190613ee7565b90506000613aee8286613ebd565b9050613a0b868385613c16565b6019805460ff60301b1916600160301b1790556004546000908290613b209085613ed0565b613b2a9190613ee7565b905060008260055485613b3d9190613ed0565b613b479190613ee7565b9050600081613b568487613ebd565b613b609190613ebd565b9050613b6e83838388613c58565b6001600160a01b0386166000908152601d602052604081208054879290613b96908490613ebd565b9091555050306000908152601d602052604081208054879290613bba908490613f09565b90915550506019805460ff60301b19169055505050505050565b6019805460ff60301b1916600160301b1790556007546000908290613bf99085613ed0565b613c039190613ee7565b905060008260085485613b3d9190613ed0565b6019805460ff60301b1916600160301b179055600a546000908290613c3b9085613ed0565b613c459190613ee7565b9050600082600b5485613b3d9190613ed0565b6019805460ff60301b1916600160301b179055600d8054859190600090613c80908490613f09565b9250508190555082600e6000828254613c999190613f09565b9250508190555081600f6000828254613cb29190613f09565b925050819055508060106000828254613ccb9190613f09565b90915550506019805460ff60301b1916905550505050565b600060208284031215613cf557600080fd5b5035919050565b600060208083528351808285015260005b81811015613d2957858101830151858201604001528201613d0d565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461157457600080fd5b60008060408385031215613d7257600080fd5b8235613d7d81613d4a565b946020939093013593505050565b600080600060608486031215613da057600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215613dcc57600080fd5b8335613dd781613d4a565b92506020840135613de781613d4a565b929592945050506040919091013590565b801515811461157457600080fd5b600060208284031215613e1857600080fd5b813561148481613df8565b600060208284031215613e3557600080fd5b813561148481613d4a565b60008060408385031215613e5357600080fd5b8235613e5e81613d4a565b91506020830135613e6e81613df8565b809150509250929050565b60008060408385031215613e8c57600080fd5b8235613e9781613d4a565b91506020830135613e6e81613d4a565b634e487b7160e01b600052601160045260246000fd5b818103818111156112b5576112b5613ea7565b80820281158282048414176112b5576112b5613ea7565b600082613f0457634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156112b5576112b5613ea7565b634e487b7160e01b600052603260045260246000fd5b600060208284031215613f4457600080fd5b815161148481613d4a565b600081518084526020808501945080840160005b83811015613f885781516001600160a01b031687529582019590820190600101613f63565b509495945050505050565b85815284602082015260a060408201526000613fb260a0830186613f4f565b6001600160a01b0394909416606083015250608001529392505050565b978852602088019690965260408701949094526060860192909252608085015260a08401526001600160a01b031660c083015260e08201526101000190565b600181815b8085111561404957816000190482111561402f5761402f613ea7565b8085161561403c57918102915b93841c9390800290614013565b509250929050565b600082614060575060016112b5565b8161406d575060006112b5565b8160018114614083576002811461408d576140a9565b60019150506112b5565b60ff84111561409e5761409e613ea7565b50506001821b6112b5565b5060208310610133831016604e8410600b84101617156140cc575081810a6112b5565b6140d6838361400e565b80600019048211156140ea576140ea613ea7565b029392505050565b600061148460ff841683614051565b60006020828403121561411357600080fd5b815161148481613df8565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b84815260806020820152600061417d6080830186613f4f565b6001600160a01b0394909416604083015250606001529291505056fea2646970667358221220c093a7f1d50d69da20f9b3665eb3820aecc6a46c80e935f3d2bbee9c85ac42aa64736f6c6343000812003360a0604052633b9aca00600355600a600455600060055560006006556000600755600060085560006009553480156200003757600080fd5b5060405162001803380380620018038339810160408190526200005a9162000199565b8162000066816200012c565b6001600160a01b0381166000818152600160208190526040909120805460ff191690911790553314620000b157336000908152600160208190526040909120805460ff191690911790555b506001600160a01b038316620000e157604051634726455360e11b81526000600482015260240160405180910390fd5b6001600160a01b038316608052620000f9826200012c565b600280546001600160a01b0319166001600160a01b03928316179055166000908152600d602052604081205550620001e3565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200019457600080fd5b919050565b600080600060608486031215620001af57600080fd5b620001ba846200017c565b9250620001ca602085016200017c565b9150620001da604085016200017c565b90509250925092565b6080516115e162000222600039600081816105ae015281816106ed015281816107eb01528181610a5f01528181610d0801526111cd01526115e16000f3fe6080604052600436106101dc5760003560e01c8063b6b55f2511610102578063f0b37c0411610095578063fbcd9b0511610064578063fbcd9b0514610579578063fc0c546a1461059c578063ff10302a146105d0578063ffb2c479146105e457600080fd5b8063f0b37c0414610503578063f2fde38b14610523578063f4d9c20f14610543578063f887ea401461055957600080fd5b8063cbe12969116100d1578063cbe1296914610429578063ce7c2ac214610469578063d4fda1f2146104c0578063efca2eed146104ed57600080fd5b8063b6b55f25146103be578063b88a802f146103de578063c7e1d0b1146103f3578063c851cc321461040957600080fd5b80634fab0ae81161017a57806398e5bfee1161014957806398e5bfee1461033e578063ab377daa1461035e578063b088b4f71461037e578063b6a5d7de1461039e57600080fd5b80634fab0ae8146102b457806366817df5146102ca578063715018a6146102f75780638da5cb5b1461030c57600080fd5b806326987b60116101b657806326987b601461025357806328fd3198146102695780632d68efc9146102895780633a98ef391461029e57600080fd5b8063092193ab146101e85780630e15561a1461020a57806314b6ca961461023357600080fd5b366101e357005b600080fd5b3480156101f457600080fd5b5061020861020336600461146a565b610604565b005b34801561021657600080fd5b5061022060085481565b6040519081526020015b60405180910390f35b34801561023f57600080fd5b5061020861024e36600461148c565b6107e0565b34801561025f57600080fd5b5061022060065481565b34801561027557600080fd5b5061022061028436600461146a565b6109c7565b34801561029557600080fd5b50610208610a52565b3480156102aa57600080fd5b5061022060075481565b3480156102c057600080fd5b5061022060035481565b3480156102d657600080fd5b506102206102e536600461146a565b600d6020526000908152604090205481565b34801561030357600080fd5b50610208610ab1565b34801561031857600080fd5b506000546001600160a01b03165b6040516001600160a01b03909116815260200161022a565b34801561034a57600080fd5b506102086103593660046114b6565b610ac5565b34801561036a57600080fd5b506103266103793660046114b6565b610af7565b34801561038a57600080fd5b506102086103993660046114b6565b610b21565b3480156103aa57600080fd5b506102086103b936600461146a565b610c52565b3480156103ca57600080fd5b506102086103d93660046114b6565b610cb2565b3480156103ea57600080fd5b50610208610d91565b3480156103ff57600080fd5b5061022060055481565b34801561041557600080fd5b5061020861042436600461146a565b610d9a565b34801561043557600080fd5b5061045961044436600461146a565b60016020526000908152604090205460ff1681565b604051901515815260200161022a565b34801561047557600080fd5b506104a561048436600461146a565b600b6020526000908152604090208054600182015460029092015490919083565b6040805193845260208401929092529082015260600161022a565b3480156104cc57600080fd5b506102206104db36600461146a565b600c6020526000908152604090205481565b3480156104f957600080fd5b5061022060095481565b34801561050f57600080fd5b5061020861051e36600461146a565b610e3f565b34801561052f57600080fd5b5061020861053e36600461146a565b610e9c565b34801561054f57600080fd5b5061022060045481565b34801561056557600080fd5b50600254610326906001600160a01b031681565b34801561058557600080fd5b506102206ec097ce7bc90715b34b9f100000000081565b3480156105a857600080fd5b506103267f000000000000000000000000000000000000000000000000000000000000000081565b3480156105dc57600080fd5b506001610459565b3480156105f057600080fd5b506102086105ff3660046114b6565b610ed7565b6001600160a01b0381166000908152600b602052604081205490036106265750565b6000610631826109c7565b905080156107dc57806009600082825461064b91906114e5565b90915550506001600160a01b0382166000908152600d60209081526040808320429055600b9091529020600201546106849082906114e5565b6001600160a01b0383166000908152600b602052604090206002810191909155546106ae90610fc6565b6001600160a01b038381166000818152600b60205260409081902060010193909355915163a9059cbb60e01b81526004810192909252602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015610736573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075a91906114f8565b6107dc5760405162461bcd60e51b815260206004820152604260248201527f44697374726962757465205265776172643a205468657265277320736f6d657460448201527f68696e672077726f6e672077697468207472616e736665722066756e6374696f606482015261371760f11b608482015260a4015b60405180910390fd5b5050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461081557600080fd5b6001600160a01b0382166000908152600b602052604081205490610838846109c7565b905060008311801561086057506001600160a01b0384166000908152600b6020526040902054155b156108c657600a80546001600160a01b0386166000818152600c60205260408120839055600183018455929092527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b03191690911790556108f9565b821580156108eb57506001600160a01b0384166000908152600b602052604090205415155b156108f9576108f984610ff6565b6007546001600160a01b0385166000908152600b60205260409020548490610921908361151a565b61092b91906114e5565b60078190556040805183815260208101929092524282820152517febcd92952a62de01833d48b86e05a7d7c1bbf96453bd60453c5e9e9a833abf5a9181900360600190a16001600160a01b0385166000908152600b6020526040902084905561099384610fc6565b6001600160a01b0386166000908152600b602052604090206001015582156109c0576109c083838761110b565b5050505050565b6001600160a01b0381166000908152600b602052604081205481036109ee57506000919050565b6001600160a01b0382166000908152600b6020526040812054610a1090610fc6565b6001600160a01b0384166000908152600b6020526040902060010154909150808211610a40575060009392505050565b610a4a818361151a565b949350505050565b610a5a6112b1565b6040517f0000000000000000000000000000000000000000000000000000000000000000906001600160a01b038216904780156108fc02916000818181858888f193505050501580156107dc573d6000803e3d6000fd5b610ab96112b1565b610ac360006112ed565b565b610acd61133d565b8060035403610af25760405163657e16cf60e01b8152600481018290526024016107d3565b600355565b600a8181548110610b0757600080fd5b6000918252602090912001546001600160a01b0316905081565b610b2961133d565b60146004541115610bdd5760405162461bcd60e51b815260206004820152606c60248201527f557064617465204d617820436f6e74696e756f7573204469737472696275746960448201527f6f6e3a204d617820646973747269627574696f6e20666f72207265776172642060648201527f73686f756c64206265206c6573736572206f7220657175616c20746f2032302060848201526b30ba1037b732903a34b6b29760a11b60a482015260c4016107d3565b6004548103610c025760405163657e16cf60e01b8152600481018290526024016107d3565b6004805490829055604080518281526020810184905242918101919091527fab8944c2e430858bccbe36c4de317cb93679e2700397f1e6a5423a5ced63b0b0906060015b60405180910390a15050565b610c5a6112b1565b6001600160a01b0381161580610c7a57506001600160a01b03811661dead145b15610ca357604051635077b8ed60e11b81526001600160a01b03821660048201526024016107d3565b610caf8133600161136f565b50565b80600854610cc091906114e5565b600855600754610cdf826ec097ce7bc90715b34b9f100000000061152d565b610ce99190611544565b600554610cf691906114e5565b6005556040516323b872dd60e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166004820181905230602483015260448201839052906323b872dd906064016020604051808303816000875af1158015610d6d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107dc91906114f8565b610ac333610604565b610da261133d565b6002546001600160a01b03808316911603610ddb5760405163a936636960e01b81526001600160a01b03821660048201526024016107d3565b600280546001600160a01b038381166001600160a01b0319831681179093556040805191909216808252602082019390935242918101919091527ff3ecf26fdaa8c4750bb008a2ce64300dbfd4ef1001e7c59d2a89c17bcbfd60b590606001610c46565b610e476112b1565b6001600160a01b0381161580610e6757506001600160a01b03811661dead145b15610e9057604051635077b8ed60e11b81526001600160a01b03821660048201526024016107d3565b610caf8133600061136f565b610ea46112b1565b6001600160a01b038116610ece5760405163b20f76e360e01b8152600060048201526024016107d3565b610caf816112ed565b600a546000819003610ee7575050565b6000805a905060005b8483108015610f00575060045481105b8015610f0b57508381105b156109c0578360065410610f31578360066000828254610f2b919061151a565b90915550505b610f63600a60065481548110610f4957610f49611566565b6000918252602090912001546001600160a01b0316611439565b15610f9a57610f9a600a60065481548110610f8057610f80611566565b6000918252602090912001546001600160a01b0316610604565b5a610fa5908361151a565b610faf90846114e5565b92505a915080610fbe8161157c565b915050610ef0565b60006ec097ce7bc90715b34b9f100000000060055483610fe6919061152d565b610ff09190611544565b92915050565b600a80546110069060019061151a565b8154811061101657611016611566565b60009182526020808320909101546001600160a01b038481168452600c909252604090922054600a8054929093169291811061105457611054611566565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559183168152600c918290526040812054600a8054919392916110a09060019061151a565b815481106110b0576110b0611566565b60009182526020808320909101546001600160a01b03168352820192909252604001902055600a8054806110e6576110e6611595565b600082815260209020810160001990810180546001600160a01b031916905501905550565b8260000361111857505050565b81156112ac57816009600082825461113091906114e5565b90915550506001600160a01b0381166000908152600d60209081526040808320429055600b9091529020600201546111699083906114e5565b6001600160a01b0382166000908152600b602052604090206002015561118e83610fc6565b6001600160a01b038281166000818152600b60205260409081902060010193909355915163a9059cbb60e01b81526004810192909252602482018490527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015611216573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123a91906114f8565b6112ac5760405162461bcd60e51b815260206004820152603d60248201527f54616c6c79205265776172643a205468657265277320736f6d657468696e672060448201527f77726f6e672077697468207472616e736665722066756e6374696f6e2e00000060648201526084016107d3565b505050565b336112c46000546001600160a01b031690565b6001600160a01b031614610ac3576040516332b2baa360e01b81523360048201526024016107d3565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b3360009081526001602052604090205460ff16610ac3576040516332b2baa360e01b81523360048201526024016107d3565b6001600160a01b03831660009081526001602052604090205481151560ff9091161515036113c357604051635ce75a3b60e01b81526001600160a01b038416600482015281151560248201526044016107d3565b6001600160a01b03838116600081815260016020908152604091829020805460ff19168615159081179091558251938452938616908301528101919091524260608201527fff1d0a27274ca0cc8403b0e8f4a70b968164366f4856d18f7569eba542e9aae49060800160405180910390a1505050565b6000600354611447836109c7565b1192915050565b80356001600160a01b038116811461146557600080fd5b919050565b60006020828403121561147c57600080fd5b6114858261144e565b9392505050565b6000806040838503121561149f57600080fd5b6114a88361144e565b946020939093013593505050565b6000602082840312156114c857600080fd5b5035919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610ff057610ff06114cf565b60006020828403121561150a57600080fd5b8151801515811461148557600080fd5b81810381811115610ff057610ff06114cf565b8082028115828204841417610ff057610ff06114cf565b60008261156157634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b60006001820161158e5761158e6114cf565b5060010190565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220355b0eb1dcb2e55fb61771512d483d094e8128ff0c56ecf2ddb6f789b4f96f5264736f6c634300081200330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000e8ae9d9b30427a8b75c67b7cf8ea73046b2a6caf

Deployed Bytecode

0x6080604052600436106104da5760003560e01c80639213691311610281578063b908de8c1161015a578063d974c792116100cc578063e43504da11610085578063e43504da14610e72578063f0b37c0414610e93578063f0f56b2c14610eb3578063f2a4268714610ee2578063f2fde38b14610f12578063f887ea4014610f3257600080fd5b8063d974c79214610de7578063da4daf7114610dfb578063db0dcf3814610e11578063dcf56d2714610e26578063dd62ed3e14610e3c578063de0aad5314610e5c57600080fd5b8063cbe129691161011e578063cbe1296914610d1c578063d4e2799a14610d4c578063d621e81314610d6c578063d63cad2214610d86578063d76b456e14610da6578063d830678614610dc657600080fd5b8063b908de8c14610c70578063b9b2b5cd14610c92578063bdb9f28d14610ca8578063bfe1092814610cc8578063c851cc3214610cfc57600080fd5b8063a5949bcf116101f3578063ab28a04c116101b7578063ab28a04c14610bdb578063ab36629214610bf1578063adca4d9c14610c06578063b2dffb5c14610c26578063b6a5d7de14610c3b578063b88a802f14610c5b57600080fd5b8063a5949bcf14610b3e578063a6d4ec3214610b65578063a8aa1b3114610b85578063a9059cbb14610ba5578063aa87ca9114610bc557600080fd5b806397e1b9d31161024557806397e1b9d314610a7f57806398e5bfee14610a955780639a51320814610ab5578063a0a6e94014610ad5578063a4475ce414610aea578063a457c2d714610b1e57600080fd5b806392136913146109ef578063924de9b714610a0557806392f1a8e814610a255780639358928b14610a3a57806395d89b4114610a4f57600080fd5b80633d6362d6116103b3578063715018a6116103255780637bce5a04116102e95780637bce5a041461095b5780637cf95ea8146109715780637e8c95ab1461098657806385c5b319146109a65780638a8c523c146109bc5780638da5cb5b146109d157600080fd5b8063715018a6146108e457806371538eed146108f957806371a515221461090f57806371dbdb671461092557806375fed3c71461093b57600080fd5b806360e719621161037757806360e719621461082d57806361a2785b1461084357806363a95492146108595780636883b732146108795780636d4980931461088f57806370a08231146108ae57600080fd5b80633d6362d6146107ac5780634578b91d146107cc578063540ba552146107ec57806358fa63ca1461080257806359cd90311461081757600080fd5b806323b872dd1161044c578063313ce56711610410578063313ce567146106f957806333830fe514610715578063351a964d1461073557806339509351146107565780633aef6291146107765780633bf314541461078c57600080fd5b806323b872dd1461067857806326b875a814610698578063273ab050146106ae57806329667b23146106c45780632e4cfd01146106d957600080fd5b80630cfe2f3f1161049e5780630cfe2f3f146105c9578063122fe685146105ed57806312bf71561461060d578063177aedb21461062d57806318160ddd146106435780631d0e98f31461065857600080fd5b806301295143146104e657806303fd2a451461050857806306fdde031461053b578063095ea7b3146105795780630a8c65f1146105a957600080fd5b366104e157005b600080fd5b3480156104f257600080fd5b50610506610501366004613ce3565b610f52565b005b34801561051457600080fd5b5061051e61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561054757600080fd5b5060408051808201909152600c81526b0457665725269736520322e360a41b60208201525b6040516105329190613cfc565b34801561058557600080fd5b50610599610594366004613d5f565b6112a1565b6040519015158152602001610532565b3480156105b557600080fd5b506105066105c4366004613d8b565b6112bb565b3480156105d557600080fd5b506105df60065481565b604051908152602001610532565b3480156105f957600080fd5b50601b5461051e906001600160a01b031681565b34801561061957600080fd5b50610506610628366004613d8b565b6113b6565b34801561063957600080fd5b506105df600d5481565b34801561064f57600080fd5b506003546105df565b34801561066457600080fd5b506019546105999062010000900460ff1681565b34801561068457600080fd5b50610599610693366004613db7565b611467565b3480156106a457600080fd5b506105df60115481565b3480156106ba57600080fd5b506105df60125481565b3480156106d057600080fd5b5061050661148b565b3480156106e557600080fd5b506105066106f4366004613ce3565b6114da565b34801561070557600080fd5b5060405160128152602001610532565b34801561072157600080fd5b50610506610730366004613ce3565b611577565b34801561074157600080fd5b5060195461059990600160281b900460ff1681565b34801561076257600080fd5b50610599610771366004613d5f565b61160f565b34801561078257600080fd5b506105df61a8c081565b34801561079857600080fd5b506105066107a7366004613e06565b611631565b3480156107b857600080fd5b506105066107c7366004613e23565b6116e5565b3480156107d857600080fd5b506105066107e7366004613e23565b6117a9565b3480156107f857600080fd5b506105df60055481565b34801561080e57600080fd5b5061051e600081565b34801561082357600080fd5b506105df60185481565b34801561083957600080fd5b506105df60175481565b34801561084f57600080fd5b506105df60135481565b34801561086557600080fd5b50610506610874366004613ce3565b6118df565b34801561088557600080fd5b506105df600f5481565b34801561089b57600080fd5b5060195461059990610100900460ff1681565b3480156108ba57600080fd5b506105df6108c9366004613e23565b6001600160a01b03166000908152601d602052604090205490565b3480156108f057600080fd5b50610506611984565b34801561090557600080fd5b506105df60145481565b34801561091b57600080fd5b506105df60085481565b34801561093157600080fd5b506105df600b5481565b34801561094757600080fd5b50610506610956366004613ce3565b611996565b34801561096757600080fd5b506105df60045481565b34801561097d57600080fd5b50610506611a64565b34801561099257600080fd5b50601c5461051e906001600160a01b031681565b3480156109b257600080fd5b506105df600a5481565b3480156109c857600080fd5b50610506611a81565b3480156109dd57600080fd5b506000546001600160a01b031661051e565b3480156109fb57600080fd5b506105df60075481565b348015610a1157600080fd5b50610506610a20366004613e06565b611b49565b348015610a3157600080fd5b50610506611bf7565b348015610a4657600080fd5b506105df611c14565b348015610a5b57600080fd5b50604080518082019091526007815266052495345322e360cc1b602082015261056c565b348015610a8b57600080fd5b506105df60165481565b348015610aa157600080fd5b50610506610ab0366004613ce3565b611c84565b348015610ac157600080fd5b50610506610ad0366004613e40565b611dd1565b348015610ae157600080fd5b50610506611e46565b348015610af657600080fd5b5061051e7f000000000000000000000000e8ae9d9b30427a8b75c67b7cf8ea73046b2a6caf81565b348015610b2a57600080fd5b50610599610b39366004613d5f565b611f16565b348015610b4a57600080fd5b5060195461051e90600160381b90046001600160a01b031681565b348015610b7157600080fd5b50610506610b80366004613d8b565b611f9c565b348015610b9157600080fd5b50601a5461051e906001600160a01b031681565b348015610bb157600080fd5b50610599610bc0366004613d5f565b612053565b348015610bd157600080fd5b506105df600c5481565b348015610be757600080fd5b506105df61271081565b348015610bfd57600080fd5b50610506612069565b348015610c1257600080fd5b50610506610c21366004613ce3565b6120b4565b348015610c3257600080fd5b506105066120ff565b348015610c4757600080fd5b50610506610c56366004613e23565b61214e565b348015610c6757600080fd5b506105066121ab565b348015610c7c57600080fd5b5060195461059990640100000000900460ff1681565b348015610c9e57600080fd5b506105df60105481565b348015610cb457600080fd5b50610506610cc3366004613e23565b6122ee565b348015610cd457600080fd5b5061051e7f0000000000000000000000002e3b49ec5768d0317fad4a3c390e680e041dd3e681565b348015610d0857600080fd5b50610506610d17366004613e23565b61241d565b348015610d2857600080fd5b50610599610d37366004613e23565b60016020526000908152604090205460ff1681565b348015610d5857600080fd5b50610506610d67366004613ce3565b612676565b348015610d7857600080fd5b506019546105999060ff1681565b348015610d9257600080fd5b50610506610da1366004613e40565b612745565b348015610db257600080fd5b50610506610dc1366004613ce3565b6127bc565b348015610dd257600080fd5b5060195461059990600160301b900460ff1681565b348015610df357600080fd5b506001610599565b348015610e0757600080fd5b506105df60155481565b348015610e1d57600080fd5b5061050661284a565b348015610e3257600080fd5b506105df600e5481565b348015610e4857600080fd5b506105df610e57366004613e79565b612867565b348015610e6857600080fd5b506105df60095481565b348015610e7e57600080fd5b50601954610599906301000000900460ff1681565b348015610e9f57600080fd5b50610506610eae366004613e23565b612892565b348015610ebf57600080fd5b50610599610ece366004613e23565b602080526000908152604090205460ff1681565b348015610eee57600080fd5b50610599610efd366004613e23565b601f6020526000908152604090205460ff1681565b348015610f1e57600080fd5b50610506610f2d366004613e23565b6128ef565b348015610f3e57600080fd5b5060025461051e906001600160a01b031681565b6019805460ff60301b1916600160301b179055601154600d54600091610f7791613ebd565b90506000601254600e54610f8b9190613ebd565b90506000601454601054610f9f9190613ebd565b9050600081610fae8587613ed0565b610fb89190613ee7565b9050600082610fc78588613ed0565b610fd19190613ee7565b9050600081610fe08489613ebd565b610fea9190613ebd565b90508260116000828254610ffe9190613f09565b9250508190555081601260008282546110179190613f09565b9250508190555080601360008282546110309190613f09565b9250508190555086601460008282546110499190613f09565b9091555050604080516002808252606082018352600092602083019080368337019050509050308160008151811061108357611083613f1c565b6001600160a01b03928316602091820292909201810191909152600254604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156110dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111009190613f32565b8160018151811061111357611113613f1c565b6001600160a01b039283166020918202929092010152600254611139913091168a61292a565b6040805185815260208101859052908101839052606081018990523360808201524260a08201527f095046c58a377d54685857e96b2bbfd471ec5fe130ece4bd1fbf1369b1be25e49060c00160405180910390a160025460195460405163791ac94760e01b81526001600160a01b039283169263791ac947926111d39289926000928892600160381b909104909116904290600401613f93565b600060405180830381600087803b1580156111ed57600080fd5b505af1158015611201573d6000803e3d6000fd5b505050506112143061dead6012546129ef565b5060405163b6b55f2560e01b8152600481018390527f0000000000000000000000002e3b49ec5768d0317fad4a3c390e680e041dd3e66001600160a01b03169063b6b55f2590602401600060405180830381600087803b15801561127757600080fd5b505af1925050508015611288575060015b505b50506019805460ff60301b19169055505050505050565b6000336112af81858561292a565b60019150505b92915050565b6112c3612a9b565b601954640100000000900460ff16156112ef5760405163882d29d360e01b815260040160405180910390fd5b6103e8816112fd8486613f09565b6113079190613f09565b111561134c57806113188385613f09565b6113229190613f09565b60405163211a907760e11b815260048101919091526103e860248201526044015b60405180910390fd5b600a8054600b8054600c8054948890559186905590849055604051919290917fd728aed4076f96b00527a08c6e0591cad410f3e75fb1471564c174a18e3668a6906113a6908590849086908b9082908b9033904290613fcf565b60405180910390a1505050505050565b6113be612a9b565b601954640100000000900460ff16156113ea5760405163882d29d360e01b815260040160405180910390fd5b6103e8816113f88486613f09565b6114029190613f09565b111561141357806113188385613f09565b600480546005546006805493879055849055604051919290917f5932f216d0a2d3d0c643474e41a1540022e0eb58874326af8ee47d8908fb1b85906113a6908590849086908b9082908b9033904290613fcf565b600033611475858285612ad7565b611480858585612b51565b9150505b9392505050565b611493612a9b565b6114bf307f0000000000000000000000002e3b49ec5768d0317fad4a3c390e680e041dd3e6600061292a565b6002546114d89030906001600160a01b0316600061292a565b565b601154600d546114ea9190613ebd565b81111561156b5760405162461bcd60e51b815260206004820152604360248201527f52656465656d205061727469616c204d61726b6574696e67204665653a20496e60448201527f73756666696369656e74206d61726b6574696e672066656520636f6c6c65637460648201526232b21760e91b608482015260a401611343565b61157481612f5b565b50565b601254600e546115879190613ebd565b8111156116065760405162461bcd60e51b815260206004820152604160248201527f52656465656d205061727469616c204275796261636b204665653a20496e737560448201527f6666696369656e74206d61726b6574696e672066656520636f6c6c65637465646064820152601760f91b608482015260a401611343565b61157481613115565b6000336112af8185856116228383612867565b61162c9190613f09565b61292a565b61163961317a565b801515601960039054906101000a900460ff1615150361166f5760405162a7e72d60e41b81528115156004820152602401611343565b60198054821515630100000081810263ff000000198416179093556040805160ff94909304939093168015158352602083019190915233928201929092524260608201527ff99f9d4d81f67d0980beea494b4404ba3b8af1a0a2d493230f1a883efa027f2f906080015b60405180910390a15050565b6116ed612a9b565b6019546001600160a01b03808316600160381b909204160361172d5760405163a936636960e01b81526001600160a01b0382166004820152602401611343565b601980546001600160a01b03838116600160381b818102670100000000000000600160d81b0319851617909455604080519490930490911680845260208401919091523391830191909152426060830152907f962c9954d0c3e9da3b1c12a71326e2956e36e5a05e6a5cce4c80a2d9d13ebd4c906080016116d9565b6117b161317a565b601954610100900460ff16156117e857601954604051624dc03960e01b815261010090910460ff1615156004820152602401611343565b6001600160a01b03811661181257604051634726455360e11b815260006004820152602401611343565b601c546001600160a01b039081169082160361185057601c5460405163a936636960e01b81526001600160a01b039091166004820152602401611343565b601c80546001600160a01b0319166001600160a01b0383169081179091556000818152601f60209081526040808320805460ff199081166001908117909255838052938290208054909416179092558151928352339083015242908201527f91e9ca83b2cea3dc47a586b13da0fbefddf12f84b31b51ca27d26bebc367675c906060015b60405180910390a150565b6118e761317a565b674563918244f4000081111561191a5760405163181c9d0b60e21b8152674563918244f400006004820152602401611343565b61a8c06016544261192b9190613ebd565b101561195a5760165461193e9042613ebd565b60405163079c6b2d60e31b815260040161134391815260200190565b6119668161dead6131ac565b80601560008282546119789190613f09565b90915550504260165550565b61198c612a9b565b6114d8600061332e565b61199e612a9b565b80601854036119c35760405163657e16cf60e01b815260048101829052602401611343565b6119cf6012600a6140f2565b6119da906064613ed0565b6018541015611a16576119ef6012600a6140f2565b6119fa906064613ed0565b60405163181c9d0b60e21b815260040161134391815260200190565b6018805490829055604080518281526020810184905233918101919091524260608201527f9a9f4704ac409fe039e92a996e415370980275aaff2992936ed5b432886c55c5906080016116d9565b6000601354600f54611a769190613ebd565b90506115748161337e565b611a89612a9b565b60195460ff1615611ab8576019546040516301bf623960e61b815260ff90911615156004820152602401611343565b6019546301000000900460ff1615611af457601954604051630eff900b60e21b8152630100000090910460ff1615156004820152602401611343565b601954600160281b900460ff1615611b305760195460405163610a8e6760e01b8152600160281b90910460ff1615156004820152602401611343565b6019805465ff00ffffffff191665010001010101179055565b611b5161317a565b801515601960059054906101000a900460ff16151503611b875760405162a7e72d60e41b81528115156004820152602401611343565b60198054821515600160281b81810265ff0000000000198416179093556040805160ff94909304939093168015158352602083019190915233928201929092524260608201527fa9eb6c000d17475b17651469533695f7b673c93327fdbadf4341ebeb2607a044906080016116d9565b6000601254600e54611c099190613ebd565b905061157481613115565b601d6020527f0a51588b1664495f089dd83d2d26f247920f94a57a4a09f20cf068efc8f82bd45461dead60009081527ffa758cef5bd0db441ee78e87b9ceab03f7b5d7b78ff593b3cf8150611abcb99954600354919291611c759190613ebd565b611c7f9190613ebd565b905090565b611c8c61317a565b7f0000000000000000000000002e3b49ec5768d0317fad4a3c390e680e041dd3e66001600160a01b031663ff10302a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0e9190614101565b611d5657604051630e2665e160e31b81526001600160a01b037f0000000000000000000000002e3b49ec5768d0317fad4a3c390e680e041dd3e6166004820152602401611343565b604051634c72dff760e11b8152600481018290527f0000000000000000000000002e3b49ec5768d0317fad4a3c390e680e041dd3e66001600160a01b0316906398e5bfee90602401600060405180830381600087803b158015611db857600080fd5b505af1925050508015611dc9575060015b156115745750565b611dd961317a565b6001600160a01b038216600090815260208052604090205481151560ff909116151503611e1c5760405162a7e72d60e41b81528115156004820152602401611343565b6001600160a01b039190911660009081526020805260409020805460ff1916911515919091179055565b611e4e61317a565b601954610100900460ff1615611e8557601954604051624dc03960e01b815261010090910460ff1615156004820152602401611343565b6019546301000000900460ff1615611ec157601954604051630eff900b60e21b8152630100000090910460ff1615156004820152602401611343565b601954600160281b900460ff1615611efd5760195460405163610a8e6760e01b8152600160281b90910460ff1615156004820152602401611343565b6019805465ff00ff00ff00191665010001000100179055565b60003381611f248286612867565b905083811015611f845760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401611343565b611f91828686840361292a565b506001949350505050565b611fa4612a9b565b601954640100000000900460ff1615611fd05760405163882d29d360e01b815260040160405180910390fd5b6103e881611fde8486613f09565b611fe89190613f09565b1115611ff957806113188385613f09565b600780546008805460098054948890559186905590849055604051919290917f849ba5c56c6e9cf1a4224a7de933ce31ef95842fd802f56c478315d9cad597f2906113a6908590849086908b9082908b9033904290613fcf565b600033612061818585612b51565b949350505050565b612071612a9b565b601954640100000000900460ff161561209d5760405163882d29d360e01b815260040160405180910390fd5b6019805464ff000000001916640100000000179055565b6120bc612a9b565b6120e7307f0000000000000000000000002e3b49ec5768d0317fad4a3c390e680e041dd3e68361292a565b6002546115749030906001600160a01b03168361292a565b612107612a9b565b612134307f0000000000000000000000002e3b49ec5768d0317fad4a3c390e680e041dd3e660001961292a565b6002546114d89030906001600160a01b031660001961292a565b612156612a9b565b6001600160a01b038116158061217657506001600160a01b03811661dead145b1561219f57604051635077b8ed60e11b81526001600160a01b0382166004820152602401611343565b6115748133600161352d565b7f0000000000000000000000002e3b49ec5768d0317fad4a3c390e680e041dd3e66001600160a01b031663ff10302a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612209573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061222d9190614101565b61227557604051630e2665e160e31b81526001600160a01b037f0000000000000000000000002e3b49ec5768d0317fad4a3c390e680e041dd3e6166004820152602401611343565b60405163092193ab60e01b81523360048201527f0000000000000000000000002e3b49ec5768d0317fad4a3c390e680e041dd3e66001600160a01b03169063092193ab90602401600060405180830381600087803b1580156122d657600080fd5b505af19250505080156122e7575060015b156114d857565b6122f661317a565b601954610100900460ff161561232d57601954604051624dc03960e01b815261010090910460ff1615156004820152602401611343565b6001600160a01b03811661235757604051634726455360e11b815260006004820152602401611343565b601b546001600160a01b039081169082160361239557601b5460405163a936636960e01b81526001600160a01b039091166004820152602401611343565b601b80546001600160a01b0319166001600160a01b0383169081179091556000818152601f60209081526040808320805460ff199081166001908117909255838052938290208054909416179092558151928352339083015242908201527f7d502148437cd458c511207c44811876c0b03fc02cb2e08366ed8a84058c25a3906060016118d4565b612425612a9b565b6002546001600160a01b0380831691160361245e5760405163a936636960e01b81526001600160a01b0382166004820152602401611343565b600280546001600160a01b031981166001600160a01b038481169182179093556000818152601f6020908152604091829020805460ff19166001179055815194909316808552928401919091523390830152426060830152907fe1cb783288eddc7b22c25642a832d886a558be0dd900747310a34156b9fdcbbb9060800160405180910390a1600260009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612537573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061255b9190613f32565b6001600160a01b031663c9c6539630600260009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e19190613f32565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561262e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126529190613f32565b601a80546001600160a01b0319166001600160a01b03929092169190911790555050565b61267e61317a565b80601754036126a35760405163657e16cf60e01b815260048101829052602401611343565b61271060175410156126cc5760405163181c9d0b60e21b81526127106004820152602401611343565b620b71b060175411156126f75760405163181c9d0b60e21b8152620b71b06004820152602401611343565b6017805490829055604080518281526020810184905233918101919091524260608201527f45e0e8e205e8f5cd9c66ecc65823c45bcc06cfae7b9f4902a0f7a1adca5b8839906080016116d9565b61274d61317a565b6001600160a01b0382166000908152601f602052604090205481151560ff9091161515036127915760405162a7e72d60e41b81528115156004820152602401611343565b6001600160a01b03919091166000908152601f60205260409020805460ff1916911515919091179055565b601354600f546127cc9190613ebd565b8111156128415760405162461bcd60e51b815260206004820152603d60248201527f52656465656d205061727469616c20526577617264204665653a20496e73756660448201527f66696369656e74207265776172642066656520636f6c6c65637465642e0000006064820152608401611343565b6115748161337e565b6000601154600d5461285c9190613ebd565b905061157481612f5b565b6001600160a01b039182166000908152601e6020908152604080832093909416825291909152205490565b61289a612a9b565b6001600160a01b03811615806128ba57506001600160a01b03811661dead145b156128e357604051635077b8ed60e11b81526001600160a01b0382166004820152602401611343565b6115748133600061352d565b6128f7612a9b565b6001600160a01b0381166129215760405163b20f76e360e01b815260006004820152602401611343565b6115748161332e565b6001600160a01b03831661295c57604051634726455360e11b81526001600160a01b0384166004820152602401611343565b6001600160a01b03821661298e57604051634726455360e11b81526001600160a01b0383166004820152602401611343565b6001600160a01b038381166000818152601e602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166000908152601d602052604081205482811015612a285760405162461bcd60e51b81526004016113439061411e565b6001600160a01b038086166000818152601d602052604080822087860390559287168082529083902080548701905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612a889087815260200190565b60405180910390a3506001949350505050565b33612aae6000546001600160a01b031690565b6001600160a01b0316146114d8576040516332b2baa360e01b8152336004820152602401611343565b6000612ae38484612867565b90506000198114612b4b5781811015612b3e5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401611343565b612b4b848484840361292a565b50505050565b60006001600160a01b038416612b8557604051634726455360e11b81526001600160a01b0385166004820152602401611343565b6001600160a01b038316612bb757604051634726455360e11b81526001600160a01b0384166004820152602401611343565b60195460ff16612d9757336001600160a01b037f000000000000000000000000e8ae9d9b30427a8b75c67b7cf8ea73046b2a6caf161480612c025750601c546001600160a01b031633145b80612c1757506000546001600160a01b031633145b80612c2c5750601b546001600160a01b031633145b612cd65760405162461bcd60e51b815260206004820152606960248201527f45524332303a204f6e6c79206f70657261746f722c206f776e6572206f72207060448201527f726573616c65206164647265737365732063616e2063616c6c2074686973206660648201527f756e6374696f6e2073696e63652074726164696e67206973206e6f74207965746084820152681032b730b13632b21760b91b60a482015260c401611343565b6000546001600160a01b03166001600160a01b0316846001600160a01b031603612d9757601a546001600160a01b0390811690841603612d975760405162461bcd60e51b815260206004820152605060248201527f45524332303a204f776e657220616e64206f70657261746f7220617265206e6f60448201527f7420616c6c6f77656420746f2073656c6c2069662074726164696e672069732060648201526f3737ba103cb2ba1032b730b13632b21760811b608482015260a401611343565b601954600160301b900460ff1680612dc757506001600160a01b0384166000908152601f602052604090205460ff165b15612dde57612dd78484846129ef565b9050611484565b601a546001600160a01b03858116911614801590612e055750601954600160281b900460ff165b8015612e225750601854601454601054612e1f9190613ebd565b10155b15612e3257612e32601854610f52565b60195482906301000000900460ff168015612e6657506001600160a01b0385166000908152601f602052604090205460ff16155b8015612e8b57506001600160a01b0384166000908152601f602052604090205460ff16155b15612e9e57612e9b8585856135f7565b90505b6001600160a01b0385166000908152601d6020526040902054811115612ed65760405162461bcd60e51b81526004016113439061411e565b6001600160a01b038086166000818152601d6020526040808220805486900390559287168082529083902080548501905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612f389085815260200190565b60405180910390a360195462010000900460ff1615611f9157611f9185856136f7565b6019805460ff60301b1916600160301b17905560118054829190600090612f83908490613f09565b925050819055508060146000828254612f9c9190613f09565b90915550506040805160028082526060820183526000926020830190803683370190505090503081600081518110612fd657612fd6613f1c565b6001600160a01b03928316602091820292909201810191909152600254604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561302f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130539190613f32565b8160018151811061306657613066613f1c565b6001600160a01b03928316602091820292909201015260025461308c913091168461292a565b60025460195460405163791ac94760e01b81526001600160a01b039283169263791ac947926130d29287926000928892600160381b909104909116904290600401613f93565b600060405180830381600087803b1580156130ec57600080fd5b505af1158015613100573d6000803e3d6000fd5b50506019805460ff60301b1916905550505050565b6019805460ff60301b1916600160301b1790556012805482919060009061313d908490613f09565b9250508190555080601460008282546131569190613f09565b9091555061316990503061dead836129ef565b50506019805460ff60301b19169055565b3360009081526001602052604090205460ff166114d8576040516332b2baa360e01b8152336004820152602401611343565b6019805460ff60301b1916600160301b17905561deac1933016131e657604051634726455360e11b815261dead6004820152602401611343565b6040805160028082526060820183526000926020830190803683375050600254604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015613250573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132749190613f32565b8160008151811061328757613287613f1c565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106132bb576132bb613f1c565b6001600160a01b03928316602091820292909201015260025460405163b6f9de9560e01b815291169063b6f9de9590859061330190600090869088904290600401614164565b6000604051808303818588803b15801561331a57600080fd5b505af115801561128a573d6000803e3d6000fd5b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6019805460ff60301b1916600160301b1790556040805160016277e7eb60e11b0319815290516001600160a01b037f0000000000000000000000002e3b49ec5768d0317fad4a3c390e680e041dd3e6169163ff10302a9160048083019260209291908290030181865afa1580156133f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061341d9190614101565b61346557604051630e2665e160e31b81526001600160a01b037f0000000000000000000000002e3b49ec5768d0317fad4a3c390e680e041dd3e6166004820152602401611343565b80601360008282546134779190613f09565b9250508190555080601460008282546134909190613f09565b90915550506002546134ad9030906001600160a01b03168361292a565b60405163b6b55f2560e01b8152600481018290527f0000000000000000000000002e3b49ec5768d0317fad4a3c390e680e041dd3e66001600160a01b03169063b6b55f2590602401600060405180830381600087803b15801561350f57600080fd5b505af19250505080156131695750506019805460ff60301b19169055565b6001600160a01b03831660009081526001602052604090205481151560ff90911615150361358157604051635ce75a3b60e01b81526001600160a01b03841660048201528115156024820152604401611343565b6001600160a01b03838116600081815260016020908152604091829020805460ff19168615159081179091558251938452938616908301528101919091524260608201527fff1d0a27274ca0cc8403b0e8f4a70b968164366f4856d18f7569eba542e9aae49060800160405180910390a1505050565b6019805460ff60301b1916600160301b179055601a546000906001600160a01b038581169116148015613639575060006006546004546136379190613f09565b115b1561364f57613648848361399e565b90506136e3565b601a546001600160a01b03848116911614801561367b575060006009546007546136799190613f09565b115b1561368a576136488483613a21565b601a546001600160a01b038581169116148015906136b65750601a546001600160a01b03848116911614155b80156136d157506000600c54600a546136cf9190613f09565b115b156136e0576136488483613a8e565b50805b6019805460ff60301b191690559392505050565b7f0000000000000000000000002e3b49ec5768d0317fad4a3c390e680e041dd3e66001600160a01b031663ff10302a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613755573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137799190614101565b6137c157604051630e2665e160e31b81526001600160a01b037f0000000000000000000000002e3b49ec5768d0317fad4a3c390e680e041dd3e6166004820152602401611343565b6001600160a01b038216600090815260208052604090205460ff16613870576001600160a01b038281166000818152601d602052604090819020549051630a5b654b60e11b8152600481019290925260248201527f0000000000000000000000002e3b49ec5768d0317fad4a3c390e680e041dd3e6909116906314b6ca9690604401600060405180830381600087803b15801561385d57600080fd5b505af192505050801561386e575060015b505b6001600160a01b038116600090815260208052604090205460ff1661391f576001600160a01b038181166000818152601d602052604090819020549051630a5b654b60e11b8152600481019290925260248201527f0000000000000000000000002e3b49ec5768d0317fad4a3c390e680e041dd3e6909116906314b6ca9690604401600060405180830381600087803b15801561390c57600080fd5b505af192505050801561391d575060015b505b6017546040516001624d3b8760e01b0319815260048101919091527f0000000000000000000000002e3b49ec5768d0317fad4a3c390e680e041dd3e66001600160a01b03169063ffb2c47990602401600060405180830381600087803b15801561398857600080fd5b505af1925050508015613999575060015b505050565b6019805460ff60301b1916600160301b179055600654600554600454600092839290916139cb9190613f09565b6139d59190613f09565b905060006127106139e68386613ed0565b6139f09190613ee7565b905060006139fe8286613ebd565b9050613a0b868385613afb565b6019805460ff60301b1916905595945050505050565b6019805460ff60301b1916600160301b17905560095460085460075460009283929091613a4e9190613f09565b613a589190613f09565b90506000612710613a698386613ed0565b613a739190613ee7565b90506000613a818286613ebd565b9050613a0b868385613bd4565b6019805460ff60301b1916600160301b179055600c54600854600a5460009283929091613abb9190613f09565b613ac59190613f09565b90506000612710613ad68386613ed0565b613ae09190613ee7565b90506000613aee8286613ebd565b9050613a0b868385613c16565b6019805460ff60301b1916600160301b1790556004546000908290613b209085613ed0565b613b2a9190613ee7565b905060008260055485613b3d9190613ed0565b613b479190613ee7565b9050600081613b568487613ebd565b613b609190613ebd565b9050613b6e83838388613c58565b6001600160a01b0386166000908152601d602052604081208054879290613b96908490613ebd565b9091555050306000908152601d602052604081208054879290613bba908490613f09565b90915550506019805460ff60301b19169055505050505050565b6019805460ff60301b1916600160301b1790556007546000908290613bf99085613ed0565b613c039190613ee7565b905060008260085485613b3d9190613ed0565b6019805460ff60301b1916600160301b179055600a546000908290613c3b9085613ed0565b613c459190613ee7565b9050600082600b5485613b3d9190613ed0565b6019805460ff60301b1916600160301b179055600d8054859190600090613c80908490613f09565b9250508190555082600e6000828254613c999190613f09565b9250508190555081600f6000828254613cb29190613f09565b925050819055508060106000828254613ccb9190613f09565b90915550506019805460ff60301b1916905550505050565b600060208284031215613cf557600080fd5b5035919050565b600060208083528351808285015260005b81811015613d2957858101830151858201604001528201613d0d565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461157457600080fd5b60008060408385031215613d7257600080fd5b8235613d7d81613d4a565b946020939093013593505050565b600080600060608486031215613da057600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215613dcc57600080fd5b8335613dd781613d4a565b92506020840135613de781613d4a565b929592945050506040919091013590565b801515811461157457600080fd5b600060208284031215613e1857600080fd5b813561148481613df8565b600060208284031215613e3557600080fd5b813561148481613d4a565b60008060408385031215613e5357600080fd5b8235613e5e81613d4a565b91506020830135613e6e81613df8565b809150509250929050565b60008060408385031215613e8c57600080fd5b8235613e9781613d4a565b91506020830135613e6e81613d4a565b634e487b7160e01b600052601160045260246000fd5b818103818111156112b5576112b5613ea7565b80820281158282048414176112b5576112b5613ea7565b600082613f0457634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156112b5576112b5613ea7565b634e487b7160e01b600052603260045260246000fd5b600060208284031215613f4457600080fd5b815161148481613d4a565b600081518084526020808501945080840160005b83811015613f885781516001600160a01b031687529582019590820190600101613f63565b509495945050505050565b85815284602082015260a060408201526000613fb260a0830186613f4f565b6001600160a01b0394909416606083015250608001529392505050565b978852602088019690965260408701949094526060860192909252608085015260a08401526001600160a01b031660c083015260e08201526101000190565b600181815b8085111561404957816000190482111561402f5761402f613ea7565b8085161561403c57918102915b93841c9390800290614013565b509250929050565b600082614060575060016112b5565b8161406d575060006112b5565b8160018114614083576002811461408d576140a9565b60019150506112b5565b60ff84111561409e5761409e613ea7565b50506001821b6112b5565b5060208310610133831016604e8410600b84101617156140cc575081810a6112b5565b6140d6838361400e565b80600019048211156140ea576140ea613ea7565b029392505050565b600061148460ff841683614051565b60006020828403121561411357600080fd5b815161148481613df8565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b84815260806020820152600061417d6080830186613f4f565b6001600160a01b0394909416604083015250606001529291505056fea2646970667358221220c093a7f1d50d69da20f9b3665eb3820aecc6a46c80e935f3d2bbee9c85ac42aa64736f6c63430008120033

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

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000e8ae9d9b30427a8b75c67b7cf8ea73046b2a6caf

-----Decoded View---------------
Arg [0] : routerAddress (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [1] : projectOwnerAddress (address): 0xe8Ae9D9b30427a8b75c67b7Cf8eA73046B2a6CAf

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [1] : 000000000000000000000000e8ae9d9b30427a8b75c67b7cf8ea73046b2a6caf


Deployed Bytecode Sourcemap

15542:28655:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25162:1521;;;;;;;;;;-1:-1:-1;25162:1521:0;;;;;:::i;:::-;;:::i;:::-;;17345:46;;;;;;;;;;;;17384:6;17345:46;;;;;-1:-1:-1;;;;;363:32:1;;;345:51;;333:2;318:18;17345:46:0;;;;;;;;37877:101;;;;;;;;;;-1:-1:-1;37966:4:0;;;;;;;;;;;;-1:-1:-1;;;37966:4:0;;;;37877:101;;;;;;;:::i;38844:205::-;;;;;;;;;;-1:-1:-1;38844:205:0;;;;;:::i;:::-;;:::i;:::-;;;1581:14:1;;1574:22;1556:41;;1544:2;1529:18;38844:205:0;1416:187:1;30506:776:0;;;;;;;;;;-1:-1:-1;30506:776:0;;;;;:::i;:::-;;:::i;16091:33::-;;;;;;;;;;;;;;;;;;;2075:25:1;;;2063:2;2048:18;16091:33:0;1929:177:1;17512:29:0;;;;;;;;;;-1:-1:-1;17512:29:0;;;;-1:-1:-1;;;;;17512:29:0;;;29010:736;;;;;;;;;;-1:-1:-1;29010:736:0;;;;;:::i;:::-;;:::i;16391:40::-;;;;;;;;;;;;;;;;38220:108;;;;;;;;;;-1:-1:-1;38308:12:0;;38220:108;;17059:34;;;;;;;;;;-1:-1:-1;17059:34:0;;;;;;;;;;;39061:246;;;;;;;;;;-1:-1:-1;39061:246:0;;;;;:::i;:::-;;:::i;16570:39::-;;;;;;;;;;;;;;;;16616:37;;;;;;;;;;;;;;;;27406:183;;;;;;;;;;;;;:::i;22707:285::-;;;;;;;;;;-1:-1:-1;22707:285:0;;;;;:::i;:::-;;:::i;38107:101::-;;;;;;;;;;-1:-1:-1;38107:101:0;;15838:2;2714:36:1;;2702:2;2687:18;38107:101:0;2572:184:1;23766:275:0;;;;;;;;;;-1:-1:-1;23766:275:0;;;;;:::i;:::-;;:::i;17176:33::-;;;;;;;;;;-1:-1:-1;17176:33:0;;;;-1:-1:-1;;;17176:33:0;;;;;;39319:247;;;;;;;;;;-1:-1:-1;39319:247:0;;;;;:::i;:::-;;:::i;15944:54::-;;;;;;;;;;;;15990:8;15944:54;;31290:308;;;;;;;;;;-1:-1:-1;31290:308:0;;;;;:::i;:::-;;:::i;31932:426::-;;;;;;;;;;-1:-1:-1;31932:426:0;;;;;:::i;:::-;;:::i;32366:475::-;;;;;;;;;;-1:-1:-1;32366:475:0;;;;;:::i;:::-;;:::i;16050:34::-;;;;;;;;;;;;;;;;17297:41;;;;;;;;;;;;17336:1;17297:41;;16889:34;;;;;;;;;;;;;;;;16844:38;;;;;;;;;;;;;;;;16660:36;;;;;;;;;;;;;;;;37003:432;;;;;;;;;;-1:-1:-1;37003:432:0;;;;;:::i;:::-;;:::i;16483:37::-;;;;;;;;;;;;;;;;17016:36;;;;;;;;;;-1:-1:-1;17016:36:0;;;;;;;;;;;38340:127;;;;;;;;;;-1:-1:-1;38340:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;38441:18:0;38414:7;38441:18;;;:9;:18;;;;;;;38340:127;5562:103;;;;;;;;;;;;;:::i;16703:35::-;;;;;;;;;;;;;;;;16175;;;;;;;;;;;;;;;;16304:37;;;;;;;;;;;;;;;;28069:392;;;;;;;;;;-1:-1:-1;28069:392:0;;;;;:::i;:::-;;:::i;16007:36::-;;;;;;;;;;;;;;;;24291:174;;;;;;;;;;;;;:::i;17548:29::-;;;;;;;;;;-1:-1:-1;17548:29:0;;;;-1:-1:-1;;;;;17548:29:0;;;16258:39;;;;;;;;;;;;;;;;21286:438;;;;;;;;;;;;;:::i;5131:87::-;;;;;;;;;;-1:-1:-1;5177:7:0;5204:6;-1:-1:-1;;;;;5204:6:0;5131:87;;16131:37;;;;;;;;;;;;;;;;31606:318;;;;;;;;;;-1:-1:-1;31606:318:0;;;;;:::i;:::-;;:::i;23580:178::-;;;;;;;;;;;;;:::i;26799:136::-;;;;;;;;;;;;;:::i;37990:105::-;;;;;;;;;;-1:-1:-1;38081:6:0;;;;;;;;;;;;-1:-1:-1;;;38081:6:0;;;;37990:105;;16794:43;;;;;;;;;;;;;;;;33779:263;;;;;;;;;;-1:-1:-1;33779:263:0;;;;;:::i;:::-;;:::i;33556:211::-;;;;;;;;;;-1:-1:-1;33556:211:0;;;;;:::i;:::-;;:::i;21732:386::-;;;;;;;;;;;;;:::i;17251:37::-;;;;;;;;;;;;;;;39578:445;;;;;;;;;;-1:-1:-1;39578:445:0;;;;;:::i;:::-;;:::i;17400:77::-;;;;;;;;;;-1:-1:-1;17400:77:0;;;;-1:-1:-1;;;17400:77:0;;-1:-1:-1;;;;;17400:77:0;;;29754:744;;;;;;;;;;-1:-1:-1;29754:744:0;;;;;:::i;:::-;;:::i;17486:19::-;;;;;;;;;;-1:-1:-1;17486:19:0;;;;-1:-1:-1;;;;;17486:19:0;;;38479:184;;;;;;;;;;-1:-1:-1;38479:184:0;;;;;:::i;:::-;;:::i;16348:36::-;;;;;;;;;;;;;;;;15890:47;;;;;;;;;;;;15931:6;15890:47;;22126:126;;;;;;;;;;;;;:::i;26963:208::-;;;;;;;;;;-1:-1:-1;26963:208:0;;;;;:::i;:::-;;:::i;27179:219::-;;;;;;;;;;;;;:::i;5894:255::-;;;;;;;;;;-1:-1:-1;5894:255:0;;;;;:::i;:::-;;:::i;22280:205::-;;;;;;;;;;;;;:::i;17138:31::-;;;;;;;;;;-1:-1:-1;17138:31:0;;;;;;;;;;;16527:36;;;;;;;;;;;;;;;;32849:475;;;;;;;;;;-1:-1:-1;32849:475:0;;;;;:::i;:::-;;:::i;15645:47::-;;;;;;;;;;;;;;;27597:464;;;;;;;;;;-1:-1:-1;27597:464:0;;;;;:::i;:::-;;:::i;4397:45::-;;;;;;;;;;-1:-1:-1;4397:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;28469:533;;;;;;;;;;-1:-1:-1;28469:533:0;;;;;:::i;:::-;;:::i;16977:32::-;;;;;;;;;;-1:-1:-1;16977:32:0;;;;;;;;33332:216;;;;;;;;;;-1:-1:-1;33332:216:0;;;;;:::i;:::-;;:::i;24473:267::-;;;;;;;;;;-1:-1:-1;24473:267:0;;;;;:::i;:::-;;:::i;17216:26::-;;;;;;;;;;-1:-1:-1;17216:26:0;;;;-1:-1:-1;;;17216:26:0;;;;;;26710:81;;;;;;;;;;-1:-1:-1;16964:4:0;26710:81;;16745:42;;;;;;;;;;;;;;;;22513:186;;;;;;;;;;;;;:::i;16438:38::-;;;;;;;;;;;;;;;;38675:157;;;;;;;;;;-1:-1:-1;38675:157:0;;;;;:::i;:::-;;:::i;16217:34::-;;;;;;;;;;;;;;;;17100:31;;;;;;;;;;-1:-1:-1;17100:31:0;;;;;;;;;;;6157:258;;;;;;;;;;-1:-1:-1;6157:258:0;;;;;:::i;:::-;;:::i;17790:46::-;;;;;;;;;;-1:-1:-1;17790:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17734:49;;;;;;;;;;-1:-1:-1;17734:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;5673:213;;;;;;;;;;-1:-1:-1;5673:213:0;;;;;:::i;:::-;;:::i;15615:21::-;;;;;;;;;;-1:-1:-1;15615:21:0;;;;-1:-1:-1;;;;;15615:21:0;;;25162:1521;17895:6;:13;;-1:-1:-1;;;;17895:13:0;-1:-1:-1;;;17895:13:0;;;25287:20:::1;::::0;25263:21:::1;::::0;17895:13;;25263:44:::1;::::0;::::1;:::i;:::-;25235:72;;25318:23;25366:18;;25344:19;;:40;;;;:::i;:::-;25318:66;;25395:21;25439:16;;25419:17;;:36;;;;:::i;:::-;25395:60:::0;-1:-1:-1;25468:32:0::1;25395:60:::0;25503:34:::1;25520:17:::0;25503:14;:34:::1;:::i;:::-;:50;;;;:::i;:::-;25468:85:::0;-1:-1:-1;25564:30:0::1;25632:13:::0;25597:32:::1;25614:15:::0;25597:14;:32:::1;:::i;:::-;:48;;;;:::i;:::-;25564:81:::0;-1:-1:-1;25656:29:0::1;25564:81:::0;25688:41:::1;25705:24:::0;25688:14;:41:::1;:::i;:::-;:66;;;;:::i;:::-;25656:98;;25799:24;25775:20;;:48;;;;;;;:::i;:::-;;;;;;;;25856:22;25834:18;;:44;;;;;;;:::i;:::-;;;;;;;;25910:21;25889:17;;:42;;;;;;;:::i;:::-;;;;;;;;25962:14;25942:16;;:34;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;26013:16:0::1;::::0;;26027:1:::1;26013:16:::0;;;;;::::1;::::0;;25989:21:::1;::::0;26013:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;26013:16:0::1;25989:40;;26058:4;26040;26045:1;26040:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26040:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;26084:6:::1;::::0;:13:::1;::::0;;-1:-1:-1;;;26084:13:0;;;;:6;;;::::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;26040:7;;26084:13;;;;;:6;:13:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26074:4;26079:1;26074:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26074:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;26142:6:::1;::::0;26110:56:::1;::::0;26127:4:::1;::::0;26142:6:::1;26151:14:::0;26110:8:::1;:56::i;:::-;26192:128;::::0;;6216:25:1;;;6272:2;6257:18;;6250:34;;;6300:18;;;6293:34;;;6358:2;6343:18;;6336:34;;;26292:10:0::1;6401:3:1::0;6386:19;;6379:61;26304:15:0::1;6427:3:1::0;6456:19;;6449:35;26192:128:0::1;::::0;6203:3:1;6188:19;26192:128:0::1;;;;;;;26333:6;::::0;26479:17:::1;::::0;26333:204:::1;::::0;-1:-1:-1;;;26333:204:0;;-1:-1:-1;;;;;26333:6:0;;::::1;::::0;:57:::1;::::0;:204:::1;::::0;26405:24;;26333:6:::1;::::0;26460:4;;-1:-1:-1;;;26479:17:0;;::::1;::::0;;::::1;::::0;26511:15:::1;::::0;26333:204:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;26550:55;26573:4;17384:6;26586:18;;26550:14;:55::i;:::-;-1:-1:-1::0;26622:42:0::1;::::0;-1:-1:-1;;;26622:42:0;;::::1;::::0;::::1;2075:25:1::0;;;26622:11:0::1;-1:-1:-1::0;;;;;26622:19:0::1;::::0;::::1;::::0;2048:18:1;;26622:42:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;26618:58:::0;::::1;-1:-1:-1::0;;17931:6:0;:14;;-1:-1:-1;;;;17931:14:0;;;-1:-1:-1;;;;;;25162:1521:0:o;38844:205::-;38927:4;38963:10;38984:35;38963:10;39003:7;39012:6;38984:8;:35::i;:::-;39037:4;39030:11;;;38844:205;;;;;:::o;30506:776::-;4502:13;:11;:13::i;:::-;30637:11:::1;::::0;;;::::1;;;30633:40;;;30659:11;;-1:-1:-1::0;;;30659:11:0::1;;;;;;;;;;;30633:40;30736:4;30721:12:::0;30687:31:::1;30705:13:::0;30687:15;:31:::1;:::i;:::-;:46;;;;:::i;:::-;:53;30683:140;;;30801:12:::0;30767:31:::1;30785:13:::0;30767:15;:31:::1;:::i;:::-;:46;;;;:::i;:::-;30751:69;::::0;-1:-1:-1;;;30751:69:0;;::::1;::::0;::::1;7733:25:1::0;;;;30815:4:0::1;7774:18:1::0;;;7767:34;7706:18;;30751:69:0::1;;;;;;;;30683:140;30859:20;::::0;;30914:18:::1;::::0;;30966:17:::1;::::0;;30994:38;;;;31043:34;;;;31088:32;;;;31136:138:::1;::::0;30859:20;;30914:18;;31136:138:::1;::::0;::::1;::::0;30859:20;;30966:17;;30914:18;;31017:15;;30914:18;;31108:12;;31246:10:::1;::::0;31258:15:::1;::::0;31136:138:::1;:::i;:::-;;;;;;;;30622:660;;;30506:776:::0;;;:::o;29010:736::-;4502:13;:11;:13::i;:::-;29136:11:::1;::::0;;;::::1;;;29132:40;;;29158:11;;-1:-1:-1::0;;;29158:11:0::1;;;;;;;;;;;29132:40;29235:4;29220:12:::0;29186:31:::1;29204:13:::0;29186:15;:31:::1;:::i;:::-;:46;;;;:::i;:::-;:53;29182:140;;;29300:12:::0;29266:31:::1;29284:13:::0;29266:15;:31:::1;:::i;29182:140::-;29358:15;::::0;;29408:13:::1;::::0;29455:12:::1;::::0;;29478:33;;;;29562:27;;;29605:133:::1;::::0;29358:15;;29408:13;;29605:133:::1;::::0;::::1;::::0;29358:15;;29455:12;;29408:13;;29496:15;;29408:13;;29577:12;;29710:10:::1;::::0;29722:15:::1;::::0;29605:133:::1;:::i;39061:246::-:0;39160:4;39195:10;39216:38;39232:4;39195:10;39247:6;39216:15;:38::i;:::-;39272:27;39282:4;39288:2;39292:6;39272:9;:27::i;:::-;39265:34;;;39061:246;;;;;;:::o;27406:183::-;4502:13;:11;:13::i;:::-;27479:48:::1;27496:4;27511:11;27525:1;27479:8;:48::i;:::-;27570:6;::::0;27538:43:::1;::::0;27555:4:::1;::::0;-1:-1:-1;;;;;27570:6:0::1;;27538:8;:43::i;:::-;27406:183::o:0;22707:285::-;22836:20;;22812:21;;:44;;;;:::i;:::-;22794:14;:62;;22786:142;;;;-1:-1:-1;;;22786:142:0;;8724:2:1;22786:142:0;;;8706:21:1;8763:2;8743:18;;;8736:30;8802:34;8782:18;;;8775:62;8873:34;8853:18;;;8846:62;-1:-1:-1;;;8924:19:1;;;8917:34;8968:19;;22786:142:0;8522:471:1;22786:142:0;22949:35;22969:14;22949:19;:35::i;:::-;22707:285;:::o;23766:275::-;23891:18;;23869:19;;:40;;;;:::i;:::-;23851:14;:58;;23843:136;;;;-1:-1:-1;;;23843:136:0;;9200:2:1;23843:136:0;;;9182:21:1;9239:2;9219:18;;;9212:30;9278:34;9258:18;;;9251:62;9349:34;9329:18;;;9322:62;-1:-1:-1;;;9400:19:1;;;9393:32;9442:19;;23843:136:0;8998:469:1;23843:136:0;24000:33;24018:14;24000:17;:33::i;39319:247::-;39409:4;39445:10;39466:70;39445:10;39485:7;39525:10;39494:28;39445:10;39485:7;39494:9;:28::i;:::-;:41;;;;:::i;:::-;39466:8;:70::i;31290:308::-;4576:18;:16;:18::i;:::-;31381:9:::1;31366:24;;:11;;;;;;;;;;;:24;;::::0;31362:74:::1;;31401:32;::::0;-1:-1:-1;;;31401:32:0;;1581:14:1;;1574:22;31401:32:0::1;::::0;::::1;1556:41:1::0;1529:18;;31401:32:0::1;1416:187:1::0;31362:74:0::1;31463:11;::::0;;31485:23;::::1;;31463:11:::0;31485:23;;::::1;-1:-1:-1::0;;31485:23:0;::::1;;::::0;;;31524:66:::1;::::0;;31463:11:::1;::::0;;;::::1;::::0;;;::::1;9716:14:1::0;;9709:22;9691:41;;9763:2;9748:18;;9741:50;;;;31562:10:0::1;9807:18:1::0;;;9800:60;;;;31574:15:0::1;9891:2:1::0;9876:18;;9869:34;31524:66:0::1;::::0;9678:3:1;9663:19;31524:66:0::1;;;;;;;;31351:247;31290:308:::0;:::o;31932:426::-;4502:13;:11;:13::i;:::-;32029:17:::1;::::0;-1:-1:-1;;;;;32029:41:0;;::::1;-1:-1:-1::0;;;32029:17:0;;::::1;;:41:::0;32025:104:::1;;32081:45;::::0;-1:-1:-1;;;32081:45:0;;-1:-1:-1;;;;;363:32:1;;32081:45:0::1;::::0;::::1;345:51:1::0;318:18;;32081:45:0::1;199:203:1::0;32025:104:0::1;32170:17;::::0;;-1:-1:-1;;;;;32198:40:0;;::::1;-1:-1:-1::0;;;32198:40:0;;::::1;-1:-1:-1::0;;;;;;32198:40:0;::::1;;::::0;;;32254:96:::1;::::0;;32170:17;;;::::1;::::0;;::::1;10183:34:1::0;;;10248:2;10233:18;;10226:43;;;;32322:10:0::1;10285:18:1::0;;;10278:43;;;;32334:15:0::1;10352:2:1::0;10337:18;;10330:34;32170:17:0;32254:96:::1;::::0;10132:3:1;10117:19;32254:96:0::1;9914:456:1::0;32366:475:0;4576:18;:16;:18::i;:::-;32441:16:::1;::::0;::::1;::::0;::::1;;;32437:75;;;32492:16;::::0;32468:41:::1;::::0;-1:-1:-1;;;32468:41:0;;32492:16:::1;::::0;;::::1;;;1581:14:1::0;1574:22;32468:41:0::1;::::0;::::1;1556::1::0;1529:18;;32468:41:0::1;1416:187:1::0;32437:75:0::1;-1:-1:-1::0;;;;;32526:11:0;::::1;32522:49;;32548:20;::::0;-1:-1:-1;;;32548:20:0;;17336:1:::1;32548:20;::::0;::::1;345:51:1::0;318:18;;32548:20:0::1;199:203:1::0;32522:49:0::1;32592:14;::::0;-1:-1:-1;;;;;32592:14:0;;::::1;32585:21:::0;;::::1;::::0;32581:78:::1;;32641:14;::::0;32617:39:::1;::::0;-1:-1:-1;;;32617:39:0;;-1:-1:-1;;;;;32641:14:0;;::::1;32617:39;::::0;::::1;345:51:1::0;318:18;;32617:39:0::1;199:203:1::0;32581:78:0::1;32669:14;:20:::0;;-1:-1:-1;;;;;;32669:20:0::1;-1:-1:-1::0;;;;;32669:20:0;::::1;::::0;;::::1;::::0;;;-1:-1:-1;32700:22:0;;;:17:::1;:22;::::0;;;;;;;:29;;-1:-1:-1;;32700:29:0;;::::1;-1:-1:-1::0;32700:29:0;;::::1;::::0;;;32740:19;;;;;;;:26;;;;::::1;;::::0;;;32782:51;;10615:34:1;;;32805:10:0::1;10665:18:1::0;;;10658:43;32817:15:0::1;10717:18:1::0;;;10710:34;32782:51:0::1;::::0;10565:2:1;10550:18;32782:51:0::1;;;;;;;;32366:475:::0;:::o;37003:432::-;4576:18;:16;:18::i;:::-;37091:7:::1;37082:6;:16;37078:55;;;37109:21;::::0;-1:-1:-1;;;37109:21:0;;37122:7:::1;37109:21;::::0;::::1;2075:25:1::0;2048:18;;37109:21:0::1;1929:177:1::0;37078:55:0::1;15990:8;37165:24;;37147:15;:42;;;;:::i;:::-;:64;37143:154;;;37269:24;::::0;37251:42:::1;::::0;:15:::1;:42;:::i;:::-;37222:72;;-1:-1:-1::0;;;37222:72:0::1;;;;;;2075:25:1::0;;2063:2;2048:18;;1929:177;37143:154:0::1;37307:23;37317:6;17384;37307:9;:23::i;:::-;37368:6;37341:23;;:33;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;37412:15:0::1;37385:24;:42:::0;-1:-1:-1;37003:432:0:o;5562:103::-;4502:13;:11;:13::i;:::-;5627:30:::1;5654:1;5627:18;:30::i;28069:392::-:0;4502:13;:11;:13::i;:::-;28157:10:::1;28146:7;;:21:::0;28142:72:::1;;28178:33;::::0;-1:-1:-1;;;28178:33:0;;::::1;::::0;::::1;2075:25:1::0;;;2048:18;;28178:33:0::1;1929:177:1::0;28142:72:0::1;28244:12;15838:2;28244;:12;:::i;:::-;28238:18;::::0;:3:::1;:18;:::i;:::-;28228:7;;:28;28224:78;;;28286:12;15838:2;28286;:12;:::i;:::-;28280:18;::::0;:3:::1;:18;:::i;:::-;28267:32;;-1:-1:-1::0;;;28267:32:0::1;;;;;;2075:25:1::0;;2063:2;2048:18;;1929:177;28224:78:0::1;28333:7;::::0;;28351:20;;;;28387:66:::1;::::0;;12577:25:1;;;12633:2;12618:18;;12611:34;;;28425:10:0::1;12661:18:1::0;;;12654:60;;;;28437:15:0::1;12745:2:1::0;12730:18;;12723:34;28387:66:0::1;::::0;12564:3:1;12549:19;28387:66:0::1;12346:417:1::0;24291:174:0;24341:22;24387:17;;24366:18;;:38;;;;:::i;:::-;24341:63;;24425:32;24442:14;24425:16;:32::i;21286:438::-;4502:13;:11;:13::i;:::-;21345:12:::1;::::0;::::1;;21341:68;;;21393:12;::::0;21368:38:::1;::::0;-1:-1:-1;;;21368:38:0;;21393:12:::1;::::0;;::::1;1581:14:1::0;1574:22;21368:38:0::1;::::0;::::1;1556:41:1::0;1529:18;;21368:38:0::1;1416:187:1::0;21341:68:0::1;21423:11;::::0;;;::::1;;;21419:63;;;21467:11;::::0;21445:34:::1;::::0;-1:-1:-1;;;21445:34:0;;21467:11;;;::::1;;;1581:14:1::0;1574:22;21445:34:0::1;::::0;::::1;1556:41:1::0;1529:18;;21445:34:0::1;1416:187:1::0;21419:63:0::1;21496:13;::::0;-1:-1:-1;;;21496:13:0;::::1;;;21492:69;;;21544:13;::::0;21520:38:::1;::::0;-1:-1:-1;;;21520:38:0;;-1:-1:-1;;;21544:13:0;;::::1;;;1581:14:1::0;1574:22;21520:38:0::1;::::0;::::1;1556:41:1::0;1529:18;;21520:38:0::1;1416:187:1::0;21492:69:0::1;21571:12;:19:::0;;-1:-1:-1;;21695:21:0;;;;;21286:438::o;31606:318::-;4576:18;:16;:18::i;:::-;31701:9:::1;31684:26;;:13;;;;;;;;;;;:26;;::::0;31680:76:::1;;31721:32;::::0;-1:-1:-1;;;31721:32:0;;1581:14:1;;1574:22;31721:32:0::1;::::0;::::1;1556:41:1::0;1529:18;;31721:32:0::1;1416:187:1::0;31680:76:0::1;31783:13;::::0;;31807:25;::::1;;-1:-1:-1::0;;;31807:25:0;;::::1;-1:-1:-1::0;;31807:25:0;::::1;;::::0;;;31848:68:::1;::::0;;31783:13:::1;::::0;;;::::1;::::0;;;::::1;9716:14:1::0;;9709:22;9691:41;;9763:2;9748:18;;9741:50;;;;31888:10:0::1;9807:18:1::0;;;9800:60;;;;31900:15:0::1;9891:2:1::0;9876:18;;9869:34;31848:68:0::1;::::0;9678:3:1;9663:19;31848:68:0::1;9472:437:1::0;23580:178:0;23631:22;23678:18;;23656:19;;:40;;;;:::i;:::-;23631:65;;23717:33;23735:14;23717:17;:33::i;26799:136::-;38441:9;:18;;;;17384:6;26851:7;38441:18;;;;;38308:12;;26851:7;;38441:18;26878:31;;38441:18;26878:31;:::i;:::-;:49;;;;:::i;:::-;26871:56;;26799:136;:::o;33779:263::-;4576:18;:16;:18::i;:::-;33873:11:::1;-1:-1:-1::0;;;;;33873:31:0::1;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33868:89;;33917:37;::::0;-1:-1:-1;;;33917:37:0;;-1:-1:-1;;;;;33942:11:0::1;363:32:1::0;33917:37:0::1;::::0;::::1;345:51:1::0;318:18;;33917:37:0::1;199:203:1::0;33868:89:0::1;33971:52;::::0;-1:-1:-1;;;33971:52:0;;::::1;::::0;::::1;2075:25:1::0;;;33971:11:0::1;-1:-1:-1::0;;;;;33971:35:0::1;::::0;::::1;::::0;2048:18:1;;33971:52:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;33967:68:::0;::::1;;33779:263:::0;:::o;33556:211::-;4576:18;:16;:18::i;:::-;-1:-1:-1;;;;;33647:20:0;::::1;;::::0;;;:14:::1;:20:::0;;;;;;:30;::::1;;:20;::::0;;::::1;:30;;::::0;33643:77:::1;;33688:29;::::0;-1:-1:-1;;;33688:29:0;;1581:14:1;;1574:22;33688:29:0::1;::::0;::::1;1556:41:1::0;1529:18;;33688:29:0::1;1416:187:1::0;33643:77:0::1;-1:-1:-1::0;;;;;33730:20:0;;;::::1;;::::0;;;:14:::1;:20:::0;;;;;:29;;-1:-1:-1;;33730:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33556:211::o;21732:386::-;4576:18;:16;:18::i;:::-;21794:16:::1;::::0;::::1;::::0;::::1;;;21790:75;;;21845:16;::::0;21821:41:::1;::::0;-1:-1:-1;;;21821:41:0;;21845:16:::1;::::0;;::::1;;;1581:14:1::0;1574:22;21821:41:0::1;::::0;::::1;1556::1::0;1529:18;;21821:41:0::1;1416:187:1::0;21790:75:0::1;21879:11;::::0;;;::::1;;;21875:63;;;21923:11;::::0;21901:34:::1;::::0;-1:-1:-1;;;21901:34:0;;21923:11;;;::::1;;;1581:14:1::0;1574:22;21901:34:0::1;::::0;::::1;1556:41:1::0;1529:18;;21901:34:0::1;1416:187:1::0;21875:63:0::1;21952:13;::::0;-1:-1:-1;;;21952:13:0;::::1;;;21948:69;;;22000:13;::::0;21976:38:::1;::::0;-1:-1:-1;;;21976:38:0;;-1:-1:-1;;;22000:13:0;;::::1;;;1581:14:1::0;1574:22;21976:38:0::1;::::0;::::1;1556:41:1::0;1529:18;;21976:38:0::1;1416:187:1::0;21948:69:0::1;22027:11;:18:::0;;-1:-1:-1;;22087:23:0;;;;;21732:386::o;39578:445::-;39673:4;39709:10;39673:4;39757:28;39709:10;39777:7;39757:9;:28::i;:::-;39730:55;;39824:15;39804:16;:35;;39796:85;;;;-1:-1:-1;;;39796:85:0;;13220:2:1;39796:85:0;;;13202:21:1;13259:2;13239:18;;;13232:30;13298:34;13278:18;;;13271:62;-1:-1:-1;;;13349:18:1;;;13342:35;13394:19;;39796:85:0;13018:401:1;39796:85:0;39917:63;39926:8;39936:7;39964:15;39945:16;:34;39917:8;:63::i;:::-;-1:-1:-1;40011:4:0;;39578:445;-1:-1:-1;;;;39578:445:0:o;29754:744::-;4502:13;:11;:13::i;:::-;29881:11:::1;::::0;;;::::1;;;29877:40;;;29903:11;;-1:-1:-1::0;;;29903:11:0::1;;;;;;;;;;;29877:40;29980:4;29965:12:::0;29931:31:::1;29949:13:::0;29931:15;:31:::1;:::i;:::-;:46;;;;:::i;:::-;:53;29927:140;;;30045:12:::0;30011:31:::1;30029:13:::0;30011:15;:31:::1;:::i;29927:140::-;30103:16;::::0;;30154:14:::1;::::0;;30202:13:::1;::::0;;30226:34;;;;30271:30;;;;30312:28;;;;30356:134:::1;::::0;30103:16;;30154:14;;30356:134:::1;::::0;::::1;::::0;30103:16;;30202:13;;30154:14;;30245:15;;30154:14;;30328:12;;30462:10:::1;::::0;30474:15:::1;::::0;30356:134:::1;:::i;38479:184::-:0;38560:4;38596:10;38624:31;38596:10;38644:2;38648:6;38624:9;:31::i;:::-;38617:38;38479:184;-1:-1:-1;;;;38479:184:0:o;22126:126::-;4502:13;:11;:13::i;:::-;22180:11:::1;::::0;;;::::1;;;22176:40;;;22202:11;;-1:-1:-1::0;;;22202:11:0::1;;;;;;;;;;;22176:40;22226:11;:18:::0;;-1:-1:-1;;22226:18:0::1;::::0;::::1;::::0;;22126:126::o;26963:208::-;4502:13;:11;:13::i;:::-;27051:53:::1;27068:4;27083:11;27097:6;27051:8;:53::i;:::-;27147:6;::::0;27115:48:::1;::::0;27132:4:::1;::::0;-1:-1:-1;;;;;27147:6:0::1;27156::::0;27115:8:::1;:48::i;27179:219::-:0;4502:13;:11;:13::i;:::-;27256:64:::1;27273:4;27288:11;-1:-1:-1::0;;27256:8:0::1;:64::i;:::-;27363:6;::::0;27331:59:::1;::::0;27348:4:::1;::::0;-1:-1:-1;;;;;27363:6:0::1;-1:-1:-1::0;;27331:8:0::1;:59::i;5894:255::-:0;4502:13;:11;:13::i;:::-;-1:-1:-1;;;;;5970:21:0;::::1;::::0;;:51:::1;;-1:-1:-1::0;;;;;;5995:26:0;::::1;6014:6;5995:26;5970:51;5966:124;;;6045:33;::::0;-1:-1:-1;;;6045:33:0;;-1:-1:-1;;;;;363:32:1;;6045:33:0::1;::::0;::::1;345:51:1::0;318:18;;6045:33:0::1;199:203:1::0;5966:124:0::1;6100:41;6115:7;6124:10;6136:4;6100:14;:41::i;22280:205::-:0;22328:11;-1:-1:-1;;;;;22328:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22323:89;;22372:37;;-1:-1:-1;;;22372:37:0;;-1:-1:-1;;;;;22397:11:0;363:32:1;22372:37:0;;;345:51:1;318:18;;22372:37:0;199:203:1;22323:89:0;22426:40;;-1:-1:-1;;;22426:40:0;;22455:10;22426:40;;;345:51:1;22426:11:0;-1:-1:-1;;;;;22426:28:0;;;;318:18:1;;22426:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22422:56;;;22280:205::o;32849:475::-;4576:18;:16;:18::i;:::-;32924:16:::1;::::0;::::1;::::0;::::1;;;32920:75;;;32975:16;::::0;32951:41:::1;::::0;-1:-1:-1;;;32951:41:0;;32975:16:::1;::::0;;::::1;;;1581:14:1::0;1574:22;32951:41:0::1;::::0;::::1;1556::1::0;1529:18;;32951:41:0::1;1416:187:1::0;32920:75:0::1;-1:-1:-1::0;;;;;33009:11:0;::::1;33005:49;;33031:20;::::0;-1:-1:-1;;;33031:20:0;;17336:1:::1;33031:20;::::0;::::1;345:51:1::0;318:18;;33031:20:0::1;199:203:1::0;33005:49:0::1;33075:14;::::0;-1:-1:-1;;;;;33075:14:0;;::::1;33068:21:::0;;::::1;::::0;33064:78:::1;;33124:14;::::0;33100:39:::1;::::0;-1:-1:-1;;;33100:39:0;;-1:-1:-1;;;;;33124:14:0;;::::1;33100:39;::::0;::::1;345:51:1::0;318:18;;33100:39:0::1;199:203:1::0;33064:78:0::1;33152:14;:20:::0;;-1:-1:-1;;;;;;33152:20:0::1;-1:-1:-1::0;;;;;33152:20:0;::::1;::::0;;::::1;::::0;;;-1:-1:-1;33183:22:0;;;:17:::1;:22;::::0;;;;;;;:29;;-1:-1:-1;;33183:29:0;;::::1;-1:-1:-1::0;33183:29:0;;::::1;::::0;;;33223:19;;;;;;;:26;;;;::::1;;::::0;;;33265:51;;10615:34:1;;;33288:10:0::1;10665:18:1::0;;;10658:43;33300:15:0::1;10717:18:1::0;;;10710:34;33265:51:0::1;::::0;10565:2:1;10550:18;33265:51:0::1;10375:375:1::0;27597:464:0;4502:13;:11;:13::i;:::-;27680:6:::1;::::0;-1:-1:-1;;;;;27672:28:0;;::::1;27680:6:::0;::::1;27672:28:::0;27668:80:::1;;27711:34;::::0;-1:-1:-1;;;27711:34:0;;-1:-1:-1;;;;;363:32:1;;27711:34:0::1;::::0;::::1;345:51:1::0;318:18;;27711:34:0::1;199:203:1::0;27668:80:0::1;27786:6;::::0;;-1:-1:-1;;;;;;27804:27:0;::::1;-1:-1:-1::0;;;;;27804:27:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;27852:28:0;;;:17:::1;:28;::::0;;;;;;;;:35;;-1:-1:-1;;27852:35:0::1;-1:-1:-1::0;27852:35:0::1;::::0;;27905:63;;27786:6;;;::::1;10183:34:1::0;;;10233:18;;;10226:43;;;;27940:10:0::1;10285:18:1::0;;;10278:43;27952:15:0::1;10352:2:1::0;10337:18;;10330:34;27786:6:0;27905:63:::1;::::0;10132:3:1;10117:19;27905:63:0::1;;;;;;;27995:6;;;;;;;;;-1:-1:-1::0;;;;;27995:6:0::1;-1:-1:-1::0;;;;;27995:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27986:37:0::1;;28032:4;28039:6;;;;;;;;;-1:-1:-1::0;;;;;28039:6:0::1;-1:-1:-1::0;;;;;28039:11:0::1;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27986:67;::::0;-1:-1:-1;;;;;;27986:67:0::1;::::0;;;;;;-1:-1:-1;;;;;13654:15:1;;;27986:67:0::1;::::0;::::1;13636:34:1::0;13706:15;;13686:18;;;13679:43;13571:18;;27986:67:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27979:4;:74:::0;;-1:-1:-1;;;;;;27979:74:0::1;-1:-1:-1::0;;;;;27979:74:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;27597:464:0:o;28469:533::-;4576:18;:16;:18::i;:::-;28579:17:::1;28561:14;;:35:::0;28557:93:::1;;28607:40;::::0;-1:-1:-1;;;28607:40:0;;::::1;::::0;::::1;2075:25:1::0;;;2048:18;;28607:40:0::1;1929:177:1::0;28557:93:0::1;28681:6;28664:14;;:23;28660:61;;;28698:20;::::0;-1:-1:-1;;;28698:20:0;;28711:6:::1;28698:20;::::0;::::1;2075:25:1::0;2048:18;;28698:20:0::1;1929:177:1::0;28660:61:0::1;28752:7;28735:14;;:24;28731:63;;;28770:21;::::0;-1:-1:-1;;;28770:21:0;;28783:7:::1;28770:21;::::0;::::1;2075:25:1::0;2048:18;;28770:21:0::1;1929:177:1::0;28731:63:0::1;28832:14;::::0;;28857:34;;;;28907:87:::1;::::0;;12577:25:1;;;12633:2;12618:18;;12611:34;;;28966:10:0::1;12661:18:1::0;;;12654:60;;;;28978:15:0::1;12745:2:1::0;12730:18;;12723:34;28907:87:0::1;::::0;12564:3:1;12549:19;28907:87:0::1;12346:417:1::0;33332:216:0;4576:18;:16;:18::i;:::-;-1:-1:-1;;;;;33422:23:0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;:33;::::1;;:23;::::0;;::::1;:33;;::::0;33418:80:::1;;33466:29;::::0;-1:-1:-1;;;33466:29:0;;1581:14:1;;1574:22;33466:29:0::1;::::0;::::1;1556:41:1::0;1529:18;;33466:29:0::1;1416:187:1::0;33418:80:0::1;-1:-1:-1::0;;;;;33508:23:0;;;::::1;;::::0;;;:17:::1;:23;::::0;;;;:32;;-1:-1:-1;;33508:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33332:216::o;24473:267::-;24596:17;;24575:18;;:38;;;;:::i;:::-;24557:14;:56;;24549:130;;;;-1:-1:-1;;;24549:130:0;;14324:2:1;24549:130:0;;;14306:21:1;14363:2;14343:18;;;14336:30;14402:34;14382:18;;;14375:62;14473:31;14453:18;;;14446:59;14522:19;;24549:130:0;14122:425:1;24549:130:0;24700:32;24717:14;24700:16;:32::i;22513:186::-;22566:22;22615:20;;22591:21;;:44;;;;:::i;:::-;22566:69;;22656:35;22676:14;22656:19;:35::i;38675:157::-;-1:-1:-1;;;;;38794:21:0;;;38767:7;38794:21;;;:11;:21;;;;;;;;:30;;;;;;;;;;;;;38675:157::o;6157:258::-;4502:13;:11;:13::i;:::-;-1:-1:-1;;;;;6235:21:0;::::1;::::0;;:51:::1;;-1:-1:-1::0;;;;;;6260:26:0;::::1;6279:6;6260:26;6235:51;6231:124;;;6310:33;::::0;-1:-1:-1;;;6310:33:0;;-1:-1:-1;;;;;363:32:1;;6310:33:0::1;::::0;::::1;345:51:1::0;318:18;;6310:33:0::1;199:203:1::0;6231:124:0::1;6365:42;6380:7;6389:10;6401:5;6365:14;:42::i;5673:213::-:0;4502:13;:11;:13::i;:::-;-1:-1:-1;;;;;5758:22:0;::::1;5754:86;;5804:24;::::0;-1:-1:-1;;;5804:24:0;;5825:1:::1;5804:24;::::0;::::1;345:51:1::0;318:18;;5804:24:0::1;199:203:1::0;5754:86:0::1;5850:28;5869:8;5850:18;:28::i;40345:331::-:0;-1:-1:-1;;;;;40446:16:0;;40442:58;;40473:24;;-1:-1:-1;;;40473:24:0;;-1:-1:-1;;;;;363:32:1;;40473:24:0;;;345:51:1;318:18;;40473:24:0;199:203:1;40442:58:0;-1:-1:-1;;;;;40514:15:0;;40510:56;;40540:23;;-1:-1:-1;;;40540:23:0;;-1:-1:-1;;;;;363:32:1;;40540:23:0;;;345:51:1;318:18;;40540:23:0;199:203:1;40510:56:0;-1:-1:-1;;;;;40578:21:0;;;;;;;:11;:21;;;;;;;;:30;;;;;;;;;;;;;:39;;;40633:35;;2075:25:1;;;40633:35:0;;2048:18:1;40633:35:0;;;;;;;40345:331;;;:::o;41148:419::-;-1:-1:-1;;;;;41272:15:0;;41233:4;41272:15;;;:9;:15;;;;;;41306:21;;;;41298:72;;;;-1:-1:-1;;;41298:72:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41406:15:0;;;;;;;:9;:15;;;;;;41424:20;;;41406:38;;41459:13;;;;;;;;;;:23;;;;;;41511:26;;;;;;41438:6;2075:25:1;;2063:2;2048:18;;1929:177;41511:26:0;;;;;;;;-1:-1:-1;41555:4:0;;41148:419;-1:-1:-1;;;;41148:419:0:o;5226:155::-;5297:10;5286:7;5177;5204:6;-1:-1:-1;;;;;5204:6:0;;5131:87;5286:7;-1:-1:-1;;;;;5286:21:0;;5282:92;;5331:31;;-1:-1:-1;;;5331:31:0;;5351:10;5331:31;;;345:51:1;318:18;;5331:31:0;199:203:1;40688:428:0;40792:24;40819:28;40829:8;40839:7;40819:9;:28::i;:::-;40792:55;;-1:-1:-1;;40862:16:0;:37;40858:251;;40944:6;40924:16;:26;;40916:68;;;;-1:-1:-1;;;40916:68:0;;15161:2:1;40916:68:0;;;15143:21:1;15200:2;15180:18;;;15173:30;15239:31;15219:18;;;15212:59;15288:18;;40916:68:0;14959:353:1;40916:68:0;41028:54;41037:8;41047:7;41075:6;41056:16;:25;41028:8;:54::i;:::-;40781:335;40688:428;;;:::o;41603:1535::-;41690:4;-1:-1:-1;;;;;41711:12:0;;41707:50;;41734:20;;-1:-1:-1;;;41734:20:0;;-1:-1:-1;;;;;363:32:1;;41734:20:0;;;345:51:1;318:18;;41734:20:0;199:203:1;41707:50:0;-1:-1:-1;;;;;41771:10:0;;41767:46;;41792:18;;-1:-1:-1;;;41792:18:0;;-1:-1:-1;;;;;363:32:1;;41792:18:0;;;345:51:1;318:18;;41792::0;199:203:1;41767:46:0;41838:12;;;;41833:454;;41875:10;-1:-1:-1;;;;;41889:12:0;41875:26;;;:58;;-1:-1:-1;41919:14:0;;-1:-1:-1;;;;;41919:14:0;41905:10;:28;41875:58;:83;;;-1:-1:-1;5177:7:0;5204:6;-1:-1:-1;;;;;5204:6:0;41937:10;:21;41875:83;:115;;;-1:-1:-1;41976:14:0;;-1:-1:-1;;;;;41976:14:0;41962:10;:28;41875:115;41867:233;;;;-1:-1:-1;;;41867:233:0;;15519:2:1;41867:233:0;;;15501:21:1;15558:3;15538:18;;;15531:31;15598:34;15578:18;;;15571:62;15669:34;15649:18;;;15642:62;15741:34;15720:19;;;15713:63;-1:-1:-1;;;15792:19:1;;;15785:40;15842:19;;41867:233:0;15317:550:1;41867:233:0;5177:7;5204:6;-1:-1:-1;;;;;5204:6:0;-1:-1:-1;;;;;42121:15:0;:4;-1:-1:-1;;;;;42121:15:0;;42117:159;;42171:4;;-1:-1:-1;;;;;42171:4:0;;;42165:10;;;;42157:103;;;;-1:-1:-1;;;42157:103:0;;16074:2:1;42157:103:0;;;16056:21:1;16113:2;16093:18;;;16086:30;16152:34;16132:18;;;16125:62;16223:34;16203:18;;;16196:62;-1:-1:-1;;;16274:19:1;;;16267:47;16331:19;;42157:103:0;15872:484:1;42157:103:0;42303:6;;-1:-1:-1;;;42303:6:0;;;;;:33;;-1:-1:-1;;;;;;42313:23:0;;;;;;:17;:23;;;;;;;;42303:33;42299:105;;;42360:32;42375:4;42381:2;42385:6;42360:14;:32::i;:::-;42353:39;;;;42299:105;42428:4;;-1:-1:-1;;;;;42420:12:0;;;42428:4;;42420:12;;;;:29;;-1:-1:-1;42436:13:0;;-1:-1:-1;;;42436:13:0;;;;42420:29;:80;;;;;42493:7;;42473:16;;42453:17;;:36;;;;:::i;:::-;:47;;42420:80;42416:132;;;42517:19;42528:7;;42517:10;:19::i;:::-;42603:11;;42580:6;;42603:11;;;;;:39;;;;-1:-1:-1;;;;;;42619:23:0;;;;;;:17;:23;;;;;;;;42618:24;42603:39;:65;;;;-1:-1:-1;;;;;;42647:21:0;;;;;;:17;:21;;;;;;;;42646:22;42603:65;42599:148;;;42697:38;42718:4;42724:2;42728:6;42697:20;:38::i;:::-;42685:50;;42599:148;-1:-1:-1;;;;;42767:15:0;;;;;;:9;:15;;;;;;:28;-1:-1:-1;42767:28:0;42759:79;;;;-1:-1:-1;;;42759:79:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42892:15:0;;;;;;;:9;:15;;;;;;;;:27;;;42874:45;;42934:13;;;;;;;;;;:26;;;;;;42989:29;;;;;;42910:9;2075:25:1;;2063:2;2048:18;;1929:177;42989:29:0;;;;;;;;43035:14;;;;;;;43031:76;;;43066:29;43086:4;43092:2;43066:19;:29::i;23000:572::-;17895:6;:13;;-1:-1:-1;;;;17895:13:0;-1:-1:-1;;;17895:13:0;;;23083:20:::1;:38:::0;;23107:14;;23083:20;17895:13;;23083:38:::1;::::0;23107:14;;23083:38:::1;:::i;:::-;;;;;;;;23152:14;23132:16;;:34;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;23204:16:0::1;::::0;;23218:1:::1;23204:16:::0;;;;;::::1;::::0;;23180:21:::1;::::0;23204:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;23204:16:0::1;23180:40;;23249:4;23231;23236:1;23231:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23231:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;23275:6:::1;::::0;:13:::1;::::0;;-1:-1:-1;;;23275:13:0;;;;:6;;;::::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;23231:7;;23275:13;;;;;:6;:13:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23265:4;23270:1;23265:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23265:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;23333:6:::1;::::0;23301:56:::1;::::0;23318:4:::1;::::0;23333:6:::1;23342:14:::0;23301:8:::1;:56::i;:::-;23370:6;::::0;23506:17:::1;::::0;23370:194:::1;::::0;-1:-1:-1;;;23370:194:0;;-1:-1:-1;;;;;23370:6:0;;::::1;::::0;:57:::1;::::0;:194:::1;::::0;23442:14;;23370:6:::1;::::0;23487:4;;-1:-1:-1;;;23506:17:0;;::::1;::::0;;::::1;::::0;23538:15:::1;::::0;23370:194:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;17931:6:0;:14;;-1:-1:-1;;;;17931:14:0;;;-1:-1:-1;;;;23000:572:0:o;24049:234::-;17895:6;:13;;-1:-1:-1;;;;17895:13:0;-1:-1:-1;;;17895:13:0;;;24130:18:::1;:36:::0;;24152:14;;24130:18;17895:13;;24130:36:::1;::::0;24152:14;;24130:36:::1;:::i;:::-;;;;;;;;24197:14;24177:16;;:34;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;24224:51:0::1;::::0;-1:-1:-1;24247:4:0::1;17384:6;24260:14:::0;24224::::1;:51::i;:::-;-1:-1:-1::0;;17931:6:0;:14;;-1:-1:-1;;;;17931:14:0;;;24049:234::o;5389:165::-;5469:10;5455:25;;;;:13;:25;;;;;;;;5450:97;;5504:31;;-1:-1:-1;;;5504:31:0;;5524:10;5504:31;;;345:51:1;318:18;;5504:31:0;199:203:1;37443:398:0;17895:6;:13;;-1:-1:-1;;;;17895:13:0;-1:-1:-1;;;17895:13:0;;;-1:-1:-1;;37523:10:0::1;:18:::0;37519:56:::1;;37552:20;::::0;-1:-1:-1;;;37552:20:0;;17384:6:::1;37552:20;::::0;::::1;345:51:1::0;318:18;;37552:20:0::1;199:203:1::0;37519:56:0::1;37609:16;::::0;;37623:1:::1;37609:16:::0;;;;;::::1;::::0;;37585:21:::1;::::0;37609:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;37646:6:0::1;::::0;:13:::1;::::0;;-1:-1:-1;;;37646:13:0;;;;37585:40;;-1:-1:-1;;;;;;37646:6:0;;::::1;::::0;:11:::1;::::0;-1:-1:-1;37646:13:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:6;:13:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37636:4;37641:1;37636:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;37636:23:0::1;;;-1:-1:-1::0;;;;;37636:23:0::1;;;::::0;::::1;37688:4;37670;37675:1;37670:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;37670:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;37706:6:::1;::::0;:127:::1;::::0;-1:-1:-1;;;37706:127:0;;:6;::::1;::::0;:57:::1;::::0;37785:6;;37706:127:::1;::::0;:6:::1;::::0;37807:4;;37813:2;;37817:15:::1;::::0;37706:127:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;6423:191:::0;6497:16;6516:6;;-1:-1:-1;;;;;6533:17:0;;;-1:-1:-1;;;;;;6533:17:0;;;;;;6566:40;;6516:6;;;;;;;6566:40;;6497:16;6566:40;6486:128;6423:191;:::o;24748:406::-;17895:6;:13;;-1:-1:-1;;;;17895:13:0;-1:-1:-1;;;17895:13:0;;;24840:33:::1;::::0;;-1:-1:-1;;;;;;24840:33:0;;;;-1:-1:-1;;;;;24840:11:0::1;:31;::::0;::::1;::::0;:33:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:31;:33:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24835:89;;24884:37;::::0;-1:-1:-1;;;24884:37:0;;-1:-1:-1;;;;;24909:11:0::1;363:32:1::0;24884:37:0::1;::::0;::::1;345:51:1::0;318:18;;24884:37:0::1;199:203:1::0;24835:89:0::1;24955:14;24934:17;;:35;;;;;;;:::i;:::-;;;;;;;;25000:14;24980:16;;:34;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;25059:6:0::1;::::0;25027:56:::1;::::0;25044:4:::1;::::0;-1:-1:-1;;;;;25059:6:0::1;25068:14:::0;25027:8:::1;:56::i;:::-;25100:35;::::0;-1:-1:-1;;;25100:35:0;;::::1;::::0;::::1;2075:25:1::0;;;25100:11:0::1;-1:-1:-1::0;;;;;25100:19:0::1;::::0;::::1;::::0;2048:18:1;;25100:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;-1:-1:-1::0;17931:6:0;:14;;-1:-1:-1;;;;17931:14:0;;;24748:406::o;6622:334::-;-1:-1:-1;;;;;6723:22:0;;;;;;:13;:22;;;;;;:31;;;:22;;;;:31;;;6719:109;;6778:38;;-1:-1:-1;;;6778:38:0;;-1:-1:-1;;;;;17062:32:1;;6778:38:0;;;17044:51:1;17138:14;;17131:22;17111:18;;;17104:50;17017:18;;6778:38:0;16876:284:1;6719:109:0;-1:-1:-1;;;;;6838:22:0;;;;;;;:13;:22;;;;;;;;;:30;;-1:-1:-1;;6838:30:0;;;;;;;;;;6884:64;;17428:34:1;;;17498:15;;;17478:18;;;17471:43;17530:18;;17523:50;;;;6932:15:0;17604:2:1;17589:18;;17582:34;6884:64:0;;17377:3:1;17362:19;6884:64:0;;;;;;;6622:334;;;:::o;43146:556::-;17895:6;:13;;-1:-1:-1;;;;17895:13:0;-1:-1:-1;;;17895:13:0;;;43285:4:::1;::::0;43253:7;;-1:-1:-1;;;;;43277:12:0;;::::1;43285:4:::0;::::1;43277:12;:52:::0;::::1;;;;43327:1;43312:12;;43294:15;;:30;;;;:::i;:::-;:34;43277:52;43273:116;;;43353:24;43364:4;43370:6;43353:10;:24::i;:::-;43346:31;;;;43273:116;43409:4;::::0;-1:-1:-1;;;;;43403:10:0;;::::1;43409:4:::0;::::1;43403:10;:52:::0;::::1;;;;43453:1;43437:13;;43418:16;;:32;;;;:::i;:::-;:36;43403:52;43399:117;;;43479:25;43491:4;43497:6;43479:11;:25::i;43399:117::-;43538:4;::::0;-1:-1:-1;;;;;43530:12:0;;::::1;43538:4:::0;::::1;43530:12;::::0;::::1;::::0;:26:::1;;-1:-1:-1::0;43552:4:0::1;::::0;-1:-1:-1;;;;;43546:10:0;;::::1;43552:4:::0;::::1;43546:10;;43530:26;:76;;;;;43604:1;43584:17;;43561:20;;:40;;;;:::i;:::-;:44;43530:76;43526:145;;;43630:29;43646:4;43652:6;43630:15;:29::i;43526:145::-;-1:-1:-1::0;43688:6:0;17919:1:::1;17931:6:::0;:14;;-1:-1:-1;;;;17931:14:0;;;43146:556;;-1:-1:-1;;;43146:556:0:o;43710:482::-;43798:11;-1:-1:-1;;;;;43798:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43793:89;;43842:37;;-1:-1:-1;;;43842:37:0;;-1:-1:-1;;;;;43867:11:0;363:32:1;43842:37:0;;;345:51:1;318:18;;43842:37:0;199:203:1;43793:89:0;-1:-1:-1;;;;;43899:20:0;;;;;;:14;:20;;;;;;;;43894:112;;-1:-1:-1;;;;;43967:15:0;;;;;;;:9;:15;;;;;;;;43940:43;;-1:-1:-1;;;43940:43:0;;;;;17801:51:1;;;;17868:18;;;17861:34;43940:11:0;:20;;;;;;17774:18:1;;43940:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43936:59;;-1:-1:-1;;;;;44021:18:0;;;;;;:14;:18;;;;;;;;44016:106;;-1:-1:-1;;;;;44085:13:0;;;;;;;:9;:13;;;;;;;;44060:39;;-1:-1:-1;;;44060:39:0;;;;;17801:51:1;;;;17868:18;;;17861:34;44060:11:0;:20;;;;;;17774:18:1;;44060:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44056:55;;44158:14;;44138:35;;-1:-1:-1;;;;;;44138:35:0;;;;;2075:25:1;;;;44138:11:0;-1:-1:-1;;;;;44138:19:0;;;;2048:18:1;;44138:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44134:51;43710:482;;:::o;34067:360::-;17895:6;:13;;-1:-1:-1;;;;17895:13:0;-1:-1:-1;;;17895:13:0;;;:6;34217:12;34201:13:::1;::::0;34183:15:::1;::::0;34144:7;;;;34217:12;;34183:31:::1;::::0;34201:13;34183:31:::1;:::i;:::-;:46;;;;:::i;:::-;34164:65:::0;-1:-1:-1;34240:17:0::1;15931:6;34260:17;34164:65:::0;34260:6;:17:::1;:::i;:::-;:34;;;;:::i;:::-;34240:54:::0;-1:-1:-1;34305:17:0::1;34325:18;34240:54:::0;34325:6;:18:::1;:::i;:::-;34305:38;;34354;34366:4;34372:9;34383:8;34354:11;:38::i;:::-;17931:6:::0;:14;;-1:-1:-1;;;;17931:14:0;;;34410:9;34067:360;-1:-1:-1;;;;;34067:360:0:o;34435:365::-;17895:6;:13;;-1:-1:-1;;;;17895:13:0;-1:-1:-1;;;17895:13:0;;;34588::::1;::::0;34571:14:::1;::::0;34552:16:::1;::::0;34513:7;;;;34588:13;;34552:33:::1;::::0;34571:14;34552:33:::1;:::i;:::-;:49;;;;:::i;:::-;34533:68:::0;-1:-1:-1;34612:17:0::1;15931:6;34632:17;34533:68:::0;34632:6;:17:::1;:::i;:::-;:34;;;;:::i;:::-;34612:54:::0;-1:-1:-1;34677:17:0::1;34697:18;34612:54:::0;34697:6;:18:::1;:::i;:::-;34677:38;;34726:39;34739:4;34745:9;34756:8;34726:12;:39::i;34808:381::-:0;17895:6;:13;;-1:-1:-1;;;;17895:13:0;-1:-1:-1;;;17895:13:0;;;34969:17:::1;::::0;34952:14:::1;::::0;34929:20:::1;::::0;34890:7;;;;34969:17;;34929:37:::1;::::0;34952:14;34929:37:::1;:::i;:::-;:57;;;;:::i;:::-;34910:76:::0;-1:-1:-1;34997:17:0::1;15931:6;35017:17;34910:76:::0;35017:6;:17:::1;:::i;:::-;:34;;;;:::i;:::-;34997:54:::0;-1:-1:-1;35062:17:0::1;35082:18;34997:54:::0;35082:6;:18:::1;:::i;:::-;35062:38;;35111:43;35128:4;35134:9;35145:8;35111:16;:43::i;35197:473::-:0;17895:6;:13;;-1:-1:-1;;;;17895:13:0;-1:-1:-1;;;17895:13:0;;;35326:15:::1;::::0;17895:13;;35344:3;;35317:24:::1;::::0;:6;:24:::1;:::i;:::-;:30;;;;:::i;:::-;35290:57;;35358:22;35408:3;35392:13;;35383:6;:22;;;;:::i;:::-;:28;;;;:::i;:::-;35358:53:::0;-1:-1:-1;35422:21:0::1;35358:53:::0;35446:25:::1;35455:16:::0;35446:6;:25:::1;:::i;:::-;:42;;;;:::i;:::-;35422:66;;35499:72;35515:16;35533:14;35549:13;35564:6;35499:15;:72::i;:::-;-1:-1:-1::0;;;;;35592:15:0;::::1;;::::0;;;:9:::1;:15;::::0;;;;:25;;35611:6;;35592:15;:25:::1;::::0;35611:6;;35592:25:::1;:::i;:::-;::::0;;;-1:-1:-1;;35646:4:0::1;35628:24;::::0;;;:9:::1;:24;::::0;;;;:34;;35656:6;;35628:24;:34:::1;::::0;35656:6;;35628:34:::1;:::i;:::-;::::0;;;-1:-1:-1;;17931:6:0;:14;;-1:-1:-1;;;;17931:14:0;;;-1:-1:-1;;;;;;35197:473:0:o;35678:476::-;17895:6;:13;;-1:-1:-1;;;;17895:13:0;-1:-1:-1;;;17895:13:0;;;35808:16:::1;::::0;17895:13;;35827:3;;35799:25:::1;::::0;:6;:25:::1;:::i;:::-;:31;;;;:::i;:::-;35772:58;;35841:22;35892:3;35875:14;;35866:6;:23;;;;:::i;36162:480::-:0;17895:6;:13;;-1:-1:-1;;;;17895:13:0;-1:-1:-1;;;17895:13:0;;;36296:20:::1;::::0;17895:13;;36319:3;;36287:29:::1;::::0;:6;:29:::1;:::i;:::-;:35;;;;:::i;:::-;36260:62;;36333:22;36388:3;36367:18;;36358:6;:27;;;;:::i;36650:324::-:0;17895:6;:13;;-1:-1:-1;;;;17895:13:0;-1:-1:-1;;;17895:13:0;;;36793:21:::1;:41:::0;;36818:16;;36793:21;17895:13;;36793:41:::1;::::0;36818:16;;36793:41:::1;:::i;:::-;;;;;;;;36868:14;36845:19;;:37;;;;;;;:::i;:::-;;;;;;;;36915:13;36893:18;;:35;;;;;;;:::i;:::-;;;;;;;;36960:6;36939:17;;:27;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;17931:6:0;:14;;-1:-1:-1;;;;17931:14:0;;;-1:-1:-1;;;;36650:324:0:o;14:180:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;407:548::-;519:4;548:2;577;566:9;559:21;609:6;603:13;652:6;647:2;636:9;632:18;625:34;677:1;687:140;701:6;698:1;695:13;687:140;;;796:14;;;792:23;;786:30;762:17;;;781:2;758:26;751:66;716:10;;687:140;;;691:3;876:1;871:2;862:6;851:9;847:22;843:31;836:42;946:2;939;935:7;930:2;922:6;918:15;914:29;903:9;899:45;895:54;887:62;;;;407:548;;;;:::o;960:131::-;-1:-1:-1;;;;;1035:31:1;;1025:42;;1015:70;;1081:1;1078;1071:12;1096:315;1164:6;1172;1225:2;1213:9;1204:7;1200:23;1196:32;1193:52;;;1241:1;1238;1231:12;1193:52;1280:9;1267:23;1299:31;1324:5;1299:31;:::i;:::-;1349:5;1401:2;1386:18;;;;1373:32;;-1:-1:-1;;;1096:315:1:o;1608:316::-;1685:6;1693;1701;1754:2;1742:9;1733:7;1729:23;1725:32;1722:52;;;1770:1;1767;1760:12;1722:52;-1:-1:-1;;1793:23:1;;;1863:2;1848:18;;1835:32;;-1:-1:-1;1914:2:1;1899:18;;;1886:32;;1608:316;-1:-1:-1;1608:316:1:o;2111:456::-;2188:6;2196;2204;2257:2;2245:9;2236:7;2232:23;2228:32;2225:52;;;2273:1;2270;2263:12;2225:52;2312:9;2299:23;2331:31;2356:5;2331:31;:::i;:::-;2381:5;-1:-1:-1;2438:2:1;2423:18;;2410:32;2451:33;2410:32;2451:33;:::i;:::-;2111:456;;2503:7;;-1:-1:-1;;;2557:2:1;2542:18;;;;2529:32;;2111:456::o;2761:118::-;2847:5;2840:13;2833:21;2826:5;2823:32;2813:60;;2869:1;2866;2859:12;2884:241;2940:6;2993:2;2981:9;2972:7;2968:23;2964:32;2961:52;;;3009:1;3006;2999:12;2961:52;3048:9;3035:23;3067:28;3089:5;3067:28;:::i;3130:247::-;3189:6;3242:2;3230:9;3221:7;3217:23;3213:32;3210:52;;;3258:1;3255;3248:12;3210:52;3297:9;3284:23;3316:31;3341:5;3316:31;:::i;3382:382::-;3447:6;3455;3508:2;3496:9;3487:7;3483:23;3479:32;3476:52;;;3524:1;3521;3514:12;3476:52;3563:9;3550:23;3582:31;3607:5;3582:31;:::i;:::-;3632:5;-1:-1:-1;3689:2:1;3674:18;;3661:32;3702:30;3661:32;3702:30;:::i;:::-;3751:7;3741:17;;;3382:382;;;;;:::o;4003:388::-;4071:6;4079;4132:2;4120:9;4111:7;4107:23;4103:32;4100:52;;;4148:1;4145;4138:12;4100:52;4187:9;4174:23;4206:31;4231:5;4206:31;:::i;:::-;4256:5;-1:-1:-1;4313:2:1;4298:18;;4285:32;4326:33;4285:32;4326:33;:::i;4619:127::-;4680:10;4675:3;4671:20;4668:1;4661:31;4711:4;4708:1;4701:15;4735:4;4732:1;4725:15;4751:128;4818:9;;;4839:11;;;4836:37;;;4853:18;;:::i;4884:168::-;4957:9;;;4988;;5005:15;;;4999:22;;4985:37;4975:71;;5026:18;;:::i;5057:217::-;5097:1;5123;5113:132;;5167:10;5162:3;5158:20;5155:1;5148:31;5202:4;5199:1;5192:15;5230:4;5227:1;5220:15;5113:132;-1:-1:-1;5259:9:1;;5057:217::o;5279:125::-;5344:9;;;5365:10;;;5362:36;;;5378:18;;:::i;5541:127::-;5602:10;5597:3;5593:20;5590:1;5583:31;5633:4;5630:1;5623:15;5657:4;5654:1;5647:15;5673:251;5743:6;5796:2;5784:9;5775:7;5771:23;5767:32;5764:52;;;5812:1;5809;5802:12;5764:52;5844:9;5838:16;5863:31;5888:5;5863:31;:::i;6495:461::-;6548:3;6586:5;6580:12;6613:6;6608:3;6601:19;6639:4;6668:2;6663:3;6659:12;6652:19;;6705:2;6698:5;6694:14;6726:1;6736:195;6750:6;6747:1;6744:13;6736:195;;;6815:13;;-1:-1:-1;;;;;6811:39:1;6799:52;;6871:12;;;;6906:15;;;;6847:1;6765:9;6736:195;;;-1:-1:-1;6947:3:1;;6495:461;-1:-1:-1;;;;;6495:461:1:o;6961:582::-;7260:6;7249:9;7242:25;7303:6;7298:2;7287:9;7283:18;7276:34;7346:3;7341:2;7330:9;7326:18;7319:31;7223:4;7367:57;7419:3;7408:9;7404:19;7396:6;7367:57;:::i;:::-;-1:-1:-1;;;;;7460:32:1;;;;7455:2;7440:18;;7433:60;-1:-1:-1;7524:3:1;7509:19;7502:35;7359:65;6961:582;-1:-1:-1;;;6961:582:1:o;7812:705::-;8155:25;;;8211:2;8196:18;;8189:34;;;;8254:2;8239:18;;8232:34;;;;8297:2;8282:18;;8275:34;;;;8340:3;8325:19;;8318:35;8384:3;8369:19;;8362:35;-1:-1:-1;;;;;8434:32:1;8428:3;8413:19;;8406:61;8498:3;8483:19;;8476:35;8142:3;8127:19;;7812:705::o;10963:422::-;11052:1;11095:5;11052:1;11109:270;11130:7;11120:8;11117:21;11109:270;;;11189:4;11185:1;11181:6;11177:17;11171:4;11168:27;11165:53;;;11198:18;;:::i;:::-;11248:7;11238:8;11234:22;11231:55;;;11268:16;;;;11231:55;11347:22;;;;11307:15;;;;11109:270;;;11113:3;10963:422;;;;;:::o;11390:806::-;11439:5;11469:8;11459:80;;-1:-1:-1;11510:1:1;11524:5;;11459:80;11558:4;11548:76;;-1:-1:-1;11595:1:1;11609:5;;11548:76;11640:4;11658:1;11653:59;;;;11726:1;11721:130;;;;11633:218;;11653:59;11683:1;11674:10;;11697:5;;;11721:130;11758:3;11748:8;11745:17;11742:43;;;11765:18;;:::i;:::-;-1:-1:-1;;11821:1:1;11807:16;;11836:5;;11633:218;;11935:2;11925:8;11922:16;11916:3;11910:4;11907:13;11903:36;11897:2;11887:8;11884:16;11879:2;11873:4;11870:12;11866:35;11863:77;11860:159;;;-1:-1:-1;11972:19:1;;;12004:5;;11860:159;12051:34;12076:8;12070:4;12051:34;:::i;:::-;12121:6;12117:1;12113:6;12109:19;12100:7;12097:32;12094:58;;;12132:18;;:::i;:::-;12170:20;;11390:806;-1:-1:-1;;;11390:806:1:o;12201:140::-;12259:5;12288:47;12329:4;12319:8;12315:19;12309:4;12288:47;:::i;12768:245::-;12835:6;12888:2;12876:9;12867:7;12863:23;12859:32;12856:52;;;12904:1;12901;12894:12;12856:52;12936:9;12930:16;12955:28;12977:5;12955:28;:::i;14552:402::-;14754:2;14736:21;;;14793:2;14773:18;;;14766:30;14832:34;14827:2;14812:18;;14805:62;-1:-1:-1;;;14898:2:1;14883:18;;14876:36;14944:3;14929:19;;14552:402::o;16361:510::-;16632:6;16621:9;16614:25;16675:3;16670:2;16659:9;16655:18;16648:31;16595:4;16696:57;16748:3;16737:9;16733:19;16725:6;16696:57;:::i;:::-;-1:-1:-1;;;;;16789:32:1;;;;16784:2;16769:18;;16762:60;-1:-1:-1;16853:2:1;16838:18;16831:34;16688:65;16361:510;-1:-1:-1;;16361:510:1:o

Swarm Source

ipfs://355b0eb1dcb2e55fb61771512d483d094e8128ff0c56ecf2ddb6f789b4f96f52
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.