ETH Price: $3,138.06 (-2.42%)
Gas: 7 Gwei

Contract

0xA1Ca68ACcd4E25e5d36aBB659711FFC0a3C58a04
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

1 address found via
Transaction Hash
Method
Block
From
To
Value
Approve195039632024-03-24 10:59:2331 days ago1711277963IN
0xA1Ca68AC...0a3C58a04
0 ETH0.0004009316.49109816
Approve187868052023-12-14 20:38:11132 days ago1702586291IN
0xA1Ca68AC...0a3C58a04
0 ETH0.0013199554.15852449
Approve184621742023-10-30 9:47:11177 days ago1698659231IN
0xA1Ca68AC...0a3C58a04
0 ETH0.0006595814.15548706
Approve184133972023-10-23 13:54:59184 days ago1698069299IN
0xA1Ca68AC...0a3C58a04
0 ETH0.0008075717.39407061
Approve182709252023-10-03 15:34:11204 days ago1696347251IN
0xA1Ca68AC...0a3C58a04
0 ETH0.0008544918.41425422
Approve181828052023-09-21 7:36:35216 days ago1695281795IN
0xA1Ca68AC...0a3C58a04
0 ETH0.000446879.59043097
Approve181799662023-09-20 22:04:23217 days ago1695247463IN
0xA1Ca68AC...0a3C58a04
0 ETH0.0009783521.07249261
Approve180917452023-09-08 12:37:59229 days ago1694176679IN
0xA1Ca68AC...0a3C58a04
0 ETH0.0005375211.59251518
Approve179812952023-08-24 1:30:11244 days ago1692840611IN
0xA1Ca68AC...0a3C58a04
0 ETH0.0007115815.33059802
Approve179738252023-08-23 0:26:47245 days ago1692750407IN
0xA1Ca68AC...0a3C58a04
0 ETH0.0006810414.6160495
Approve179510602023-08-19 20:00:11249 days ago1692475211IN
0xA1Ca68AC...0a3C58a04
0 ETH0.0007412315.90761388
Approve179404422023-08-18 8:18:47250 days ago1692346727IN
0xA1Ca68AC...0a3C58a04
0 ETH0.0005415920.46211317
Approve179404342023-08-18 8:17:11250 days ago1692346631IN
0xA1Ca68AC...0a3C58a04
0 ETH0.0005974620.41348761
Approve179404262023-08-18 8:15:35250 days ago1692346535IN
0xA1Ca68AC...0a3C58a04
0 ETH0.0005877320.04015381
Approve178675532023-08-08 3:34:23260 days ago1691465663IN
0xA1Ca68AC...0a3C58a04
0 ETH0.0010098221.75027293
Approve178629862023-08-07 12:13:47261 days ago1691410427IN
0xA1Ca68AC...0a3C58a04
0 ETH0.0016112134.5339026
Approve178028642023-07-30 2:27:11269 days ago1690684031IN
0xA1Ca68AC...0a3C58a04
0 ETH0.0011933525.57779262
Approve177984512023-07-29 11:39:35270 days ago1690630775IN
0xA1Ca68AC...0a3C58a04
0 ETH0.0011870825.4434267
Approve177984502023-07-29 11:39:23270 days ago1690630763IN
0xA1Ca68AC...0a3C58a04
0 ETH0.0011720725.12160785
Approve177969592023-07-29 6:38:11270 days ago1690612691IN
0xA1Ca68AC...0a3C58a04
0 ETH0.0007194115.51532997
Approve177965412023-07-29 5:13:59270 days ago1690607639IN
0xA1Ca68AC...0a3C58a04
0 ETH0.0007682816.48820115
Approve177809382023-07-27 0:49:23272 days ago1690418963IN
0xA1Ca68AC...0a3C58a04
0 ETH0.0008230617.75074689
Approve177658242023-07-24 22:04:23275 days ago1690236263IN
0xA1Ca68AC...0a3C58a04
0 ETH0.0014834531.83649483
Approve177621902023-07-24 9:52:23275 days ago1690192343IN
0xA1Ca68AC...0a3C58a04
0 ETH0.0034673474.41303176
Approve177606832023-07-24 4:48:47275 days ago1690174127IN
0xA1Ca68AC...0a3C58a04
0 ETH0.0006758514.56458199
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Kabosu2

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-12
*/

// Kabosu 2.0 (Japanese: かぼす) is a female Shiba Inu most famously known as the face of Doge.
// ██████  ███████ ██    ██  ██████  ██      ██    ██ 
// COPYRIGHT © 2023 ALL RIGHTS RESERVED BY KABOSU 2.0
// ██████  ███████ ██    ██  ██████  ██      ██    ██ 
// Website: https://kabosu2.fun/
// Telegram:https://t.me/Kabosu2ERC
// Twitter: https://twitter.com/Kabuso2ERC

// 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;
}

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);
}

/********************************************************************************************
  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);
        authorize(initialOwner);
        if (initialOwner != msg.sender) {
            authorize(msg.sender);
        }
    }

    // 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);
    }
}

/********************************************************************************************
  SECURITY
********************************************************************************************/

abstract contract Pausable {

    // DATA

    bool private _paused;

    // ERROR

    error EnforcedPause();

    error ExpectedPause();

    // MODIFIER

    modifier whenNotPaused() {
        _requireNotPaused();
        _;
    }

    modifier whenPaused() {
        _requirePaused();
        _;
    }

    // CONSTRUCTOR

    constructor() {
        _paused = false;
    }

    // EVENT
    
    event Paused(address account);

    event Unpaused(address account);

    // FUNCTION

    function paused() public view virtual returns (bool) {
        return _paused;
    }

    function pause() external virtual whenNotPaused {
        _pause();
    }

    function unpause() external virtual whenPaused {
        _unpause();
    }

    function _requireNotPaused() internal view virtual {
        if (paused()) {
            revert EnforcedPause();
        }
    }

    function _requirePaused() internal view virtual {
        if (!paused()) {
            revert ExpectedPause();
        }
    }

    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(msg.sender);
    }

    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(msg.sender);
    }
}

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

