ETH Price: $2,488.55 (-6.95%)

Contract

0x71E9230A083366ca67E87F22417b01D5a51Ea36D
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer151810542022-07-20 18:18:47769 days ago1658341127IN
0x71E9230A...5a51Ea36D
0 ETH0.00590263.73591609
Approve151714102022-07-19 6:23:17771 days ago1658211797IN
0x71E9230A...5a51Ea36D
0 ETH0.0003771414.08826481
Approve151714092022-07-19 6:23:10771 days ago1658211790IN
0x71E9230A...5a51Ea36D
0 ETH0.000636813.64474053
Approve151704992022-07-19 2:54:06771 days ago1658199246IN
0x71E9230A...5a51Ea36D
0 ETH0.0007993517.12771561
Approve151460532022-07-15 8:04:19775 days ago1657872259IN
0x71E9230A...5a51Ea36D
0 ETH0.0006285513.46815901
Approve151456972022-07-15 6:42:56775 days ago1657867376IN
0x71E9230A...5a51Ea36D
0 ETH0.0004435515
Approve151455842022-07-15 6:16:58775 days ago1657865818IN
0x71E9230A...5a51Ea36D
0 ETH0.0006028113
Approve151452232022-07-15 4:52:07775 days ago1657860727IN
0x71E9230A...5a51Ea36D
0 ETH0.0005819112.46864139
Approve151428032022-07-14 19:50:39775 days ago1657828239IN
0x71E9230A...5a51Ea36D
0 ETH0.0010555422.61719972
Approve151426972022-07-14 19:29:04775 days ago1657826944IN
0x71E9230A...5a51Ea36D
0 ETH0.0011306724.22710283
Approve151424722022-07-14 18:42:44775 days ago1657824164IN
0x71E9230A...5a51Ea36D
0 ETH0.0030587865.54076582
Approve151422652022-07-14 17:58:58775 days ago1657821538IN
0x71E9230A...5a51Ea36D
0 ETH0.0025378854.37932456
Approve151421642022-07-14 17:35:27775 days ago1657820127IN
0x71E9230A...5a51Ea36D
0 ETH0.004200390
Approve151421602022-07-14 17:33:29775 days ago1657820009IN
0x71E9230A...5a51Ea36D
0 ETH0.0029849263.9580203
Approve151421372022-07-14 17:29:36775 days ago1657819776IN
0x71E9230A...5a51Ea36D
0 ETH0.0030421165.18345586
Approve151420642022-07-14 17:15:17775 days ago1657818917IN
0x71E9230A...5a51Ea36D
0 ETH0.0036980479.23806617
Approve151420552022-07-14 17:12:17775 days ago1657818737IN
0x71E9230A...5a51Ea36D
0 ETH0.0031720867.96835703
Approve151420482022-07-14 17:09:55775 days ago1657818595IN
0x71E9230A...5a51Ea36D
0 ETH0.0029750963.74744108
Approve151420202022-07-14 17:05:49775 days ago1657818349IN
0x71E9230A...5a51Ea36D
0 ETH0.002800260
Approve151389372022-07-14 5:57:57776 days ago1657778277IN
0x71E9230A...5a51Ea36D
0 ETH0.000620613.29765175
Approve151372542022-07-13 23:35:32776 days ago1657755332IN
0x71E9230A...5a51Ea36D
0 ETH0.0025524654.6917446
Approve151372072022-07-13 23:24:12776 days ago1657754652IN
0x71E9230A...5a51Ea36D
0 ETH0.0020537344.00543555
Approve151368652022-07-13 22:11:28776 days ago1657750288IN
0x71E9230A...5a51Ea36D
0 ETH0.0015743433.7335157
Approve151368542022-07-13 22:08:26776 days ago1657750106IN
0x71E9230A...5a51Ea36D
0 ETH0.0013179428.23966661
Approve151368102022-07-13 21:59:40776 days ago1657749580IN
0x71E9230A...5a51Ea36D
0 ETH0.0011158223.90875368
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
151456992022-07-15 6:43:13775 days ago1657867393
0x71E9230A...5a51Ea36D
0.00742811 ETH
151456992022-07-15 6:43:13775 days ago1657867393
0x71E9230A...5a51Ea36D
0.00742811 ETH
151456992022-07-15 6:43:13775 days ago1657867393
0x71E9230A...5a51Ea36D
0.00745774 ETH
151456992022-07-15 6:43:13775 days ago1657867393
0x71E9230A...5a51Ea36D
0.00745774 ETH
151456992022-07-15 6:43:13775 days ago1657867393
0x71E9230A...5a51Ea36D
0.00748748 ETH
151456992022-07-15 6:43:13775 days ago1657867393
0x71E9230A...5a51Ea36D
0.00748748 ETH
151456992022-07-15 6:43:13775 days ago1657867393
0x71E9230A...5a51Ea36D
0.00751734 ETH
151456992022-07-15 6:43:13775 days ago1657867393
0x71E9230A...5a51Ea36D
0.00751734 ETH
151456992022-07-15 6:43:13775 days ago1657867393
0x71E9230A...5a51Ea36D
0.00754732 ETH
151456992022-07-15 6:43:13775 days ago1657867393
0x71E9230A...5a51Ea36D
0.00754732 ETH
151456992022-07-15 6:43:13775 days ago1657867393
0x71E9230A...5a51Ea36D
0.00757742 ETH
151456992022-07-15 6:43:13775 days ago1657867393
0x71E9230A...5a51Ea36D
0.00757742 ETH
151456992022-07-15 6:43:13775 days ago1657867393
0x71E9230A...5a51Ea36D
0.00760764 ETH
151456992022-07-15 6:43:13775 days ago1657867393
0x71E9230A...5a51Ea36D
0.00760764 ETH
151456992022-07-15 6:43:13775 days ago1657867393
0x71E9230A...5a51Ea36D
0.00763798 ETH
151456992022-07-15 6:43:13775 days ago1657867393
0x71E9230A...5a51Ea36D
0.00763798 ETH
151456992022-07-15 6:43:13775 days ago1657867393
0x71E9230A...5a51Ea36D
0.00766844 ETH
151456992022-07-15 6:43:13775 days ago1657867393
0x71E9230A...5a51Ea36D
0.00766844 ETH
151456992022-07-15 6:43:13775 days ago1657867393
0x71E9230A...5a51Ea36D
0.00769902 ETH
151456992022-07-15 6:43:13775 days ago1657867393
0x71E9230A...5a51Ea36D
0.00769902 ETH
151456992022-07-15 6:43:13775 days ago1657867393
0x71E9230A...5a51Ea36D
0.00772972 ETH
151456992022-07-15 6:43:13775 days ago1657867393
0x71E9230A...5a51Ea36D
0.00772972 ETH
151456992022-07-15 6:43:13775 days ago1657867393
0x71E9230A...5a51Ea36D
0.00776055 ETH
151456992022-07-15 6:43:13775 days ago1657867393
0x71E9230A...5a51Ea36D
0.00776055 ETH
151456992022-07-15 6:43:13775 days ago1657867393
0x71E9230A...5a51Ea36D
0.0077915 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ThreeMonkeys

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-07-13
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;

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

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

interface IDexRouter {
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

}

