ETH Price: $2,001.55 (-0.25%)

Contract

0xAAE2A65eBCfA4D26c0769cA600858e1566b83deD
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve183739852023-10-18 1:32:11526 days ago1697592731IN
0xAAE2A65e...566b83deD
0 ETH0.00025155.39487614
Approve182214752023-09-26 17:35:59548 days ago1695749759IN
0xAAE2A65e...566b83deD
0 ETH0.001066922.99221861
Transfer Ownersh...182211042023-09-26 16:20:35548 days ago1695745235IN
0xAAE2A65e...566b83deD
0 ETH0.0009155431.84940018
Approve180542732023-09-03 6:46:23571 days ago1693723583IN
0xAAE2A65e...566b83deD
0 ETH0.0005515111.83029061
Approve180027732023-08-27 1:38:35578 days ago1693100315IN
0xAAE2A65e...566b83deD
0 ETH0.0004893610.49721122
Approve178642832023-08-07 16:36:11598 days ago1691426171IN
0xAAE2A65e...566b83deD
0 ETH0.0022027447.25
Approve178465292023-08-05 4:57:23600 days ago1691211443IN
0xAAE2A65e...566b83deD
0 ETH0.0006648514.26155388
Approve178213732023-08-01 16:33:35604 days ago1690907615IN
0xAAE2A65e...566b83deD
0 ETH0.0013708129.52616938
Approve178076352023-07-30 18:29:11605 days ago1690741751IN
0xAAE2A65e...566b83deD
0 ETH0.0007029615.16090115
Approve177890612023-07-28 4:06:23608 days ago1690517183IN
0xAAE2A65e...566b83deD
0 ETH0.0008503318.21675487
Approve177890512023-07-28 4:04:23608 days ago1690517063IN
0xAAE2A65e...566b83deD
0 ETH0.0009052219.41757514
Approve177764712023-07-26 9:51:11610 days ago1690365071IN
0xAAE2A65e...566b83deD
0 ETH0.000826217.72254294
Approve177748532023-07-26 4:24:47610 days ago1690345487IN
0xAAE2A65e...566b83deD
0 ETH0.0008134917.54006673
Approve177743202023-07-26 2:37:11610 days ago1690339031IN
0xAAE2A65e...566b83deD
0 ETH0.0012198726.30914261
Approve177615062023-07-24 7:34:35612 days ago1690184075IN
0xAAE2A65e...566b83deD
0 ETH0.0010813323.19508049
Approve177586682023-07-23 22:03:11612 days ago1690149791IN
0xAAE2A65e...566b83deD
0 ETH0.0009305520.06931911
Approve177507602023-07-22 19:29:47613 days ago1690054187IN
0xAAE2A65e...566b83deD
0 ETH0.0006876814.81216053
Approve177498522023-07-22 16:26:35614 days ago1690043195IN
0xAAE2A65e...566b83deD
0 ETH0.0009916221.27087705
Approve177488852023-07-22 13:12:11614 days ago1690031531IN
0xAAE2A65e...566b83deD
0 ETH0.0010997223.58971297
Approve177476422023-07-22 9:01:35614 days ago1690016495IN
0xAAE2A65e...566b83deD
0 ETH0.0008162117.50824635
Approve177476172023-07-22 8:56:35614 days ago1690016195IN
0xAAE2A65e...566b83deD
0 ETH0.0005285819.92641392
Approve177476152023-07-22 8:56:11614 days ago1690016171IN
0xAAE2A65e...566b83deD
0 ETH0.0009808521.12673413
Approve177472182023-07-22 7:35:59614 days ago1690011359IN
0xAAE2A65e...566b83deD
0 ETH0.0007964417.08408544
Approve177463742023-07-22 4:46:11614 days ago1690001171IN
0xAAE2A65e...566b83deD
0 ETH0.0006851414.69677343
Approve177453902023-07-22 1:28:35614 days ago1689989315IN
0xAAE2A65e...566b83deD
0 ETH0.001304627.98438689
View all transactions

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Method Block
From
To
0x60a06040177268792023-07-19 11:16:35617 days ago1689765395
0xAAE2A65e...566b83deD
 Contract Creation0 ETH
Loading...
Loading

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

API
[{"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

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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