contract Kabosu2 is Auth, ICommonError, IERC20 {

    // DATA

    IRouter public router;

    string private constant NAME = "Kabosu 2.0";
    string private constant SYMBOL = "Kabosu2.0";

    uint8 private constant DECIMALS = 18;

    uint256 private _totalSupply;
    
    uint256 public constant FEEDENOMINATOR = 10_000;

    uint256 public buyDevelopmentFee = 200;
    uint256 public sellDevelopmentFee = 200;
    uint256 public transferDevelopmentFee = 0;
    uint256 public developmentFeeCollected = 0;
    uint256 public totalFeeCollected = 0;
    uint256 public developmentFeeRedeemed = 0;
    uint256 public totalFeeRedeemed = 0;
    uint256 public minSwap = 100 ether;

    bool private constant ISKABOSU2 = true;

    bool public isFeeActive = false;
    bool public isFeeLocked = false;
    bool public isSwapEnabled = false;
    bool public inSwap = false;
    
    address public constant ZERO = address(0);
    address public constant DEAD = address(0xdead);

    address public developmentReceiver = 0xA828314168403eFd76E65209938cEfF1a431b0F5;
    
    address public pair;
    
    // MAPPING

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

    // MODIFIER

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

    // ERROR

    error InvalidTotalFee(uint256 current, uint256 max);

    error InvalidFeeActiveState(bool current);

    error InvalidSwapEnabledState(bool current);

    error FeeLocked();

    // CONSTRUCTOR

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

        router = IRouter(routerAddress);
        pair = IFactory(router.factory()).createPair(address(this), router.WETH());

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

    // EVENT

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

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

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

    event UpdateBuyFee(uint256 oldBuyDevelopmentFee, uint256 newBuyDevelopmentFee, address caller, uint256 timestamp);

    event UpdateSellFee(uint256 oldSellDevelopmentFee, uint256 newSellDevelopmentFee, address caller, uint256 timestamp);

    event UpdateTransferFee(uint256 oldTransferDevelopmentFee, uint256 newTransferDevelopmentFee, address caller, uint256 timestamp);

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

    event UpdateDevelopmentReceiver(address oldDevelopmentReceiver, address newDevelopmentReceiver, address caller, uint256 timestamp);
        
    event AutoRedeem(uint256 developmentFeeDistribution, uint256 amountToRedeem, address caller, uint256 timestamp);

    // FUNCTION

    /* General */

    receive() external payable {}

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

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

    /* Redeem */

    function redeemAllDevelopmentFee() external {
        uint256 amountToRedeem = developmentFeeCollected - developmentFeeRedeemed;
        
        _redeemDevelopmentFee(amountToRedeem);
    }

    function redeemPartialDevelopmentFee(uint256 amountToRedeem) external {
        require(amountToRedeem <= developmentFeeCollected - developmentFeeRedeemed, "Redeem Partial Development Fee: Insufficient development fee collected.");
        
        _redeemDevelopmentFee(amountToRedeem);
    }

    function _redeemDevelopmentFee(uint256 amountToRedeem) internal swapping { 
        developmentFeeRedeemed += 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,
            developmentReceiver,
            block.timestamp
        );
    }

    function autoRedeem(uint256 amountToRedeem) public swapping {  
        uint256 developmentToRedeem = developmentFeeCollected - developmentFeeRedeemed;
        uint256 totalToRedeem = totalFeeCollected - totalFeeRedeemed;

        uint256 developmentFeeDistribution = amountToRedeem * developmentToRedeem / totalToRedeem;
        
        developmentFeeRedeemed += developmentFeeDistribution;
        totalFeeRedeemed += amountToRedeem;

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

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

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            developmentFeeDistribution,
            0,
            path,
            developmentReceiver,
            block.timestamp
        );
    }

    /* Check */

    function isKabosu2() external pure returns (bool) {
        return ISKABOSU2;
    }

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

    /* Update */

    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); }
        uint256 oldMinSwap = minSwap;
        minSwap = newMinSwap;
        emit UpdateMinSwap(oldMinSwap, newMinSwap, msg.sender, block.timestamp);
    }

    function updateBuyFee(uint256 newDevelopmentFee) external onlyOwner {
        if (isFeeLocked) { revert FeeLocked(); }
        if (newDevelopmentFee > 210) { revert InvalidTotalFee(newDevelopmentFee, 210); }
        uint256 oldDevelopmentFee = buyDevelopmentFee;
        buyDevelopmentFee = newDevelopmentFee;
        emit UpdateBuyFee(oldDevelopmentFee, newDevelopmentFee, msg.sender, block.timestamp);
    }

    function updateSellFee(uint256 newDevelopmentFee) external onlyOwner {
        if (isFeeLocked) { revert FeeLocked(); }
        if (newDevelopmentFee > 210) { revert InvalidTotalFee(newDevelopmentFee, 210); }
        uint256 oldDevelopmentFee = sellDevelopmentFee;
        sellDevelopmentFee = newDevelopmentFee;
        emit UpdateSellFee(oldDevelopmentFee, newDevelopmentFee, msg.sender, block.timestamp);
    }

    function updateTransferFee(uint256 newDevelopmentFee) external onlyOwner {
        if (isFeeLocked) { revert FeeLocked(); }
        if (newDevelopmentFee > 210) { revert InvalidTotalFee(newDevelopmentFee, 210); }
        uint256 oldDevelopmentFee = transferDevelopmentFee;
        transferDevelopmentFee = newDevelopmentFee;
        emit UpdateTransferFee(oldDevelopmentFee, newDevelopmentFee, 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 updateDevelopmentReceiver(address newDevelopmentReceiver) external onlyOwner {
        if (developmentReceiver == newDevelopmentReceiver) { revert CannotUseCurrentAddress(newDevelopmentReceiver); }
        address oldDevelopmentReceiver = developmentReceiver;
        developmentReceiver = newDevelopmentReceiver;
        emit UpdateDevelopmentReceiver(oldDevelopmentReceiver, newDevelopmentReceiver, msg.sender, block.timestamp);
    }

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

    /* Fee */

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

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

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

    function tallyBuyFee(address from, uint256 amount, uint256 fee) internal swapping {
        uint256 collectDevelopment = amount * buyDevelopmentFee / fee;
        tallyCollection(collectDevelopment, amount);
        
        _balances[from] -= amount;
        _balances[address(this)] += amount;
    }

    function tallySellFee(address from, uint256 amount, uint256 fee) internal swapping {
        uint256 collectDevelopment = amount * sellDevelopmentFee / fee;
        tallyCollection(collectDevelopment, amount);
        
        _balances[from] -= amount;
        _balances[address(this)] += amount;
    }

    function tallyTransferFee(address from, uint256 amount, uint256 fee) internal swapping {
        uint256 collectDevelopment = amount * transferDevelopmentFee / fee;
        tallyCollection(collectDevelopment, amount);

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

    function tallyCollection(uint256 collectDevelopment, uint256 amount) internal swapping {
        developmentFeeCollected += collectDevelopment;
        totalFeeCollected += amount;
    }

    /* Buyback */

    function triggerZeusBuyback(uint256 amount) external authorized {
        buyTokens(amount, DEAD);
    }

    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 (inSwap || isExcludeFromFees[from]) {
            return _basicTransfer(from, to, amount);
        }

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

        uint256 newAmount = amount;

        if (isFeeActive && !isExcludeFromFees[from]) {
            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);

        return true;
    }

    function _beforeTokenTransfer(address from, address to, uint256 amount) internal swapping virtual returns (uint256) {
        if (from == pair && (buyDevelopmentFee > 0)) {
            return takeBuyFee(from, amount);
        }
        if (to == pair && (sellDevelopmentFee > 0)) {
            return takeSellFee(from, amount);
        }
        if (from != pair && to != pair && (transferDevelopmentFee > 0)) {
            return takeTransferFee(from, amount);
        }
        return amount;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"routerAddress","type":"address"},{"internalType":"address","name":"projectOwnerAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"current","type":"address"}],"name":"CannotUseCurrentAddress","type":"error"},{"inputs":[{"internalType":"bool","name":"current","type":"bool"}],"name":"CannotUseCurrentState","type":"error"},{"inputs":[{"internalType":"uint256","name":"current","type":"uint256"}],"name":"CannotUseCurrentValue","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"CurrentAuthorizedState","type":"error"},{"inputs":[],"name":"FeeLocked","type":"error"},{"inputs":[{"internalType":"address","name":"invalid","type":"address"}],"name":"InvalidAddress","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"InvalidAuthorizedAccount","type":"error"},{"inputs":[{"internalType":"bool","name":"current","type":"bool"}],"name":"InvalidFeeActiveState","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"InvalidOwner","type":"error"},{"inputs":[{"internalType":"bool","name":"current","type":"bool"}],"name":"InvalidSwapEnabledState","type":"error"},{"inputs":[{"internalType":"uint256","name":"current","type":"uint256"},{"internalType":"uint256","name":"max","type":"uint256"}],"name":"InvalidTotalFee","type":"error"},{"inputs":[{"internalType":"uint256","name":"invalid","type":"uint256"}],"name":"InvalidValue","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":"developmentFeeDistribution","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":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":"oldBuyDevelopmentFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBuyDevelopmentFee","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":"address","name":"oldDevelopmentReceiver","type":"address"},{"indexed":false,"internalType":"address","name":"newDevelopmentReceiver","type":"address"},{"indexed":false,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"UpdateDevelopmentReceiver","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":"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":"oldSellDevelopmentFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newSellDevelopmentFee","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":"oldTransferDevelopmentFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newTransferDevelopmentFee","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":"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":"buyDevelopmentFee","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":"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":"developmentFeeCollected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"developmentFeeRedeemed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"developmentReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"isKabosu2","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":"lockFees","outputs":[],"stateMutability":"nonpayable","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":"redeemAllDevelopmentFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountToRedeem","type":"uint256"}],"name":"redeemPartialDevelopmentFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setExcludeFromFees","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":[{"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":"transferDevelopmentFee","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":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","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":"newDevelopmentFee","type":"uint256"}],"name":"updateBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newDevelopmentReceiver","type":"address"}],"name":"updateDevelopmentReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newStatus","type":"bool"}],"name":"updateFeeActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMinSwap","type":"uint256"}],"name":"updateMinSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"updateRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newDevelopmentFee","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":"newDevelopmentFee","type":"uint256"}],"name":"updateTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260c8600481905560055560006006819055600781905560088190556009819055600a5568056bc75e2d63100000600b55600c80546001600160c01b03191677a828314168403efd76e65209938ceff1a431b0f5000000001790553480156200006b57600080fd5b5060405162002dd238038062002dd28339810160408190526200008e916200057c565b336200009a81620002fa565b620000a5816200034a565b6001600160a01b0381163314620000c157620000c1336200034a565b50620000ee33620000d56012600a620006c9565b620000e89066017e9d8602b400620006e1565b620003b1565b6001600160a01b0381166200012657604051634726455360e11b81526001600160a01b03821660048201526024015b60405180910390fd5b600280546001600160a01b0319166001600160a01b0384169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000180573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a69190620006fb565b6001600160a01b031663c9c6539630600260009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000209573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022f9190620006fb565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200027d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a39190620006fb565b600d80546001600160a01b0319166001600160a01b0392831617905533600090815260106020526040808220805460ff199081166001908117909255600254909416835291208054909216179055506200072f9050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6200035462000452565b6001600160a01b03811615806200037557506001600160a01b03811661dead145b15620003a057604051635077b8ed60e11b81526001600160a01b03821660048201526024016200011d565b620003ae8133600162000493565b50565b6001600160a01b038216620003e557604051634726455360e11b81526001600160a01b03831660048201526024016200011d565b8060036000828254620003f9919062000719565b90915550506001600160a01b0382166000818152600e60209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b33620004666000546001600160a01b031690565b6001600160a01b03161462000491576040516332b2baa360e01b81523360048201526024016200011d565b565b6001600160a01b03831660009081526001602052604090205481151560ff909116151503620004e957604051635ce75a3b60e01b81526001600160a01b038416600482015281151560248201526044016200011d565b6001600160a01b03838116600081815260016020908152604091829020805460ff19168615159081179091558251938452938616908301528101919091524260608201527fff1d0a27274ca0cc8403b0e8f4a70b968164366f4856d18f7569eba542e9aae49060800160405180910390a1505050565b80516001600160a01b03811681146200057757600080fd5b919050565b600080604083850312156200059057600080fd5b6200059b836200055f565b9150620005ab602084016200055f565b90509250929050565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200060b578160001904821115620005ef57620005ef620005b4565b80851615620005fd57918102915b93841c9390800290620005cf565b509250929050565b6000826200062457506001620006c3565b816200063357506000620006c3565b81600181146200064c5760028114620006575762000677565b6001915050620006c3565b60ff8411156200066b576200066b620005b4565b50506001821b620006c3565b5060208310610133831016604e8410600b84101617156200069c575081810a620006c3565b620006a88383620005ca565b8060001904821115620006bf57620006bf620005b4565b0290505b92915050565b6000620006da60ff84168362000613565b9392505050565b8082028115828204841417620006c357620006c3620005b4565b6000602082840312156200070e57600080fd5b620006da826200055f565b80820180821115620006c357620006c3620005b4565b612693806200073f6000396000f3fe60806040526004361061031e5760003560e01c8063924de9b7116101ab578063b908de8c116100f7578063dd62ed3e11610095578063f0b37c041161006f578063f0b37c0414610916578063f2a4268714610936578063f2fde38b14610966578063f887ea401461098657600080fd5b8063dd62ed3e146108c6578063e0dfb880146108e6578063e43504da146108fc57600080fd5b8063cbe12969116100d1578063cbe1296914610841578063d63cad2214610871578063d830678614610891578063dc7dc605146108b257600080fd5b8063b908de8c146107ec578063b9b2b5cd1461080b578063c851cc321461082157600080fd5b8063a8aa1b3111610164578063ab3662921161013e578063ab36629214610781578063b204141114610796578063b284f3ad146107ac578063b6a5d7de146107cc57600080fd5b8063a8aa1b311461072b578063a9059cbb1461074b578063ab28a04c1461076b57600080fd5b8063924de9b7146106795780639358928b1461069957806395d89b41146106ae578063a07ea36b146106e0578063a0a6e940146106f6578063a457c2d71461070b57600080fd5b8063467abe0a1161026a57806370a082311161022357806375fed3c7116101fd57806375fed3c7146105fb5780638577a6d51461061b57806388fc36b71461063b5780638da5cb5b1461065b57600080fd5b806370a082311461059a578063715018a6146105d057806371538eed146105e557600080fd5b8063467abe0a146104f157806358fa63ca14610511578063593173c11461052657806359cd90311461054e5780635f4702b81461056457806363a954921461057a57600080fd5b80631d933a4a116102d7578063313ce567116102b1578063313ce56714610475578063351a964d1461049157806339509351146104b15780633bf31454146104d157600080fd5b80631d933a4a146104205780631f7f508c1461044057806323b872dd1461045557600080fd5b8063012951431461032a57806303fd2a451461034c57806306fdde031461037f578063095ea7b3146103bb57806318160ddd146103eb57806318a94cf11461040a57600080fd5b3661032557005b600080fd5b34801561033657600080fd5b5061034a6103453660046122f2565b6109a6565b005b34801561035857600080fd5b5061036261dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561038b57600080fd5b5060408051808201909152600a81526904b61626f737520322e360b41b60208201525b604051610376919061230b565b3480156103c757600080fd5b506103db6103d636600461236e565b610bdf565b6040519015158152602001610376565b3480156103f757600080fd5b506003545b604051908152602001610376565b34801561041657600080fd5b506103fc60055481565b34801561042c57600080fd5b5061034a61043b3660046122f2565b610bf9565b34801561044c57600080fd5b5061034a610ca5565b34801561046157600080fd5b506103db61047036600461239a565b610cc5565b34801561048157600080fd5b5060405160128152602001610376565b34801561049d57600080fd5b50600c546103db9062010000900460ff1681565b3480156104bd57600080fd5b506103db6104cc36600461236e565b610ce9565b3480156104dd57600080fd5b5061034a6104ec3660046123f0565b610d0b565b3480156104fd57600080fd5b5061034a61050c3660046122f2565b610d9d565b34801561051d57600080fd5b50610362600081565b34801561053257600080fd5b50600c546103629064010000000090046001600160a01b031681565b34801561055a57600080fd5b506103fc600b5481565b34801561057057600080fd5b506103fc60075481565b34801561058657600080fd5b5061034a6105953660046122f2565b610e38565b3480156105a657600080fd5b506103fc6105b536600461240b565b6001600160a01b03166000908152600e602052604090205490565b3480156105dc57600080fd5b5061034a610e4c565b3480156105f157600080fd5b506103fc600a5481565b34801561060757600080fd5b5061034a6106163660046122f2565b610e60565b34801561062757600080fd5b5061034a6106363660046122f2565b610ecb565b34801561064757600080fd5b5061034a61065636600461240b565b610f66565b34801561066757600080fd5b506000546001600160a01b0316610362565b34801561068557600080fd5b5061034a6106943660046123f0565b611029565b3480156106a557600080fd5b506103fc6110d3565b3480156106ba57600080fd5b5060408051808201909152600981526804b61626f7375322e360bc1b60208201526103ae565b3480156106ec57600080fd5b506103fc60065481565b34801561070257600080fd5b5061034a611143565b34801561071757600080fd5b506103db61072636600461236e565b6111c7565b34801561073757600080fd5b50600d54610362906001600160a01b031681565b34801561075757600080fd5b506103db61076636600461236e565b61124d565b34801561077757600080fd5b506103fc61271081565b34801561078d57600080fd5b5061034a611263565b3480156107a257600080fd5b506103fc60045481565b3480156107b857600080fd5b5061034a6107c73660046122f2565b6112a5565b3480156107d857600080fd5b5061034a6107e736600461240b565b611343565b3480156107f857600080fd5b50600c546103db90610100900460ff1681565b34801561081757600080fd5b506103fc60085481565b34801561082d57600080fd5b5061034a61083c36600461240b565b6113a0565b34801561084d57600080fd5b506103db61085c36600461240b565b60016020526000908152604090205460ff1681565b34801561087d57600080fd5b5061034a61088c366004612428565b6115f9565b34801561089d57600080fd5b50600c546103db906301000000900460ff1681565b3480156108be57600080fd5b5060016103db565b3480156108d257600080fd5b506103fc6108e136600461245d565b611670565b3480156108f257600080fd5b506103fc60095481565b34801561090857600080fd5b50600c546103db9060ff1681565b34801561092257600080fd5b5061034a61093136600461240b565b61169b565b34801561094257600080fd5b506103db61095136600461240b565b60106020526000908152604090205460ff1681565b34801561097257600080fd5b5061034a61098136600461240b565b6116f8565b34801561099257600080fd5b50600254610362906001600160a01b031681565b600c805463ff000000191663010000001790556009546007546000916109cb916124ac565b90506000600a546008546109df91906124ac565b90506000816109ee84866124bf565b6109f891906124d6565b90508060096000828254610a0c91906124f8565b9250508190555083600a6000828254610a2591906124f8565b90915550506040805160028082526060820183526000926020830190803683370190505090503081600081518110610a5f57610a5f61250b565b6001600160a01b03928316602091820292909201810191909152600254604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015610ab8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610adc9190612521565b81600181518110610aef57610aef61250b565b6001600160a01b039283166020918202929092010152600254610b159130911687611733565b7fb933c1b294702108551eddf782a9c7d1a018b57f68ecf63bc59a1247daa19c3082863342604051610b4a949392919061253e565b60405180910390a1600254600c5460405163791ac94760e01b81526001600160a01b039283169263791ac94792610b9992879260009288926401000000009091049091169042906004016125a6565b600060405180830381600087803b158015610bb357600080fd5b505af1158015610bc7573d6000803e3d6000fd5b5050600c805463ff0000001916905550505050505050565b600033610bed818585611733565b60019150505b92915050565b610c016117f8565b600c54610100900460ff1615610c2a5760405163882d29d360e01b815260040160405180910390fd5b60d2811115610c5b5760405163211a907760e11b81526004810182905260d260248201526044015b60405180910390fd5b60058054908290556040517f303e7b18c743f03402db563f20359b822ba8bb215a8460ba6c5f5b1f401b868290610c9990839085903390429061253e565b60405180910390a15050565b6000600954600754610cb791906124ac565b9050610cc281611834565b50565b600033610cd38582856119ef565b610cde858585611a69565b9150505b9392505050565b600033610bed818585610cfc8383611670565b610d0691906124f8565b611733565b610d13611c56565b600c5481151560ff909116151503610d415760405162a7e72d60e41b81528115156004820152602401610c52565b600c805482151560ff19821681179092556040805160ff9092168015158352602083019390935233908201524260608201527ff99f9d4d81f67d0980beea494b4404ba3b8af1a0a2d493230f1a883efa027f2f90608001610c99565b610da56117f8565b600c54610100900460ff1615610dce5760405163882d29d360e01b815260040160405180910390fd5b60d2811115610dfa5760405163211a907760e11b81526004810182905260d26024820152604401610c52565b60048054908290556040517f90874b2697cc8e5401df6338d4549d0467cdd4f7e96a2cd367659b2eff89a07990610c9990839085903390429061253e565b610e40611c56565b610cc28161dead611c88565b610e546117f8565b610e5e6000611e21565b565b610e686117f8565b80600b5403610e8d5760405163657e16cf60e01b815260048101829052602401610c52565b600b8054908290556040517f9a9f4704ac409fe039e92a996e415370980275aaff2992936ed5b432886c55c590610c9990839085903390429061253e565b610ed36117f8565b600c54610100900460ff1615610efc5760405163882d29d360e01b815260040160405180910390fd5b60d2811115610f285760405163211a907760e11b81526004810182905260d26024820152604401610c52565b60068054908290556040517f93f0ae7c5c2922bf736e77b4999848c80112f12ae2c18ab4d80c1f55557a0fff90610c9990839085903390429061253e565b610f6e6117f8565b600c546001600160a01b038083166401000000009092041603610faf5760405163a936636960e01b81526001600160a01b0382166004820152602401610c52565b600c80546001600160a01b03838116640100000000818102640100000000600160c01b0319851617909455604080519490930490911680845260208401919091523391830191909152426060830152907fb0451709ef39d7c8ccf1af9d25ae2f9fb27fa0ec1bc6e7fe7526a78169301ab290608001610c99565b611031611c56565b801515600c60029054906101000a900460ff161515036110675760405162a7e72d60e41b81528115156004820152602401610c52565b600c80548215156201000081810262ff0000198416179093556040805160ff94909304939093168015158352602083019190915233928201929092524260608201527fa9eb6c000d17475b17651469533695f7b673c93327fdbadf4341ebeb2607a04490608001610c99565b600e6020527fe710864318d4a32f37d6ce54cb3fadbef648dd12d8dbdf53973564d56b7f881c5461dead60009081527ff77e91909e61d18f67b875b2bfcae1f683a8d555e55382e3a6b082e2c59ea57a5460035491929161113491906124ac565b61113e91906124ac565b905090565b61114b611c56565b600c5460ff161561117a57600c54604051630eff900b60e21b815260ff90911615156004820152602401610c52565b600c5462010000900460ff16156111b457600c5460405163610a8e6760e01b81526201000090910460ff1615156004820152602401610c52565b600c805462ff00ff191662010001179055565b600033816111d58286611670565b9050838110156112355760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c52565b6112428286868403611733565b506001949350505050565b60003361125b818585611a69565b949350505050565b61126b6117f8565b600c54610100900460ff16156112945760405163882d29d360e01b815260040160405180910390fd5b600c805461ff001916610100179055565b6009546007546112b591906124ac565b81111561133a5760405162461bcd60e51b815260206004820152604760248201527f52656465656d205061727469616c20446576656c6f706d656e74204665653a2060448201527f496e73756666696369656e7420646576656c6f706d656e742066656520636f6c6064820152663632b1ba32b21760c91b608482015260a401610c52565b610cc281611834565b61134b6117f8565b6001600160a01b038116158061136b57506001600160a01b03811661dead145b1561139457604051635077b8ed60e11b81526001600160a01b0382166004820152602401610c52565b610cc281336001611e71565b6113a86117f8565b6002546001600160a01b038083169116036113e15760405163a936636960e01b81526001600160a01b0382166004820152602401610c52565b600280546001600160a01b031981166001600160a01b03848116918217909355600081815260106020908152604091829020805460ff19166001179055815194909316808552928401919091523390830152426060830152907fe1cb783288eddc7b22c25642a832d886a558be0dd900747310a34156b9fdcbbb9060800160405180910390a1600260009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114de9190612521565b6001600160a01b031663c9c6539630600260009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611540573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115649190612521565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156115b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d59190612521565b600d80546001600160a01b0319166001600160a01b03929092169190911790555050565b611601611c56565b6001600160a01b03821660009081526010602052604090205481151560ff9091161515036116455760405162a7e72d60e41b81528115156004820152602401610c52565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6001600160a01b039182166000908152600f6020908152604080832093909416825291909152205490565b6116a36117f8565b6001600160a01b03811615806116c357506001600160a01b03811661dead145b156116ec57604051635077b8ed60e11b81526001600160a01b0382166004820152602401610c52565b610cc281336000611e71565b6117006117f8565b6001600160a01b03811661172a5760405163b20f76e360e01b815260006004820152602401610c52565b610cc281611e21565b6001600160a01b03831661176557604051634726455360e11b81526001600160a01b0384166004820152602401610c52565b6001600160a01b03821661179757604051634726455360e11b81526001600160a01b0383166004820152602401610c52565b6001600160a01b038381166000818152600f602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b3361180b6000546001600160a01b031690565b6001600160a01b031614610e5e576040516332b2baa360e01b8152336004820152602401610c52565b600c805463ff000000191663010000001790556009805482919060009061185c9084906124f8565b9250508190555080600a600082825461187591906124f8565b909155505060408051600280825260608201835260009260208301908036833701905050905030816000815181106118af576118af61250b565b6001600160a01b03928316602091820292909201810191909152600254604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611908573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192c9190612521565b8160018151811061193f5761193f61250b565b6001600160a01b0392831660209182029290920101526002546119659130911684611733565b600254600c5460405163791ac94760e01b81526001600160a01b039283169263791ac947926119ac92879260009288926401000000009091049091169042906004016125a6565b600060405180830381600087803b1580156119c657600080fd5b505af11580156119da573d6000803e3d6000fd5b5050600c805463ff0000001916905550505050565b60006119fb8484611670565b90506000198114611a635781811015611a565760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610c52565b611a638484848403611733565b50505050565b60006001600160a01b038416611a9d57604051634726455360e11b81526001600160a01b0385166004820152602401610c52565b6001600160a01b038316611acf57604051634726455360e11b81526001600160a01b0384166004820152602401610c52565b600c546301000000900460ff1680611aff57506001600160a01b03841660009081526010602052604090205460ff165b15611b1657611b0f848484611f3b565b9050610ce2565b600d546001600160a01b03858116911614801590611b3c5750600c5462010000900460ff165b8015611b595750600b54600a54600854611b5691906124ac565b10155b15611b6957611b69600b546109a6565b600c54829060ff168015611b9657506001600160a01b03851660009081526010602052604090205460ff16155b15611ba957611ba6858585611fd4565b90505b6001600160a01b0385166000908152600e6020526040902054811115611be15760405162461bcd60e51b8152600401610c52906125e2565b6001600160a01b038086166000818152600e6020526040808220805486900390559287168082529083902080548501905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611c439085815260200190565b60405180910390a3506001949350505050565b3360009081526001602052604090205460ff16610e5e576040516332b2baa360e01b8152336004820152602401610c52565b600c805463ff0000001916630100000017905561deac193301611cc257604051634726455360e11b815261dead6004820152602401610c52565b6040805160028082526060820183526000926020830190803683375050600254604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015611d2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d509190612521565b81600081518110611d6357611d6361250b565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110611d9757611d9761250b565b6001600160a01b03928316602091820292909201015260025460405163b6f9de9560e01b815291169063b6f9de95908590611ddd90600090869088904290600401612628565b6000604051808303818588803b158015611df657600080fd5b505af1158015611e0a573d6000803e3d6000fd5b5050600c805463ff00000019169055505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03831660009081526001602052604090205481151560ff909116151503611ec557604051635ce75a3b60e01b81526001600160a01b03841660048201528115156024820152604401610c52565b6001600160a01b03838116600081815260016020908152604091829020805460ff19168615159081179091558251938452938616908301528101919091524260608201527fff1d0a27274ca0cc8403b0e8f4a70b968164366f4856d18f7569eba542e9aae49060800160405180910390a1505050565b6001600160a01b0383166000908152600e602052604081205482811015611f745760405162461bcd60e51b8152600401610c52906125e2565b6001600160a01b038086166000818152600e602052604080822087860390559287168082529083902080548701905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611c439087815260200190565b600c805463ff00000019166301000000179055600d546000906001600160a01b03858116911614801561200957506000600454115b1561201f5761201884836120ad565b9050612099565b600d546001600160a01b03848116911614801561203e57506000600554115b1561204d576120188483612112565b600d546001600160a01b038581169116148015906120795750600d546001600160a01b03848116911614155b801561208757506000600654115b15612096576120188483612162565b50805b600c805463ff000000191690559392505050565b600c805463ff000000191663010000001790556004546000908190612710906120d690856124bf565b6120e091906124d6565b905060006120ee82856124ac565b90506120fd85836004546121b2565b600c805463ff00000019169055949350505050565b600c805463ff0000001916630100000017905560055460009081906127109061213b90856124bf565b61214591906124d6565b9050600061215382856124ac565b90506120fd8583600554612251565b600c805463ff0000001916630100000017905560065460009081906127109061218b90856124bf565b61219591906124d6565b905060006121a382856124ac565b90506120fd8583600654612276565b600c805463ff0000001916630100000017905560045460009082906121d790856124bf565b6121e191906124d6565b90506121ed818461229b565b6001600160a01b0384166000908152600e6020526040812080548592906122159084906124ac565b9091555050306000908152600e6020526040812080548592906122399084906124f8565b9091555050600c805463ff0000001916905550505050565b600c805463ff0000001916630100000017905560055460009082906121d790856124bf565b600c805463ff0000001916630100000017905560065460009082906121d790856124bf565b600c805463ff00000019166301000000179055600780548391906000906122c39084906124f8565b9250508190555080600860008282546122dc91906124f8565b9091555050600c805463ff000000191690555050565b60006020828403121561230457600080fd5b5035919050565b600060208083528351808285015260005b818110156123385785810183015185820160400152820161231c565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610cc257600080fd5b6000806040838503121561238157600080fd5b823561238c81612359565b946020939093013593505050565b6000806000606084860312156123af57600080fd5b83356123ba81612359565b925060208401356123ca81612359565b929592945050506040919091013590565b803580151581146123eb57600080fd5b919050565b60006020828403121561240257600080fd5b610ce2826123db565b60006020828403121561241d57600080fd5b8135610ce281612359565b6000806040838503121561243b57600080fd5b823561244681612359565b9150612454602084016123db565b90509250929050565b6000806040838503121561247057600080fd5b823561247b81612359565b9150602083013561248b81612359565b809150509250929050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610bf357610bf3612496565b8082028115828204841417610bf357610bf3612496565b6000826124f357634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610bf357610bf3612496565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561253357600080fd5b8151610ce281612359565b93845260208401929092526001600160a01b03166040830152606082015260800190565b600081518084526020808501945080840160005b8381101561259b5781516001600160a01b031687529582019590820190600101612576565b509495945050505050565b85815284602082015260a0604082015260006125c560a0830186612562565b6001600160a01b0394909416606083015250608001529392505050565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b8481526080602082015260006126416080830186612562565b6001600160a01b0394909416604083015250606001529291505056fea26469706673582212207beab3a208aad219bd6b2f122ec70102feb2c03d00a2688af1ae443a54750e8564736f6c634300081200330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000a828314168403efd76e65209938ceff1a431b0f5

Deployed Bytecode

0x60806040526004361061031e5760003560e01c8063924de9b7116101ab578063b908de8c116100f7578063dd62ed3e11610095578063f0b37c041161006f578063f0b37c0414610916578063f2a4268714610936578063f2fde38b14610966578063f887ea401461098657600080fd5b8063dd62ed3e146108c6578063e0dfb880146108e6578063e43504da146108fc57600080fd5b8063cbe12969116100d1578063cbe1296914610841578063d63cad2214610871578063d830678614610891578063dc7dc605146108b257600080fd5b8063b908de8c146107ec578063b9b2b5cd1461080b578063c851cc321461082157600080fd5b8063a8aa1b3111610164578063ab3662921161013e578063ab36629214610781578063b204141114610796578063b284f3ad146107ac578063b6a5d7de146107cc57600080fd5b8063a8aa1b311461072b578063a9059cbb1461074b578063ab28a04c1461076b57600080fd5b8063924de9b7146106795780639358928b1461069957806395d89b41146106ae578063a07ea36b146106e0578063a0a6e940146106f6578063a457c2d71461070b57600080fd5b8063467abe0a1161026a57806370a082311161022357806375fed3c7116101fd57806375fed3c7146105fb5780638577a6d51461061b57806388fc36b71461063b5780638da5cb5b1461065b57600080fd5b806370a082311461059a578063715018a6146105d057806371538eed146105e557600080fd5b8063467abe0a146104f157806358fa63ca14610511578063593173c11461052657806359cd90311461054e5780635f4702b81461056457806363a954921461057a57600080fd5b80631d933a4a116102d7578063313ce567116102b1578063313ce56714610475578063351a964d1461049157806339509351146104b15780633bf31454146104d157600080fd5b80631d933a4a146104205780631f7f508c1461044057806323b872dd1461045557600080fd5b8063012951431461032a57806303fd2a451461034c57806306fdde031461037f578063095ea7b3146103bb57806318160ddd146103eb57806318a94cf11461040a57600080fd5b3661032557005b600080fd5b34801561033657600080fd5b5061034a6103453660046122f2565b6109a6565b005b34801561035857600080fd5b5061036261dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561038b57600080fd5b5060408051808201909152600a81526904b61626f737520322e360b41b60208201525b604051610376919061230b565b3480156103c757600080fd5b506103db6103d636600461236e565b610bdf565b6040519015158152602001610376565b3480156103f757600080fd5b506003545b604051908152602001610376565b34801561041657600080fd5b506103fc60055481565b34801561042c57600080fd5b5061034a61043b3660046122f2565b610bf9565b34801561044c57600080fd5b5061034a610ca5565b34801561046157600080fd5b506103db61047036600461239a565b610cc5565b34801561048157600080fd5b5060405160128152602001610376565b34801561049d57600080fd5b50600c546103db9062010000900460ff1681565b3480156104bd57600080fd5b506103db6104cc36600461236e565b610ce9565b3480156104dd57600080fd5b5061034a6104ec3660046123f0565b610d0b565b3480156104fd57600080fd5b5061034a61050c3660046122f2565b610d9d565b34801561051d57600080fd5b50610362600081565b34801561053257600080fd5b50600c546103629064010000000090046001600160a01b031681565b34801561055a57600080fd5b506103fc600b5481565b34801561057057600080fd5b506103fc60075481565b34801561058657600080fd5b5061034a6105953660046122f2565b610e38565b3480156105a657600080fd5b506103fc6105b536600461240b565b6001600160a01b03166000908152600e602052604090205490565b3480156105dc57600080fd5b5061034a610e4c565b3480156105f157600080fd5b506103fc600a5481565b34801561060757600080fd5b5061034a6106163660046122f2565b610e60565b34801561062757600080fd5b5061034a6106363660046122f2565b610ecb565b34801561064757600080fd5b5061034a61065636600461240b565b610f66565b34801561066757600080fd5b506000546001600160a01b0316610362565b34801561068557600080fd5b5061034a6106943660046123f0565b611029565b3480156106a557600080fd5b506103fc6110d3565b3480156106ba57600080fd5b5060408051808201909152600981526804b61626f7375322e360bc1b60208201526103ae565b3480156106ec57600080fd5b506103fc60065481565b34801561070257600080fd5b5061034a611143565b34801561071757600080fd5b506103db61072636600461236e565b6111c7565b34801561073757600080fd5b50600d54610362906001600160a01b031681565b34801561075757600080fd5b506103db61076636600461236e565b61124d565b34801561077757600080fd5b506103fc61271081565b34801561078d57600080fd5b5061034a611263565b3480156107a257600080fd5b506103fc60045481565b3480156107b857600080fd5b5061034a6107c73660046122f2565b6112a5565b3480156107d857600080fd5b5061034a6107e736600461240b565b611343565b3480156107f857600080fd5b50600c546103db90610100900460ff1681565b34801561081757600080fd5b506103fc60085481565b34801561082d57600080fd5b5061034a61083c36600461240b565b6113a0565b34801561084d57600080fd5b506103db61085c36600461240b565b60016020526000908152604090205460ff1681565b34801561087d57600080fd5b5061034a61088c366004612428565b6115f9565b34801561089d57600080fd5b50600c546103db906301000000900460ff1681565b3480156108be57600080fd5b5060016103db565b3480156108d257600080fd5b506103fc6108e136600461245d565b611670565b3480156108f257600080fd5b506103fc60095481565b34801561090857600080fd5b50600c546103db9060ff1681565b34801561092257600080fd5b5061034a61093136600461240b565b61169b565b34801561094257600080fd5b506103db61095136600461240b565b60106020526000908152604090205460ff1681565b34801561097257600080fd5b5061034a61098136600461240b565b6116f8565b34801561099257600080fd5b50600254610362906001600160a01b031681565b600c805463ff000000191663010000001790556009546007546000916109cb916124ac565b90506000600a546008546109df91906124ac565b90506000816109ee84866124bf565b6109f891906124d6565b90508060096000828254610a0c91906124f8565b9250508190555083600a6000828254610a2591906124f8565b90915550506040805160028082526060820183526000926020830190803683370190505090503081600081518110610a5f57610a5f61250b565b6001600160a01b03928316602091820292909201810191909152600254604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015610ab8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610adc9190612521565b81600181518110610aef57610aef61250b565b6001600160a01b039283166020918202929092010152600254610b159130911687611733565b7fb933c1b294702108551eddf782a9c7d1a018b57f68ecf63bc59a1247daa19c3082863342604051610b4a949392919061253e565b60405180910390a1600254600c5460405163791ac94760e01b81526001600160a01b039283169263791ac94792610b9992879260009288926401000000009091049091169042906004016125a6565b600060405180830381600087803b158015610bb357600080fd5b505af1158015610bc7573d6000803e3d6000fd5b5050600c805463ff0000001916905550505050505050565b600033610bed818585611733565b60019150505b92915050565b610c016117f8565b600c54610100900460ff1615610c2a5760405163882d29d360e01b815260040160405180910390fd5b60d2811115610c5b5760405163211a907760e11b81526004810182905260d260248201526044015b60405180910390fd5b60058054908290556040517f303e7b18c743f03402db563f20359b822ba8bb215a8460ba6c5f5b1f401b868290610c9990839085903390429061253e565b60405180910390a15050565b6000600954600754610cb791906124ac565b9050610cc281611834565b50565b600033610cd38582856119ef565b610cde858585611a69565b9150505b9392505050565b600033610bed818585610cfc8383611670565b610d0691906124f8565b611733565b610d13611c56565b600c5481151560ff909116151503610d415760405162a7e72d60e41b81528115156004820152602401610c52565b600c805482151560ff19821681179092556040805160ff9092168015158352602083019390935233908201524260608201527ff99f9d4d81f67d0980beea494b4404ba3b8af1a0a2d493230f1a883efa027f2f90608001610c99565b610da56117f8565b600c54610100900460ff1615610dce5760405163882d29d360e01b815260040160405180910390fd5b60d2811115610dfa5760405163211a907760e11b81526004810182905260d26024820152604401610c52565b60048054908290556040517f90874b2697cc8e5401df6338d4549d0467cdd4f7e96a2cd367659b2eff89a07990610c9990839085903390429061253e565b610e40611c56565b610cc28161dead611c88565b610e546117f8565b610e5e6000611e21565b565b610e686117f8565b80600b5403610e8d5760405163657e16cf60e01b815260048101829052602401610c52565b600b8054908290556040517f9a9f4704ac409fe039e92a996e415370980275aaff2992936ed5b432886c55c590610c9990839085903390429061253e565b610ed36117f8565b600c54610100900460ff1615610efc5760405163882d29d360e01b815260040160405180910390fd5b60d2811115610f285760405163211a907760e11b81526004810182905260d26024820152604401610c52565b60068054908290556040517f93f0ae7c5c2922bf736e77b4999848c80112f12ae2c18ab4d80c1f55557a0fff90610c9990839085903390429061253e565b610f6e6117f8565b600c546001600160a01b038083166401000000009092041603610faf5760405163a936636960e01b81526001600160a01b0382166004820152602401610c52565b600c80546001600160a01b03838116640100000000818102640100000000600160c01b0319851617909455604080519490930490911680845260208401919091523391830191909152426060830152907fb0451709ef39d7c8ccf1af9d25ae2f9fb27fa0ec1bc6e7fe7526a78169301ab290608001610c99565b611031611c56565b801515600c60029054906101000a900460ff161515036110675760405162a7e72d60e41b81528115156004820152602401610c52565b600c80548215156201000081810262ff0000198416179093556040805160ff94909304939093168015158352602083019190915233928201929092524260608201527fa9eb6c000d17475b17651469533695f7b673c93327fdbadf4341ebeb2607a04490608001610c99565b600e6020527fe710864318d4a32f37d6ce54cb3fadbef648dd12d8dbdf53973564d56b7f881c5461dead60009081527ff77e91909e61d18f67b875b2bfcae1f683a8d555e55382e3a6b082e2c59ea57a5460035491929161113491906124ac565b61113e91906124ac565b905090565b61114b611c56565b600c5460ff161561117a57600c54604051630eff900b60e21b815260ff90911615156004820152602401610c52565b600c5462010000900460ff16156111b457600c5460405163610a8e6760e01b81526201000090910460ff1615156004820152602401610c52565b600c805462ff00ff191662010001179055565b600033816111d58286611670565b9050838110156112355760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c52565b6112428286868403611733565b506001949350505050565b60003361125b818585611a69565b949350505050565b61126b6117f8565b600c54610100900460ff16156112945760405163882d29d360e01b815260040160405180910390fd5b600c805461ff001916610100179055565b6009546007546112b591906124ac565b81111561133a5760405162461bcd60e51b815260206004820152604760248201527f52656465656d205061727469616c20446576656c6f706d656e74204665653a2060448201527f496e73756666696369656e7420646576656c6f706d656e742066656520636f6c6064820152663632b1ba32b21760c91b608482015260a401610c52565b610cc281611834565b61134b6117f8565b6001600160a01b038116158061136b57506001600160a01b03811661dead145b1561139457604051635077b8ed60e11b81526001600160a01b0382166004820152602401610c52565b610cc281336001611e71565b6113a86117f8565b6002546001600160a01b038083169116036113e15760405163a936636960e01b81526001600160a01b0382166004820152602401610c52565b600280546001600160a01b031981166001600160a01b03848116918217909355600081815260106020908152604091829020805460ff19166001179055815194909316808552928401919091523390830152426060830152907fe1cb783288eddc7b22c25642a832d886a558be0dd900747310a34156b9fdcbbb9060800160405180910390a1600260009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114de9190612521565b6001600160a01b031663c9c6539630600260009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611540573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115649190612521565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156115b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d59190612521565b600d80546001600160a01b0319166001600160a01b03929092169190911790555050565b611601611c56565b6001600160a01b03821660009081526010602052604090205481151560ff9091161515036116455760405162a7e72d60e41b81528115156004820152602401610c52565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6001600160a01b039182166000908152600f6020908152604080832093909416825291909152205490565b6116a36117f8565b6001600160a01b03811615806116c357506001600160a01b03811661dead145b156116ec57604051635077b8ed60e11b81526001600160a01b0382166004820152602401610c52565b610cc281336000611e71565b6117006117f8565b6001600160a01b03811661172a5760405163b20f76e360e01b815260006004820152602401610c52565b610cc281611e21565b6001600160a01b03831661176557604051634726455360e11b81526001600160a01b0384166004820152602401610c52565b6001600160a01b03821661179757604051634726455360e11b81526001600160a01b0383166004820152602401610c52565b6001600160a01b038381166000818152600f602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b3361180b6000546001600160a01b031690565b6001600160a01b031614610e5e576040516332b2baa360e01b8152336004820152602401610c52565b600c805463ff000000191663010000001790556009805482919060009061185c9084906124f8565b9250508190555080600a600082825461187591906124f8565b909155505060408051600280825260608201835260009260208301908036833701905050905030816000815181106118af576118af61250b565b6001600160a01b03928316602091820292909201810191909152600254604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611908573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192c9190612521565b8160018151811061193f5761193f61250b565b6001600160a01b0392831660209182029290920101526002546119659130911684611733565b600254600c5460405163791ac94760e01b81526001600160a01b039283169263791ac947926119ac92879260009288926401000000009091049091169042906004016125a6565b600060405180830381600087803b1580156119c657600080fd5b505af11580156119da573d6000803e3d6000fd5b5050600c805463ff0000001916905550505050565b60006119fb8484611670565b90506000198114611a635781811015611a565760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610c52565b611a638484848403611733565b50505050565b60006001600160a01b038416611a9d57604051634726455360e11b81526001600160a01b0385166004820152602401610c52565b6001600160a01b038316611acf57604051634726455360e11b81526001600160a01b0384166004820152602401610c52565b600c546301000000900460ff1680611aff57506001600160a01b03841660009081526010602052604090205460ff165b15611b1657611b0f848484611f3b565b9050610ce2565b600d546001600160a01b03858116911614801590611b3c5750600c5462010000900460ff165b8015611b595750600b54600a54600854611b5691906124ac565b10155b15611b6957611b69600b546109a6565b600c54829060ff168015611b9657506001600160a01b03851660009081526010602052604090205460ff16155b15611ba957611ba6858585611fd4565b90505b6001600160a01b0385166000908152600e6020526040902054811115611be15760405162461bcd60e51b8152600401610c52906125e2565b6001600160a01b038086166000818152600e6020526040808220805486900390559287168082529083902080548501905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611c439085815260200190565b60405180910390a3506001949350505050565b3360009081526001602052604090205460ff16610e5e576040516332b2baa360e01b8152336004820152602401610c52565b600c805463ff0000001916630100000017905561deac193301611cc257604051634726455360e11b815261dead6004820152602401610c52565b6040805160028082526060820183526000926020830190803683375050600254604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015611d2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d509190612521565b81600081518110611d6357611d6361250b565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110611d9757611d9761250b565b6001600160a01b03928316602091820292909201015260025460405163b6f9de9560e01b815291169063b6f9de95908590611ddd90600090869088904290600401612628565b6000604051808303818588803b158015611df657600080fd5b505af1158015611e0a573d6000803e3d6000fd5b5050600c805463ff00000019169055505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03831660009081526001602052604090205481151560ff909116151503611ec557604051635ce75a3b60e01b81526001600160a01b03841660048201528115156024820152604401610c52565b6001600160a01b03838116600081815260016020908152604091829020805460ff19168615159081179091558251938452938616908301528101919091524260608201527fff1d0a27274ca0cc8403b0e8f4a70b968164366f4856d18f7569eba542e9aae49060800160405180910390a1505050565b6001600160a01b0383166000908152600e602052604081205482811015611f745760405162461bcd60e51b8152600401610c52906125e2565b6001600160a01b038086166000818152600e602052604080822087860390559287168082529083902080548701905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611c439087815260200190565b600c805463ff00000019166301000000179055600d546000906001600160a01b03858116911614801561200957506000600454115b1561201f5761201884836120ad565b9050612099565b600d546001600160a01b03848116911614801561203e57506000600554115b1561204d576120188483612112565b600d546001600160a01b038581169116148015906120795750600d546001600160a01b03848116911614155b801561208757506000600654115b15612096576120188483612162565b50805b600c805463ff000000191690559392505050565b600c805463ff000000191663010000001790556004546000908190612710906120d690856124bf565b6120e091906124d6565b905060006120ee82856124ac565b90506120fd85836004546121b2565b600c805463ff00000019169055949350505050565b600c805463ff0000001916630100000017905560055460009081906127109061213b90856124bf565b61214591906124d6565b9050600061215382856124ac565b90506120fd8583600554612251565b600c805463ff0000001916630100000017905560065460009081906127109061218b90856124bf565b61219591906124d6565b905060006121a382856124ac565b90506120fd8583600654612276565b600c805463ff0000001916630100000017905560045460009082906121d790856124bf565b6121e191906124d6565b90506121ed818461229b565b6001600160a01b0384166000908152600e6020526040812080548592906122159084906124ac565b9091555050306000908152600e6020526040812080548592906122399084906124f8565b9091555050600c805463ff0000001916905550505050565b600c805463ff0000001916630100000017905560055460009082906121d790856124bf565b600c805463ff0000001916630100000017905560065460009082906121d790856124bf565b600c805463ff00000019166301000000179055600780548391906000906122c39084906124f8565b9250508190555080600860008282546122dc91906124f8565b9091555050600c805463ff000000191690555050565b60006020828403121561230457600080fd5b5035919050565b600060208083528351808285015260005b818110156123385785810183015185820160400152820161231c565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610cc257600080fd5b6000806040838503121561238157600080fd5b823561238c81612359565b946020939093013593505050565b6000806000606084860312156123af57600080fd5b83356123ba81612359565b925060208401356123ca81612359565b929592945050506040919091013590565b803580151581146123eb57600080fd5b919050565b60006020828403121561240257600080fd5b610ce2826123db565b60006020828403121561241d57600080fd5b8135610ce281612359565b6000806040838503121561243b57600080fd5b823561244681612359565b9150612454602084016123db565b90509250929050565b6000806040838503121561247057600080fd5b823561247b81612359565b9150602083013561248b81612359565b809150509250929050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610bf357610bf3612496565b8082028115828204841417610bf357610bf3612496565b6000826124f357634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610bf357610bf3612496565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561253357600080fd5b8151610ce281612359565b93845260208401929092526001600160a01b03166040830152606082015260800190565b600081518084526020808501945080840160005b8381101561259b5781516001600160a01b031687529582019590820190600101612576565b509495945050505050565b85815284602082015260a0604082015260006125c560a0830186612562565b6001600160a01b0394909416606083015250608001529392505050565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b8481526080602082015260006126416080830186612562565b6001600160a01b0394909416604083015250606001529291505056fea26469706673582212207beab3a208aad219bd6b2f122ec70102feb2c03d00a2688af1ae443a54750e8564736f6c63430008120033

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

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000a828314168403efd76e65209938ceff1a431b0f5

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

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


Deployed Bytecode Sourcemap

7487:17386:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12342:966;;;;;;;;;;-1:-1:-1;12342:966:0;;;;;:::i;:::-;;:::i;:::-;;8447:46;;;;;;;;;;;;8486:6;8447:46;;;;;-1:-1:-1;;;;;363:32:1;;;345:51;;333:2;318:18;8447:46:0;;;;;;;;19678:101;;;;;;;;;;-1:-1:-1;19767:4:0;;;;;;;;;;;;-1:-1:-1;;;19767:4:0;;;;19678:101;;;;;;;:::i;20645:205::-;;;;;;;;;;-1:-1:-1;20645:205:0;;;;;:::i;:::-;;:::i;:::-;;;1581:14:1;;1574:22;1556:41;;1544:2;1529:18;20645:205:0;1416:187:1;20021:108:0;;;;;;;;;;-1:-1:-1;20109:12:0;;20021:108;;;1754:25:1;;;1742:2;1727:18;20021:108:0;1608:177:1;7878:39:0;;;;;;;;;;;;;;;;14799:419;;;;;;;;;;-1:-1:-1;14799:419:0;;;;;:::i;:::-;;:::i;11249:194::-;;;;;;;;;;;;;:::i;20862:246::-;;;;;;;;;;-1:-1:-1;20862:246:0;;;;;:::i;:::-;;:::i;19908:101::-;;;;;;;;;;-1:-1:-1;19908:101:0;;7725:2;2393:36:1;;2381:2;2366:18;19908:101:0;2251:184:1;8320:33:0;;;;;;;;;;-1:-1:-1;8320:33:0;;;;;;;;;;;21120:247;;;;;;;;;;-1:-1:-1;21120:247:0;;;;;:::i;:::-;;:::i;15669:308::-;;;;;;;;;;-1:-1:-1;15669:308:0;;;;;:::i;:::-;;:::i;14376:415::-;;;;;;;;;;-1:-1:-1;14376:415:0;;;;;:::i;:::-;;:::i;8399:41::-;;;;;;;;;;;;8438:1;8399:41;;8502:79;;;;;;;;;;-1:-1:-1;8502:79:0;;;;;;;-1:-1:-1;;;;;8502:79:0;;;8154:34;;;;;;;;;;;;;;;;7972:42;;;;;;;;;;;;;;;;19131:106;;;;;;;;;;-1:-1:-1;19131:106:0;;;;;:::i;:::-;;:::i;20141:127::-;;;;;;;;;;-1:-1:-1;20141:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;20242:18:0;20215:7;20242:18;;;:9;:18;;;;;;;20141:127;4363:103;;;;;;;;;;;;;:::i;8112:35::-;;;;;;;;;;;;;;;;14064:304;;;;;;;;;;-1:-1:-1;14064:304:0;;;;;:::i;:::-;;:::i;15226:435::-;;;;;;;;;;-1:-1:-1;15226:435:0;;;;;:::i;:::-;;:::i;16311:450::-;;;;;;;;;;-1:-1:-1;16311:450:0;;;;;:::i;:::-;;:::i;3932:87::-;;;;;;;;;;-1:-1:-1;3978:7:0;4005:6;-1:-1:-1;;;;;4005:6:0;3932:87;;15985:318;;;;;;;;;;-1:-1:-1;15985:318:0;;;;;:::i;:::-;;:::i;13428:136::-;;;;;;;;;;;;;:::i;19791:105::-;;;;;;;;;;-1:-1:-1;19882:6:0;;;;;;;;;;;;-1:-1:-1;;;19882:6:0;;;;19791:105;;7924:41;;;;;;;;;;;;;;;;10820:267;;;;;;;;;;;;;:::i;21379:445::-;;;;;;;;;;-1:-1:-1;21379:445:0;;;;;:::i;:::-;;:::i;8594:19::-;;;;;;;;;;-1:-1:-1;8594:19:0;;;;-1:-1:-1;;;;;8594:19:0;;;20280:184;;;;;;;;;;-1:-1:-1;20280:184:0;;;;;:::i;:::-;;:::i;7777:47::-;;;;;;;;;;;;7818:6;7777:47;;11095:126;;;;;;;;;;;;;:::i;7833:38::-;;;;;;;;;;;;;;;;11451:297;;;;;;;;;;-1:-1:-1;11451:297:0;;;;;:::i;:::-;;:::i;4695:255::-;;;;;;;;;;-1:-1:-1;4695:255:0;;;;;:::i;:::-;;:::i;8282:31::-;;;;;;;;;;-1:-1:-1;8282:31:0;;;;;;;;;;;8021:36;;;;;;;;;;;;;;;;13592:464;;;;;;;;;;-1:-1:-1;13592:464:0;;;;;:::i;:::-;;:::i;3220:45::-;;;;;;;;;;-1:-1:-1;3220:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16769:216;;;;;;;;;;-1:-1:-1;16769:216:0;;;;;:::i;:::-;;:::i;8360:26::-;;;;;;;;;;-1:-1:-1;8360:26:0;;;;;;;;;;;13335:85;;;;;;;;;;-1:-1:-1;8231:4:0;13335:85;;20476:157;;;;;;;;;;-1:-1:-1;20476:157:0;;;;;:::i;:::-;;:::i;8064:41::-;;;;;;;;;;;;;;;;8244:31;;;;;;;;;;-1:-1:-1;8244:31:0;;;;;;;;4958:258;;;;;;;;;;-1:-1:-1;4958:258:0;;;;;:::i;:::-;;:::i;8770:49::-;;;;;;;;;;-1:-1:-1;8770:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;4474:213;;;;;;;;;;-1:-1:-1;4474:213:0;;;;;:::i;:::-;;:::i;7558:21::-;;;;;;;;;;-1:-1:-1;7558:21:0;;;;-1:-1:-1;;;;;7558:21:0;;;12342:966;8878:6;:13;;-1:-1:-1;;8878:13:0;;;;;12471:22:::1;::::0;12445:23:::1;::::0;8878:13;;12445:48:::1;::::0;::::1;:::i;:::-;12415:78;;12504:21;12548:16;;12528:17;;:36;;;;:::i;:::-;12504:60:::0;-1:-1:-1;12577:34:0::1;12504:60:::0;12614:36:::1;12631:19:::0;12614:14;:36:::1;:::i;:::-;:52;;;;:::i;:::-;12577:89;;12713:26;12687:22;;:52;;;;;;;:::i;:::-;;;;;;;;12770:14;12750:16;;:34;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;12821:16:0::1;::::0;;12835:1:::1;12821:16:::0;;;;;::::1;::::0;;12797:21:::1;::::0;12821:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;12821:16:0::1;12797:40;;12866:4;12848;12853:1;12848:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;12848:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;12892:6:::1;::::0;:13:::1;::::0;;-1:-1:-1;;;12892:13:0;;;;:6;;;::::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;12848:7;;12892:13;;;;;:6;:13:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12882:4;12887:1;12882:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;12882:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;12950:6:::1;::::0;12918:56:::1;::::0;12935:4:::1;::::0;12950:6:::1;12959:14:::0;12918:8:::1;:56::i;:::-;12996:83;13007:26;13035:14;13051:10;13063:15;12996:83;;;;;;;;;:::i;:::-;;;;;;;;13092:6;::::0;13240:19:::1;::::0;13092:208:::1;::::0;-1:-1:-1;;;13092:208:0;;-1:-1:-1;;;;;13092:6:0;;::::1;::::0;:57:::1;::::0;:208:::1;::::0;13164:26;;13092:6:::1;::::0;13221:4;;13240:19;;;::::1;::::0;;::::1;::::0;13274:15:::1;::::0;13240:19:::1;13092:208;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;8914:6:0;:14;;-1:-1:-1;;8914:14:0;;;-1:-1:-1;;;;;;;12342:966:0:o;20645:205::-;20728:4;20764:10;20785:35;20764:10;20804:7;20813:6;20785:8;:35::i;:::-;20838:4;20831:11;;;20645:205;;;;;:::o;14799:419::-;3325:13;:11;:13::i;:::-;14883:11:::1;::::0;::::1;::::0;::::1;;;14879:40;;;14905:11;;-1:-1:-1::0;;;14905:11:0::1;;;;;;;;;;;14879:40;14953:3;14933:17;:23;14929:80;;;14967:39;::::0;-1:-1:-1;;;14967:39:0;;::::1;::::0;::::1;6947:25:1::0;;;15002:3:0::1;6988:18:1::0;;;6981:34;6920:18;;14967:39:0::1;;;;;;;;14929:80;15047:18;::::0;;15076:38;;;;15130:80:::1;::::0;::::1;::::0;::::1;::::0;15047:18;;15097:17;;15182:10:::1;::::0;15194:15:::1;::::0;15130:80:::1;:::i;:::-;;;;;;;;14868:350;14799:419:::0;:::o;11249:194::-;11304:22;11355;;11329:23;;:48;;;;:::i;:::-;11304:73;;11398:37;11420:14;11398:21;:37::i;:::-;11293:150;11249:194::o;20862:246::-;20961:4;20996:10;21017:38;21033:4;20996:10;21048:6;21017:15;:38::i;:::-;21073:27;21083:4;21089:2;21093:6;21073:9;:27::i;:::-;21066:34;;;20862:246;;;;;;:::o;21120:247::-;21210:4;21246:10;21267:70;21246:10;21286:7;21326:10;21295:28;21246:10;21286:7;21295:9;:28::i;:::-;:41;;;;:::i;:::-;21267:8;:70::i;15669:308::-;3399:18;:16;:18::i;:::-;15745:11:::1;::::0;:24;::::1;;:11;::::0;;::::1;:24;;::::0;15741:74:::1;;15780:32;::::0;-1:-1:-1;;;15780:32:0;;1581:14:1;;1574:22;15780:32:0::1;::::0;::::1;1556:41:1::0;1529:18;;15780:32:0::1;1416:187:1::0;15741:74:0::1;15842:11;::::0;;15864:23;::::1;;-1:-1:-1::0;;15864:23:0;::::1;::::0;::::1;::::0;;;15903:66:::1;::::0;;15842:11:::1;::::0;;::::1;7270:14:1::0;;7263:22;7245:41;;7317:2;7302:18;;7295:50;;;;15941:10:0::1;7361:18:1::0;;;7354:60;15953:15:0::1;7445:2:1::0;7430:18;;7423:34;15903:66:0::1;::::0;7232:3:1;7217:19;15903:66:0::1;7026:437:1::0;14376:415:0;3325:13;:11;:13::i;:::-;14459:11:::1;::::0;::::1;::::0;::::1;;;14455:40;;;14481:11;;-1:-1:-1::0;;;14481:11:0::1;;;;;;;;;;;14455:40;14529:3;14509:17;:23;14505:80;;;14543:39;::::0;-1:-1:-1;;;14543:39:0;;::::1;::::0;::::1;6947:25:1::0;;;14578:3:0::1;6988:18:1::0;;;6981:34;6920:18;;14543:39:0::1;6763:258:1::0;14505:80:0::1;14623:17;::::0;;14651:37;;;;14704:79:::1;::::0;::::1;::::0;::::1;::::0;14623:17;;14671;;14755:10:::1;::::0;14767:15:::1;::::0;14704:79:::1;:::i;19131:106::-:0;3399:18;:16;:18::i;:::-;19206:23:::1;19216:6;8486;19206:9;:23::i;4363:103::-:0;3325:13;:11;:13::i;:::-;4428:30:::1;4455:1;4428:18;:30::i;:::-;4363:103::o:0;14064:304::-;3325:13;:11;:13::i;:::-;14152:10:::1;14141:7;;:21:::0;14137:72:::1;;14173:33;::::0;-1:-1:-1;;;14173:33:0;;::::1;::::0;::::1;1754:25:1::0;;;1727:18;;14173:33:0::1;1608:177:1::0;14137:72:0::1;14240:7;::::0;;14258:20;;;;14294:66:::1;::::0;::::1;::::0;::::1;::::0;14240:7;;14268:10;;14332::::1;::::0;14344:15:::1;::::0;14294:66:::1;:::i;15226:435::-:0;3325:13;:11;:13::i;:::-;15314:11:::1;::::0;::::1;::::0;::::1;;;15310:40;;;15336:11;;-1:-1:-1::0;;;15336:11:0::1;;;;;;;;;;;15310:40;15384:3;15364:17;:23;15360:80;;;15398:39;::::0;-1:-1:-1;;;15398:39:0;;::::1;::::0;::::1;6947:25:1::0;;;15433:3:0::1;6988:18:1::0;;;6981:34;6920:18;;15398:39:0::1;6763:258:1::0;15360:80:0::1;15478:22;::::0;;15511:42;;;;15569:84:::1;::::0;::::1;::::0;::::1;::::0;15478:22;;15536:17;;15625:10:::1;::::0;15637:15:::1;::::0;15569:84:::1;:::i;16311:450::-:0;3325:13;:11;:13::i;:::-;16412:19:::1;::::0;-1:-1:-1;;;;;16412:45:0;;::::1;:19:::0;;;::::1;;:45:::0;16408:110:::1;;16468:47;::::0;-1:-1:-1;;;16468:47:0;;-1:-1:-1;;;;;363:32:1;;16468:47:0::1;::::0;::::1;345:51:1::0;318:18;;16468:47:0::1;199:203:1::0;16408:110:0::1;16561:19;::::0;;-1:-1:-1;;;;;16591:44:0;;::::1;16561:19:::0;16591:44;;::::1;-1:-1:-1::0;;;;;;16591:44:0;::::1;;::::0;;;16651:102:::1;::::0;;16561:19;;;::::1;::::0;;::::1;7737:34:1::0;;;7802:2;7787:18;;7780:43;;;;16725:10:0::1;7839:18:1::0;;;7832:43;;;;16737:15:0::1;7906:2:1::0;7891:18;;7884:34;16561:19:0;16651:102:::1;::::0;7686:3:1;7671:19;16651:102:0::1;7468:456:1::0;15985:318:0;3399:18;:16;:18::i;:::-;16080:9:::1;16063:26;;:13;;;;;;;;;;;:26;;::::0;16059:76:::1;;16100:32;::::0;-1:-1:-1;;;16100:32:0;;1581:14:1;;1574:22;16100:32:0::1;::::0;::::1;1556:41:1::0;1529:18;;16100:32:0::1;1416:187:1::0;16059:76:0::1;16162:13;::::0;;16186:25;::::1;;16162:13:::0;16186:25;;::::1;-1:-1:-1::0;;16186:25:0;::::1;;::::0;;;16227:68:::1;::::0;;16162:13:::1;::::0;;;::::1;::::0;;;::::1;7270:14:1::0;;7263:22;7245:41;;7317:2;7302:18;;7295:50;;;;16267:10:0::1;7361:18:1::0;;;7354:60;;;;16279:15:0::1;7445:2:1::0;7430:18;;7423:34;16227:68:0::1;::::0;7232:3:1;7217:19;16227:68:0::1;7026:437:1::0;13428:136:0;20242:9;:18;;;;8486:6;13480:7;20242:18;;;;;20109:12;;13480:7;;20242:18;13507:31;;20242:18;13507:31;:::i;:::-;:49;;;;:::i;:::-;13500:56;;13428:136;:::o;10820:267::-;3399:18;:16;:18::i;:::-;10882:11:::1;::::0;::::1;;10878:63;;;10926:11;::::0;10904:34:::1;::::0;-1:-1:-1;;;10904:34:0;;10926:11:::1;::::0;;::::1;1581:14:1::0;1574:22;10904:34:0::1;::::0;::::1;1556:41:1::0;1529:18;;10904:34:0::1;1416:187:1::0;10878:63:0::1;10955:13;::::0;;;::::1;;;10951:69;;;11003:13;::::0;10979:38:::1;::::0;-1:-1:-1;;;10979:38:0;;11003:13;;;::::1;;;1581:14:1::0;1574:22;10979:38:0::1;::::0;::::1;1556:41:1::0;1529:18;;10979:38:0::1;1416:187:1::0;10951:69:0::1;11030:11;:18:::0;;-1:-1:-1;;11059:20:0;;;;;10820:267::o;21379:445::-;21474:4;21510:10;21474:4;21558:28;21510:10;21578:7;21558:9;:28::i;:::-;21531:55;;21625:15;21605:16;:35;;21597:85;;;;-1:-1:-1;;;21597:85:0;;8131:2:1;21597:85:0;;;8113:21:1;8170:2;8150:18;;;8143:30;8209:34;8189:18;;;8182:62;-1:-1:-1;;;8260:18:1;;;8253:35;8305:19;;21597:85:0;7929:401:1;21597:85:0;21718:63;21727:8;21737:7;21765:15;21746:16;:34;21718:8;:63::i;:::-;-1:-1:-1;21812:4:0;;21379:445;-1:-1:-1;;;;21379:445:0:o;20280:184::-;20361:4;20397:10;20425:31;20397:10;20445:2;20449:6;20425:9;:31::i;:::-;20418:38;20280:184;-1:-1:-1;;;;20280:184:0:o;11095:126::-;3325:13;:11;:13::i;:::-;11149:11:::1;::::0;::::1;::::0;::::1;;;11145:40;;;11171:11;;-1:-1:-1::0;;;11171:11:0::1;;;;;;;;;;;11145:40;11195:11;:18:::0;;-1:-1:-1;;11195:18:0::1;;;::::0;;11095:126::o;11451:297::-;11584:22;;11558:23;;:48;;;;:::i;:::-;11540:14;:66;;11532:150;;;;-1:-1:-1;;;11532:150:0;;8537:2:1;11532:150:0;;;8519:21:1;8576:2;8556:18;;;8549:30;8615:34;8595:18;;;8588:62;8686:34;8666:18;;;8659:62;-1:-1:-1;;;8737:19:1;;;8730:38;8785:19;;11532:150:0;8335:475:1;11532:150:0;11703:37;11725:14;11703:21;:37::i;4695:255::-;3325:13;:11;:13::i;:::-;-1:-1:-1;;;;;4771:21:0;::::1;::::0;;:51:::1;;-1:-1:-1::0;;;;;;4796:26:0;::::1;4815:6;4796:26;4771:51;4767:124;;;4846:33;::::0;-1:-1:-1;;;4846:33:0;;-1:-1:-1;;;;;363:32:1;;4846:33:0::1;::::0;::::1;345:51:1::0;318:18;;4846:33:0::1;199:203:1::0;4767:124:0::1;4901:41;4916:7;4925:10;4937:4;4901:14;:41::i;13592:464::-:0;3325:13;:11;:13::i;:::-;13675:6:::1;::::0;-1:-1:-1;;;;;13667:28:0;;::::1;13675:6:::0;::::1;13667:28:::0;13663:80:::1;;13706:34;::::0;-1:-1:-1;;;13706:34:0;;-1:-1:-1;;;;;363:32:1;;13706:34:0::1;::::0;::::1;345:51:1::0;318:18;;13706:34:0::1;199:203:1::0;13663:80:0::1;13781:6;::::0;;-1:-1:-1;;;;;;13799:27:0;::::1;-1:-1:-1::0;;;;;13799:27:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;13847:28:0;;;:17:::1;:28;::::0;;;;;;;;:35;;-1:-1:-1;;13847:35:0::1;-1:-1:-1::0;13847:35:0::1;::::0;;13900:63;;13781:6;;;::::1;7737:34:1::0;;;7787:18;;;7780:43;;;;13935:10:0::1;7839:18:1::0;;;7832:43;13947:15:0::1;7906:2:1::0;7891:18;;7884:34;13781:6:0;13900:63:::1;::::0;7686:3:1;7671:19;13900:63:0::1;;;;;;;13990:6;;;;;;;;;-1:-1:-1::0;;;;;13990:6:0::1;-1:-1:-1::0;;;;;13990:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13981:37:0::1;;14027:4;14034:6;;;;;;;;;-1:-1:-1::0;;;;;14034:6:0::1;-1:-1:-1::0;;;;;14034:11:0::1;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13981:67;::::0;-1:-1:-1;;;;;;13981:67:0::1;::::0;;;;;;-1:-1:-1;;;;;9045:15:1;;;13981:67:0::1;::::0;::::1;9027:34:1::0;9097:15;;9077:18;;;9070:43;8962:18;;13981:67:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13974:4;:74:::0;;-1:-1:-1;;;;;;13974:74:0::1;-1:-1:-1::0;;;;;13974:74:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;13592:464:0:o;16769:216::-;3399:18;:16;:18::i;:::-;-1:-1:-1;;;;;16859:23:0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;:33;::::1;;:23;::::0;;::::1;:33;;::::0;16855:80:::1;;16903:29;::::0;-1:-1:-1;;;16903:29:0;;1581:14:1;;1574:22;16903:29:0::1;::::0;::::1;1556:41:1::0;1529:18;;16903:29:0::1;1416:187:1::0;16855:80:0::1;-1:-1:-1::0;;;;;16945:23:0;;;::::1;;::::0;;;:17:::1;:23;::::0;;;;:32;;-1:-1:-1;;16945:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16769:216::o;20476:157::-;-1:-1:-1;;;;;20595:21:0;;;20568:7;20595:21;;;:11;:21;;;;;;;;:30;;;;;;;;;;;;;20476:157::o;4958:258::-;3325:13;:11;:13::i;:::-;-1:-1:-1;;;;;5036:21:0;::::1;::::0;;:51:::1;;-1:-1:-1::0;;;;;;5061:26:0;::::1;5080:6;5061:26;5036:51;5032:124;;;5111:33;::::0;-1:-1:-1;;;5111:33:0;;-1:-1:-1;;;;;363:32:1;;5111:33:0::1;::::0;::::1;345:51:1::0;318:18;;5111:33:0::1;199:203:1::0;5032:124:0::1;5166:42;5181:7;5190:10;5202:5;5166:14;:42::i;4474:213::-:0;3325:13;:11;:13::i;:::-;-1:-1:-1;;;;;4559:22:0;::::1;4555:86;;4605:24;::::0;-1:-1:-1;;;4605:24:0;;4626:1:::1;4605:24;::::0;::::1;345:51:1::0;318:18;;4605:24:0::1;199:203:1::0;4555:86:0::1;4651:28;4670:8;4651:18;:28::i;22146:331::-:0;-1:-1:-1;;;;;22247:16:0;;22243:58;;22274:24;;-1:-1:-1;;;22274:24:0;;-1:-1:-1;;;;;363:32:1;;22274:24:0;;;345:51:1;318:18;;22274:24:0;199:203:1;22243:58:0;-1:-1:-1;;;;;22315:15:0;;22311:56;;22341:23;;-1:-1:-1;;;22341:23:0;;-1:-1:-1;;;;;363:32:1;;22341:23:0;;;345:51:1;318:18;;22341:23:0;199:203:1;22311:56:0;-1:-1:-1;;;;;22379:21:0;;;;;;;:11;:21;;;;;;;;:30;;;;;;;;;;;;;:39;;;22434:35;;1754:25:1;;;22434:35:0;;1727:18:1;22434:35:0;;;;;;;22146:331;;;:::o;4027:155::-;4098:10;4087:7;3978;4005:6;-1:-1:-1;;;;;4005:6:0;;3932:87;4087:7;-1:-1:-1;;;;;4087:21:0;;4083:92;;4132:31;;-1:-1:-1;;;4132:31:0;;4152:10;4132:31;;;345:51:1;318:18;;4132:31:0;199:203:1;11756:578:0;8878:6;:13;;-1:-1:-1;;8878:13:0;;;;;11841:22:::1;:40:::0;;11867:14;;11841:22;8878:13;;11841:40:::1;::::0;11867:14;;11841:40:::1;:::i;:::-;;;;;;;;11912:14;11892:16;;:34;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;11964:16:0::1;::::0;;11978:1:::1;11964:16:::0;;;;;::::1;::::0;;11940:21:::1;::::0;11964:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;11964:16:0::1;11940:40;;12009:4;11991;11996:1;11991:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11991:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;12035:6:::1;::::0;:13:::1;::::0;;-1:-1:-1;;;12035:13:0;;;;:6;;;::::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;11991:7;;12035:13;;;;;:6;:13:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12025:4;12030:1;12025:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;12025:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;12093:6:::1;::::0;12061:56:::1;::::0;12078:4:::1;::::0;12093:6:::1;12102:14:::0;12061:8:::1;:56::i;:::-;12130:6;::::0;12266:19:::1;::::0;12130:196:::1;::::0;-1:-1:-1;;;12130:196:0;;-1:-1:-1;;;;;12130:6:0;;::::1;::::0;:57:::1;::::0;:196:::1;::::0;12202:14;;12130:6:::1;::::0;12247:4;;12266:19;;;::::1;::::0;;::::1;::::0;12300:15:::1;::::0;12266:19:::1;12130:196;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;8914:6:0;:14;;-1:-1:-1;;8914:14:0;;;-1:-1:-1;;;;11756:578:0:o;22489:428::-;22593:24;22620:28;22630:8;22640:7;22620:9;:28::i;:::-;22593:55;;-1:-1:-1;;22663:16:0;:37;22659:251;;22745:6;22725:16;:26;;22717:68;;;;-1:-1:-1;;;22717:68:0;;9326:2:1;22717:68:0;;;9308:21:1;9365:2;9345:18;;;9338:30;9404:31;9384:18;;;9377:59;9453:18;;22717:68:0;9124:353:1;22717:68:0;22829:54;22838:8;22848:7;22876:6;22857:16;:25;22829:8;:54::i;:::-;22582:335;22489:428;;;:::o;23404:947::-;23491:4;-1:-1:-1;;;;;23512:12:0;;23508:50;;23535:20;;-1:-1:-1;;;23535:20:0;;-1:-1:-1;;;;;363:32:1;;23535:20:0;;;345:51:1;318:18;;23535:20:0;199:203:1;23508:50:0;-1:-1:-1;;;;;23572:10:0;;23568:46;;23593:18;;-1:-1:-1;;;23593:18:0;;-1:-1:-1;;;;;363:32:1;;23593:18:0;;;345:51:1;318:18;;23593::0;199:203:1;23568:46:0;23630:6;;;;;;;;:33;;-1:-1:-1;;;;;;23640:23:0;;;;;;:17;:23;;;;;;;;23630:33;23626:105;;;23687:32;23702:4;23708:2;23712:6;23687:14;:32::i;:::-;23680:39;;;;23626:105;23755:4;;-1:-1:-1;;;;;23747:12:0;;;23755:4;;23747:12;;;;:29;;-1:-1:-1;23763:13:0;;;;;;;23747:29;:80;;;;;23820:7;;23800:16;;23780:17;;:36;;;;:::i;:::-;:47;;23747:80;23743:132;;;23844:19;23855:7;;23844:10;:19::i;:::-;23930:11;;23907:6;;23930:11;;:39;;;;-1:-1:-1;;;;;;23946:23:0;;;;;;:17;:23;;;;;;;;23945:24;23930:39;23926:122;;;23998:38;24019:4;24025:2;24029:6;23998:20;:38::i;:::-;23986:50;;23926:122;-1:-1:-1;;;;;24068:15:0;;;;;;:9;:15;;;;;;:28;-1:-1:-1;24068:28:0;24060:79;;;;-1:-1:-1;;;24060:79:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24193:15:0;;;;;;;:9;:15;;;;;;;;:27;;;24175:45;;24235:13;;;;;;;;;;:26;;;;;;24290:29;;;;;;24211:9;1754:25:1;;1742:2;1727:18;;1608:177;24290:29:0;;;;;;;;-1:-1:-1;24339:4:0;;23404:947;-1:-1:-1;;;;23404:947:0:o;4190:165::-;4270:10;4256:25;;;;:13;:25;;;;;;;;4251:97;;4305:31;;-1:-1:-1;;;4305:31:0;;4325:10;4305:31;;;345:51:1;318:18;;4305:31:0;199:203:1;19245:397:0;8878:6;:13;;-1:-1:-1;;8878:13:0;;;;;-1:-1:-1;;19325:10:0::1;:18:::0;19321:56:::1;;19354:20;::::0;-1:-1:-1;;;19354:20:0;;8486:6:::1;19354:20;::::0;::::1;345:51:1::0;318:18;;19354:20:0::1;199:203:1::0;19321:56:0::1;19411:16;::::0;;19425:1:::1;19411:16:::0;;;;;::::1;::::0;;19387:21:::1;::::0;19411:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;19448:6:0::1;::::0;:13:::1;::::0;;-1:-1:-1;;;19448:13:0;;;;19387:40;;-1:-1:-1;;;;;;19448:6:0;;::::1;::::0;:11:::1;::::0;-1:-1:-1;19448:13:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:6;:13:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19438:4;19443:1;19438:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;19438:23:0::1;;;-1:-1:-1::0;;;;;19438:23:0::1;;;::::0;::::1;19490:4;19472;19477:1;19472:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19472:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;19508:6:::1;::::0;:126:::1;::::0;-1:-1:-1;;;19508:126:0;;:6;::::1;::::0;:57:::1;::::0;19587:6;;19508:126:::1;::::0;:6:::1;::::0;19608:4;;19614:2;;19618:15:::1;::::0;19508:126:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;8914:6:0;:14;;-1:-1:-1;;8914:14:0;;;-1:-1:-1;;;;;;19245:397:0:o;5224:191::-;5298:16;5317:6;;-1:-1:-1;;;;;5334:17:0;;;-1:-1:-1;;;;;;5334:17:0;;;;;;5367:40;;5317:6;;;;;;;5367:40;;5298:16;5367:40;5287:128;5224:191;:::o;5423:334::-;-1:-1:-1;;;;;5524:22:0;;;;;;:13;:22;;;;;;:31;;;:22;;;;:31;;;5520:109;;5579:38;;-1:-1:-1;;;5579:38:0;;-1:-1:-1;;;;;10590:32:1;;5579:38:0;;;10572:51:1;10666:14;;10659:22;10639:18;;;10632:50;10545:18;;5579:38:0;10404:284:1;5520:109:0;-1:-1:-1;;;;;5639:22:0;;;;;;;:13;:22;;;;;;;;;:30;;-1:-1:-1;;5639:30:0;;;;;;;;;;5685:64;;10956:34:1;;;11026:15;;;11006:18;;;10999:43;11058:18;;11051:50;;;;5733:15:0;11132:2:1;11117:18;;11110:34;5685:64:0;;10905:3:1;10890:19;5685:64:0;;;;;;;5423:334;;;:::o;22949:419::-;-1:-1:-1;;;;;23073:15:0;;23034:4;23073:15;;;:9;:15;;;;;;23107:21;;;;23099:72;;;;-1:-1:-1;;;23099:72:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23207:15:0;;;;;;;:9;:15;;;;;;23225:20;;;23207:38;;23260:13;;;;;;;;;;:23;;;;;;23312:26;;;;;;23239:6;1754:25:1;;1742:2;1727:18;;1608:177;24359:511:0;8878:6;:13;;-1:-1:-1;;8878:13:0;;;;;24498:4:::1;::::0;24466:7;;-1:-1:-1;;;;;24490:12:0;;::::1;24498:4:::0;::::1;24490:12;:39:::0;::::1;;;;24527:1;24507:17;;:21;24490:39;24486:103;;;24553:24;24564:4;24570:6;24553:10;:24::i;:::-;24546:31;;;;24486:103;24609:4;::::0;-1:-1:-1;;;;;24603:10:0;;::::1;24609:4:::0;::::1;24603:10;:38:::0;::::1;;;;24639:1;24618:18;;:22;24603:38;24599:103;;;24665:25;24677:4;24683:6;24665:11;:25::i;24599:103::-;24724:4;::::0;-1:-1:-1;;;;;24716:12:0;;::::1;24724:4:::0;::::1;24716:12;::::0;::::1;::::0;:26:::1;;-1:-1:-1::0;24738:4:0::1;::::0;-1:-1:-1;;;;;24732:10:0;;::::1;24738:4:::0;::::1;24732:10;;24716:26;:58;;;;;24772:1;24747:22;;:26;24716:58;24712:127;;;24798:29;24814:4;24820:6;24798:15;:29::i;24712:127::-;-1:-1:-1::0;24856:6:0;8902:1:::1;8914:6:::0;:14;;-1:-1:-1;;8914:14:0;;;24359:511;;-1:-1:-1;;;24359:511:0:o;17010:302::-;8878:6;:13;;-1:-1:-1;;8878:13:0;;;;;17136:17:::1;::::0;17087:7;;;;7818:6:::1;::::0;17127:26:::1;::::0;:6;:26:::1;:::i;:::-;:43;;;;:::i;:::-;17107:63:::0;-1:-1:-1;17181:17:0::1;17201:18;17107:63:::0;17201:6;:18:::1;:::i;:::-;17181:38;;17230:47;17242:4;17248:9;17259:17;;17230:11;:47::i;:::-;8914:6:::0;:14;;-1:-1:-1;;8914:14:0;;;17295:9;17010:302;-1:-1:-1;;;;17010:302:0:o;17320:306::-;8878:6;:13;;-1:-1:-1;;8878:13:0;;;;;17447:18:::1;::::0;17398:7;;;;7818:6:::1;::::0;17438:27:::1;::::0;:6;:27:::1;:::i;:::-;:44;;;;:::i;:::-;17418:64:::0;-1:-1:-1;17493:17:0::1;17513:18;17418:64:::0;17513:6;:18:::1;:::i;:::-;17493:38;;17542:49;17555:4;17561:9;17572:18;;17542:12;:49::i;17634:322::-:0;8878:6;:13;;-1:-1:-1;;8878:13:0;;;;;17765:22:::1;::::0;17716:7;;;;7818:6:::1;::::0;17756:31:::1;::::0;:6;:31:::1;:::i;:::-;:48;;;;:::i;:::-;17736:68:::0;-1:-1:-1;17815:17:0::1;17835:18;17736:68:::0;17835:6;:18:::1;:::i;:::-;17815:38;;17864:57;17881:4;17887:9;17898:22;;17864:16;:57::i;17964:307::-:0;8878:6;:13;;-1:-1:-1;;8878:13:0;;;;;18095:17:::1;::::0;8878:13;;18115:3;;18086:26:::1;::::0;:6;:26:::1;:::i;:::-;:32;;;;:::i;:::-;18057:61;;18129:43;18145:18;18165:6;18129:15;:43::i;:::-;-1:-1:-1::0;;;;;18193:15:0;::::1;;::::0;;;:9:::1;:15;::::0;;;;:25;;18212:6;;18193:15;:25:::1;::::0;18212:6;;18193:25:::1;:::i;:::-;::::0;;;-1:-1:-1;;18247:4:0::1;18229:24;::::0;;;:9:::1;:24;::::0;;;;:34;;18257:6;;18229:24;:34:::1;::::0;18257:6;;18229:34:::1;:::i;:::-;::::0;;;-1:-1:-1;;8914:6:0;:14;;-1:-1:-1;;8914:14:0;;;-1:-1:-1;;;;17964:307:0:o;18279:309::-;8878:6;:13;;-1:-1:-1;;8878:13:0;;;;;18411:18:::1;::::0;8878:13;;18432:3;;18402:27:::1;::::0;:6;:27:::1;:::i;18596:309::-:0;8878:6;:13;;-1:-1:-1;;8878:13:0;;;;;18732:22:::1;::::0;8878:13;;18757:3;;18723:31:::1;::::0;:6;:31:::1;:::i;18913:189::-:0;8878:6;:13;;-1:-1:-1;;8878:13:0;;;;;19011:23:::1;:45:::0;;19038:18;;19011:23;8878:13;;19011:45:::1;::::0;19038:18;;19011:45:::1;:::i;:::-;;;;;;;;19088:6;19067:17;;:27;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;8914:6:0;:14;;-1:-1:-1;;8914:14:0;;;-1:-1:-1;;18913:189: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;1790:456::-;1867:6;1875;1883;1936:2;1924:9;1915:7;1911:23;1907:32;1904:52;;;1952:1;1949;1942:12;1904:52;1991:9;1978:23;2010:31;2035:5;2010:31;:::i;:::-;2060:5;-1:-1:-1;2117:2:1;2102:18;;2089:32;2130:33;2089:32;2130:33;:::i;:::-;1790:456;;2182:7;;-1:-1:-1;;;2236:2:1;2221:18;;;;2208:32;;1790:456::o;2440:160::-;2505:20;;2561:13;;2554:21;2544:32;;2534:60;;2590:1;2587;2580:12;2534:60;2440:160;;;:::o;2605:180::-;2661:6;2714:2;2702:9;2693:7;2689:23;2685:32;2682:52;;;2730:1;2727;2720:12;2682:52;2753:26;2769:9;2753:26;:::i;2790:247::-;2849:6;2902:2;2890:9;2881:7;2877:23;2873:32;2870:52;;;2918:1;2915;2908:12;2870:52;2957:9;2944:23;2976:31;3001:5;2976:31;:::i;3042:315::-;3107:6;3115;3168:2;3156:9;3147:7;3143:23;3139:32;3136:52;;;3184:1;3181;3174:12;3136:52;3223:9;3210:23;3242:31;3267:5;3242:31;:::i;:::-;3292:5;-1:-1:-1;3316:35:1;3347:2;3332:18;;3316:35;:::i;:::-;3306:45;;3042:315;;;;;:::o;3362:388::-;3430:6;3438;3491:2;3479:9;3470:7;3466:23;3462:32;3459:52;;;3507:1;3504;3497:12;3459:52;3546:9;3533:23;3565:31;3590:5;3565:31;:::i;:::-;3615:5;-1:-1:-1;3672:2:1;3657:18;;3644:32;3685:33;3644:32;3685:33;:::i;:::-;3737:7;3727:17;;;3362:388;;;;;:::o;3978:127::-;4039:10;4034:3;4030:20;4027:1;4020:31;4070:4;4067:1;4060:15;4094:4;4091:1;4084:15;4110:128;4177:9;;;4198:11;;;4195:37;;;4212:18;;:::i;4243:168::-;4316:9;;;4347;;4364:15;;;4358:22;;4344:37;4334:71;;4385:18;;:::i;4416:217::-;4456:1;4482;4472:132;;4526:10;4521:3;4517:20;4514:1;4507:31;4561:4;4558:1;4551:15;4589:4;4586:1;4579:15;4472:132;-1:-1:-1;4618:9:1;;4416:217::o;4638:125::-;4703:9;;;4724:10;;;4721:36;;;4737:18;;:::i;4900:127::-;4961:10;4956:3;4952:20;4949:1;4942:31;4992:4;4989:1;4982:15;5016:4;5013:1;5006:15;5032:251;5102:6;5155:2;5143:9;5134:7;5130:23;5126:32;5123:52;;;5171:1;5168;5161:12;5123:52;5203:9;5197:16;5222:31;5247:5;5222:31;:::i;5288:417::-;5519:25;;;5575:2;5560:18;;5553:34;;;;-1:-1:-1;;;;;5623:32:1;5618:2;5603:18;;5596:60;5687:2;5672:18;;5665:34;5506:3;5491:19;;5288:417::o;5710:461::-;5763:3;5801:5;5795:12;5828:6;5823:3;5816:19;5854:4;5883:2;5878:3;5874:12;5867:19;;5920:2;5913:5;5909:14;5941:1;5951:195;5965:6;5962:1;5959:13;5951:195;;;6030:13;;-1:-1:-1;;;;;6026:39:1;6014:52;;6086:12;;;;6121:15;;;;6062:1;5980:9;5951:195;;;-1:-1:-1;6162:3:1;;5710:461;-1:-1:-1;;;;;5710:461:1:o;6176:582::-;6475:6;6464:9;6457:25;6518:6;6513:2;6502:9;6498:18;6491:34;6561:3;6556:2;6545:9;6541:18;6534:31;6438:4;6582:57;6634:3;6623:9;6619:19;6611:6;6582:57;:::i;:::-;-1:-1:-1;;;;;6675:32:1;;;;6670:2;6655:18;;6648:60;-1:-1:-1;6739:3:1;6724:19;6717:35;6574:65;6176:582;-1:-1:-1;;;6176:582:1:o;9482:402::-;9684:2;9666:21;;;9723:2;9703:18;;;9696:30;9762:34;9757:2;9742:18;;9735:62;-1:-1:-1;;;9828:2:1;9813:18;;9806:36;9874:3;9859:19;;9482:402::o;9889:510::-;10160:6;10149:9;10142:25;10203:3;10198:2;10187:9;10183:18;10176:31;10123:4;10224:57;10276:3;10265:9;10261:19;10253:6;10224:57;:::i;:::-;-1:-1:-1;;;;;10317:32:1;;;;10312:2;10297:18;;10290:60;-1:-1:-1;10381:2:1;10366:18;10359:34;10216:65;9889:510;-1:-1:-1;;9889:510:1:o

Swarm Source

ipfs://7beab3a208aad219bd6b2f122ec70102feb2c03d00a2688af1ae443a54750e85

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  ]

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.