abstract contract Ownable {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor () {
        address msgSender = msg.sender;
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
    function owner() public view returns (address) {
        return _owner;
    }
    modifier onlyOwner() {
        require(owner() == msg.sender, "Ownable: caller is not the owner");
        _;
    }
    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
    function transferOwnership(address newOwner) public onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

pragma solidity ^0.8.4;

contract ThreeMonkeys is IERC20, Ownable
{
    //TresFlames
    mapping (address => uint) private _balances;
    mapping (address => mapping (address => uint)) private _allowances;
    mapping(address => bool) private excludedFromLimits;
    mapping(address => bool) public excludedFromFees;
    mapping(address=>bool) public isAMM;
    
    string private constant _name = 'Three Monkeys';
    string private constant _symbol = '3M';

    uint8 private constant _decimals = 18;

    uint public constant InitialSupply= 10**7 * 10**_decimals;
    uint private constant DefaultLiquidityLockTime=7 days;
    uint private _circulatingSupply =InitialSupply;
    uint public buyTax = 30;
    uint public sellTax = 30;
    uint public transferTax = 30;
    uint public burnTax=50;
    uint public liquidityTax=50;
    uint public projectTax=900;
    uint public swapTreshold=4;
    uint public overLiquifyTreshold=75;
    uint public LaunchTimestamp;
    uint _liquidityUnlockTime;
    uint constant TAX_DENOMINATOR=1000;
    uint constant MAXTAXDENOMINATOR=10;

    uint256 public maxWalletBalance;
    uint256 public maxTransactionAmount;

    bool private _isSwappingContractModifier;
    bool public manualSwap;
    bool public LPReleaseLimitedTo20Percent;

    IDexRouter private  _dexRouter;

    address private _dexPairAddress;
    address public monkeyWallet;
    address public constant burnWallet = 0x000000000000000000000000000000000000dEaD;
    address private constant DexRouter=0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    event MaxWalletBalanceUpdated(uint256 percent);
    event OnSetTaxes(uint buy, uint sell, uint transfer_, uint burn, uint project,uint liquidity);
    event ExcludeAccount(address account, bool exclude);
    event OnEnableTrading();
    event OnReleaseLP();
    event OnProlongLPLock(uint UnlockTimestamp);
    event ExcludeFromLimits(address account, bool exclude);
    event MonkeyWalletChange(address newWallet);
    event AMMadded(address AMM);
    event ManualSwapOn(bool manual);
    event ManualSwapPerformed();
    event LimitLPRelease();
    event LockExtended(uint secondsUntilUnlock);
    event MaxTransactionAmountUpdated(uint256 percent);
    event SwapThresholdChange(uint newSwapTresholdPermille);
    event OverLiquifiedThresholdChange(uint newOverLiquifyTresholdPermille);
    event RecoverETH();


    modifier lockTheSwap {
        _isSwappingContractModifier = true;
        _;
        _isSwappingContractModifier = false;
    }

    constructor () {
        uint ownerBalance=_circulatingSupply * 95/100;
        uint contractgivenBalance=_circulatingSupply * 5/100;
        _balances[msg.sender] = ownerBalance;
        _balances[address(this)] = contractgivenBalance;
        emit Transfer(address(0), msg.sender, ownerBalance);
        emit Transfer(address(0), address(this), contractgivenBalance);

        _dexRouter = IDexRouter(DexRouter);
        _dexPairAddress = IDexFactory(_dexRouter.factory()).createPair(address(this), _dexRouter.WETH());
        isAMM[_dexPairAddress]=true;
        
        monkeyWallet=0x7a918D7fEb6EcD31f3f5633e0243E380b3568F8c;

        excludedFromFees[msg.sender]=true;
        excludedFromFees[DexRouter]=true;
        excludedFromFees[address(this)]=true;
        excludedFromLimits[burnWallet] = true;
        excludedFromLimits[address(this)] = true;
    }

    function ChangeMonkeyWallet(address newWallet) public onlyOwner{
        monkeyWallet=newWallet;
        emit MonkeyWalletChange(newWallet);
    }
    function setMaxWalletBalancePercent(uint256 percent) external onlyOwner {
        require(percent >= 10, "min 1%");
        require(percent <= 1000, "max 100%");
        maxWalletBalance = InitialSupply * percent / 1000;
        emit MaxWalletBalanceUpdated(percent);
    }
    function setMaxTransactionAmount(uint256 percent) public onlyOwner {
        require(percent >= 25, "min 0.25%");
        require(percent <= 10000, "max 100%");
        maxTransactionAmount = InitialSupply * percent / 10000;
        emit MaxTransactionAmountUpdated(percent);
    }
    function _transfer(address sender, address recipient, uint amount) private{
        require(sender != address(0), "Transfer from zero");
        require(recipient != address(0), "Transfer to zero");
        if(excludedFromFees[sender] || excludedFromFees[recipient])
            _feelessTransfer(sender, recipient, amount);
        else { 
            require(LaunchTimestamp>0,"trading not yet enabled");
            _taxedTransfer(sender,recipient,amount);                  
        }
    }
    function _taxedTransfer(address sender, address recipient, uint amount) private{
        uint senderBalance = _balances[sender];
        require(senderBalance >= amount, "Transfer exceeds balance");
        bool excludedAccount = excludedFromLimits[sender] || excludedFromLimits[recipient];
        if (
            isAMM[sender] &&
            !excludedAccount
        ) {
            require(
                amount <= maxTransactionAmount,
                "Transfer amount exceeds the maxTxAmount."
            );
            uint256 contractBalanceRecepient = balanceOf(recipient);
            require(
                contractBalanceRecepient + amount <= maxWalletBalance,
                "Exceeds maximum wallet token amount."
            );
        } else if (
            isAMM[recipient] &&
            !excludedAccount
        ) {
            require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxSellTransactionAmount.");
        }

        bool isBuy=isAMM[sender];
        bool isSell=isAMM[recipient];
        uint tax;
        if(isSell){  
            uint SellTaxDuration=45 minutes;      
            if(block.timestamp<LaunchTimestamp+SellTaxDuration){
                tax=_getStartTax(SellTaxDuration,100);
                }else tax=sellTax;
            }
        else if(isBuy){
            uint BuyTaxDuration=25 seconds;
            if(block.timestamp<LaunchTimestamp+BuyTaxDuration){
                tax=_getStartTax(BuyTaxDuration,999);
            }else tax=buyTax;
        } else tax=transferTax;

        if((sender!=_dexPairAddress)&&(!manualSwap)&&(!_isSwappingContractModifier))
            _swapContractToken(false);

        uint tokensToBeSentToBurn=_calculateFee(amount, tax, burnTax);
        uint contractToken=_calculateFee(amount, tax, projectTax+liquidityTax);
        uint taxedAmount=amount-(tokensToBeSentToBurn + contractToken);

        _balances[sender]-=amount;
        _balances[address(this)] += contractToken;
        _balances[burnWallet]+=tokensToBeSentToBurn;
        _balances[recipient]+=taxedAmount;
        emit Transfer(sender,recipient,taxedAmount);
    }
    function _getStartTax(uint duration, uint maxTax) private view returns (uint){
        uint timeSinceLaunch=block.timestamp-LaunchTimestamp;
        return maxTax-((maxTax-50)*timeSinceLaunch/duration);
    }
    function _calculateFee(uint amount, uint tax, uint taxPercent) private pure returns (uint) {
        return (amount*tax*taxPercent) / (TAX_DENOMINATOR*TAX_DENOMINATOR);
    }
    function _feelessTransfer(address sender, address recipient, uint amount) private{
        uint senderBalance = _balances[sender];
        require(senderBalance >= amount, "Transfer exceeds balance");
        _balances[sender]-=amount;
        _balances[recipient]+=amount;      
        emit Transfer(sender,recipient,amount);
    }
    function setSwapTreshold(uint newSwapTresholdPermille) public onlyOwner{
        require(newSwapTresholdPermille<=10);//MaxTreshold= 1%
        swapTreshold=newSwapTresholdPermille;
        emit SwapThresholdChange(newSwapTresholdPermille);
    }
    function SetOverLiquifiedTreshold(uint newOverLiquifyTresholdPermille) public onlyOwner{
        require(newOverLiquifyTresholdPermille<=1000);
        overLiquifyTreshold=newOverLiquifyTresholdPermille;
        emit OverLiquifiedThresholdChange(newOverLiquifyTresholdPermille);
    }
    function SetTaxes(uint buy, uint sell, uint transfer_, uint burn, uint project,uint liquidity) public onlyOwner{
        uint maxTax=TAX_DENOMINATOR/MAXTAXDENOMINATOR;
        require(buy<=maxTax&&sell<=maxTax&&transfer_<=maxTax,"Tax exceeds maxTax");
        require(burn+project+liquidity==TAX_DENOMINATOR,"Taxes don't add up to denominator");
        buyTax=buy;
        sellTax=sell;
        transferTax=transfer_;
        projectTax=project;
        liquidityTax=liquidity;
        burnTax=burn;
        emit OnSetTaxes(buy, sell, transfer_, burn, project, liquidity);
    }
    function isOverLiquified() public view returns(bool){
        return _balances[_dexPairAddress]>_circulatingSupply*overLiquifyTreshold/1000;
    }
    function _swapContractToken(bool ignoreLimits) private lockTheSwap{
        uint contractBalance=_balances[address(this)];
        uint totalTax=liquidityTax+projectTax;
        uint tokenToSwap=_balances[_dexPairAddress]*swapTreshold/1000;
        if(totalTax==0)return;
        if(ignoreLimits)
            tokenToSwap=_balances[address(this)];
        else if(contractBalance<tokenToSwap)
            return;

        uint tokenForLiquidity=
        isOverLiquified()?0
        :(tokenToSwap*liquidityTax)/totalTax;

        uint tokenForProject= tokenToSwap-tokenForLiquidity;

        uint LiqHalf=tokenForLiquidity/2;
        uint swapToken=LiqHalf+tokenForProject;
        uint initialETHBalance=address(this).balance;
        _swapTokenForETH(swapToken);
        uint newETH=(address(this).balance - initialETHBalance);

        if(tokenForLiquidity>0){
            uint liqETH = (newETH*LiqHalf)/swapToken;
            _addLiquidity(LiqHalf, liqETH);
        }
        uint monkeybalance=address(this).balance;
        (bool monkey,)=monkeyWallet.call{value:monkeybalance}("");
        monkey=true;
    }
    function _swapTokenForETH(uint amount) private {
        _approve(address(this), address(_dexRouter), amount);
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _dexRouter.WETH();

        try _dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amount,
            0,
            path,
            address(this),
            block.timestamp
        ){}
        catch{}
    }
    function _addLiquidity(uint tokenamount, uint ethamount) private {
        _approve(address(this), address(_dexRouter), tokenamount);
        _dexRouter.addLiquidityETH{value: ethamount}(
            address(this),
            tokenamount,
            0,
            0,
            address(this),
            block.timestamp
        );
    }
    function getLiquidityReleaseTimeInSeconds() public view returns (uint){
        if(block.timestamp<_liquidityUnlockTime)
            return _liquidityUnlockTime-block.timestamp;
        return 0;
    }
    function getBurnedTokens() public view returns(uint){
        return (InitialSupply-_circulatingSupply)+_balances[address(0xdead)];
    }
    function SetAMM(address AMM, bool Add) public onlyOwner{
        require(AMM!=_dexPairAddress,"can't change dex");
        isAMM[AMM]=Add;
        emit AMMadded(AMM);
    }
    function SwitchManualSwap(bool manual) public onlyOwner{
        manualSwap=manual;
        emit ManualSwapOn(manual);
    }
    function SwapContractToken() public onlyOwner{
        _swapContractToken(true);
        emit ManualSwapPerformed();
    }
    function ExcludeAccountFromFees(address account, bool exclude) public onlyOwner{
        require(account!=address(this),"can't Include the contract");
        excludedFromFees[account]=exclude;
        emit ExcludeAccount(account,exclude);
    }
    function setExcludedAccountFromLimits(address account, bool exclude) public onlyOwner{
        excludedFromLimits[account]=exclude;
        emit ExcludeFromLimits(account,exclude);
    }
    function isExcludedFromLimits(address account) public view returns(bool) {
        return excludedFromLimits[account];
    }
    function SetupEnableTrading() public onlyOwner{
        require(LaunchTimestamp==0,"AlreadyLaunched");
        LaunchTimestamp=block.timestamp;
        maxWalletBalance = InitialSupply * 5 / 1000;
        maxTransactionAmount = InitialSupply * 50 / 10000;
        emit OnEnableTrading();
    }
    function limitLiquidityReleaseTo20Percent() public onlyOwner{
        LPReleaseLimitedTo20Percent=true;
        emit LimitLPRelease();
    }
    function LockLiquidityForSeconds(uint secondsUntilUnlock) public onlyOwner{
        _prolongLiquidityLock(secondsUntilUnlock+block.timestamp);
        emit LockExtended(secondsUntilUnlock);
    }
    function _prolongLiquidityLock(uint newUnlockTime) private{
        require(newUnlockTime>_liquidityUnlockTime);
        _liquidityUnlockTime=newUnlockTime;
        emit OnProlongLPLock(_liquidityUnlockTime);
    }
    function LiquidityRelease() public onlyOwner {
        require(block.timestamp >= _liquidityUnlockTime, "Not yet unlocked");
        IERC20 liquidityToken = IERC20(_dexPairAddress);
        uint amount = liquidityToken.balanceOf(address(this));
        if(LPReleaseLimitedTo20Percent)
        {
            _liquidityUnlockTime=block.timestamp+DefaultLiquidityLockTime;
            amount=amount*2/10;
        }
        liquidityToken.transfer(msg.sender, amount);
        emit OnReleaseLP();
    }
    function emergencyETHrecovery(uint256 amountPercentage) external onlyOwner {
        uint256 amountETH = address(this).balance;
        payable(msg.sender).transfer(amountETH * amountPercentage / 100);
        emit RecoverETH();
    }

    receive() external payable {}

    function getOwner() external view override returns (address) {return owner();}
    function name() external pure override returns (string memory) {return _name;}
    function symbol() external pure override returns (string memory) {return _symbol;}
    function decimals() external pure override returns (uint8) {return _decimals;}
    function totalSupply() external view override returns (uint) {return _circulatingSupply;}
    function balanceOf(address account) public view override returns (uint) {return _balances[account];}
    function allowance(address _owner, address spender) external view override returns (uint) {return _allowances[_owner][spender];}
    function transfer(address recipient, uint amount) external override returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }
    function approve(address spender, uint amount) external override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }
    function _approve(address owner, address spender, uint amount) private {
        require(owner != address(0), "Approve from zero");
        require(spender != address(0), "Approve to zero");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
    function transferFrom(address sender, address recipient, uint amount) external override returns (bool) {
        _transfer(sender, recipient, amount);
        uint currentAllowance = _allowances[sender][msg.sender];
        require(currentAllowance >= amount, "Transfer > allowance");
        _approve(sender, msg.sender, currentAllowance - amount);
        return true;
    }
    function increaseAllowance(address spender, uint addedValue) external returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender] + addedValue);
        return true;
    }
    function decreaseAllowance(address spender, uint subtractedValue) external returns (bool) {
        uint currentAllowance = _allowances[msg.sender][spender];
        require(currentAllowance >= subtractedValue, "<0 allowance");
        _approve(msg.sender, spender, currentAllowance - subtractedValue);
        return true;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"AMM","type":"address"}],"name":"AMMadded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"exclude","type":"bool"}],"name":"ExcludeAccount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"exclude","type":"bool"}],"name":"ExcludeFromLimits","type":"event"},{"anonymous":false,"inputs":[],"name":"LimitLPRelease","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"secondsUntilUnlock","type":"uint256"}],"name":"LockExtended","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"manual","type":"bool"}],"name":"ManualSwapOn","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualSwapPerformed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"percent","type":"uint256"}],"name":"MaxTransactionAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"percent","type":"uint256"}],"name":"MaxWalletBalanceUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newWallet","type":"address"}],"name":"MonkeyWalletChange","type":"event"},{"anonymous":false,"inputs":[],"name":"OnEnableTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"UnlockTimestamp","type":"uint256"}],"name":"OnProlongLPLock","type":"event"},{"anonymous":false,"inputs":[],"name":"OnReleaseLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"buy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sell","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"transfer_","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"burn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"project","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidity","type":"uint256"}],"name":"OnSetTaxes","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newOverLiquifyTresholdPermille","type":"uint256"}],"name":"OverLiquifiedThresholdChange","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":[],"name":"RecoverETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newSwapTresholdPermille","type":"uint256"}],"name":"SwapThresholdChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"ChangeMonkeyWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"ExcludeAccountFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"InitialSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LPReleaseLimitedTo20Percent","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LaunchTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LiquidityRelease","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"secondsUntilUnlock","type":"uint256"}],"name":"LockLiquidityForSeconds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"AMM","type":"address"},{"internalType":"bool","name":"Add","type":"bool"}],"name":"SetAMM","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newOverLiquifyTresholdPermille","type":"uint256"}],"name":"SetOverLiquifiedTreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buy","type":"uint256"},{"internalType":"uint256","name":"sell","type":"uint256"},{"internalType":"uint256","name":"transfer_","type":"uint256"},{"internalType":"uint256","name":"burn","type":"uint256"},{"internalType":"uint256","name":"project","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"name":"SetTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"SetupEnableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"SwapContractToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"manual","type":"bool"}],"name":"SwitchManualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"emergencyETHrecovery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBurnedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLiquidityReleaseTimeInSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"isAMM","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOverLiquified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitLiquidityReleaseTo20Percent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"liquidityTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"monkeyWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"overLiquifyTreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"projectTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"setExcludedAccountFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"setMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"setMaxWalletBalancePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSwapTresholdPermille","type":"uint256"}],"name":"setSwapTreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","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":[],"name":"transferTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126012600a620004f7565b6200002190629896806200050f565b600655601e600755601e600855601e6009556032600a556032600b55610384600c556004600d55604b600e553480156200005a57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060006064600654605f620000b191906200050f565b620000bd919062000531565b9050600060646006546005620000d491906200050f565b620000e0919062000531565b336000818152600160205260408082208690553082528082208490555192935090916000805160206200318683398151915290620001219086815260200190565b60405180910390a36040518181523090600090600080516020620031868339815191529060200160405180910390a360138054767a250d5630b4cf539739df2c5dacb4c659f2488d0000006301000000600160b81b031990911617908190556040805163c45a015560e01b8152905163010000009092046001600160a01b03169163c45a0155916004808201926020929091908290030181865afa158015620001ce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f4919062000554565b6001600160a01b031663c9c6539630601360039054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000257573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200027d919062000554565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002cb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f1919062000554565b601480546001600160a01b03929092166001600160a01b031992831681179091556000908152600560209081526040808320805460ff19908116600190811790925560158054909616737a918d7feb6ecd31f3f5633e0243e380b3568f8c179095553384526004835281842080548616821790557f1fc5acd025f7cc5cf2691b667dba808b5a149bf27192c208fc66f1f0ec4222d7805486168217905530808552828520805487168317905560039093527f262bb27bbdd95c1cdc8e16957e36e38579ea44f7f6413dd7a9c75939def06b2c80548616821790559183529091208054909216179055506200057f9050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620004395781600019048211156200041d576200041d620003e2565b808516156200042b57918102915b93841c9390800290620003fd565b509250929050565b6000826200045257506001620004f1565b816200046157506000620004f1565b81600181146200047a57600281146200048557620004a5565b6001915050620004f1565b60ff841115620004995762000499620003e2565b50506001821b620004f1565b5060208310610133831016604e8410600b8410161715620004ca575081810a620004f1565b620004d68383620003f8565b8060001904821115620004ed57620004ed620003e2565b0290505b92915050565b60006200050860ff84168362000441565b9392505050565b60008160001904831182151516156200052c576200052c620003e2565b500290565b6000826200054f57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156200056757600080fd5b81516001600160a01b03811681146200050857600080fd5b612bf7806200058f6000396000f3fe60806040526004361061031e5760003560e01c80638124f7ac116101ab578063be617fa0116100f7578063d46b6a3011610095578063e0d2f9eb1161006f578063e0d2f9eb14610923578063e52fb9ec14610943578063f2fde38b14610959578063f7942b631461097957600080fd5b8063d46b6a301461087d578063dbe66ca0146108ad578063dd62ed3e146108dd57600080fd5b8063c8c8ebe4116100d1578063c8c8ebe41461081b578063cc1776d314610831578063cfd1940e14610847578063d24cd3ec1461086757600080fd5b8063be617fa0146107db578063c3a3c032146107f1578063c3f4f54f1461080657600080fd5b80639b39b65f11610164578063a9059cbb1161013e578063a9059cbb1461076f578063b40d09e21461078f578063bbde77c1146107a5578063bc43d849146107bb57600080fd5b80639b39b65f1461071a578063a457c2d71461073a578063a68bdac71461075a57600080fd5b80638124f7ac1461067b5780638512af8414610691578063868b0141146106b1578063893d20e8146106d15780638da5cb5b146106d157806395d89b41146106ef57600080fd5b80632d48f84f1161026a5780634f7041a5116102235780635cce86cd116101fd5780635cce86cd146105e257806370a082311461061b578063715018a6146106515780637b9e987a1461066657600080fd5b80634f7041a51461058d5780635149f984146105a357806351bc3c85146105c357600080fd5b80632d48f84f146104e7578063313ce567146105075780633227925f14610523578063395093511461054357806341aec3571461056357806346e35f031461057857600080fd5b80630eff4c64116102d75780631e293c10116102b15780631e293c10146104725780631eb25d131461049257806323b872dd146104a75780632c92293c146104c757600080fd5b80630eff4c641461042357806318160ddd146104475780631d4eaead1461045c57600080fd5b80630612f39d1461032a5780630622874914610341578063065f4b411461037457806306fdde0314610394578063095ea7b3146103d35780630ed92da71461040357600080fd5b3661032557005b600080fd5b34801561033657600080fd5b5061033f610999565b005b34801561034d57600080fd5b5061035761dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561038057600080fd5b5061033f61038f36600461271f565b610b6e565b3480156103a057600080fd5b5060408051808201909152600d81526c5468726565204d6f6e6b65797360981b60208201525b60405161036b9190612738565b3480156103df57600080fd5b506103f36103ee3660046127a5565b610c18565b604051901515815260200161036b565b34801561040f57600080fd5b50601554610357906001600160a01b031681565b34801561042f57600080fd5b50610439600e5481565b60405190815260200161036b565b34801561045357600080fd5b50600654610439565b34801561046857600080fd5b50610439600a5481565b34801561047e57600080fd5b5061033f61048d36600461271f565b610c2f565b34801561049e57600080fd5b50610439610d4d565b3480156104b357600080fd5b506103f36104c23660046127d1565b610d69565b3480156104d357600080fd5b5061033f6104e236600461271f565b610e00565b3480156104f357600080fd5b5061033f610502366004612812565b610f14565b34801561051357600080fd5b506040516012815260200161036b565b34801561052f57600080fd5b5061033f61053e36600461271f565b6110a7565b34801561054f57600080fd5b506103f361055e3660046127a5565b611122565b34801561056f57600080fd5b5061033f611159565b34801561058457600080fd5b506103f36111c7565b34801561059957600080fd5b5061043960075481565b3480156105af57600080fd5b5061033f6105be366004612863565b611207565b3480156105cf57600080fd5b506013546103f390610100900460ff1681565b3480156105ee57600080fd5b506103f36105fd36600461289c565b6001600160a01b031660009081526003602052604090205460ff1690565b34801561062757600080fd5b5061043961063636600461289c565b6001600160a01b031660009081526001602052604090205490565b34801561065d57600080fd5b5061033f6112ee565b34801561067257600080fd5b5061033f611371565b34801561068757600080fd5b5061043960095481565b34801561069d57600080fd5b5061033f6106ac36600461289c565b611483565b3480156106bd57600080fd5b5061033f6106cc3660046128c0565b61150a565b3480156106dd57600080fd5b506000546001600160a01b0316610357565b3480156106fb57600080fd5b50604080518082019091526002815261334d60f01b60208201526103c6565b34801561072657600080fd5b506013546103f39062010000900460ff1681565b34801561074657600080fd5b506103f36107553660046127a5565b611591565b34801561076657600080fd5b5061033f61160d565b34801561077b57600080fd5b506103f361078a3660046127a5565b611682565b34801561079b57600080fd5b50610439600f5481565b3480156107b157600080fd5b5061043960115481565b3480156107c757600080fd5b5061033f6107d636600461271f565b61168f565b3480156107e757600080fd5b50610439600b5481565b3480156107fd57600080fd5b5061043961170c565b34801561081257600080fd5b5061043961172c565b34801561082757600080fd5b5061043960125481565b34801561083d57600080fd5b5061043960085481565b34801561085357600080fd5b5061033f61086236600461271f565b61178b565b34801561087357600080fd5b50610439600c5481565b34801561088957600080fd5b506103f361089836600461289c565b60056020526000908152604090205460ff1681565b3480156108b957600080fd5b506103f36108c836600461289c565b60046020526000908152604090205460ff1681565b3480156108e957600080fd5b506104396108f83660046128dd565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561092f57600080fd5b5061033f61093e366004612863565b611807565b34801561094f57600080fd5b50610439600d5481565b34801561096557600080fd5b5061033f61097436600461289c565b6118f4565b34801561098557600080fd5b5061033f610994366004612863565b6119ed565b336109ac6000546001600160a01b031690565b6001600160a01b0316146109db5760405162461bcd60e51b81526004016109d29061290b565b60405180910390fd5b601054421015610a205760405162461bcd60e51b815260206004820152601060248201526f139bdd081e595d081d5b9b1bd8dad95960821b60448201526064016109d2565b6014546040516370a0823160e01b81523060048201526001600160a01b039091169060009082906370a0823190602401602060405180830381865afa158015610a6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a919190612940565b60135490915062010000900460ff1615610acf57610ab262093a804261296f565b601055600a610ac2826002612987565b610acc91906129a6565b90505b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015610b1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4091906129c8565b506040517f28bacca46f5c57fe13623e9d5093cb2fab892814aca9b39384ab86550d9aa67590600090a15050565b33610b816000546001600160a01b031690565b6001600160a01b031614610ba75760405162461bcd60e51b81526004016109d29061290b565b47336108fc6064610bb88585612987565b610bc291906129a6565b6040518115909202916000818181858888f19350505050158015610bea573d6000803e3d6000fd5b506040517fbfeaf8c13ada34fe89b506c8975a67daaf69c220fef97229c731f6cf3b3e741e90600090a15050565b6000610c25338484611a82565b5060015b92915050565b33610c426000546001600160a01b031690565b6001600160a01b031614610c685760405162461bcd60e51b81526004016109d29061290b565b6019811015610ca55760405162461bcd60e51b81526020600482015260096024820152686d696e20302e32352560b81b60448201526064016109d2565b612710811115610ce25760405162461bcd60e51b81526020600482015260086024820152676d6178203130302560c01b60448201526064016109d2565b61271081610cf26012600a612ac9565b610cff9062989680612987565b610d099190612987565b610d1391906129a6565b6012556040518181527f7c1cb3702d8e1fa6d24b12dd90670ab69c6d66d58233103d37da8b07d6b850ac906020015b60405180910390a150565b610d596012600a612ac9565b610d669062989680612987565b81565b6000610d76848484611b75565b6001600160a01b038416600090815260026020908152604080832033845290915290205482811015610de15760405162461bcd60e51b81526020600482015260146024820152735472616e73666572203e20616c6c6f77616e636560601b60448201526064016109d2565b610df58533610df08685612ad8565b611a82565b506001949350505050565b33610e136000546001600160a01b031690565b6001600160a01b031614610e395760405162461bcd60e51b81526004016109d29061290b565b600a811015610e735760405162461bcd60e51b81526020600482015260066024820152656d696e20312560d01b60448201526064016109d2565b6103e8811115610eb05760405162461bcd60e51b81526020600482015260086024820152676d6178203130302560c01b60448201526064016109d2565b6103e881610ec06012600a612ac9565b610ecd9062989680612987565b610ed79190612987565b610ee191906129a6565b6011556040518181527f9cbd2e55e2abf49d29273c1b9fb343c2828844b2aec156cfe2aec98ae1b72a9990602001610d42565b33610f276000546001600160a01b031690565b6001600160a01b031614610f4d5760405162461bcd60e51b81526004016109d29061290b565b6000610f5c600a6103e86129a6565b9050808711158015610f6e5750808611155b8015610f7a5750808511155b610fbb5760405162461bcd60e51b81526020600482015260126024820152710a8c2f040caf0c6cacac8e640dac2f0a8c2f60731b60448201526064016109d2565b6103e882610fc9858761296f565b610fd3919061296f565b1461102a5760405162461bcd60e51b815260206004820152602160248201527f546178657320646f6e27742061646420757020746f2064656e6f6d696e61746f6044820152603960f91b60648201526084016109d2565b600787905560088690556009859055600c839055600b829055600a8490556040805188815260208101889052908101869052606081018590526080810184905260a081018390527f95617e149b678679d65360792e6610c8fc9add72efd72fc3c8d94792801ca5c99060c00160405180910390a150505050505050565b336110ba6000546001600160a01b031690565b6001600160a01b0316146110e05760405162461bcd60e51b81526004016109d29061290b565b6110f26110ed428361296f565b611cba565b6040518181527f2d3b38a507b3fb0ee1aaa054f2d952d0ac517f18f1cba8857c1b0e2ed9d5dbd990602001610d42565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610c25918590610df090869061296f565b3361116c6000546001600160a01b031690565b6001600160a01b0316146111925760405162461bcd60e51b81526004016109d29061290b565b61119c6001611cfd565b6040517f50d9f00a1465121b958cf0aef21a53ed0bbe36c5a415abb27350d22b247a258f90600090a1565b60006103e8600e546006546111dc9190612987565b6111e691906129a6565b6014546001600160a01b031660009081526001602052604090205411919050565b3361121a6000546001600160a01b031690565b6001600160a01b0316146112405760405162461bcd60e51b81526004016109d29061290b565b6014546001600160a01b03908116908316036112915760405162461bcd60e51b815260206004820152601060248201526f0c6c2dc4ee840c6d0c2dcceca40c8caf60831b60448201526064016109d2565b6001600160a01b038216600081815260056020908152604091829020805460ff191685151517905590519182527fa5d0a2d9a2487cd749dbfa34962704a9f4ed5ff3fd9c6586c86d954070b552f091015b60405180910390a15050565b336113016000546001600160a01b031690565b6001600160a01b0316146113275760405162461bcd60e51b81526004016109d29061290b565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b336113846000546001600160a01b031690565b6001600160a01b0316146113aa5760405162461bcd60e51b81526004016109d29061290b565b600f54156113ec5760405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e53185d5b98da1959608a1b60448201526064016109d2565b42600f556103e86113ff6012600a612ac9565b61140c9062989680612987565b611417906005612987565b61142191906129a6565b6011556127106114336012600a612ac9565b6114409062989680612987565b61144b906032612987565b61145591906129a6565b6012556040517f2cb945e0498987ef06dbd68025b0bc276116c63345296379c28a8e8f09b47dc190600090a1565b336114966000546001600160a01b031690565b6001600160a01b0316146114bc5760405162461bcd60e51b81526004016109d29061290b565b601580546001600160a01b0319166001600160a01b0383169081179091556040519081527f6887369acbdc098350fa0bc1e3691469fe67c7bba8662473c718ad9b5658ff1e90602001610d42565b3361151d6000546001600160a01b031690565b6001600160a01b0316146115435760405162461bcd60e51b81526004016109d29061290b565b601380548215156101000261ff00199091161790556040517faffc63374f6f6c07a9f4b158efd5668a3684e1711b1c8e9ed9b848e11507082190610d4290831515815260200190565b905090565b3360009081526002602090815260408083206001600160a01b0386168452909152812054828110156115f45760405162461bcd60e51b815260206004820152600c60248201526b3c3020616c6c6f77616e636560a01b60448201526064016109d2565b6116033385610df08685612ad8565b5060019392505050565b336116206000546001600160a01b031690565b6001600160a01b0316146116465760405162461bcd60e51b81526004016109d29061290b565b6013805462ff00001916620100001790556040517f4aef80fb0c1ab90a77982dc86c9e9980ea16125ae57fea5089954547863f7f2390600090a1565b6000610c25338484611b75565b336116a26000546001600160a01b031690565b6001600160a01b0316146116c85760405162461bcd60e51b81526004016109d29061290b565b6103e88111156116d757600080fd5b600e8190556040518181527fa072eee57b8e01913ba01eab29d8a81117cf780e6c8984a3494477ce9cee846d90602001610d42565b6000601054421015611726574260105461158c9190612ad8565b50600090565b61dead600090815260016020527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d5460065461176a6012600a612ac9565b6117779062989680612987565b6117819190612ad8565b61158c919061296f565b3361179e6000546001600160a01b031690565b6001600160a01b0316146117c45760405162461bcd60e51b81526004016109d29061290b565b600a8111156117d257600080fd5b600d8190556040518181527fc075380b8410207b8cc14f0d254ab8c8a6766469631275e4500db835a1ba02cc90602001610d42565b3361181a6000546001600160a01b031690565b6001600160a01b0316146118405760405162461bcd60e51b81526004016109d29061290b565b306001600160a01b038316036118985760405162461bcd60e51b815260206004820152601a60248201527f63616e277420496e636c7564652074686520636f6e747261637400000000000060448201526064016109d2565b6001600160a01b038216600081815260046020908152604091829020805460ff19168515159081179091558251938452908301527fa22b25479919d4ac678f064a05daa1ee9c0adc3b8198942ea45255e364e04ed491016112e2565b336119076000546001600160a01b031690565b6001600160a01b03161461192d5760405162461bcd60e51b81526004016109d29061290b565b6001600160a01b0381166119925760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109d2565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b33611a006000546001600160a01b031690565b6001600160a01b031614611a265760405162461bcd60e51b81526004016109d29061290b565b6001600160a01b038216600081815260036020908152604091829020805460ff19168515159081179091558251938452908301527f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9291016112e2565b6001600160a01b038316611acc5760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b60448201526064016109d2565b6001600160a01b038216611b145760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b60448201526064016109d2565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611bc05760405162461bcd60e51b81526020600482015260126024820152715472616e736665722066726f6d207a65726f60701b60448201526064016109d2565b6001600160a01b038216611c095760405162461bcd60e51b815260206004820152601060248201526f5472616e7366657220746f207a65726f60801b60448201526064016109d2565b6001600160a01b03831660009081526004602052604090205460ff1680611c4857506001600160a01b03821660009081526004602052604090205460ff165b15611c5d57611c58838383611eb9565b505050565b6000600f5411611caf5760405162461bcd60e51b815260206004820152601760248201527f74726164696e67206e6f742079657420656e61626c656400000000000000000060448201526064016109d2565b611c58838383611fcc565b6010548111611cc857600080fd5b60108190556040518181527f8ff9dc93846a022986f54e8f219a1fa780225726858e39e850da826852b4042e90602001610d42565b6013805460ff191660019081179091553060009081526020919091526040812054600c54600b54919291611d31919061296f565b600d546014546001600160a01b0316600090815260016020526040812054929350916103e891611d6091612987565b611d6a91906129a6565b905081600003611d7c57505050611eac565b8315611d98575030600090815260016020526040902054611da8565b80831015611da857505050611eac565b6000611db26111c7565b611dd45782600b5483611dc59190612987565b611dcf91906129a6565b611dd7565b60005b90506000611de58284612ad8565b90506000611df46002846129a6565b90506000611e02838361296f565b905047611e0e82612475565b6000611e1a8247612ad8565b90508515611e4757600083611e2f8684612987565b611e3991906129a6565b9050611e4585826125ee565b505b60155460405147916000916001600160a01b039091169083908381818185875af1925050503d8060008114611e98576040519150601f19603f3d011682016040523d82523d6000602084013e611e9d565b606091505b50505050505050505050505050505b506013805460ff19169055565b6001600160a01b03831660009081526001602052604090205481811015611f1d5760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b60448201526064016109d2565b6001600160a01b03841660009081526001602052604081208054849290611f45908490612ad8565b90915550506001600160a01b03831660009081526001602052604081208054849290611f7290849061296f565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611fbe91815260200190565b60405180910390a350505050565b6001600160a01b038316600090815260016020526040902054818110156120305760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b60448201526064016109d2565b6001600160a01b03841660009081526003602052604081205460ff168061206f57506001600160a01b03841660009081526003602052604090205460ff165b6001600160a01b03861660009081526005602052604090205490915060ff168015612098575080155b15612186576012548311156121005760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b60648201526084016109d2565b6001600160a01b038416600090815260016020526040902054601154612126858361296f565b11156121805760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152633ab73a1760e11b60648201526084016109d2565b50612229565b6001600160a01b03841660009081526005602052604090205460ff1680156121ac575080155b15612229576012548311156122295760405162461bcd60e51b815260206004820152603a60248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201527f206d617853656c6c5472616e73616374696f6e416d6f756e742e00000000000060648201526084016109d2565b6001600160a01b0380861660009081526005602052604080822054928716825281205460ff928316921690811561229157600f54610a8c9061226c90829061296f565b4210156122855761227e8160646126ac565b915061228b565b60085491505b506122ca565b82156122c557600f546019906122a890829061296f565b4210156122bb5761227e816103e76126ac565b50506007546122ca565b506009545b6014546001600160a01b038981169116148015906122f05750601354610100900460ff16155b80156122ff575060135460ff16155b1561230e5761230e6000611cfd565b600061231d8783600a546126f2565b9050600061233b8884600b54600c54612336919061296f565b6126f2565b90506000612349828461296f565b612353908a612ad8565b6001600160a01b038c16600090815260016020526040812080549293508b92909190612380908490612ad8565b909155505030600090815260016020526040812080548492906123a490849061296f565b909155505061dead600090815260016020527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d80548592906123e790849061296f565b90915550506001600160a01b038a166000908152600160205260408120805483929061241490849061296f565b92505081905550896001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161246091815260200190565b60405180910390a35050505050505050505050565b601354612494903090630100000090046001600160a01b031683611a82565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106124c9576124c9612aef565b60200260200101906001600160a01b031690816001600160a01b031681525050601360039054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561253c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125609190612b05565b8160018151811061257357612573612aef565b6001600160a01b03928316602091820292909201015260135460405163791ac94760e01b815263010000009091049091169063791ac947906125c2908590600090869030904290600401612b22565b600060405180830381600087803b1580156125dc57600080fd5b505af1925050508015611c5857505050565b60135461260d903090630100000090046001600160a01b031684611a82565b60135460405163f305d71960e01b8152306004820181905260248201859052600060448301819052606483015260848201524260a482015263010000009091046001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015612680573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906126a59190612b93565b5050505050565b600080600f54426126bd9190612ad8565b905083816126cc603286612ad8565b6126d69190612987565b6126e091906129a6565b6126ea9084612ad8565b949350505050565b60006127006103e880612987565b8261270b8587612987565b6127159190612987565b6126ea91906129a6565b60006020828403121561273157600080fd5b5035919050565b600060208083528351808285015260005b8181101561276557858101830151858201604001528201612749565b81811115612777576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146127a257600080fd5b50565b600080604083850312156127b857600080fd5b82356127c38161278d565b946020939093013593505050565b6000806000606084860312156127e657600080fd5b83356127f18161278d565b925060208401356128018161278d565b929592945050506040919091013590565b60008060008060008060c0878903121561282b57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b80151581146127a257600080fd5b6000806040838503121561287657600080fd5b82356128818161278d565b9150602083013561289181612855565b809150509250929050565b6000602082840312156128ae57600080fd5b81356128b98161278d565b9392505050565b6000602082840312156128d257600080fd5b81356128b981612855565b600080604083850312156128f057600080fd5b82356128fb8161278d565b915060208301356128918161278d565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561295257600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561298257612982612959565b500190565b60008160001904831182151516156129a1576129a1612959565b500290565b6000826129c357634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156129da57600080fd5b81516128b981612855565b600181815b80851115612a20578160001904821115612a0657612a06612959565b80851615612a1357918102915b93841c93908002906129ea565b509250929050565b600082612a3757506001610c29565b81612a4457506000610c29565b8160018114612a5a5760028114612a6457612a80565b6001915050610c29565b60ff841115612a7557612a75612959565b50506001821b610c29565b5060208310610133831016604e8410600b8410161715612aa3575081810a610c29565b612aad83836129e5565b8060001904821115612ac157612ac1612959565b029392505050565b60006128b960ff841683612a28565b600082821015612aea57612aea612959565b500390565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612b1757600080fd5b81516128b98161278d565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612b725784516001600160a01b031683529383019391830191600101612b4d565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612ba857600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220b28788a4725fc7a4befde4a872a7eb7ffa6946498aae4fa282df3f1ca13a04a164736f6c634300080f0033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef

Deployed Bytecode

0x60806040526004361061031e5760003560e01c80638124f7ac116101ab578063be617fa0116100f7578063d46b6a3011610095578063e0d2f9eb1161006f578063e0d2f9eb14610923578063e52fb9ec14610943578063f2fde38b14610959578063f7942b631461097957600080fd5b8063d46b6a301461087d578063dbe66ca0146108ad578063dd62ed3e146108dd57600080fd5b8063c8c8ebe4116100d1578063c8c8ebe41461081b578063cc1776d314610831578063cfd1940e14610847578063d24cd3ec1461086757600080fd5b8063be617fa0146107db578063c3a3c032146107f1578063c3f4f54f1461080657600080fd5b80639b39b65f11610164578063a9059cbb1161013e578063a9059cbb1461076f578063b40d09e21461078f578063bbde77c1146107a5578063bc43d849146107bb57600080fd5b80639b39b65f1461071a578063a457c2d71461073a578063a68bdac71461075a57600080fd5b80638124f7ac1461067b5780638512af8414610691578063868b0141146106b1578063893d20e8146106d15780638da5cb5b146106d157806395d89b41146106ef57600080fd5b80632d48f84f1161026a5780634f7041a5116102235780635cce86cd116101fd5780635cce86cd146105e257806370a082311461061b578063715018a6146106515780637b9e987a1461066657600080fd5b80634f7041a51461058d5780635149f984146105a357806351bc3c85146105c357600080fd5b80632d48f84f146104e7578063313ce567146105075780633227925f14610523578063395093511461054357806341aec3571461056357806346e35f031461057857600080fd5b80630eff4c64116102d75780631e293c10116102b15780631e293c10146104725780631eb25d131461049257806323b872dd146104a75780632c92293c146104c757600080fd5b80630eff4c641461042357806318160ddd146104475780631d4eaead1461045c57600080fd5b80630612f39d1461032a5780630622874914610341578063065f4b411461037457806306fdde0314610394578063095ea7b3146103d35780630ed92da71461040357600080fd5b3661032557005b600080fd5b34801561033657600080fd5b5061033f610999565b005b34801561034d57600080fd5b5061035761dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561038057600080fd5b5061033f61038f36600461271f565b610b6e565b3480156103a057600080fd5b5060408051808201909152600d81526c5468726565204d6f6e6b65797360981b60208201525b60405161036b9190612738565b3480156103df57600080fd5b506103f36103ee3660046127a5565b610c18565b604051901515815260200161036b565b34801561040f57600080fd5b50601554610357906001600160a01b031681565b34801561042f57600080fd5b50610439600e5481565b60405190815260200161036b565b34801561045357600080fd5b50600654610439565b34801561046857600080fd5b50610439600a5481565b34801561047e57600080fd5b5061033f61048d36600461271f565b610c2f565b34801561049e57600080fd5b50610439610d4d565b3480156104b357600080fd5b506103f36104c23660046127d1565b610d69565b3480156104d357600080fd5b5061033f6104e236600461271f565b610e00565b3480156104f357600080fd5b5061033f610502366004612812565b610f14565b34801561051357600080fd5b506040516012815260200161036b565b34801561052f57600080fd5b5061033f61053e36600461271f565b6110a7565b34801561054f57600080fd5b506103f361055e3660046127a5565b611122565b34801561056f57600080fd5b5061033f611159565b34801561058457600080fd5b506103f36111c7565b34801561059957600080fd5b5061043960075481565b3480156105af57600080fd5b5061033f6105be366004612863565b611207565b3480156105cf57600080fd5b506013546103f390610100900460ff1681565b3480156105ee57600080fd5b506103f36105fd36600461289c565b6001600160a01b031660009081526003602052604090205460ff1690565b34801561062757600080fd5b5061043961063636600461289c565b6001600160a01b031660009081526001602052604090205490565b34801561065d57600080fd5b5061033f6112ee565b34801561067257600080fd5b5061033f611371565b34801561068757600080fd5b5061043960095481565b34801561069d57600080fd5b5061033f6106ac36600461289c565b611483565b3480156106bd57600080fd5b5061033f6106cc3660046128c0565b61150a565b3480156106dd57600080fd5b506000546001600160a01b0316610357565b3480156106fb57600080fd5b50604080518082019091526002815261334d60f01b60208201526103c6565b34801561072657600080fd5b506013546103f39062010000900460ff1681565b34801561074657600080fd5b506103f36107553660046127a5565b611591565b34801561076657600080fd5b5061033f61160d565b34801561077b57600080fd5b506103f361078a3660046127a5565b611682565b34801561079b57600080fd5b50610439600f5481565b3480156107b157600080fd5b5061043960115481565b3480156107c757600080fd5b5061033f6107d636600461271f565b61168f565b3480156107e757600080fd5b50610439600b5481565b3480156107fd57600080fd5b5061043961170c565b34801561081257600080fd5b5061043961172c565b34801561082757600080fd5b5061043960125481565b34801561083d57600080fd5b5061043960085481565b34801561085357600080fd5b5061033f61086236600461271f565b61178b565b34801561087357600080fd5b50610439600c5481565b34801561088957600080fd5b506103f361089836600461289c565b60056020526000908152604090205460ff1681565b3480156108b957600080fd5b506103f36108c836600461289c565b60046020526000908152604090205460ff1681565b3480156108e957600080fd5b506104396108f83660046128dd565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561092f57600080fd5b5061033f61093e366004612863565b611807565b34801561094f57600080fd5b50610439600d5481565b34801561096557600080fd5b5061033f61097436600461289c565b6118f4565b34801561098557600080fd5b5061033f610994366004612863565b6119ed565b336109ac6000546001600160a01b031690565b6001600160a01b0316146109db5760405162461bcd60e51b81526004016109d29061290b565b60405180910390fd5b601054421015610a205760405162461bcd60e51b815260206004820152601060248201526f139bdd081e595d081d5b9b1bd8dad95960821b60448201526064016109d2565b6014546040516370a0823160e01b81523060048201526001600160a01b039091169060009082906370a0823190602401602060405180830381865afa158015610a6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a919190612940565b60135490915062010000900460ff1615610acf57610ab262093a804261296f565b601055600a610ac2826002612987565b610acc91906129a6565b90505b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015610b1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4091906129c8565b506040517f28bacca46f5c57fe13623e9d5093cb2fab892814aca9b39384ab86550d9aa67590600090a15050565b33610b816000546001600160a01b031690565b6001600160a01b031614610ba75760405162461bcd60e51b81526004016109d29061290b565b47336108fc6064610bb88585612987565b610bc291906129a6565b6040518115909202916000818181858888f19350505050158015610bea573d6000803e3d6000fd5b506040517fbfeaf8c13ada34fe89b506c8975a67daaf69c220fef97229c731f6cf3b3e741e90600090a15050565b6000610c25338484611a82565b5060015b92915050565b33610c426000546001600160a01b031690565b6001600160a01b031614610c685760405162461bcd60e51b81526004016109d29061290b565b6019811015610ca55760405162461bcd60e51b81526020600482015260096024820152686d696e20302e32352560b81b60448201526064016109d2565b612710811115610ce25760405162461bcd60e51b81526020600482015260086024820152676d6178203130302560c01b60448201526064016109d2565b61271081610cf26012600a612ac9565b610cff9062989680612987565b610d099190612987565b610d1391906129a6565b6012556040518181527f7c1cb3702d8e1fa6d24b12dd90670ab69c6d66d58233103d37da8b07d6b850ac906020015b60405180910390a150565b610d596012600a612ac9565b610d669062989680612987565b81565b6000610d76848484611b75565b6001600160a01b038416600090815260026020908152604080832033845290915290205482811015610de15760405162461bcd60e51b81526020600482015260146024820152735472616e73666572203e20616c6c6f77616e636560601b60448201526064016109d2565b610df58533610df08685612ad8565b611a82565b506001949350505050565b33610e136000546001600160a01b031690565b6001600160a01b031614610e395760405162461bcd60e51b81526004016109d29061290b565b600a811015610e735760405162461bcd60e51b81526020600482015260066024820152656d696e20312560d01b60448201526064016109d2565b6103e8811115610eb05760405162461bcd60e51b81526020600482015260086024820152676d6178203130302560c01b60448201526064016109d2565b6103e881610ec06012600a612ac9565b610ecd9062989680612987565b610ed79190612987565b610ee191906129a6565b6011556040518181527f9cbd2e55e2abf49d29273c1b9fb343c2828844b2aec156cfe2aec98ae1b72a9990602001610d42565b33610f276000546001600160a01b031690565b6001600160a01b031614610f4d5760405162461bcd60e51b81526004016109d29061290b565b6000610f5c600a6103e86129a6565b9050808711158015610f6e5750808611155b8015610f7a5750808511155b610fbb5760405162461bcd60e51b81526020600482015260126024820152710a8c2f040caf0c6cacac8e640dac2f0a8c2f60731b60448201526064016109d2565b6103e882610fc9858761296f565b610fd3919061296f565b1461102a5760405162461bcd60e51b815260206004820152602160248201527f546178657320646f6e27742061646420757020746f2064656e6f6d696e61746f6044820152603960f91b60648201526084016109d2565b600787905560088690556009859055600c839055600b829055600a8490556040805188815260208101889052908101869052606081018590526080810184905260a081018390527f95617e149b678679d65360792e6610c8fc9add72efd72fc3c8d94792801ca5c99060c00160405180910390a150505050505050565b336110ba6000546001600160a01b031690565b6001600160a01b0316146110e05760405162461bcd60e51b81526004016109d29061290b565b6110f26110ed428361296f565b611cba565b6040518181527f2d3b38a507b3fb0ee1aaa054f2d952d0ac517f18f1cba8857c1b0e2ed9d5dbd990602001610d42565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610c25918590610df090869061296f565b3361116c6000546001600160a01b031690565b6001600160a01b0316146111925760405162461bcd60e51b81526004016109d29061290b565b61119c6001611cfd565b6040517f50d9f00a1465121b958cf0aef21a53ed0bbe36c5a415abb27350d22b247a258f90600090a1565b60006103e8600e546006546111dc9190612987565b6111e691906129a6565b6014546001600160a01b031660009081526001602052604090205411919050565b3361121a6000546001600160a01b031690565b6001600160a01b0316146112405760405162461bcd60e51b81526004016109d29061290b565b6014546001600160a01b03908116908316036112915760405162461bcd60e51b815260206004820152601060248201526f0c6c2dc4ee840c6d0c2dcceca40c8caf60831b60448201526064016109d2565b6001600160a01b038216600081815260056020908152604091829020805460ff191685151517905590519182527fa5d0a2d9a2487cd749dbfa34962704a9f4ed5ff3fd9c6586c86d954070b552f091015b60405180910390a15050565b336113016000546001600160a01b031690565b6001600160a01b0316146113275760405162461bcd60e51b81526004016109d29061290b565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b336113846000546001600160a01b031690565b6001600160a01b0316146113aa5760405162461bcd60e51b81526004016109d29061290b565b600f54156113ec5760405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e53185d5b98da1959608a1b60448201526064016109d2565b42600f556103e86113ff6012600a612ac9565b61140c9062989680612987565b611417906005612987565b61142191906129a6565b6011556127106114336012600a612ac9565b6114409062989680612987565b61144b906032612987565b61145591906129a6565b6012556040517f2cb945e0498987ef06dbd68025b0bc276116c63345296379c28a8e8f09b47dc190600090a1565b336114966000546001600160a01b031690565b6001600160a01b0316146114bc5760405162461bcd60e51b81526004016109d29061290b565b601580546001600160a01b0319166001600160a01b0383169081179091556040519081527f6887369acbdc098350fa0bc1e3691469fe67c7bba8662473c718ad9b5658ff1e90602001610d42565b3361151d6000546001600160a01b031690565b6001600160a01b0316146115435760405162461bcd60e51b81526004016109d29061290b565b601380548215156101000261ff00199091161790556040517faffc63374f6f6c07a9f4b158efd5668a3684e1711b1c8e9ed9b848e11507082190610d4290831515815260200190565b905090565b3360009081526002602090815260408083206001600160a01b0386168452909152812054828110156115f45760405162461bcd60e51b815260206004820152600c60248201526b3c3020616c6c6f77616e636560a01b60448201526064016109d2565b6116033385610df08685612ad8565b5060019392505050565b336116206000546001600160a01b031690565b6001600160a01b0316146116465760405162461bcd60e51b81526004016109d29061290b565b6013805462ff00001916620100001790556040517f4aef80fb0c1ab90a77982dc86c9e9980ea16125ae57fea5089954547863f7f2390600090a1565b6000610c25338484611b75565b336116a26000546001600160a01b031690565b6001600160a01b0316146116c85760405162461bcd60e51b81526004016109d29061290b565b6103e88111156116d757600080fd5b600e8190556040518181527fa072eee57b8e01913ba01eab29d8a81117cf780e6c8984a3494477ce9cee846d90602001610d42565b6000601054421015611726574260105461158c9190612ad8565b50600090565b61dead600090815260016020527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d5460065461176a6012600a612ac9565b6117779062989680612987565b6117819190612ad8565b61158c919061296f565b3361179e6000546001600160a01b031690565b6001600160a01b0316146117c45760405162461bcd60e51b81526004016109d29061290b565b600a8111156117d257600080fd5b600d8190556040518181527fc075380b8410207b8cc14f0d254ab8c8a6766469631275e4500db835a1ba02cc90602001610d42565b3361181a6000546001600160a01b031690565b6001600160a01b0316146118405760405162461bcd60e51b81526004016109d29061290b565b306001600160a01b038316036118985760405162461bcd60e51b815260206004820152601a60248201527f63616e277420496e636c7564652074686520636f6e747261637400000000000060448201526064016109d2565b6001600160a01b038216600081815260046020908152604091829020805460ff19168515159081179091558251938452908301527fa22b25479919d4ac678f064a05daa1ee9c0adc3b8198942ea45255e364e04ed491016112e2565b336119076000546001600160a01b031690565b6001600160a01b03161461192d5760405162461bcd60e51b81526004016109d29061290b565b6001600160a01b0381166119925760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109d2565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b33611a006000546001600160a01b031690565b6001600160a01b031614611a265760405162461bcd60e51b81526004016109d29061290b565b6001600160a01b038216600081815260036020908152604091829020805460ff19168515159081179091558251938452908301527f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9291016112e2565b6001600160a01b038316611acc5760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b60448201526064016109d2565b6001600160a01b038216611b145760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b60448201526064016109d2565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611bc05760405162461bcd60e51b81526020600482015260126024820152715472616e736665722066726f6d207a65726f60701b60448201526064016109d2565b6001600160a01b038216611c095760405162461bcd60e51b815260206004820152601060248201526f5472616e7366657220746f207a65726f60801b60448201526064016109d2565b6001600160a01b03831660009081526004602052604090205460ff1680611c4857506001600160a01b03821660009081526004602052604090205460ff165b15611c5d57611c58838383611eb9565b505050565b6000600f5411611caf5760405162461bcd60e51b815260206004820152601760248201527f74726164696e67206e6f742079657420656e61626c656400000000000000000060448201526064016109d2565b611c58838383611fcc565b6010548111611cc857600080fd5b60108190556040518181527f8ff9dc93846a022986f54e8f219a1fa780225726858e39e850da826852b4042e90602001610d42565b6013805460ff191660019081179091553060009081526020919091526040812054600c54600b54919291611d31919061296f565b600d546014546001600160a01b0316600090815260016020526040812054929350916103e891611d6091612987565b611d6a91906129a6565b905081600003611d7c57505050611eac565b8315611d98575030600090815260016020526040902054611da8565b80831015611da857505050611eac565b6000611db26111c7565b611dd45782600b5483611dc59190612987565b611dcf91906129a6565b611dd7565b60005b90506000611de58284612ad8565b90506000611df46002846129a6565b90506000611e02838361296f565b905047611e0e82612475565b6000611e1a8247612ad8565b90508515611e4757600083611e2f8684612987565b611e3991906129a6565b9050611e4585826125ee565b505b60155460405147916000916001600160a01b039091169083908381818185875af1925050503d8060008114611e98576040519150601f19603f3d011682016040523d82523d6000602084013e611e9d565b606091505b50505050505050505050505050505b506013805460ff19169055565b6001600160a01b03831660009081526001602052604090205481811015611f1d5760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b60448201526064016109d2565b6001600160a01b03841660009081526001602052604081208054849290611f45908490612ad8565b90915550506001600160a01b03831660009081526001602052604081208054849290611f7290849061296f565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611fbe91815260200190565b60405180910390a350505050565b6001600160a01b038316600090815260016020526040902054818110156120305760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b60448201526064016109d2565b6001600160a01b03841660009081526003602052604081205460ff168061206f57506001600160a01b03841660009081526003602052604090205460ff165b6001600160a01b03861660009081526005602052604090205490915060ff168015612098575080155b15612186576012548311156121005760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b60648201526084016109d2565b6001600160a01b038416600090815260016020526040902054601154612126858361296f565b11156121805760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152633ab73a1760e11b60648201526084016109d2565b50612229565b6001600160a01b03841660009081526005602052604090205460ff1680156121ac575080155b15612229576012548311156122295760405162461bcd60e51b815260206004820152603a60248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201527f206d617853656c6c5472616e73616374696f6e416d6f756e742e00000000000060648201526084016109d2565b6001600160a01b0380861660009081526005602052604080822054928716825281205460ff928316921690811561229157600f54610a8c9061226c90829061296f565b4210156122855761227e8160646126ac565b915061228b565b60085491505b506122ca565b82156122c557600f546019906122a890829061296f565b4210156122bb5761227e816103e76126ac565b50506007546122ca565b506009545b6014546001600160a01b038981169116148015906122f05750601354610100900460ff16155b80156122ff575060135460ff16155b1561230e5761230e6000611cfd565b600061231d8783600a546126f2565b9050600061233b8884600b54600c54612336919061296f565b6126f2565b90506000612349828461296f565b612353908a612ad8565b6001600160a01b038c16600090815260016020526040812080549293508b92909190612380908490612ad8565b909155505030600090815260016020526040812080548492906123a490849061296f565b909155505061dead600090815260016020527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d80548592906123e790849061296f565b90915550506001600160a01b038a166000908152600160205260408120805483929061241490849061296f565b92505081905550896001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161246091815260200190565b60405180910390a35050505050505050505050565b601354612494903090630100000090046001600160a01b031683611a82565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106124c9576124c9612aef565b60200260200101906001600160a01b031690816001600160a01b031681525050601360039054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561253c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125609190612b05565b8160018151811061257357612573612aef565b6001600160a01b03928316602091820292909201015260135460405163791ac94760e01b815263010000009091049091169063791ac947906125c2908590600090869030904290600401612b22565b600060405180830381600087803b1580156125dc57600080fd5b505af1925050508015611c5857505050565b60135461260d903090630100000090046001600160a01b031684611a82565b60135460405163f305d71960e01b8152306004820181905260248201859052600060448301819052606483015260848201524260a482015263010000009091046001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015612680573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906126a59190612b93565b5050505050565b600080600f54426126bd9190612ad8565b905083816126cc603286612ad8565b6126d69190612987565b6126e091906129a6565b6126ea9084612ad8565b949350505050565b60006127006103e880612987565b8261270b8587612987565b6127159190612987565b6126ea91906129a6565b60006020828403121561273157600080fd5b5035919050565b600060208083528351808285015260005b8181101561276557858101830151858201604001528201612749565b81811115612777576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146127a257600080fd5b50565b600080604083850312156127b857600080fd5b82356127c38161278d565b946020939093013593505050565b6000806000606084860312156127e657600080fd5b83356127f18161278d565b925060208401356128018161278d565b929592945050506040919091013590565b60008060008060008060c0878903121561282b57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b80151581146127a257600080fd5b6000806040838503121561287657600080fd5b82356128818161278d565b9150602083013561289181612855565b809150509250929050565b6000602082840312156128ae57600080fd5b81356128b98161278d565b9392505050565b6000602082840312156128d257600080fd5b81356128b981612855565b600080604083850312156128f057600080fd5b82356128fb8161278d565b915060208301356128918161278d565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561295257600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561298257612982612959565b500190565b60008160001904831182151516156129a1576129a1612959565b500290565b6000826129c357634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156129da57600080fd5b81516128b981612855565b600181815b80851115612a20578160001904821115612a0657612a06612959565b80851615612a1357918102915b93841c93908002906129ea565b509250929050565b600082612a3757506001610c29565b81612a4457506000610c29565b8160018114612a5a5760028114612a6457612a80565b6001915050610c29565b60ff841115612a7557612a75612959565b50506001821b610c29565b5060208310610133831016604e8410600b8410161715612aa3575081810a610c29565b612aad83836129e5565b8060001904821115612ac157612ac1612959565b029392505050565b60006128b960ff841683612a28565b600082821015612aea57612aea612959565b500390565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612b1757600080fd5b81516128b98161278d565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612b725784516001600160a01b031683529383019391830191600101612b4d565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612ba857600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220b28788a4725fc7a4befde4a872a7eb7ffa6946498aae4fa282df3f1ca13a04a164736f6c634300080f0033

Deployed Bytecode Sourcemap

2637:16210:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15805:509;;;;;;;;;;;;;:::i;:::-;;4045:79;;;;;;;;;;;;4082:42;4045:79;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;4045:79:0;;;;;;;;16320:238;;;;;;;;;;-1:-1:-1;16320:238:0;;;;;:::i;:::-;;:::i;16687:78::-;;;;;;;;;;-1:-1:-1;16758:5:0;;;;;;;;;;;;-1:-1:-1;;;16758:5:0;;;;16687:78;;;;;;;:::i;17448:158::-;;;;;;;;;;-1:-1:-1;17448:158:0;;;;;:::i;:::-;;:::i;:::-;;;1630:14:1;;1623:22;1605:41;;1593:2;1578:18;17448:158:0;1465:187:1;4011:27:0;;;;;;;;;;-1:-1:-1;4011:27:0;;;;-1:-1:-1;;;;;4011:27:0;;;3537:34;;;;;;;;;;;;;;;;;;;1803:25:1;;;1791:2;1776:18;3537:34:0;1657:177:1;16943:89:0;;;;;;;;;;-1:-1:-1;17012:18:0;;16943:89;;3408:22;;;;;;;;;;;;;;;;6528:286;;;;;;;;;;-1:-1:-1;6528:286:0;;;;;:::i;:::-;;:::i;3135:57::-;;;;;;;;;;;;;:::i;17912:382::-;;;;;;;;;;-1:-1:-1;17912:382:0;;;;;:::i;:::-;;:::i;6244:278::-;;;;;;;;;;-1:-1:-1;6244:278:0;;;;;:::i;:::-;;:::i;10816:590::-;;;;;;;;;;-1:-1:-1;10816:590:0;;;;;:::i;:::-;;:::i;16859:78::-;;;;;;;;;;-1:-1:-1;16859:78:0;;3124:2;2970:36:1;;2958:2;2943:18;16859:78:0;2828:184:1;15377:198:0;;;;;;;;;;-1:-1:-1;15377:198:0;;;;;:::i;:::-;;:::i;18300:202::-;;;;;;;;;;-1:-1:-1;18300:202:0;;;;;:::i;:::-;;:::i;14210:125::-;;;;;;;;;;;;;:::i;11412:148::-;;;;;;;;;;;;;:::i;3312:23::-;;;;;;;;;;;;;;;;13895:176;;;;;;;;;;-1:-1:-1;13895:176:0;;;;;:::i;:::-;;:::i;3857:22::-;;;;;;;;;;-1:-1:-1;3857:22:0;;;;;;;;;;;14791:126;;;;;;;;;;-1:-1:-1;14791:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;14882:27:0;14858:4;14882:27;;;:18;:27;;;;;;;;;14791:126;17038:100;;;;;;;;;;-1:-1:-1;17038:100:0;;;;;:::i;:::-;-1:-1:-1;;;;;17118:18:0;17104:4;17118:18;;;:9;:18;;;;;;;17038:100;2221:140;;;;;;;;;;;;;:::i;14923:299::-;;;;;;;;;;;;;:::i;3373:28::-;;;;;;;;;;;;;;;;6089:149;;;;;;;;;;-1:-1:-1;6089:149:0;;;;;:::i;:::-;;:::i;14077:127::-;;;;;;;;;;-1:-1:-1;14077:127:0;;;;;:::i;:::-;;:::i;16603:78::-;;;;;;;;;;-1:-1:-1;16655:7:0;2077:6;-1:-1:-1;;;;;2077:6:0;16603:78;;16771:82;;;;;;;;;;-1:-1:-1;16844:7:0;;;;;;;;;;;;-1:-1:-1;;;16844:7:0;;;;16771:82;;3886:39;;;;;;;;;;-1:-1:-1;3886:39:0;;;;;;;;;;;18508:334;;;;;;;;;;-1:-1:-1;18508:334:0;;;;;:::i;:::-;;:::i;15228:143::-;;;;;;;;;;;;;:::i;17278:164::-;;;;;;;;;;-1:-1:-1;17278:164:0;;;;;:::i;:::-;;:::i;3578:27::-;;;;;;;;;;;;;;;;3728:31;;;;;;;;;;;;;;;;10522:288;;;;;;;;;;-1:-1:-1;10522:288:0;;;;;:::i;:::-;;:::i;3437:27::-;;;;;;;;;;;;;;;;13539:205;;;;;;;;;;;;;:::i;13750:139::-;;;;;;;;;;;;;:::i;3766:35::-;;;;;;;;;;;;;;;;3342:24;;;;;;;;;;;;;;;;10266:250;;;;;;;;;;-1:-1:-1;10266:250:0;;;;;:::i;:::-;;:::i;3471:26::-;;;;;;;;;;;;;;;;2940:35;;;;;;;;;;-1:-1:-1;2940:35:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;2885:48;;;;;;;;;;-1:-1:-1;2885:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17144:128;;;;;;;;;;-1:-1:-1;17144:128:0;;;;;:::i;:::-;-1:-1:-1;;;;;17242:19:0;;;17228:4;17242:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;17144:128;14341:249;;;;;;;;;;-1:-1:-1;14341:249:0;;;;;:::i;:::-;;:::i;3504:26::-;;;;;;;;;;;;;;;;2367:236;;;;;;;;;;-1:-1:-1;2367:236:0;;;;;:::i;:::-;;:::i;14596:189::-;;;;;;;;;;-1:-1:-1;14596:189:0;;;;;:::i;:::-;;:::i;15805:509::-;2148:10;2137:7;2050;2077:6;-1:-1:-1;;;;;2077:6:0;;2012:79;2137:7;-1:-1:-1;;;;;2137:21:0;;2129:66;;;;-1:-1:-1;;;2129:66:0;;;;;;;:::i;:::-;;;;;;;;;15888:20:::1;;15869:15;:39;;15861:68;;;::::0;-1:-1:-1;;;15861:68:0;;4981:2:1;15861:68:0::1;::::0;::::1;4963:21:1::0;5020:2;5000:18;;;4993:30;-1:-1:-1;;;5039:18:1;;;5032:46;5095:18;;15861:68:0::1;4779:340:1::0;15861:68:0::1;15971:15;::::0;16012:39:::1;::::0;-1:-1:-1;;;16012:39:0;;16045:4:::1;16012:39;::::0;::::1;160:51:1::0;-1:-1:-1;;;;;15971:15:0;;::::1;::::0;15940:21:::1;::::0;15971:15;;16012:24:::1;::::0;133:18:1;;16012:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16065:27;::::0;15998:53;;-1:-1:-1;16065:27:0;;::::1;;;16062:162;;;16139:40;3246:6;16139:15;:40;:::i;:::-;16118:20;:61:::0;16210:2:::1;16201:8;:6:::0;16208:1:::1;16201:8;:::i;:::-;:11;;;;:::i;:::-;16194:18;;16062:162;16234:43;::::0;-1:-1:-1;;;16234:43:0;;16258:10:::1;16234:43;::::0;::::1;6147:51:1::0;6214:18;;;6207:34;;;-1:-1:-1;;;;;16234:23:0;::::1;::::0;::::1;::::0;6120:18:1;;16234:43:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;16293:13:0::1;::::0;::::1;::::0;;;::::1;15850:464;;15805:509::o:0;16320:238::-;2148:10;2137:7;2050;2077:6;-1:-1:-1;;;;;2077:6:0;;2012:79;2137:7;-1:-1:-1;;;;;2137:21:0;;2129:66;;;;-1:-1:-1;;;2129:66:0;;;;;;;:::i;:::-;16426:21:::1;16466:10;16458:64;16518:3;16487:28;16499:16:::0;16426:21;16487:28:::1;:::i;:::-;:34;;;;:::i;:::-;16458:64;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;16538:12:0::1;::::0;::::1;::::0;;;::::1;16395:163;16320:238:::0;:::o;17448:158::-;17522:4;17539:37;17548:10;17560:7;17569:6;17539:8;:37::i;:::-;-1:-1:-1;17594:4:0;17448:158;;;;;:::o;6528:286::-;2148:10;2137:7;2050;2077:6;-1:-1:-1;;;;;2077:6:0;;2012:79;2137:7;-1:-1:-1;;;;;2137:21:0;;2129:66;;;;-1:-1:-1;;;2129:66:0;;;;;;;:::i;:::-;6625:2:::1;6614:7;:13;;6606:35;;;::::0;-1:-1:-1;;;6606:35:0;;6704:2:1;6606:35:0::1;::::0;::::1;6686:21:1::0;6743:1;6723:18;;;6716:29;-1:-1:-1;;;6761:18:1;;;6754:39;6810:18;;6606:35:0::1;6502:332:1::0;6606:35:0::1;6671:5;6660:7;:16;;6652:37;;;::::0;-1:-1:-1;;;6652:37:0;;7041:2:1;6652:37:0::1;::::0;::::1;7023:21:1::0;7080:1;7060:18;;;7053:29;-1:-1:-1;;;7098:18:1;;;7091:38;7146:18;;6652:37:0::1;6839:331:1::0;6652:37:0::1;6749:5;6739:7:::0;3179:13:::1;3124:2;3179;:13;:::i;:::-;3171:21;::::0;:5:::1;:21;:::i;:::-;6723:23;;;;:::i;:::-;:31;;;;:::i;:::-;6700:20;:54:::0;6770:36:::1;::::0;1803:25:1;;;6770:36:0::1;::::0;1791:2:1;1776:18;6770:36:0::1;;;;;;;;6528:286:::0;:::o;3135:57::-;3179:13;3124:2;3179;:13;:::i;:::-;3171:21;;:5;:21;:::i;:::-;3135:57;:::o;17912:382::-;18009:4;18026:36;18036:6;18044:9;18055:6;18026:9;:36::i;:::-;-1:-1:-1;;;;;18097:19:0;;18073:21;18097:19;;;:11;:19;;;;;;;;18117:10;18097:31;;;;;;;;18147:26;;;;18139:59;;;;-1:-1:-1;;;18139:59:0;;8760:2:1;18139:59:0;;;8742:21:1;8799:2;8779:18;;;8772:30;-1:-1:-1;;;8818:18:1;;;8811:50;8878:18;;18139:59:0;8558:344:1;18139:59:0;18209:55;18218:6;18226:10;18238:25;18257:6;18238:16;:25;:::i;:::-;18209:8;:55::i;:::-;-1:-1:-1;18282:4:0;;17912:382;-1:-1:-1;;;;17912:382:0:o;6244:278::-;2148:10;2137:7;2050;2077:6;-1:-1:-1;;;;;2077:6:0;;2012:79;2137:7;-1:-1:-1;;;;;2137:21:0;;2129:66;;;;-1:-1:-1;;;2129:66:0;;;;;;;:::i;:::-;6346:2:::1;6335:7;:13;;6327:32;;;::::0;-1:-1:-1;;;6327:32:0;;9239:2:1;6327:32:0::1;::::0;::::1;9221:21:1::0;9278:1;9258:18;;;9251:29;-1:-1:-1;;;9296:18:1;;;9289:36;9342:18;;6327:32:0::1;9037:329:1::0;6327:32:0::1;6389:4;6378:7;:15;;6370:36;;;::::0;-1:-1:-1;;;6370:36:0;;7041:2:1;6370:36:0::1;::::0;::::1;7023:21:1::0;7080:1;7060:18;;;7053:29;-1:-1:-1;;;7098:18:1;;;7091:38;7146:18;;6370:36:0::1;6839:331:1::0;6370:36:0::1;6462:4;6452:7:::0;3179:13:::1;3124:2;3179;:13;:::i;:::-;3171:21;::::0;:5:::1;:21;:::i;:::-;6436:23;;;;:::i;:::-;:30;;;;:::i;:::-;6417:16;:49:::0;6482:32:::1;::::0;1803:25:1;;;6482:32:0::1;::::0;1791:2:1;1776:18;6482:32:0::1;1657:177:1::0;10816:590:0;2148:10;2137:7;2050;2077:6;-1:-1:-1;;;;;2077:6:0;;2012:79;2137:7;-1:-1:-1;;;;;2137:21:0;;2129:66;;;;-1:-1:-1;;;2129:66:0;;;;;;;:::i;:::-;10938:11:::1;10950:33;3717:2;3674:4;10950:33;:::i;:::-;10938:45;;11007:6;11002:3;:11;;:25;;;;;11021:6;11015:4;:12;;11002:25;:44;;;;;11040:6;11029:9;:17;;11002:44;10994:74;;;::::0;-1:-1:-1;;;10994:74:0;;9573:2:1;10994:74:0::1;::::0;::::1;9555:21:1::0;9612:2;9592:18;;;9585:30;-1:-1:-1;;;9631:18:1;;;9624:48;9689:18;;10994:74:0::1;9371:342:1::0;10994:74:0::1;3674:4;11100:9:::0;11087:12:::1;11092:7:::0;11087:4;:12:::1;:::i;:::-;:22;;;;:::i;:::-;:39;11079:84;;;::::0;-1:-1:-1;;;11079:84:0;;9920:2:1;11079:84:0::1;::::0;::::1;9902:21:1::0;9959:2;9939:18;;;9932:30;9998:34;9978:18;;;9971:62;-1:-1:-1;;;10049:18:1;;;10042:31;10090:19;;11079:84:0::1;9718:397:1::0;11079:84:0::1;11174:6;:10:::0;;;11195:7:::1;:12:::0;;;11218:11:::1;:21:::0;;;11250:10:::1;:18:::0;;;11279:12:::1;:22:::0;;;11312:7:::1;:12:::0;;;11340:58:::1;::::0;;10407:25:1;;;10463:2;10448:18;;10441:34;;;10491:18;;;10484:34;;;10549:2;10534:18;;10527:34;;;10592:3;10577:19;;10570:35;;;10636:3;10621:19;;10614:35;;;11340:58:0::1;::::0;10394:3:1;10379:19;11340:58:0::1;;;;;;;10927:479;10816:590:::0;;;;;;:::o;15377:198::-;2148:10;2137:7;2050;2077:6;-1:-1:-1;;;;;2077:6:0;;2012:79;2137:7;-1:-1:-1;;;;;2137:21:0;;2129:66;;;;-1:-1:-1;;;2129:66:0;;;;;;;:::i;:::-;15462:57:::1;15484:34;15503:15;15484:18:::0;:34:::1;:::i;:::-;15462:21;:57::i;:::-;15535:32;::::0;1803:25:1;;;15535:32:0::1;::::0;1791:2:1;1776:18;15535:32:0::1;1657:177:1::0;18300:202:0;18405:10;18379:4;18426:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;18426:32:0;;;;;;;;;;18379:4;;18396:76;;18417:7;;18426:45;;18461:10;;18426:45;:::i;14210:125::-;2148:10;2137:7;2050;2077:6;-1:-1:-1;;;;;2077:6:0;;2012:79;2137:7;-1:-1:-1;;;;;2137:21:0;;2129:66;;;;-1:-1:-1;;;2129:66:0;;;;;;;:::i;:::-;14266:24:::1;14285:4;14266:18;:24::i;:::-;14306:21;::::0;::::1;::::0;;;::::1;14210:125::o:0;11412:148::-;11459:4;11548;11528:19;;11509:18;;:38;;;;:::i;:::-;:43;;;;:::i;:::-;11492:15;;-1:-1:-1;;;;;11492:15:0;11482:26;;;;:9;:26;;;;;;:70;;11412:148;-1:-1:-1;11412:148:0:o;13895:176::-;2148:10;2137:7;2050;2077:6;-1:-1:-1;;;;;2077:6:0;;2012:79;2137:7;-1:-1:-1;;;;;2137:21:0;;2129:66;;;;-1:-1:-1;;;2129:66:0;;;;;;;:::i;:::-;13974:15:::1;::::0;-1:-1:-1;;;;;13974:15:0;;::::1;13969:20:::0;;::::1;::::0;13961:48:::1;;;::::0;-1:-1:-1;;;13961:48:0;;10862:2:1;13961:48:0::1;::::0;::::1;10844:21:1::0;10901:2;10881:18;;;10874:30;-1:-1:-1;;;10920:18:1;;;10913:46;10976:18;;13961:48:0::1;10660:340:1::0;13961:48:0::1;-1:-1:-1::0;;;;;14020:10:0;::::1;;::::0;;;:5:::1;:10;::::0;;;;;;;;:14;;-1:-1:-1;;14020:14:0::1;::::0;::::1;;;::::0;;14050:13;;160:51:1;;;14050:13:0::1;::::0;133:18:1;14050:13:0::1;;;;;;;;13895:176:::0;;:::o;2221:140::-;2148:10;2137:7;2050;2077:6;-1:-1:-1;;;;;2077:6:0;;2012:79;2137:7;-1:-1:-1;;;;;2137:21:0;;2129:66;;;;-1:-1:-1;;;2129:66:0;;;;;;;:::i;:::-;2320:1:::1;2304:6:::0;;2283:40:::1;::::0;-1:-1:-1;;;;;2304:6:0;;::::1;::::0;2283:40:::1;::::0;2320:1;;2283:40:::1;2351:1;2334:19:::0;;-1:-1:-1;;;;;;2334:19:0::1;::::0;;2221:140::o;14923:299::-;2148:10;2137:7;2050;2077:6;-1:-1:-1;;;;;2077:6:0;;2012:79;2137:7;-1:-1:-1;;;;;2137:21:0;;2129:66;;;;-1:-1:-1;;;2129:66:0;;;;;;;:::i;:::-;14988:15:::1;::::0;:18;14980:45:::1;;;::::0;-1:-1:-1;;;14980:45:0;;11207:2:1;14980:45:0::1;::::0;::::1;11189:21:1::0;11246:2;11226:18;;;11219:30;-1:-1:-1;;;11265:18:1;;;11258:45;11320:18;;14980:45:0::1;11005:339:1::0;14980:45:0::1;15052:15;15036;:31:::0;15117:4:::1;3179:13;3124:2;3179;:13;:::i;:::-;3171:21;::::0;:5:::1;:21;:::i;:::-;15097:17;::::0;15113:1:::1;15097:17;:::i;:::-;:24;;;;:::i;:::-;15078:16;:43:::0;15176:5:::1;3179:13;3124:2;3179;:13;:::i;:::-;3171:21;::::0;:5:::1;:21;:::i;:::-;15155:18;::::0;15171:2:::1;15155:18;:::i;:::-;:26;;;;:::i;:::-;15132:20;:49:::0;15197:17:::1;::::0;::::1;::::0;;;::::1;14923:299::o:0;6089:149::-;2148:10;2137:7;2050;2077:6;-1:-1:-1;;;;;2077:6:0;;2012:79;2137:7;-1:-1:-1;;;;;2137:21:0;;2129:66;;;;-1:-1:-1;;;2129:66:0;;;;;;;:::i;:::-;6163:12:::1;:22:::0;;-1:-1:-1;;;;;;6163:22:0::1;-1:-1:-1::0;;;;;6163:22:0;::::1;::::0;;::::1;::::0;;;6201:29:::1;::::0;160:51:1;;;6201:29:0::1;::::0;148:2:1;133:18;6201:29:0::1;14:203:1::0;14077:127:0;2148:10;2137:7;2050;2077:6;-1:-1:-1;;;;;2077:6:0;;2012:79;2137:7;-1:-1:-1;;;;;2137:21:0;;2129:66;;;;-1:-1:-1;;;2129:66:0;;;;;;;:::i;:::-;14143:10:::1;:17:::0;;;::::1;;;;-1:-1:-1::0;;14143:17:0;;::::1;;::::0;;14176:20:::1;::::0;::::1;::::0;::::1;::::0;14154:6;1630:14:1;1623:22;1605:41;;1593:2;1578:18;;1465:187;16672:7:0;16665:14;;16603:78;:::o;18508:334::-;18645:10;18592:4;18633:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;18633:32:0;;;;;;;;;;18684:35;;;;18676:60;;;;-1:-1:-1;;;18676:60:0;;11551:2:1;18676:60:0;;;11533:21:1;11590:2;11570:18;;;11563:30;-1:-1:-1;;;11609:18:1;;;11602:42;11661:18;;18676:60:0;11349:336:1;18676:60:0;18747:65;18756:10;18768:7;18777:34;18796:15;18777:16;:34;:::i;18747:65::-;-1:-1:-1;18830:4:0;;18508:334;-1:-1:-1;;;18508:334:0:o;15228:143::-;2148:10;2137:7;2050;2077:6;-1:-1:-1;;;;;2077:6:0;;2012:79;2137:7;-1:-1:-1;;;;;2137:21:0;;2129:66;;;;-1:-1:-1;;;2129:66:0;;;;;;;:::i;:::-;15299:27:::1;:32:::0;;-1:-1:-1;;15299:32:0::1;::::0;::::1;::::0;;15347:16:::1;::::0;::::1;::::0;15299:32;;15347:16:::1;15228:143::o:0;17278:164::-;17355:4;17372:40;17382:10;17394:9;17405:6;17372:9;:40::i;10522:288::-;2148:10;2137:7;2050;2077:6;-1:-1:-1;;;;;2077:6:0;;2012:79;2137:7;-1:-1:-1;;;;;2137:21:0;;2129:66;;;;-1:-1:-1;;;2129:66:0;;;;;;;:::i;:::-;10660:4:::1;10628:30;:36;;10620:45;;;::::0;::::1;;10676:19;:50:::0;;;10742:60:::1;::::0;1803:25:1;;;10742:60:0::1;::::0;1791:2:1;1776:18;10742:60:0::1;1657:177:1::0;13539:205:0;13604:4;13639:20;;13623:15;:36;13620:97;;;13702:15;13681:20;;:36;;;;:::i;13620:97::-;-1:-1:-1;13735:1:0;;13539:205::o;13750:139::-;13873:6;13797:4;13855:26;;;:9;:26;;;;13835:18;;3179:13;3124:2;3179;:13;:::i;:::-;3171:21;;:5;:21;:::i;:::-;13821:32;;;;:::i;:::-;13820:61;;;;:::i;10266:250::-;2148:10;2137:7;2050;2077:6;-1:-1:-1;;;;;2077:6:0;;2012:79;2137:7;-1:-1:-1;;;;;2137:21:0;;2129:66;;;;-1:-1:-1;;;2129:66:0;;;;;;;:::i;:::-;10381:2:::1;10356:23;:27;;10348:36;;;::::0;::::1;;10412:12;:36:::0;;;10464:44:::1;::::0;1803:25:1;;;10464:44:0::1;::::0;1791:2:1;1776:18;10464:44:0::1;1657:177:1::0;14341:249:0;2148:10;2137:7;2050;2077:6;-1:-1:-1;;;;;2077:6:0;;2012:79;2137:7;-1:-1:-1;;;;;2137:21:0;;2129:66;;;;-1:-1:-1;;;2129:66:0;;;;;;;:::i;:::-;14456:4:::1;-1:-1:-1::0;;;;;14439:22:0;::::1;::::0;14431:60:::1;;;::::0;-1:-1:-1;;;14431:60:0;;11892:2:1;14431:60:0::1;::::0;::::1;11874:21:1::0;11931:2;11911:18;;;11904:30;11970:28;11950:18;;;11943:56;12016:18;;14431:60:0::1;11690:350:1::0;14431:60:0::1;-1:-1:-1::0;;;;;14502:25:0;::::1;;::::0;;;:16:::1;:25;::::0;;;;;;;;:33;;-1:-1:-1;;14502:33:0::1;::::0;::::1;;::::0;;::::1;::::0;;;14551:31;;12213:51:1;;;12280:18;;;12273:50;14551:31:0::1;::::0;12186:18:1;14551:31:0::1;12045:284:1::0;2367:236:0;2148:10;2137:7;2050;2077:6;-1:-1:-1;;;;;2077:6:0;;2012:79;2137:7;-1:-1:-1;;;;;2137:21:0;;2129:66;;;;-1:-1:-1;;;2129:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2448:22:0;::::1;2440:73;;;::::0;-1:-1:-1;;;2440:73:0;;12536:2:1;2440:73:0::1;::::0;::::1;12518:21:1::0;12575:2;12555:18;;;12548:30;12614:34;12594:18;;;12587:62;-1:-1:-1;;;12665:18:1;;;12658:36;12711:19;;2440:73:0::1;12334:402:1::0;2440:73:0::1;2550:6;::::0;;2529:38:::1;::::0;-1:-1:-1;;;;;2529:38:0;;::::1;::::0;2550:6;::::1;::::0;2529:38:::1;::::0;::::1;2578:6;:17:::0;;-1:-1:-1;;;;;;2578:17:0::1;-1:-1:-1::0;;;;;2578:17:0;;;::::1;::::0;;;::::1;::::0;;2367:236::o;14596:189::-;2148:10;2137:7;2050;2077:6;-1:-1:-1;;;;;2077:6:0;;2012:79;2137:7;-1:-1:-1;;;;;2137:21:0;;2129:66;;;;-1:-1:-1;;;2129:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14692:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:35;;-1:-1:-1;;14692:35:0::1;::::0;::::1;;::::0;;::::1;::::0;;;14743:34;;12213:51:1;;;12280:18;;;12273:50;14743:34:0::1;::::0;12186:18:1;14743:34:0::1;12045:284:1::0;17612:294:0;-1:-1:-1;;;;;17702:19:0;;17694:49;;;;-1:-1:-1;;;17694:49:0;;12943:2:1;17694:49:0;;;12925:21:1;12982:2;12962:18;;;12955:30;-1:-1:-1;;;13001:18:1;;;12994:47;13058:18;;17694:49:0;12741:341:1;17694:49:0;-1:-1:-1;;;;;17762:21:0;;17754:49;;;;-1:-1:-1;;;17754:49:0;;13289:2:1;17754:49:0;;;13271:21:1;13328:2;13308:18;;;13301:30;-1:-1:-1;;;13347:18:1;;;13340:45;13402:18;;17754:49:0;13087:339:1;17754:49:0;-1:-1:-1;;;;;17814:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;17866:32;;1803:25:1;;;17866:32:0;;1776:18:1;17866:32:0;;;;;;;17612:294;;;:::o;6820:501::-;-1:-1:-1;;;;;6913:20:0;;6905:51;;;;-1:-1:-1;;;6905:51:0;;13633:2:1;6905:51:0;;;13615:21:1;13672:2;13652:18;;;13645:30;-1:-1:-1;;;13691:18:1;;;13684:48;13749:18;;6905:51:0;13431:342:1;6905:51:0;-1:-1:-1;;;;;6975:23:0;;6967:52;;;;-1:-1:-1;;;6967:52:0;;13980:2:1;6967:52:0;;;13962:21:1;14019:2;13999:18;;;13992:30;-1:-1:-1;;;14038:18:1;;;14031:46;14094:18;;6967:52:0;13778:340:1;6967:52:0;-1:-1:-1;;;;;7033:24:0;;;;;;:16;:24;;;;;;;;;:55;;-1:-1:-1;;;;;;7061:27:0;;;;;;:16;:27;;;;;;;;7033:55;7030:284;;;7103:43;7120:6;7128:9;7139:6;7103:16;:43::i;:::-;6820:501;;;:::o;7030:284::-;7202:1;7186:15;;:17;7178:52;;;;-1:-1:-1;;;7178:52:0;;14325:2:1;7178:52:0;;;14307:21:1;14364:2;14344:18;;;14337:30;14403:25;14383:18;;;14376:53;14446:18;;7178:52:0;14123:347:1;7178:52:0;7245:39;7260:6;7267:9;7277:6;7245:14;:39::i;15581:218::-;15672:20;;15658:13;:34;15650:43;;;;;;15704:20;:34;;;15754:37;;1803:25:1;;;15754:37:0;;1791:2:1;1776:18;15754:37:0;1657:177:1;11566:1142:0;5088:27;:34;;-1:-1:-1;;5088:34:0;5118:4;5088:34;;;;;;11682:4:::1;5088:27:::0;11664:24;;;::::1;::::0;;;;;;;;11726:10:::1;::::0;11713:12:::1;::::0;11664:24;;5088:27;11713:23:::1;::::0;11726:10;11713:23:::1;:::i;:::-;11791:12;::::0;11774:15:::1;::::0;-1:-1:-1;;;;;11774:15:0::1;11747:16;11764:26:::0;;;:9:::1;:26;::::0;;;;;11699:37;;-1:-1:-1;11747:16:0;11804:4:::1;::::0;11764:39:::1;::::0;::::1;:::i;:::-;:44;;;;:::i;:::-;11747:61;;11822:8;11832:1;11822:11:::0;11819:22:::1;;11834:7;;;;;11819:22;11854:12;11851:134;;;-1:-1:-1::0;11911:4:0::1;11893:24;::::0;;;:9:::1;:24;::::0;;;;;11851:134:::1;;;11952:11;11936:15;:27;11933:52;;;11978:7;;;;;11933:52;11997:22;12030:17;:15;:17::i;:::-;:65;;12087:8;12073:12;;12061:11;:24;;;;:::i;:::-;12060:35;;;;:::i;:::-;12030:65;;;12048:1;12030:65;11997:98:::0;-1:-1:-1;12108:20:0::1;12130:29;11997:98:::0;12130:11;:29:::1;:::i;:::-;12108:51:::0;-1:-1:-1;12172:12:0::1;12185:19;12203:1;12185:17:::0;:19:::1;:::i;:::-;12172:32:::0;-1:-1:-1;12215:14:0::1;12230:23;12238:15:::0;12172:32;12230:23:::1;:::i;:::-;12215:38:::0;-1:-1:-1;12287:21:0::1;12319:27;12215:38:::0;12319:16:::1;:27::i;:::-;12357:11;12370:41;12394:17:::0;12370:21:::1;:41;:::i;:::-;12357:55:::0;-1:-1:-1;12428:19:0;;12425:135:::1;;12463:11;12494:9:::0;12478:14:::1;12485:7:::0;12478:6;:14:::1;:::i;:::-;12477:26;;;;:::i;:::-;12463:40;;12518:30;12532:7;12541:6;12518:13;:30::i;:::-;12448:112;12425:135;12636:12;::::0;:42:::1;::::0;12589:21:::1;::::0;12570:18:::1;::::0;-1:-1:-1;;;;;12636:12:0;;::::1;::::0;12589:21;;12570:18;12636:42;12570:18;12636:42;12589:21;12636:12;:42:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;;;;;;5133:1:0::1;-1:-1:-1::0;5145:27:0;:35;;-1:-1:-1;;5145:35:0;;;11566:1142::o;9921:339::-;-1:-1:-1;;;;;10034:17:0;;10013:18;10034:17;;;:9;:17;;;;;;10070:23;;;;10062:60;;;;-1:-1:-1;;;10062:60:0;;14887:2:1;10062:60:0;;;14869:21:1;14926:2;14906:18;;;14899:30;-1:-1:-1;;;14945:18:1;;;14938:54;15009:18;;10062:60:0;14685:348:1;10062:60:0;-1:-1:-1;;;;;10133:17:0;;;;;;:9;:17;;;;;:25;;10152:6;;10133:17;:25;;10152:6;;10133:25;:::i;:::-;;;;-1:-1:-1;;;;;;;10169:20:0;;;;;;:9;:20;;;;;:28;;10191:6;;10169:20;:28;;10191:6;;10169:28;:::i;:::-;;;;;;;;10235:9;-1:-1:-1;;;;;10219:33:0;10228:6;-1:-1:-1;;;;;10219:33:0;;10245:6;10219:33;;;;1803:25:1;;1791:2;1776:18;;1657:177;10219:33:0;;;;;;;;10002:258;9921:339;;;:::o;7327:2189::-;-1:-1:-1;;;;;7438:17:0;;7417:18;7438:17;;;:9;:17;;;;;;7474:23;;;;7466:60;;;;-1:-1:-1;;;7466:60:0;;14887:2:1;7466:60:0;;;14869:21:1;14926:2;14906:18;;;14899:30;-1:-1:-1;;;14945:18:1;;;14938:54;15009:18;;7466:60:0;14685:348:1;7466:60:0;-1:-1:-1;;;;;7560:26:0;;7537:20;7560:26;;;:18;:26;;;;;;;;;:59;;-1:-1:-1;;;;;;7590:29:0;;;;;;:18;:29;;;;;;;;7560:59;-1:-1:-1;;;;;7648:13:0;;;;;;:5;:13;;;;;;7537:82;;-1:-1:-1;7648:13:0;;:46;;;;;7679:15;7678:16;7648:46;7630:684;;;7757:20;;7747:6;:30;;7721:132;;;;-1:-1:-1;;;7721:132:0;;15240:2:1;7721:132:0;;;15222:21:1;15279:2;15259:18;;;15252:30;15318:34;15298:18;;;15291:62;-1:-1:-1;;;15369:18:1;;;15362:38;15417:19;;7721:132:0;15038:404:1;7721:132:0;-1:-1:-1;;;;;17118:18:0;;7868:32;17118:18;;;:9;:18;;;;;;8001:16;;7964:33;7991:6;17118:18;7964:33;:::i;:::-;:53;;7938:151;;;;-1:-1:-1;;;7938:151:0;;15649:2:1;7938:151:0;;;15631:21:1;15688:2;15668:18;;;15661:30;15727:34;15707:18;;;15700:62;-1:-1:-1;;;15778:18:1;;;15771:34;15822:19;;7938:151:0;15447:400:1;7938:151:0;7706:395;7630:684;;;-1:-1:-1;;;;;8125:16:0;;;;;;:5;:16;;;;;;;;:49;;;;;8159:15;8158:16;8125:49;8107:207;;;8219:20;;8209:6;:30;;8201:101;;;;-1:-1:-1;;;8201:101:0;;16054:2:1;8201:101:0;;;16036:21:1;16093:2;16073:18;;;16066:30;16132:34;16112:18;;;16105:62;16203:28;16183:18;;;16176:56;16249:19;;8201:101:0;15852:422:1;8201:101:0;-1:-1:-1;;;;;8337:13:0;;;8326:10;8337:13;;;:5;:13;;;;;;;8373:16;;;;;;;;8337:13;;;;;8373:16;;8419:491;;;;8517:15;;8467:10;;8517:31;;8467:10;;8517:31;:::i;:::-;8501:15;:47;8498:143;;;8572:33;8585:15;8601:3;8572:12;:33::i;:::-;8568:37;;8498:143;;;8634:7;;8630:11;;8498:143;8429:228;8419:491;;;8675:5;8672:238;;;8760:15;;8716:10;;8760:30;;8716:10;;8760:30;:::i;:::-;8744:15;:46;8741:136;;;8814:32;8827:14;8842:3;8814:12;:32::i;8741:136::-;-1:-1:-1;;8871:6:0;;8672:238;;;-1:-1:-1;8899:11:0;;8672:238;8935:15;;-1:-1:-1;;;;;8927:23:0;;;8935:15;;8927:23;;;;8926:40;;-1:-1:-1;8955:10:0;;;;;;;8954:11;8926:40;:72;;;;-1:-1:-1;8970:27:0;;;;8969:28;8926:72;8923:115;;;9013:25;9032:5;9013:18;:25::i;:::-;9051;9077:35;9091:6;9099:3;9104:7;;9077:13;:35::i;:::-;9051:61;;9123:18;9142:51;9156:6;9164:3;9180:12;;9169:10;;:23;;;;:::i;:::-;9142:13;:51::i;:::-;9123:70;-1:-1:-1;9204:16:0;9229:36;9123:70;9229:20;:36;:::i;:::-;9221:45;;:6;:45;:::i;:::-;-1:-1:-1;;;;;9279:17:0;;;;;;:9;:17;;;;;:25;;9204:62;;-1:-1:-1;9298:6:0;;9279:17;;;:25;;9298:6;;9279:25;:::i;:::-;;;;-1:-1:-1;;9333:4:0;9315:24;;;;:9;:24;;;;;:41;;9343:13;;9315:24;:41;;9343:13;;9315:41;:::i;:::-;;;;-1:-1:-1;;4082:42:0;9367:21;;;;:9;:21;;;:43;;9390:20;;9367:21;:43;;9390:20;;9367:43;:::i;:::-;;;;-1:-1:-1;;;;;;;9421:20:0;;;;;;:9;:20;;;;;:33;;9443:11;;9421:20;:33;;9443:11;;9421:33;:::i;:::-;;;;;;;;9486:9;-1:-1:-1;;;;;9470:38:0;9479:6;-1:-1:-1;;;;;9470:38:0;;9496:11;9470:38;;;;1803:25:1;;1791:2;1776:18;;1657:177;9470:38:0;;;;;;;;7406:2110;;;;;;;;7327:2189;;;:::o;12714:462::-;12804:10;;12772:52;;12789:4;;12804:10;;;-1:-1:-1;;;;;12804:10:0;12817:6;12772:8;:52::i;:::-;12859:16;;;12873:1;12859:16;;;;;;;;12835:21;;12859:16;;;;;;;;;;-1:-1:-1;12859:16:0;12835:40;;12904:4;12886;12891:1;12886:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;12886:23:0;;;-1:-1:-1;;;;;12886:23:0;;;;;12930:10;;;;;;;;;-1:-1:-1;;;;;12930:10:0;-1:-1:-1;;;;;12930:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12920:4;12925:1;12920:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;12920:27:0;;;:7;;;;;;;;;:27;12964:10;;:186;;-1:-1:-1;;;12964:186:0;;:10;;;;;;;;:61;;:186;;13040:6;;13061:1;;13077:4;;13104;;13124:15;;12964:186;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12761:415;12714:462;:::o;13182:351::-;13290:10;;13258:57;;13275:4;;13290:10;;;-1:-1:-1;;;;;13290:10:0;13303:11;13258:8;:57::i;:::-;13326:10;;:199;;-1:-1:-1;;;13326:199:0;;13393:4;13326:199;;;18125:34:1;;;18175:18;;;18168:34;;;13439:1:0;18218:18:1;;;18211:34;;;18261:18;;;18254:34;18304:19;;;18297:44;13499:15:0;18357:19:1;;;18350:35;13326:10:0;;;;-1:-1:-1;;;;;13326:10:0;;:26;;13360:9;;18059:19:1;;13326:199:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;13182:351;;:::o;9522:211::-;9594:4;9610:20;9647:15;;9631;:31;;;;:::i;:::-;9610:52;-1:-1:-1;9716:8:0;9610:52;9689:9;9696:2;9689:6;:9;:::i;:::-;9688:27;;;;:::i;:::-;:36;;;;:::i;:::-;9680:45;;:6;:45;:::i;:::-;9673:52;9522:211;-1:-1:-1;;;;9522:211:0:o;9739:176::-;9824:4;9875:31;3674:4;;9875:31;:::i;:::-;9860:10;9849;9856:3;9849:6;:10;:::i;:::-;:21;;;;:::i;:::-;9848:59;;;;:::i;222:180:1:-;281:6;334:2;322:9;313:7;309:23;305:32;302:52;;;350:1;347;340:12;302:52;-1:-1:-1;373:23:1;;222:180;-1:-1:-1;222:180:1:o;407:597::-;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;;;845:6;842:1;839:13;836:91;;;915:1;910:2;901:6;890:9;886:22;882:31;875:42;836:91;-1:-1:-1;988:2:1;967:15;-1:-1:-1;;963:29:1;948:45;;;;995:2;944:54;;407:597;-1:-1:-1;;;407:597:1:o;1009:131::-;-1:-1:-1;;;;;1084:31:1;;1074:42;;1064:70;;1130:1;1127;1120:12;1064:70;1009:131;:::o;1145:315::-;1213:6;1221;1274:2;1262:9;1253:7;1249:23;1245:32;1242:52;;;1290:1;1287;1280:12;1242:52;1329:9;1316:23;1348:31;1373:5;1348:31;:::i;:::-;1398:5;1450:2;1435:18;;;;1422:32;;-1:-1:-1;;;1145:315:1:o;1839:456::-;1916:6;1924;1932;1985:2;1973:9;1964:7;1960:23;1956:32;1953:52;;;2001:1;1998;1991:12;1953:52;2040:9;2027:23;2059:31;2084:5;2059:31;:::i;:::-;2109:5;-1:-1:-1;2166:2:1;2151:18;;2138:32;2179:33;2138:32;2179:33;:::i;:::-;1839:456;;2231:7;;-1:-1:-1;;;2285:2:1;2270:18;;;;2257:32;;1839:456::o;2300:523::-;2404:6;2412;2420;2428;2436;2444;2497:3;2485:9;2476:7;2472:23;2468:33;2465:53;;;2514:1;2511;2504:12;2465:53;-1:-1:-1;;2537:23:1;;;2607:2;2592:18;;2579:32;;-1:-1:-1;2658:2:1;2643:18;;2630:32;;2709:2;2694:18;;2681:32;;-1:-1:-1;2760:3:1;2745:19;;2732:33;;-1:-1:-1;2812:3:1;2797:19;2784:33;;-1:-1:-1;2300:523:1;-1:-1:-1;2300:523:1:o;3017:118::-;3103:5;3096:13;3089:21;3082:5;3079:32;3069:60;;3125:1;3122;3115:12;3140:382;3205:6;3213;3266:2;3254:9;3245:7;3241:23;3237:32;3234:52;;;3282:1;3279;3272:12;3234:52;3321:9;3308:23;3340:31;3365:5;3340:31;:::i;:::-;3390:5;-1:-1:-1;3447:2:1;3432:18;;3419:32;3460:30;3419:32;3460:30;:::i;:::-;3509:7;3499:17;;;3140:382;;;;;:::o;3527:247::-;3586:6;3639:2;3627:9;3618:7;3614:23;3610:32;3607:52;;;3655:1;3652;3645:12;3607:52;3694:9;3681:23;3713:31;3738:5;3713:31;:::i;:::-;3763:5;3527:247;-1:-1:-1;;;3527:247:1:o;3779:241::-;3835:6;3888:2;3876:9;3867:7;3863:23;3859:32;3856:52;;;3904:1;3901;3894:12;3856:52;3943:9;3930:23;3962:28;3984:5;3962:28;:::i;4025:388::-;4093:6;4101;4154:2;4142:9;4133:7;4129:23;4125:32;4122:52;;;4170:1;4167;4160:12;4122:52;4209:9;4196:23;4228:31;4253:5;4228:31;:::i;:::-;4278:5;-1:-1:-1;4335:2:1;4320:18;;4307:32;4348:33;4307:32;4348:33;:::i;4418:356::-;4620:2;4602:21;;;4639:18;;;4632:30;4698:34;4693:2;4678:18;;4671:62;4765:2;4750:18;;4418:356::o;5124:184::-;5194:6;5247:2;5235:9;5226:7;5222:23;5218:32;5215:52;;;5263:1;5260;5253:12;5215:52;-1:-1:-1;5286:16:1;;5124:184;-1:-1:-1;5124:184:1:o;5313:127::-;5374:10;5369:3;5365:20;5362:1;5355:31;5405:4;5402:1;5395:15;5429:4;5426:1;5419:15;5445:128;5485:3;5516:1;5512:6;5509:1;5506:13;5503:39;;;5522:18;;:::i;:::-;-1:-1:-1;5558:9:1;;5445:128::o;5578:168::-;5618:7;5684:1;5680;5676:6;5672:14;5669:1;5666:21;5661:1;5654:9;5647:17;5643:45;5640:71;;;5691:18;;:::i;:::-;-1:-1:-1;5731:9:1;;5578:168::o;5751:217::-;5791:1;5817;5807:132;;5861:10;5856:3;5852:20;5849:1;5842:31;5896:4;5893:1;5886:15;5924:4;5921:1;5914:15;5807:132;-1:-1:-1;5953:9:1;;5751:217::o;6252:245::-;6319:6;6372:2;6360:9;6351:7;6347:23;6343:32;6340:52;;;6388:1;6385;6378:12;6340:52;6420:9;6414:16;6439:28;6461:5;6439:28;:::i;7175:422::-;7264:1;7307:5;7264:1;7321:270;7342:7;7332:8;7329:21;7321:270;;;7401:4;7397:1;7393:6;7389:17;7383:4;7380:27;7377:53;;;7410:18;;:::i;:::-;7460:7;7450:8;7446:22;7443:55;;;7480:16;;;;7443:55;7559:22;;;;7519:15;;;;7321:270;;;7325:3;7175:422;;;;;:::o;7602:806::-;7651:5;7681:8;7671:80;;-1:-1:-1;7722:1:1;7736:5;;7671:80;7770:4;7760:76;;-1:-1:-1;7807:1:1;7821:5;;7760:76;7852:4;7870:1;7865:59;;;;7938:1;7933:130;;;;7845:218;;7865:59;7895:1;7886:10;;7909:5;;;7933:130;7970:3;7960:8;7957:17;7954:43;;;7977:18;;:::i;:::-;-1:-1:-1;;8033:1:1;8019:16;;8048:5;;7845:218;;8147:2;8137:8;8134:16;8128:3;8122:4;8119:13;8115:36;8109:2;8099:8;8096:16;8091:2;8085:4;8082:12;8078:35;8075:77;8072:159;;;-1:-1:-1;8184:19:1;;;8216:5;;8072:159;8263:34;8288:8;8282:4;8263:34;:::i;:::-;8333:6;8329:1;8325:6;8321:19;8312:7;8309:32;8306:58;;;8344:18;;:::i;:::-;8382:20;;7602:806;-1:-1:-1;;;7602:806:1:o;8413:140::-;8471:5;8500:47;8541:4;8531:8;8527:19;8521:4;8500:47;:::i;8907:125::-;8947:4;8975:1;8972;8969:8;8966:34;;;8980:18;;:::i;:::-;-1:-1:-1;9017:9:1;;8907:125::o;16411:127::-;16472:10;16467:3;16463:20;16460:1;16453:31;16503:4;16500:1;16493:15;16527:4;16524:1;16517:15;16543:251;16613:6;16666:2;16654:9;16645:7;16641:23;16637:32;16634:52;;;16682:1;16679;16672:12;16634:52;16714:9;16708:16;16733:31;16758:5;16733:31;:::i;16799:980::-;17061:4;17109:3;17098:9;17094:19;17140:6;17129:9;17122:25;17166:2;17204:6;17199:2;17188:9;17184:18;17177:34;17247:3;17242:2;17231:9;17227:18;17220:31;17271:6;17306;17300:13;17337:6;17329;17322:22;17375:3;17364:9;17360:19;17353:26;;17414:2;17406:6;17402:15;17388:29;;17435:1;17445:195;17459:6;17456:1;17453:13;17445:195;;;17524:13;;-1:-1:-1;;;;;17520:39:1;17508:52;;17615:15;;;;17580:12;;;;17556:1;17474:9;17445:195;;;-1:-1:-1;;;;;;;17696:32:1;;;;17691:2;17676:18;;17669:60;-1:-1:-1;;;17760:3:1;17745:19;17738:35;17657:3;16799:980;-1:-1:-1;;;16799:980:1:o;18396:306::-;18484:6;18492;18500;18553:2;18541:9;18532:7;18528:23;18524:32;18521:52;;;18569:1;18566;18559:12;18521:52;18598:9;18592:16;18582:26;;18648:2;18637:9;18633:18;18627:25;18617:35;;18692:2;18681:9;18677:18;18671:25;18661:35;;18396:306;;;;;:::o

Swarm Source

ipfs://b28788a4725fc7a4befde4a872a7eb7ffa6946498aae4fa282df3f1ca13a04a1

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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