ETH Price: $3,455.83 (-0.90%)
Gas: 2 Gwei

Token

EverRise (RISE)
 

Overview

Max Total Supply

71,618,033,988 RISE

Holders

1,395 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.338691244 RISE

Value
$0.00
0x70ed0e7db53c021e46732d18e620d763ceef888f
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
EverRise

Compiler Version
v0.8.8+commit.dddeac2f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-11-24
*/

// Copyright (c) 2021 EverRise Pte Ltd. All rights reserved.
// EverRise licenses this file to you under the MIT license.
/*
The EverRise token is the keystone in the EverRise Ecosytem of dApps
 and the overaching key that unlocks multi-blockchain unification via
 the EverBridge.

On EverRise token txns 6% buyback and business development fees are collected
* 4% for token Buyback from the market, 
     with bought back tokens directly distributed as staking rewards
* 2% for Business Development (Development, Sustainability and Marketing)

 ________                              _______   __
/        |                            /       \ /  |
$$$$$$$$/__     __  ______    ______  $$$$$$$  |$$/   _______   ______
$$ |__  /  \   /  |/      \  /      \ $$ |__$$ |/  | /       | /      \
$$    | $$  \ /$$//$$$$$$  |/$$$$$$  |$$    $$< $$ |/$$$$$$$/ /$$$$$$  |
$$$$$/   $$  /$$/ $$    $$ |$$ |  $$/ $$$$$$$  |$$ |$$      \ $$    $$ |
$$ |_____ $$ $$/  $$$$$$$$/ $$ |      $$ |  $$ |$$ | $$$$$$  |$$$$$$$$/
$$       | $$$/   $$       |$$ |      $$ |  $$ |$$ |/     $$/ $$       |
$$$$$$$$/   $/     $$$$$$$/ $$/       $$/   $$/ $$/ $$$$$$$/   $$$$$$$/

Learn more about EverRise and the EverRise Ecosystem of dApps and
how our utilities, and our partners, can help protect your investors
and help your project grow: https://www.everrise.com
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.8;

interface IERC20 {
    event Transfer(address indexed from, address indexed to, uint256 value);

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

    function transfer(address recipient, uint256 amount)
        external
        returns (bool);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    function transferFromWithPermit(
        address sender,
        address recipient,
        uint256 amount,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (bool);

    function totalSupply() external view returns (uint256);

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

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);
}

interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB)
        external
        view
        returns (address pair);

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);
}

// pragma solidity >=0.5.0;

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );

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

    event Burn(
        address indexed sender,
        uint256 amount0,
        uint256 amount1,
        address indexed to
    );

    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );

    event Sync(uint112 reserve0, uint112 reserve1);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    function totalSupply() external view returns (uint256);

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

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function nonces(address owner) external view returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function name() external pure returns (string memory);

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

    function decimals() external pure returns (uint8);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);
}

// pragma solidity >=0.6.2;

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

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);
}

// pragma solidity >=0.6.2;

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

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

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

interface IEverStake {
    function createRewards(address acount, uint256 tAmount) external;

    function deliver(uint256 tAmount) external;

    function getTotalAmountStaked() external view returns (uint256);

    function getTotalRewardsDistributed() external view returns (uint256);
}

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

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

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

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

// helper methods for discovering LP pair addresses
library PairHelper {
    bytes private constant token0Selector =
        abi.encodeWithSelector(IUniswapV2Pair.token0.selector);
    bytes private constant token1Selector =
        abi.encodeWithSelector(IUniswapV2Pair.token1.selector);

    function token0(address pair) internal view returns (address) {
        return token(pair, token0Selector);
    }

    function token1(address pair) internal view returns (address) {
        return token(pair, token1Selector);
    }

    function token(address pair, bytes memory selector)
        private
        view
        returns (address)
    {
        // Do not check if pair is not a contract to avoid warning in txn log
        if (!isContract(pair)) return address(0); 

        (bool success, bytes memory data) = pair.staticcall(selector);

        if (success && data.length >= 32) {
            return abi.decode(data, (address));
        }
        
        return address(0);
    }

    function isContract(address account) private view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            codehash := extcodehash(account)
        }

        return (codehash != accountHash && codehash != 0x0);
    }
}

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

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

contract Ownable is Context {
    address private _owner;
    address private _buybackOwner;

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

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

    modifier onlyBuybackOwner() {
        require(
            _buybackOwner == _msgSender(),
            "Ownable: caller is not the buyback owner"
        );
        _;
    }

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        _buybackOwner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    // Allow contract ownership and access to contract onlyOwner functions
    // to be locked using EverOwn with control gated by community vote.
    //
    // EverRise ($RISE) stakers become voting members of the
    // decentralized autonomous organization (DAO) that controls access
    // to the token contract via the EverRise Ecosystem dApp EverOwn
    function transferOwnership(address newOwner) external virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");

        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

    function transferBuybackOwnership(address newOwner)
        external
        virtual
        onlyOwner
    {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );

        emit OwnershipTransferred(_buybackOwner, newOwner);
        _buybackOwner = newOwner;
    }

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

    function buybackOwner() public view returns (address) {
        return _buybackOwner;
    }
}

contract EverRise is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using PairHelper for address;

    struct TransferDetails {
        uint112 balance0;
        uint112 balance1;
        uint32 blockNumber;
        address to;
        address origin;
    }

    address payable public businessDevelopmentAddress =
        payable(0x23F4d6e1072E42e5d25789e3260D19422C2d3674); // Business Development Address
    address public stakingAddress;
    address public everMigrateAddress;

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

    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isEverRiseEcosystemContract;
    address[] public allEcosystemContracts;

    mapping(address => bool) private _isAuthorizedSwapToken;
    address[] public allAuthorizedSwapTokens;

    uint256 private constant MAX = ~uint256(0);

    string private constant _name = "EverRise";
    string private constant _symbol = "RISE";
    // Large data type for maths
    uint256 private constant _decimals = 18;
    // Short data type for decimals function (no per function conversion)
    uint8 private constant _decimalsShort = uint8(_decimals);
    // Golden supply
    uint256 private constant _tTotal = 7_1_618_033_988 * 10**_decimals;

    uint256 private _holders = 0;

    // Fee and max txn are set by setTradingEnabled
    // to allow upgrading balances to arrange their wallets
    // and stake their assets before trading start
    uint256 public liquidityFee = 0;
    uint256 private _previousLiquidityFee = liquidityFee;
    uint256 private _maxTxAmount = _tTotal;
    
    uint256 private constant _tradeStartLiquidityFee = 6;
    uint256 private _tradeStartMaxTxAmount = _tTotal.div(1000); // Max txn 0.1% of supply

    uint256 public businessDevelopmentDivisor = 2;

    uint256 private minimumTokensBeforeSwap = 5 * 10**6 * 10**_decimals;
    uint256 private buyBackUpperLimit = 10 * 10**18;
    uint256 private buyBackTriggerTokenLimit = 1 * 10**6 * 10**_decimals;
    uint256 private buyBackMinAvailability = 1 * 10**18; //1 BNB

    uint256 private buyVolume = 0;
    uint256 private sellVolume = 0;
    uint256 public totalBuyVolume = 0;
    uint256 public totalSellVolume = 0;
    uint256 public totalVolume = 0;
    uint256 private nextBuybackAmount = 0;
    uint256 private buyBackTriggerVolume = 100 * 10**6 * 10**_decimals;

    uint256 private tradingStart = MAX;
    uint256 private tradingStartCooldown = MAX;

    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.
    uint256 private constant _FALSE = 1;
    uint256 private constant _TRUE = 2;

    uint256 private _checkingTokens;
    uint256 private _inSwapAndLiquify;

    // Infrequently set booleans
    bool public swapAndLiquifyEnabled = false;
    bool public buyBackEnabled = false;
    bool public liquidityLocked = false;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    IEverStake stakeToken;

    bytes32 public immutable DOMAIN_SEPARATOR;
    // keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");
    bytes32 public constant PERMIT_TYPEHASH =
        0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9;
    mapping(address => uint256) public nonces;

    TransferDetails lastTransfer;

    event BuyBackEnabledUpdated(bool enabled);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event SwapETHForTokens(uint256 amountIn, address[] path);
    event SwapTokensForETH(uint256 amountIn, address[] path);
    event SwapTokensForTokens(uint256 amountIn, address[] path);

    event ExcludeFromFeeUpdated(address account);
    event IncludeInFeeUpdated(address account);

    event LiquidityFeeUpdated(uint256 prevValue, uint256 newValue);
    event MaxTxAmountUpdated(uint256 prevValue, uint256 newValue);
    event BusinessDevelopmentDivisorUpdated(
        uint256 prevValue,
        uint256 newValue
    );
    event MinTokensBeforeSwapUpdated(uint256 prevValue, uint256 newValue);
    event BuybackMinAvailabilityUpdated(uint256 prevValue, uint256 newValue);

    event TradingEnabled();
    event BuyBackAndRewardStakers(uint256 amount);
    event BuybackUpperLimitUpdated(uint256 prevValue, uint256 newValue);
    event BuyBackTriggerTokenLimitUpdated(uint256 prevValue, uint256 newValue);

    event RouterAddressUpdated(address prevAddress, address newAddress);
    event BusinessDevelopmentAddressUpdated(
        address prevAddress,
        address newAddress
    );
    event StakingAddressUpdated(address prevAddress, address newAddress);
    event EverMigrateAddressUpdated(address prevAddress, address newAddress);

    event EverRiseEcosystemContractAdded(address contractAddress);
    event EverRiseEcosystemContractRemoved(address contractAddress);

    event HoldersIncreased(uint256 prevValue, uint256 newValue);
    event HoldersDecreased(uint256 prevValue, uint256 newValue);

    event AuthorizedSwapTokenAdded(address tokenAddress);
    event AuthorizedSwapTokenRemoved(address tokenAddress);

    event LiquidityLocked();
    event LiquidityUnlocked();

    event StakingIncreased(uint256 amount);
    event StakingDecreased(uint256 amount);

    modifier lockTheSwap() {
        require(_inSwapAndLiquify != _TRUE);
        _inSwapAndLiquify = _TRUE;
        _;
        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _inSwapAndLiquify = _FALSE;
    }

    modifier tokenCheck() {
        require(_checkingTokens != _TRUE);
        _checkingTokens = _TRUE;
        _;
        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _checkingTokens = _FALSE;
    }

    constructor(address _stakingAddress, address routerAddress) {
        require(
            _stakingAddress != address(0),
            "_stakingAddress should not be to the zero address"
        );
        require(
            routerAddress != address(0),
            "routerAddress should not be the zero address"
        );


        // The values being non-zero value makes deployment a bit more expensive,
        // but in exchange the refund on every call to modifiers will be lower in
        // amount. Since refunds are capped to a percentage of the total
        // transaction's gas, it is best to keep them low in cases like this one, to
        // increase the likelihood of the full refund coming into effect.
        _checkingTokens = _FALSE;
        _inSwapAndLiquify = _FALSE;

        stakingAddress = _stakingAddress;
        stakeToken = IEverStake(_stakingAddress);

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(routerAddress);
        // IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x10ED43C718714eb63d5aA57B78B54704E256024E); //Pancakeswap router mainnet - BSC
        // IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0xD99D1c33F9fC3444f8101754aBC46c52416550D1); //Testnet
        // IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506); //Sushiswap router mainnet - Polygon
        // IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); //Uniswap V2 router mainnet - ETH
        // IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0xa5e0829caced8ffdd4de3c43696c57f7d7a678ff); //Quickswap V2 router mainnet - Polygon
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;

        DOMAIN_SEPARATOR = keccak256(
            abi.encode(
                keccak256(
                    "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"
                ),
                keccak256(bytes(_name)),
                keccak256(bytes("1")),
                block.chainid,
                address(this)
            )
        );
        _tOwned[_msgSender()] = _tTotal;
        // Track holder change
        _holders = 1;
        emit HoldersIncreased(0, 1);

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;

        _everRiseEcosystemContractAdd(_stakingAddress);
        authorizedSwapTokenAdd(address(this));
        authorizedSwapTokenAdd(uniswapV2Router.WETH());

        emit Transfer(address(0), _msgSender(), _tTotal);
        lockLiquidity();
    }

    // Function to receive ETH when msg.data is be empty
    // Receives ETH from uniswapV2Router when swapping
    receive() external payable {}

    // Fallback function to receive ETH when msg.data is not empty
    fallback() external payable {}

    function transferBalance() external onlyOwner {
        _msgSender().transfer(address(this).balance);
    }

    function transfer(address recipient, uint256 amount)
        external
        override
        returns (bool)
    {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function approve(address spender, uint256 amount)
        external
        override
        returns (bool)
    {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(
            sender,
            _msgSender(),
            _allowances[sender][_msgSender()].sub(
                amount,
                "ERC20: transfer amount exceeds allowance"
            )
        );
        return true;
    }

    function transferFromWithPermit(
        address sender,
        address recipient,
        uint256 amount,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (bool) {
        permit(sender, _msgSender(), amount, deadline, v, r, s);
        _transfer(sender, recipient, amount);
        _approve(
            sender,
            _msgSender(),
            _allowances[sender][_msgSender()].sub(
                amount,
                "ERC20: transfer amount exceeds allowance"
            )
        );
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue)
        external
        virtual
        returns (bool)
    {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].add(addedValue)
        );
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue)
        external
        virtual
        returns (bool)
    {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].sub(
                subtractedValue,
                "ERC20: decreased allowance below zero"
            )
        );
        return true;
    }

    function manualBuyback(uint256 amount, uint256 numOfDecimals)
        external
        onlyBuybackOwner
    {
        require(amount > 0 && numOfDecimals >= 0, "Invalid Input");

        uint256 value = amount.mul(10**18).div(10**numOfDecimals);

        uint256 tokensReceived = swapETHForTokensNoFee(
            address(this),
            stakingAddress,
            value
        );

        //Distribute the rewards to the staking pool
        distributeStakingRewards(tokensReceived);
    }

    function swapTokens(
        address fromToken,
        address toToken,
        uint256 amount,
        uint256 numOfDecimals,
        uint256 fromTokenDecimals
    ) external onlyBuybackOwner {
        require(_isAuthorizedSwapToken[fromToken], "fromToken is not an authorized token");
        require(_isAuthorizedSwapToken[toToken], "toToken is not an authorized token");

        uint256 actualAmount = amount
            .mul(10**fromTokenDecimals)
            .div(10**numOfDecimals);

        if (toToken == uniswapV2Router.WETH()) {
            swapTokensForEth(fromToken, address(this), actualAmount);
        } else if (fromToken == uniswapV2Router.WETH()) {
            swapETHForTokens(toToken, address(this), actualAmount);
        } else {
            swapTokensForTokens(
                fromToken,
                toToken,
                address(this),
                actualAmount
            );
        }
    }

    function lockLiquidity() public onlyOwner {
        liquidityLocked = true;
        emit LiquidityLocked();
    }

    function unlockLiquidity() external onlyOwner {
        liquidityLocked = false;
        emit LiquidityUnlocked();
    }

    function excludeFromFee(address account) external onlyOwner {
        require(
            !_isExcludedFromFee[account],
            "Account is not excluded for fees"
        );

        _excludeFromFee(account);
    }

    function includeInFee(address account) external onlyOwner {
        require(
            _isExcludedFromFee[account],
            "Account is not included for fees"
        );

        _includeInFee(account);
    }

    function setLiquidityFeePercent(uint256 liquidityFeeRate) external onlyOwner {
        require(liquidityFeeRate <= 10, "liquidityFeeRate should be less than 10%");

        uint256 prevValue = liquidityFee;
        liquidityFee = liquidityFeeRate;
        emit LiquidityFeeUpdated(prevValue, liquidityFee);
    }

    function setMaxTxAmount(uint256 txAmount) external onlyOwner {
        uint256 prevValue = _maxTxAmount;
        _maxTxAmount = txAmount;
        emit MaxTxAmountUpdated(prevValue, txAmount);
    }

    function setBusinessDevelopmentDivisor(uint256 divisor) external onlyOwner {
        require(
            divisor <= liquidityFee,
            "Business Development divisor should be less than liquidity fee"
        );

        uint256 prevValue = businessDevelopmentDivisor;
        businessDevelopmentDivisor = divisor;
        emit BusinessDevelopmentDivisorUpdated(
            prevValue,
            businessDevelopmentDivisor
        );
    }

    function setNumTokensSellToAddToLiquidity(uint256 _minimumTokensBeforeSwap)
        external
        onlyOwner
    {
        uint256 prevValue = minimumTokensBeforeSwap;
        minimumTokensBeforeSwap = _minimumTokensBeforeSwap;
        emit MinTokensBeforeSwapUpdated(prevValue, minimumTokensBeforeSwap);
    }

    function setBuybackUpperLimit(uint256 buyBackLimit, uint256 numOfDecimals)
        external
        onlyBuybackOwner
    {
        uint256 prevValue = buyBackUpperLimit;
        buyBackUpperLimit = buyBackLimit
            .mul(10**18)
            .div(10**numOfDecimals);
        emit BuybackUpperLimitUpdated(prevValue, buyBackUpperLimit);
    }

    function setBuybackTriggerTokenLimit(uint256 buyBackTriggerLimit)
        external
        onlyBuybackOwner
    {
        uint256 prevValue = buyBackTriggerTokenLimit;
        buyBackTriggerTokenLimit = buyBackTriggerLimit;
        emit BuyBackTriggerTokenLimitUpdated(
            prevValue,
            buyBackTriggerTokenLimit
        );
    }

    function setBuybackMinAvailability(uint256 amount, uint256 numOfDecimals)
        external
        onlyBuybackOwner
    {
        uint256 prevValue = buyBackMinAvailability;
        buyBackMinAvailability = amount
            .mul(10**18)
            .div(10**numOfDecimals);
        emit BuybackMinAvailabilityUpdated(prevValue, buyBackMinAvailability);
    }

    function setBuyBackEnabled(bool _enabled) public onlyBuybackOwner {
        buyBackEnabled = _enabled;
        emit BuyBackEnabledUpdated(_enabled);
    }

    function setTradingEnabled(uint256 _tradeStartDelay, uint256 _tradeStartCoolDown) external onlyOwner {
        require(_tradeStartDelay < 10, "tradeStartDelay should be less than 10 minutes");
        require(_tradeStartCoolDown < 120, "tradeStartCoolDown should be less than 120 minutes");
        require(_tradeStartDelay < _tradeStartCoolDown, "tradeStartDelay must be less than tradeStartCoolDown");
        // Can only be called once
        require(tradingStart == MAX && tradingStartCooldown == MAX, "Trading has already started");
        // Set initial values
        liquidityFee = _tradeStartLiquidityFee;
        _previousLiquidityFee = liquidityFee;
        _maxTxAmount = _tradeStartMaxTxAmount;

        setBuyBackEnabled(true);
        setSwapAndLiquifyEnabled(true);
        // Add time buffer to allow switching on trading on every chain
        // before announcing to community
        tradingStart = block.timestamp + _tradeStartDelay * 1 minutes;
        tradingStartCooldown = tradingStart + _tradeStartCoolDown * 1 minutes;
        // Announce to blockchain immediately, even though trades
        // can't start until delay passes (snipers no sniping)
        emit TradingEnabled();
    }

    function setBusinessDevelopmentAddress(address _businessDevelopmentAddress)
        external
        onlyOwner
    {
        require(
            _businessDevelopmentAddress != address(0),
            "_businessDevelopmentAddress should not be the zero address"
        );

        address prevAddress = businessDevelopmentAddress;
        businessDevelopmentAddress = payable(_businessDevelopmentAddress);
        emit BusinessDevelopmentAddressUpdated(
            prevAddress,
            _businessDevelopmentAddress
        );
    }

    function setEverMigrateAddress(address _everMigrateAddress)
        external
        onlyOwner
    {
        require(
            _everMigrateAddress != address(0),
            "_everMigrateAddress should not be the zero address"
        );

        address prevAddress = everMigrateAddress;
        everMigrateAddress = _everMigrateAddress;
        emit EverMigrateAddressUpdated(prevAddress, _everMigrateAddress);

        _everRiseEcosystemContractAdd(_everMigrateAddress);
    }

    function setStakingAddress(address _stakingAddress) external onlyOwner {
        require(
            _stakingAddress != address(0),
            "_stakingAddress should not be to zero address"
        );

        address prevAddress = stakingAddress;
        stakingAddress = _stakingAddress;
        stakeToken = IEverStake(_stakingAddress);
        emit StakingAddressUpdated(prevAddress, _stakingAddress);

        _everRiseEcosystemContractAdd(_stakingAddress);
    }

    function setRouterAddress(address routerAddress) external onlyOwner {
        require(
            routerAddress != address(0),
            "routerAddress should not be the zero address"
        );

        address prevAddress = address(uniswapV2Router);
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(routerAddress); 
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).getPair(
            address(this),
            _uniswapV2Router.WETH()
        );

        uniswapV2Router = _uniswapV2Router;
        emit RouterAddressUpdated(prevAddress, routerAddress);
    }

    function everRiseEcosystemContractAdd(address contractAddress) external onlyOwner {
        require(contractAddress != address(0), "contractAddress should not be the zero address");
        require(contractAddress != address(this), "EverRise token should not be added as an Ecosystem contract");
        require(
            !_isEverRiseEcosystemContract[contractAddress],
            "contractAddress is already included as an EverRise Ecosystem contract"
        );

        _everRiseEcosystemContractAdd(contractAddress);
    }

    function everRiseEcosystemContractRemove(address contractAddress) external onlyOwner {
        require(
            _isEverRiseEcosystemContract[contractAddress],
            "contractAddress is not included as EverRise Ecosystem contract"
        );

        _isEverRiseEcosystemContract[contractAddress] = false;

        for (uint256 i = 0; i < allEcosystemContracts.length; i++) {
            if (allEcosystemContracts[i] == contractAddress) {
                allEcosystemContracts[i] = allEcosystemContracts[allEcosystemContracts.length - 1];
                allEcosystemContracts.pop();
                break;
            }
        }

        emit EverRiseEcosystemContractRemoved(contractAddress);
        _includeInFee(contractAddress);
    }

    function balanceOf(address account)
        external
        view
        override
        returns (uint256)
    {
        uint256 balance0 = _balanceOf(account);
        if (
            !inSwapAndLiquify() &&
            lastTransfer.blockNumber == uint32(block.number) &&
            account == lastTransfer.to
        ) {
            // Balance being checked is same address as last to in _transfer
            // check if likely same txn and a Liquidity Add
            _validateIfLiquidityAdd(account, uint112(balance0));
        }

        return balance0;
    }

    function maxTxAmount() external view returns (uint256) {
        if (isTradingEnabled() && inTradingStartCoolDown()) {
            uint256 maxTxn = maxTxCooldownAmount();
            return maxTxn < _maxTxAmount ? maxTxn : _maxTxAmount;
        }

        return _maxTxAmount;
    }

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

    function getTotalAmountStaked() external view returns (uint256)
    {
        return stakeToken.getTotalAmountStaked();
    }

    function getTotalRewardsDistributed() external view returns (uint256)
    {
        return stakeToken.getTotalRewardsDistributed();
    }

    function holders() external view returns (uint256) {
        return _holders;
    }

    function minimumTokensBeforeSwapAmount() external view returns (uint256) {
        return minimumTokensBeforeSwap;
    }

    function buyBackUpperLimitAmount() external view returns (uint256) {
        return buyBackUpperLimit;
    }

    function isExcludedFromFee(address account) external view returns (bool) {
        return _isExcludedFromFee[account];
    }

    function allEcosystemContractsLength() external view returns (uint) {
        return allEcosystemContracts.length;
    }

    function allAuthorizedSwapTokensLength() external view returns (uint) {
        return allAuthorizedSwapTokens.length;
    }

    function totalSupply() external pure override returns (uint256) {
        return _tTotal;
    }

    function name() external pure returns (string memory) {
        return _name;
    }

    function symbol() external pure returns (string memory) {
        return _symbol;
    }

    function decimals() external pure returns (uint8) {
        return _decimalsShort;
    }

    function authorizedSwapTokenAdd(address tokenAddress) public onlyOwner {
        require(tokenAddress != address(0), "tokenAddress should not be the zero address");
        require(!_isAuthorizedSwapToken[tokenAddress], "tokenAddress is already an authorized token");

        _isAuthorizedSwapToken[tokenAddress] = true;
        allAuthorizedSwapTokens.push(tokenAddress);

        emit AuthorizedSwapTokenAdded(tokenAddress);
    }

    function authorizedSwapTokenRemove(address tokenAddress) public onlyOwner {
        require(tokenAddress != address(this), "cannot remove this contract from authorized tokens");
        require(tokenAddress != uniswapV2Router.WETH(), "cannot remove the WETH type contract from authorized tokens");
        require(_isAuthorizedSwapToken[tokenAddress], "tokenAddress is not an authorized token");

        _isAuthorizedSwapToken[tokenAddress] = false;

        for (uint256 i = 0; i < allAuthorizedSwapTokens.length; i++) {
            if (allAuthorizedSwapTokens[i] == tokenAddress) {
                allAuthorizedSwapTokens[i] = allAuthorizedSwapTokens[allAuthorizedSwapTokens.length - 1];
                allAuthorizedSwapTokens.pop();
                break;
            }
        }

        emit AuthorizedSwapTokenRemoved(tokenAddress);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function isTradingEnabled() public view returns (bool) {
        // Trading has been set and has time buffer has elapsed
        return tradingStart < block.timestamp;
    }

    function inTradingStartCoolDown() public view returns (bool) {
        // Trading has been started and the cool down period has elapsed
        return tradingStartCooldown >= block.timestamp;
    }

    function maxTxCooldownAmount() public pure returns (uint256) {
        return _tTotal.div(2000);
    }

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

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(from != to, "Transfer to and from addresses the same");
        require(!inTokenCheck(), "Invalid reentrancy from token0/token1 balanceOf check");

        address _owner = owner();
        bool isIgnoredAddress = from == _owner || to == _owner ||
             _isEverRiseEcosystemContract[from] || _isEverRiseEcosystemContract[to];
        
        bool _isTradingEnabled = isTradingEnabled();

        require(amount <= _maxTxAmount || isIgnoredAddress || !_isTradingEnabled,
            "Transfer amount exceeds the maxTxAmount");
        
        address _pair = uniswapV2Pair;
        require(_isTradingEnabled || isIgnoredAddress || (from != _pair && to != _pair),
            "Trading is not enabled");

        bool notInSwapAndLiquify = !inSwapAndLiquify();
        if (_isTradingEnabled && inTradingStartCoolDown() && !isIgnoredAddress && notInSwapAndLiquify) {
            validateDuringTradingCoolDown(to, from, amount);
        }

        uint256 contractTokenBalance = _balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >=
            minimumTokensBeforeSwap;

        bool contractAction = _isTradingEnabled &&
            notInSwapAndLiquify &&
            swapAndLiquifyEnabled &&
            to == _pair;

        // Following block is for the contract to convert the tokens to ETH and do the buy back
        if (contractAction) {
            if (overMinimumTokenBalance) {
                contractTokenBalance = minimumTokensBeforeSwap;
                swapTokens(contractTokenBalance);
            }
            if (buyBackEnabled &&
                address(this).balance > buyBackMinAvailability &&
                buyVolume.add(sellVolume) > buyBackTriggerVolume
            ) {
                if (nextBuybackAmount > address(this).balance) {
                    // Don't try to buyback more than is available.
                    // For example some "ETH" balance may have been
                    // temporally switched to stable coin in crypto-market
                    // downturn using swapTokens, for switching back later
                    nextBuybackAmount = address(this).balance;
                }

                if (nextBuybackAmount > 0) {
                    uint256 tokensReceived = buyBackTokens(nextBuybackAmount);
                    //Distribute the rewards to the staking pool
                    distributeStakingRewards(tokensReceived);
                    nextBuybackAmount = 0; //reset the next buyback amount
                    buyVolume = 0; //reset the buy volume
                    sellVolume = 0; // reset the sell volume
                }
            }
        }

        if (_isTradingEnabled) {
            // Compute Sell Volume and set the next buyback amount
            if (to == _pair) {
                sellVolume = sellVolume.add(amount);
                totalSellVolume = totalSellVolume.add(amount);
                if (amount > buyBackTriggerTokenLimit) {
                    uint256 balance = address(this).balance;
                    if (balance > buyBackUpperLimit) balance = buyBackUpperLimit;
                    nextBuybackAmount = nextBuybackAmount.add(balance.div(100));
                }
            }
            // Compute Buy Volume
            else if (from == _pair) {
                buyVolume = buyVolume.add(amount);
                totalBuyVolume = totalBuyVolume.add(amount);
            }
            
            totalVolume = totalVolume.add(amount);
        }

        bool takeFee = true;

        // If any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
            takeFee = false;
        }
        
        // For safety Liquidity Adds should only be done by an owner, 
        // and transfers to and from EverRise Ecosystem contracts
        // are not considered LP adds
        if (isIgnoredAddress || buybackOwner() == _msgSender()) {
            // Clear transfer data
            _clearTransferIfNeeded();
        } else if (notInSwapAndLiquify) {
            // Not in a swap during a LP add, so record the transfer details
            _recordPotentialLiquidityAddTransaction(to);
        }

        _tokenTransfer(from, to, amount, takeFee);
    }

    function _recordPotentialLiquidityAddTransaction(address to)
        private
        tokenCheck {
        uint112 balance0 = uint112(_balanceOf(to));
        address token1 = to.token1();
        if (token1 == address(this)) {
            // Switch token so token1 is always other side of pair
            token1 = to.token0();
        }

        uint112 balance1;
        if (token1 == address(0)) {
            // Not a LP pair, or not yet (contract being created)
            balance1 = 0;
        } else {
            balance1 = uint112(IERC20(token1).balanceOf(to));
        }

        lastTransfer = TransferDetails({
            balance0: balance0,
            balance1: balance1,
            blockNumber: uint32(block.number),
            to: to,
            origin: tx.origin
        });
    }

    function _clearTransferIfNeeded() private {
        // Not Liquidity Add or is owner, clear data from same block to allow balanceOf
        if (lastTransfer.blockNumber == uint32(block.number)) {
            // Don't need to clear if different block
            lastTransfer = TransferDetails({
                balance0: 0,
                balance1: 0,
                blockNumber: 0,
                to: address(0),
                origin: address(0)
            });
        }
    }

    function swapTokens(uint256 contractTokenBalance) private lockTheSwap {
        uint256 initialBalance = address(this).balance;
        swapTokensForEth(address(this), address(this), contractTokenBalance);
        uint256 transferredBalance = address(this).balance.sub(initialBalance);

        //Send to Business Development address
        transferToAddressETH(
            businessDevelopmentAddress,
            transferredBalance
                .mul(businessDevelopmentDivisor)
                .div(liquidityFee)
        );
    }

    function buyBackTokens(uint256 amount)
        private
        lockTheSwap
        returns (uint256)
    {
        uint256 tokensReceived;
        if (amount > 0) {
            tokensReceived = swapETHForTokensNoFee(
                address(this),
                stakingAddress,
                amount
            );
        }
        return tokensReceived;
    }

    function swapTokensForEth(
        address tokenAddress,
        address toAddress,
        uint256 tokenAmount
    ) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = tokenAddress;
        path[1] = uniswapV2Router.WETH();

        IERC20(tokenAddress).approve(address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            toAddress, // The contract
            block.timestamp
        );

        emit SwapTokensForETH(tokenAmount, path);
    }

    function swapETHForTokensNoFee(
        address tokenAddress,
        address toAddress,
        uint256 amount
    ) private returns (uint256) {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = tokenAddress;

        // make the swap
        uint256[] memory amounts = uniswapV2Router.swapExactETHForTokens{
            value: amount
        }(
            0, // accept any amount of Tokens
            path,
            toAddress, // The contract
            block.timestamp.add(300)
        );

        emit SwapETHForTokens(amount, path);
        return amounts[1];
    }

    function swapETHForTokens(
        address tokenAddress,
        address toAddress,
        uint256 amount
    ) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = tokenAddress;

        // make the swap
        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{
            value: amount
        }(
            0, // accept any amount of Tokens
            path,
            toAddress, // The contract
            block.timestamp.add(300)
        );

        emit SwapETHForTokens(amount, path);
    }

    function swapTokensForTokens(
        address fromTokenAddress,
        address toTokenAddress,
        address toAddress,
        uint256 tokenAmount
    ) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](3);
        path[0] = fromTokenAddress;
        path[1] = uniswapV2Router.WETH();
        path[2] = toTokenAddress;

        IERC20(fromTokenAddress).approve(address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of Tokens
            path,
            toAddress, // The contract
            block.timestamp.add(120)
        );

        emit SwapTokensForTokens(tokenAmount, path);
    }

    function distributeStakingRewards(uint256 amount) private {
        if (amount > 0) {
            stakeToken.createRewards(address(this), amount);
            stakeToken.deliver(amount);

            emit BuyBackAndRewardStakers(amount);
        }
    }

    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount,
        bool takeFee
    ) private {
        if (!takeFee) removeAllFee();

        _actualTokenTransfer(sender, recipient, amount);

        if (!takeFee) restoreAllFee();
    }

    function _actualTokenTransfer(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 tTransferAmount,
            uint256 tLiquidity
        ) = _getValues(tAmount);

        uint256 senderBefore = _tOwned[sender];
        uint256 senderAfter = senderBefore.sub(tAmount);
        _tOwned[sender] = senderAfter;

        uint256 recipientBefore = _tOwned[recipient];
        uint256 recipientAfter = recipientBefore.add(tTransferAmount);
        _tOwned[recipient] = recipientAfter;

        // Track holder change
        if (recipientBefore == 0 && recipientAfter > 0) {
            uint256 holdersBefore = _holders;
            uint256 holdersAfter = holdersBefore.add(1);
            _holders = holdersAfter;

            emit HoldersIncreased(holdersBefore, holdersAfter);
        }

        if (senderBefore > 0 && senderAfter == 0) {
            uint256 holdersBefore = _holders;
            uint256 holdersAfter = holdersBefore.sub(1);
            _holders = holdersAfter;

            emit HoldersDecreased(holdersBefore, holdersAfter);
        }

        _takeLiquidity(tLiquidity);
        emit Transfer(sender, recipient, tTransferAmount);

        if (recipient == stakingAddress) {
            // Increases by the amount entering staking (transfer - fees)
            // Howver, fees should be zero for staking so same as full amount.
            emit StakingIncreased(tTransferAmount);
        } else if (sender == stakingAddress) {
            // Decreases by the amount leaving staking (full amount)
            emit StakingDecreased(tAmount);
        }
    }

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) private {
        require(deadline >= block.timestamp, "EverRise: EXPIRED");

        bytes32 digest = keccak256(
            abi.encodePacked(
                "\x19\x01",
                DOMAIN_SEPARATOR,
                keccak256(
                    abi.encode(
                        PERMIT_TYPEHASH,
                        owner,
                        spender,
                        value,
                        nonces[owner]++,
                        deadline
                    )
                )
            )
        );
        if (v < 27) {
            v += 27;
        } else if (v > 30) {
            digest = keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", digest));
        }
        address recoveredAddress = ecrecover(digest, v, r, s);
        require(
            recoveredAddress != address(0) && recoveredAddress == owner,
            "EverRise: INVALID_SIGNATURE"
        );
        _approve(owner, spender, value);
    }

    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 beforeAmount = _tOwned[address(this)];
        uint256 afterAmount = beforeAmount.add(tLiquidity);
        _tOwned[address(this)] = afterAmount;

        // Track holder change
        if (beforeAmount == 0 && afterAmount > 0) {
            uint256 holdersBefore = _holders;
            uint256 holdersAfter = holdersBefore.add(1);
            _holders = holdersAfter;

            emit HoldersIncreased(holdersBefore, holdersAfter);
        }
    }

    function removeAllFee() private {
        if (liquidityFee == 0) return;

        _previousLiquidityFee = liquidityFee;

        liquidityFee = 0;
    }

    function restoreAllFee() private {
        liquidityFee = _previousLiquidityFee;
    }

    function transferToAddressETH(address payable recipient, uint256 amount)
        private
    {
        recipient.transfer(amount);
    }

    function _everRiseEcosystemContractAdd(address contractAddress) private {
        if (_isEverRiseEcosystemContract[contractAddress]) return;

        _isEverRiseEcosystemContract[contractAddress] = true;
        allEcosystemContracts.push(contractAddress);

        emit EverRiseEcosystemContractAdded(contractAddress);
        _excludeFromFee(contractAddress);
    }

    function _excludeFromFee(address account) private {
        _isExcludedFromFee[account] = true;
        emit ExcludeFromFeeUpdated(account);
    }

    function _includeInFee(address account) private {
        _isExcludedFromFee[account] = false;
        emit IncludeInFeeUpdated(account);
    }

    function validateDuringTradingCoolDown(address to, address from, uint256 amount) private {
        address pair = uniswapV2Pair;
        bool disallow;

        // Disallow multiple same source trades in same block
        if (from == pair) {
            disallow = lastCoolDownTrade[to] == block.number || lastCoolDownTrade[tx.origin] == block.number;
            lastCoolDownTrade[to] = block.number;
            lastCoolDownTrade[tx.origin] = block.number;
        } else if (to == pair) {
            disallow = lastCoolDownTrade[from] == block.number || lastCoolDownTrade[tx.origin] == block.number;
            lastCoolDownTrade[from] = block.number;
            lastCoolDownTrade[tx.origin] = block.number;
        }

        require(!disallow, "Multiple trades in same block from same source are not allowed during trading start cooldown");

        require(amount <= maxTxCooldownAmount(), "Max transaction is 0.05% of total supply during trading start cooldown");
    }

    function inSwapAndLiquify() private view returns (bool) {
        return _inSwapAndLiquify == _TRUE;
    }

    function inTokenCheck() private view returns (bool) {
        return _checkingTokens == _TRUE;
    }

    function _getValues(uint256 tAmount)
        private
        view
        returns (
            uint256,
            uint256
        )
    {
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tLiquidity);
        return (tTransferAmount, tLiquidity);
    }

    function calculateLiquidityFee(uint256 _amount)
        private
        view
        returns (uint256)
    {
        return _amount.mul(liquidityFee).div(10**2);
    }

    function _balanceOf(address account) private view returns (uint256) {
        return _tOwned[account];
    }

    // account must be recorded in _transfer and same block
    function _validateIfLiquidityAdd(address account, uint112 balance0)
        private
        view
    {
        // Test to see if this tx is part of a Liquidity Add
        // using the data recorded in _transfer
        TransferDetails memory _lastTransfer = lastTransfer;
        if (_lastTransfer.origin == tx.origin) {
            // May be same transaction as _transfer, check LP balances
            address token1 = account.token1();

            if (token1 == address(this)) {
                // Switch token so token1 is always other side of pair
                token1 = account.token0();
            }

            // Not LP pair
            if (token1 == address(0)) return;

            uint112 balance1 = uint112(IERC20(token1).balanceOf(account));

            if (balance0 > _lastTransfer.balance0 &&
                balance1 > _lastTransfer.balance1) {
                // Both pair balances have increased, this is a Liquidty Add
                require(false, "Liquidity can be added by the owner only");
            } else if (balance0 < _lastTransfer.balance0 &&
                balance1 < _lastTransfer.balance1)
            {
                // Both pair balances have decreased, this is a Liquidty Remove
                require(!liquidityLocked, "Liquidity cannot be removed while locked");
            }
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_stakingAddress","type":"address"},{"internalType":"address","name":"routerAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"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":"tokenAddress","type":"address"}],"name":"AuthorizedSwapTokenAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"tokenAddress","type":"address"}],"name":"AuthorizedSwapTokenRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"prevAddress","type":"address"},{"indexed":false,"internalType":"address","name":"newAddress","type":"address"}],"name":"BusinessDevelopmentAddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"prevValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"BusinessDevelopmentDivisorUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BuyBackAndRewardStakers","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"BuyBackEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"prevValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"BuyBackTriggerTokenLimitUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"prevValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"BuybackMinAvailabilityUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"prevValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"BuybackUpperLimitUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"prevAddress","type":"address"},{"indexed":false,"internalType":"address","name":"newAddress","type":"address"}],"name":"EverMigrateAddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"contractAddress","type":"address"}],"name":"EverRiseEcosystemContractAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"contractAddress","type":"address"}],"name":"EverRiseEcosystemContractRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"ExcludeFromFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"prevValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"HoldersDecreased","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"prevValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"HoldersIncreased","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"IncludeInFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"prevValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"LiquidityFeeUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"LiquidityLocked","type":"event"},{"anonymous":false,"inputs":[],"name":"LiquidityUnlocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"prevValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"MaxTxAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"prevValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"prevAddress","type":"address"},{"indexed":false,"internalType":"address","name":"newAddress","type":"address"}],"name":"RouterAddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"prevAddress","type":"address"},{"indexed":false,"internalType":"address","name":"newAddress","type":"address"}],"name":"StakingAddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"StakingDecreased","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"StakingIncreased","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForTokens","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingEnabled","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"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allAuthorizedSwapTokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allAuthorizedSwapTokensLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allEcosystemContracts","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allEcosystemContractsLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"tokenAddress","type":"address"}],"name":"authorizedSwapTokenAdd","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"authorizedSwapTokenRemove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"businessDevelopmentAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"businessDevelopmentDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackUpperLimitAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[],"name":"everMigrateAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"everRiseEcosystemContractAdd","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"everRiseEcosystemContractRemove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTotalAmountStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalRewardsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"holders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inTradingStartCoolDown","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","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":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"numOfDecimals","type":"uint256"}],"name":"manualBuyback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxCooldownAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_businessDevelopmentAddress","type":"address"}],"name":"setBusinessDevelopmentAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setBusinessDevelopmentDivisor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setBuyBackEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"numOfDecimals","type":"uint256"}],"name":"setBuybackMinAvailability","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyBackTriggerLimit","type":"uint256"}],"name":"setBuybackTriggerTokenLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyBackLimit","type":"uint256"},{"internalType":"uint256","name":"numOfDecimals","type":"uint256"}],"name":"setBuybackUpperLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_everMigrateAddress","type":"address"}],"name":"setEverMigrateAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFeeRate","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"txAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumTokensBeforeSwap","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"routerAddress","type":"address"}],"name":"setRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_stakingAddress","type":"address"}],"name":"setStakingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tradeStartDelay","type":"uint256"},{"internalType":"uint256","name":"_tradeStartCoolDown","type":"uint256"}],"name":"setTradingEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"fromToken","type":"address"},{"internalType":"address","name":"toToken","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"numOfDecimals","type":"uint256"},{"internalType":"uint256","name":"fromTokenDecimals","type":"uint256"}],"name":"swapTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalBuyVolume","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellVolume","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalVolume","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":[],"name":"transferBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferBuybackOwnership","outputs":[],"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":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"transferFromWithPermit","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":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlockLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a0604052600280546001600160a01b0319167323f4d6e1072e42e5d25789e3260d19422c2d36741790556000600d819055600e819055600f55620000476012600a62000c6e565b62000058906410acc4794462000c7c565b601055620000956103e8620000706012600a62000c6e565b62000081906410acc4794462000c7c565b6200075160201b62002d251790919060201c565b60115560026012556012600a620000ad919062000c6e565b620000bc90624c4b4062000c7c565b601355678ac7230489e80000601455620000d96012600a62000c6e565b620000e890620f424062000c7c565b601555670de0b6b3a76400006016556000601755600060185560006019556000601a556000601b556000601c556012600a62000125919062000c6e565b62000135906305f5e10062000c7c565b601d55600019601e819055601f556022805462ffffff191690553480156200015c57600080fd5b5060405162006551380380620065518339810160408190526200017f9162000cbb565b60008054336001600160a01b031991821681178355600180549092168117909155604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600160a01b038216620002435760405162461bcd60e51b815260206004820152603160248201527f5f7374616b696e67416464726573732073686f756c64206e6f7420626520746f60448201527020746865207a65726f206164647265737360781b60648201526084015b60405180910390fd5b6001600160a01b038116620002b05760405162461bcd60e51b815260206004820152602c60248201527f726f75746572416464726573732073686f756c64206e6f74206265207468652060448201526b7a65726f206164647265737360a01b60648201526084016200023a565b60016020818155602191909155600380546001600160a01b03199081166001600160a01b03868116918217909355602480549092161790556040805163c45a015560e01b8152905184939284169263c45a01559260048082019391829003018186803b1580156200032057600080fd5b505afa15801562000335573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200035b919062000cf3565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620003a457600080fd5b505afa158015620003b9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003df919062000cf3565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200042857600080fd5b505af11580156200043d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000463919062000cf3565b602380546001600160a01b0319166001600160a01b03928316179055602280546301000000600160b81b0319166301000000928416929092029190911790556040805180820182526008815267457665725269736560c01b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f918101919091527fce794fa9785f2c930c5f814f254aa188dca4e3e9bde647a87f3a0c8d20d90736918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160408051601f198184030181529190528051602090910120608052620005856012600a62000c6e565b62000596906410acc4794462000c7c565b336000908152600560209081526040808320939093556001600d8190558351928352908201527f29dbf52f1b5bddb8f65ec96f0076b34fa16b800654ea7ed5eec0224a3aef989e910160405180910390a1600160086000620006006000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff1995861617905530815260089092529020805490911660011790556200064b83620007a4565b620006563062000870565b620006ea602260039054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620006a957600080fd5b505afa158015620006be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006e4919062000cf3565b62000870565b3360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6200071c6012600a62000c6e565b6200072d906410acc4794462000c7c565b60405190815260200160405180910390a36200074862000a43565b50505062000d8c565b60006200079b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000aca60201b60201c565b90505b92915050565b6001600160a01b03811660009081526009602052604090205460ff1615620007c95750565b6001600160a01b0381166000818152600960209081526040808320805460ff19166001908117909155600a805491820181559093527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a890920180546001600160a01b0319168417905590519182527fa4156168c286809bc7d80fb9dd33a0f1f71f9cfd58c0fae72c11b2fab3a3e761910160405180910390a16200086d8162000b06565b50565b6000546001600160a01b03163314620008bb5760405162461bcd60e51b815260206004820181905260248201526000805160206200653183398151915260448201526064016200023a565b6001600160a01b038116620009275760405162461bcd60e51b815260206004820152602b60248201527f746f6b656e416464726573732073686f756c64206e6f7420626520746865207a60448201526a65726f206164647265737360a81b60648201526084016200023a565b6001600160a01b0381166000908152600b602052604090205460ff1615620009a65760405162461bcd60e51b815260206004820152602b60248201527f746f6b656e4164647265737320697320616c726561647920616e20617574686f60448201526a3934bd32b2103a37b5b2b760a91b60648201526084016200023a565b6001600160a01b0381166000818152600b60209081526040808320805460ff19166001908117909155600c805491820181559093527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c790920180546001600160a01b0319168417905590519182527f3d8bc8d3643383e535cf1332154e6a0eb63b44cd5aed5582a88dab55793e0cbc91015b60405180910390a150565b6000546001600160a01b0316331462000a8e5760405162461bcd60e51b815260206004820181905260248201526000805160206200653183398151915260448201526064016200023a565b6022805462ff00001916620100001790556040517f8f4e75b2b71b51d3107f168f33d4f291c4ef089a69b1075bcbf4476c69e81d0690600090a1565b6000818362000aee5760405162461bcd60e51b81526004016200023a919062000d11565b50600062000afd848662000d69565b95945050505050565b6001600160a01b038116600081815260086020908152604091829020805460ff1916600117905590519182527f7168e8adb718597b3ac83e2dfe415bea8ebaabb57fe933ffac2e0ed93b80718e910162000a38565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000bb257816000190482111562000b965762000b9662000b5b565b8085161562000ba457918102915b93841c939080029062000b76565b509250929050565b60008262000bcb575060016200079e565b8162000bda575060006200079e565b816001811462000bf3576002811462000bfe5762000c1e565b60019150506200079e565b60ff84111562000c125762000c1262000b5b565b50506001821b6200079e565b5060208310610133831016604e8410600b841016171562000c43575081810a6200079e565b62000c4f838362000b71565b806000190482111562000c665762000c6662000b5b565b029392505050565b60006200079b838362000bba565b600081600019048311821515161562000c995762000c9962000b5b565b500290565b80516001600160a01b038116811462000cb657600080fd5b919050565b6000806040838503121562000ccf57600080fd5b62000cda8362000c9e565b915062000cea6020840162000c9e565b90509250929050565b60006020828403121562000d0657600080fd5b6200079b8262000c9e565b600060208083528351808285015260005b8181101562000d405785810183015185820160400152820162000d22565b8181111562000d53576000604083870101525b50601f01601f1916929092016040019392505050565b60008262000d8757634e487b7160e01b600052601260045260246000fd5b500490565b60805161578262000daf600039600081816105f9015261436501526157826000f3fe6080604052600436106103e45760003560e01c806370a0823111610206578063bf322d3211610117578063dd62ed3e116100a5578063ec28438a11610077578063ec28438a14610c21578063f0f165af14610c41578063f2fde38b14610c61578063f4e0d9ac14610c81578063ff7d2e8214610ca157005b8063dd62ed3e14610b88578063e0223bab14610bce578063e7c52d4414610bec578063ea2f0b3714610c0157005b8063ce71bcd7116100e9578063ce71bcd714610af3578063d6e03cd414610b08578063d7b4be2414610b28578063d96d54d814610b48578063d98daa4314610b6857005b8063bf322d3214610a7d578063c30fccd914610a9d578063c49b9a8014610abd578063ca5f084f14610add57005b8063a073d37f11610194578063aed262b111610166578063aed262b1146109fd578063b51d404214610a1d578063b9e5a03b14610a3d578063bb2f719914610a53578063bdc653ef14610a6857005b8063a073d37f14610988578063a457c2d71461099d578063a725a93f146109bd578063a9059cbb146109dd57005b80638da5cb5b116101d85780638da5cb5b146108e75780638ee88c531461090557806390fe60441461092557806395d89b411461094557806398118cb41461097257005b806370a08231146108705780637ecebe00146108905780638188f71c146108bd5780638c0b5e22146108d257005b80633d988cec11610300578063567a78c71161028e5780636053a0e3116102605780636053a0e3146107ef57806366adeb8c1461080e57806369ef7893146108235780636b25faf9146108435780636b54acd91461085b57005b8063567a78c71461077957806357976fb4146107995780635f7e3821146107b95780635f81a57c146107d957005b806343d91bf1116102d257806343d91bf1146106c657806349bd5a5e146106e65780634a74bb02146107065780634f27ec3e146107205780635342acb41461074057005b80633d988cec1461065057806341cb87fc1461067057806341e70fa614610690578063437823ec146106a657005b806329370cc61161037d57806330c2c13b1161034f57806330c2c13b146105ab578063313ce567146105cb5780633644e515146105e7578063395093511461061b5780633a234fc11461063b57005b806329370cc61461051757806329d9ec5e146105375780632ce04ce31461055757806330adf81f1461057757005b80631694505e116103b65780631694505e1461048e57806318160ddd146104cd57806323b872dd146104e2578063246d9fe81461050257005b8063064a59d0146103ed57806306fdde0314610415578063095ea7b31461044f5780630a96478a1461046f57005b366103eb57005b005b3480156103f957600080fd5b50601e5442115b60405190151581526020015b60405180910390f35b34801561042157600080fd5b50604080518082019091526008815267457665725269736560c01b60208201525b60405161040c9190615010565b34801561045b57600080fd5b5061040061046a366004615058565b610cc1565b34801561047b57600080fd5b50600a545b60405190815260200161040c565b34801561049a57600080fd5b506022546104b590630100000090046001600160a01b031681565b6040516001600160a01b03909116815260200161040c565b3480156104d957600080fd5b50610480610cd8565b3480156104ee57600080fd5b506104006104fd366004615084565b610cfa565b34801561050e57600080fd5b50610480610d74565b34801561052357600080fd5b506103eb6105323660046150d3565b610df1565b34801561054357600080fd5b506103eb6105523660046150f0565b610e78565b34801561056357600080fd5b506004546104b5906001600160a01b031681565b34801561058357600080fd5b506104807f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b3480156105b757600080fd5b506103eb6105c6366004615112565b610f10565b3480156105d757600080fd5b506040516012815260200161040c565b3480156105f357600080fd5b506104807f000000000000000000000000000000000000000000000000000000000000000081565b34801561062757600080fd5b50610400610636366004615058565b611294565b34801561064757600080fd5b50600c54610480565b34801561065c57600080fd5b506104b561066b36600461512f565b6112ca565b34801561067c57600080fd5b506103eb61068b366004615112565b6112f4565b34801561069c57600080fd5b50610480601a5481565b3480156106b257600080fd5b506103eb6106c1366004615112565b611589565b3480156106d257600080fd5b506103eb6106e1366004615148565b611628565b3480156106f257600080fd5b506023546104b5906001600160a01b031681565b34801561071257600080fd5b506022546104009060ff1681565b34801561072c57600080fd5b506103eb61073b36600461512f565b6118cd565b34801561074c57600080fd5b5061040061075b366004615112565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561078557600080fd5b506103eb610794366004615112565b6119b5565b3480156107a557600080fd5b506022546104009062010000900460ff1681565b3480156107c557600080fd5b506002546104b5906001600160a01b031681565b3480156107e557600080fd5b50610480601b5481565b3480156107fb57600080fd5b5060225461040090610100900460ff1681565b34801561081a57600080fd5b506103eb611b71565b34801561082f57600080fd5b506103eb61083e366004615112565b611bc7565b34801561084f57600080fd5b50601f54421115610400565b34801561086757600080fd5b506103eb611dec565b34801561087c57600080fd5b5061048061088b366004615112565b611e4d565b34801561089c57600080fd5b506104806108ab366004615112565b60256020526000908152604090205481565b3480156108c957600080fd5b50600d54610480565b3480156108de57600080fd5b50610480611eb3565b3480156108f357600080fd5b506000546001600160a01b03166104b5565b34801561091157600080fd5b506103eb61092036600461512f565b611eff565b34801561093157600080fd5b506103eb6109403660046150f0565b611fc9565b34801561095157600080fd5b506040805180820190915260048152635249534560e01b6020820152610442565b34801561097e57600080fd5b50610480600e5481565b34801561099457600080fd5b50601354610480565b3480156109a957600080fd5b506104006109b8366004615058565b612217565b3480156109c957600080fd5b506103eb6109d8366004615112565b612266565b3480156109e957600080fd5b506104006109f8366004615058565b612312565b348015610a0957600080fd5b506103eb610a183660046150f0565b61231f565b348015610a2957600080fd5b506103eb610a383660046150f0565b6123d2565b348015610a4957600080fd5b5061048060195481565b348015610a5f57600080fd5b506103eb612449565b348015610a7457600080fd5b50601454610480565b348015610a8957600080fd5b506104b5610a9836600461512f565b6124af565b348015610aa957600080fd5b506103eb610ab8366004615112565b6124bf565b348015610ac957600080fd5b506103eb610ad83660046150d3565b612666565b348015610ae957600080fd5b5061048060125481565b348015610aff57600080fd5b506104806126d1565b348015610b1457600080fd5b50610400610b23366004615199565b6126f4565b348015610b3457600080fd5b506003546104b5906001600160a01b031681565b348015610b5457600080fd5b506103eb610b63366004615112565b61275f565b348015610b7457600080fd5b506103eb610b8336600461512f565b61285f565b348015610b9457600080fd5b50610480610ba3366004615210565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b348015610bda57600080fd5b506001546001600160a01b03166104b5565b348015610bf857600080fd5b506104806128c7565b348015610c0d57600080fd5b506103eb610c1c366004615112565b61290c565b348015610c2d57600080fd5b506103eb610c3c36600461512f565b6129a7565b348015610c4d57600080fd5b506103eb610c5c36600461512f565b612a0f565b348015610c6d57600080fd5b506103eb610c7c366004615112565b612a77565b348015610c8d57600080fd5b506103eb610c9c366004615112565b612b22565b348015610cad57600080fd5b506103eb610cbc366004615112565b612c30565b6000610cce338484612d6e565b5060015b92915050565b6000610ce66012600a615343565b610cf5906410acc4794461534f565b905090565b6000610d07848484612e92565b610d6a8433610d6585604051806060016040528060288152602001615700602891396001600160a01b038a16600090815260066020526040812090335b6001600160a01b0316815260208101919091526040016000205491906134b7565b612d6e565b5060019392505050565b6024546040805163048db3fd60e31b815290516000926001600160a01b03169163246d9fe8916004808301926020929190829003018186803b158015610db957600080fd5b505afa158015610dcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf5919061536e565b6001546001600160a01b03163314610e245760405162461bcd60e51b8152600401610e1b90615387565b60405180910390fd5b602280548215156101000261ff00199091161790556040517f3794234fa370c9f3b948dda3e3040530785b2ef1eb27dda3ffde478f4e2643c090610e6d90831515815260200190565b60405180910390a150565b6001546001600160a01b03163314610ea25760405162461bcd60e51b8152600401610e1b90615387565b601454610ecb610eb383600a615343565b610ec585670de0b6b3a76400006134f1565b90612d25565b60148190556040805183815260208101929092527ff6d009afa11079b7b679b7589d0a18b287e11234d83e6eb4042a6fc3d4f8e85b91015b60405180910390a1505050565b6000546001600160a01b03163314610f3a5760405162461bcd60e51b8152600401610e1b906153cf565b6001600160a01b038116301415610fae5760405162461bcd60e51b815260206004820152603260248201527f63616e6e6f742072656d6f7665207468697320636f6e74726163742066726f6d60448201527120617574686f72697a656420746f6b656e7360701b6064820152608401610e1b565b602260039054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610ffc57600080fd5b505afa158015611010573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110349190615404565b6001600160a01b0316816001600160a01b031614156110bb5760405162461bcd60e51b815260206004820152603b60248201527f63616e6e6f742072656d6f7665207468652057455448207479706520636f6e7460448201527f726163742066726f6d20617574686f72697a656420746f6b656e7300000000006064820152608401610e1b565b6001600160a01b0381166000908152600b602052604090205460ff166111335760405162461bcd60e51b815260206004820152602760248201527f746f6b656e41646472657373206973206e6f7420616e20617574686f72697a6560448201526632103a37b5b2b760c91b6064820152608401610e1b565b6001600160a01b0381166000908152600b60205260408120805460ff191690555b600c5481101561125a57816001600160a01b0316600c828154811061117b5761117b615421565b6000918252602090912001546001600160a01b0316141561124857600c80546111a690600190615437565b815481106111b6576111b6615421565b600091825260209091200154600c80546001600160a01b0390921691839081106111e2576111e2615421565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600c8054806112215761122161544e565b600082815260209020810160001990810180546001600160a01b031916905501905561125a565b8061125281615464565b915050611154565b506040516001600160a01b03821681527fcd95bc912b4e5dedb4c1e8c1054dd088420422db8284dcd4178ca3b2e262038890602001610e6d565b3360008181526006602090815260408083206001600160a01b03871684529091528120549091610cce918590610d659086613570565b600a81815481106112da57600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b0316331461131e5760405162461bcd60e51b8152600401610e1b906153cf565b6001600160a01b0381166113895760405162461bcd60e51b815260206004820152602c60248201527f726f75746572416464726573732073686f756c64206e6f74206265207468652060448201526b7a65726f206164647265737360a01b6064820152608401610e1b565b6000602260039054906101000a90046001600160a01b031690506000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156113e157600080fd5b505afa1580156113f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114199190615404565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561146157600080fd5b505afa158015611475573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114999190615404565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b1580156114df57600080fd5b505afa1580156114f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115179190615404565b602380546001600160a01b0319166001600160a01b03928316179055602280546301000000600160b81b03191663010000008484160217905560408051848316815291851660208301527f1b40f7040327d783cc3cffdd488e8233012f50d648b53c5218f73ef4a5b714059101610f03565b6000546001600160a01b031633146115b35760405162461bcd60e51b8152600401610e1b906153cf565b6001600160a01b03811660009081526008602052604090205460ff161561161c5760405162461bcd60e51b815260206004820181905260248201527f4163636f756e74206973206e6f74206578636c7564656420666f7220666565736044820152606401610e1b565b611625816135cf565b50565b6001546001600160a01b031633146116525760405162461bcd60e51b8152600401610e1b90615387565b6001600160a01b0385166000908152600b602052604090205460ff166116c65760405162461bcd60e51b8152602060048201526024808201527f66726f6d546f6b656e206973206e6f7420616e20617574686f72697a6564207460448201526337b5b2b760e11b6064820152608401610e1b565b6001600160a01b0384166000908152600b602052604090205460ff166117395760405162461bcd60e51b815260206004820152602260248201527f746f546f6b656e206973206e6f7420616e20617574686f72697a656420746f6b60448201526132b760f11b6064820152608401610e1b565b600061175e61174984600a615343565b610ec561175785600a615343565b87906134f1565b9050602260039054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156117ae57600080fd5b505afa1580156117c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e69190615404565b6001600160a01b0316856001600160a01b0316141561180f5761180a863083613623565b6118c5565b602260039054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561185d57600080fd5b505afa158015611871573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118959190615404565b6001600160a01b0316866001600160a01b031614156118b95761180a85308361385d565b6118c586863084613a04565b505050505050565b6000546001600160a01b031633146118f75760405162461bcd60e51b8152600401610e1b906153cf565b600e5481111561196f5760405162461bcd60e51b815260206004820152603e60248201527f427573696e65737320446576656c6f706d656e742064697669736f722073686f60448201527f756c64206265206c657373207468616e206c69717569646974792066656500006064820152608401610e1b565b601280549082905560408051828152602081018490527f61d33f750b58b2dd826e84c405ba34ae015788522fb94e7c971fb89eb1727bc091015b60405180910390a15050565b6000546001600160a01b031633146119df5760405162461bcd60e51b8152600401610e1b906153cf565b6001600160a01b038116611a4c5760405162461bcd60e51b815260206004820152602e60248201527f636f6e7472616374416464726573732073686f756c64206e6f7420626520746860448201526d65207a65726f206164647265737360901b6064820152608401610e1b565b6001600160a01b038116301415611acb5760405162461bcd60e51b815260206004820152603b60248201527f457665725269736520746f6b656e2073686f756c64206e6f742062652061646460448201527f656420617320616e2045636f73797374656d20636f6e747261637400000000006064820152608401610e1b565b6001600160a01b03811660009081526009602052604090205460ff1615611b685760405162461bcd60e51b815260206004820152604560248201527f636f6e74726163744164647265737320697320616c726561647920696e636c7560448201527f64656420617320616e2045766572526973652045636f73797374656d20636f6e6064820152641d1c9858dd60da1b608482015260a401610e1b565b61162581613c7e565b6000546001600160a01b03163314611b9b5760405162461bcd60e51b8152600401610e1b906153cf565b60405133904780156108fc02916000818181858888f19350505050158015611625573d6000803e3d6000fd5b6000546001600160a01b03163314611bf15760405162461bcd60e51b8152600401610e1b906153cf565b6001600160a01b03811660009081526009602052604090205460ff16611c7f5760405162461bcd60e51b815260206004820152603e60248201527f636f6e747261637441646472657373206973206e6f7420696e636c756465642060448201527f61732045766572526973652045636f73797374656d20636f6e747261637400006064820152608401610e1b565b6001600160a01b0381166000908152600960205260408120805460ff191690555b600a54811015611da657816001600160a01b0316600a8281548110611cc757611cc7615421565b6000918252602090912001546001600160a01b03161415611d9457600a8054611cf290600190615437565b81548110611d0257611d02615421565b600091825260209091200154600a80546001600160a01b039092169183908110611d2e57611d2e615421565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600a805480611d6d57611d6d61544e565b600082815260209020810160001990810180546001600160a01b0319169055019055611da6565b80611d9e81615464565b915050611ca0565b506040516001600160a01b03821681527fd5cf137fae5e29474768fa6da67bb8364d5c03e6d1138a35cff110303d38e68d9060200160405180910390a161162581613d44565b6000546001600160a01b03163314611e165760405162461bcd60e51b8152600401610e1b906153cf565b6022805462ff0000191690556040517f175e049bb68bcee8f7b1c836f5d07f408d5f8ae38c23e4dca3f68888334529a790600090a1565b6001600160a01b038116600090815260056020526040812054602154600214158015611e8b57506026544363ffffffff908116600160e01b90920416145b8015611ea457506027546001600160a01b038481169116145b15610cd257610cd28382613d95565b6000611ec0601e54421190565b8015611ece5750601f544211155b15611ef8576000611edd6126d1565b90506010548110611ef057601054611ef2565b805b91505090565b5060105490565b6000546001600160a01b03163314611f295760405162461bcd60e51b8152600401610e1b906153cf565b600a811115611f8b5760405162461bcd60e51b815260206004820152602860248201527f6c6971756964697479466565526174652073686f756c64206265206c657373206044820152677468616e2031302560c01b6064820152608401610e1b565b600e80549082905560408051828152602081018490527f2596ea4192286cc20062cf773414aef3b23a5b57b4bdc47f888e9d9059d838c491016119a9565b6000546001600160a01b03163314611ff35760405162461bcd60e51b8152600401610e1b906153cf565b600a821061205a5760405162461bcd60e51b815260206004820152602e60248201527f7472616465537461727444656c61792073686f756c64206265206c657373207460448201526d68616e203130206d696e7574657360901b6064820152608401610e1b565b607881106120c55760405162461bcd60e51b815260206004820152603260248201527f74726164655374617274436f6f6c446f776e2073686f756c64206265206c657360448201527173207468616e20313230206d696e7574657360701b6064820152608401610e1b565b8082106121315760405162461bcd60e51b815260206004820152603460248201527f7472616465537461727444656c6179206d757374206265206c6573732074686160448201527337103a3930b232a9ba30b93a21b7b7b62237bbb760611b6064820152608401610e1b565b601e546000191480156121475750601f54600019145b6121935760405162461bcd60e51b815260206004820152601b60248201527f54726164696e672068617320616c7265616479207374617274656400000000006044820152606401610e1b565b6006600e819055600f556011546010556121ad6001610df1565b6121b76001612666565b6121c282603c61534f565b6121cc904261547f565b601e556121da81603c61534f565b601e546121e7919061547f565b601f556040517f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c790600090a15050565b6000610cce3384610d6585604051806060016040528060258152602001615728602591393360009081526006602090815260408083206001600160a01b038d16845290915290205491906134b7565b6000546001600160a01b031633146122905760405162461bcd60e51b8152600401610e1b906153cf565b6001600160a01b0381166122b65760405162461bcd60e51b8152600401610e1b90615497565b6001546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000610cce338484612e92565b6001546001600160a01b031633146123495760405162461bcd60e51b8152600401610e1b90615387565b600082118015612357575060015b6123935760405162461bcd60e51b815260206004820152600d60248201526c125b9d985b1a5908125b9c1d5d609a1b6044820152606401610e1b565b60006123a3610eb383600a615343565b6003549091506000906123c19030906001600160a01b03168461400d565b90506123cc8161420f565b50505050565b6001546001600160a01b031633146123fc5760405162461bcd60e51b8152600401610e1b90615387565b60165461240d610eb383600a615343565b60168190556040805183815260208101929092527f364183e369117c179345d1999f4cb03bd7d74226bacee97755da5df8e069f5b19101610f03565b6000546001600160a01b031633146124735760405162461bcd60e51b8152600401610e1b906153cf565b6022805462ff00001916620100001790556040517f8f4e75b2b71b51d3107f168f33d4f291c4ef089a69b1075bcbf4476c69e81d0690600090a1565b600c81815481106112da57600080fd5b6000546001600160a01b031633146124e95760405162461bcd60e51b8152600401610e1b906153cf565b6001600160a01b0381166125535760405162461bcd60e51b815260206004820152602b60248201527f746f6b656e416464726573732073686f756c64206e6f7420626520746865207a60448201526a65726f206164647265737360a81b6064820152608401610e1b565b6001600160a01b0381166000908152600b602052604090205460ff16156125d05760405162461bcd60e51b815260206004820152602b60248201527f746f6b656e4164647265737320697320616c726561647920616e20617574686f60448201526a3934bd32b2103a37b5b2b760a91b6064820152608401610e1b565b6001600160a01b0381166000818152600b60209081526040808320805460ff19166001908117909155600c805491820181559093527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c790920180546001600160a01b0319168417905590519182527f3d8bc8d3643383e535cf1332154e6a0eb63b44cd5aed5582a88dab55793e0cbc9101610e6d565b6000546001600160a01b031633146126905760405162461bcd60e51b8152600401610e1b906153cf565b6022805460ff19168215159081179091556040519081527f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990602001610e6d565b6000610cf56107d06126e56012600a615343565b610ec5906410acc4794461534f565b600061270588338888888888614305565b612710888888612e92565b6127518833610d6589604051806060016040528060288152602001615700602891396001600160a01b038e1660009081526006602052604081209033610d44565b506001979650505050505050565b6000546001600160a01b031633146127895760405162461bcd60e51b8152600401610e1b906153cf565b6001600160a01b0381166128055760405162461bcd60e51b815260206004820152603a60248201527f5f627573696e657373446576656c6f706d656e74416464726573732073686f7560448201527f6c64206e6f7420626520746865207a65726f20616464726573730000000000006064820152608401610e1b565b600280546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f8a3c262f9b6b936f841c67b93e30a43a2aff5ea1b29ed9038cfb8cb6f4e82f4b91016119a9565b6001546001600160a01b031633146128895760405162461bcd60e51b8152600401610e1b90615387565b601580549082905560408051828152602081018490527f06f3c27e71f7455c0b87bef6c8c68d6ee266e593dbdeba36a44dc1ac1855cf3f91016119a9565b602454604080516339f14b5160e21b815290516000926001600160a01b03169163e7c52d44916004808301926020929190829003018186803b158015610db957600080fd5b6000546001600160a01b031633146129365760405162461bcd60e51b8152600401610e1b906153cf565b6001600160a01b03811660009081526008602052604090205460ff1661299e5760405162461bcd60e51b815260206004820181905260248201527f4163636f756e74206973206e6f7420696e636c7564656420666f7220666565736044820152606401610e1b565b61162581613d44565b6000546001600160a01b031633146129d15760405162461bcd60e51b8152600401610e1b906153cf565b601080549082905560408051828152602081018490527fadcf01123294f8514884e924e20eb4f3032288087368896a17c71f09668247c891016119a9565b6000546001600160a01b03163314612a395760405162461bcd60e51b8152600401610e1b906153cf565b601380549082905560408051828152602081018490527fd2f58a5c369e86bc74f3b5be6f9a34224ebb43d603f7acee04b07ef21c7d14bf91016119a9565b6000546001600160a01b03163314612aa15760405162461bcd60e51b8152600401610e1b906153cf565b6001600160a01b038116612ac75760405162461bcd60e51b8152600401610e1b90615497565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314612b4c5760405162461bcd60e51b8152600401610e1b906153cf565b6001600160a01b038116612bb85760405162461bcd60e51b815260206004820152602d60248201527f5f7374616b696e67416464726573732073686f756c64206e6f7420626520746f60448201526c207a65726f206164647265737360981b6064820152608401610e1b565b600380546001600160a01b038381166001600160a01b03198084168217909455602480549094168117909355604080519190921680825260208201939093527f03fbfa1263b46c684780f3c24be11a2e189a59bedf0e316a7eae861cc769eb4f91015b60405180910390a1612c2c82613c7e565b5050565b6000546001600160a01b03163314612c5a5760405162461bcd60e51b8152600401610e1b906153cf565b6001600160a01b038116612ccb5760405162461bcd60e51b815260206004820152603260248201527f5f657665724d696772617465416464726573732073686f756c64206e6f7420626044820152716520746865207a65726f206164647265737360701b6064820152608401610e1b565b600480546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f322e4b9bc06d4314ec72e9343d238223587c4a986a760408cf287fdc05aa5b959101612c1b565b6000612d6783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506145aa565b9392505050565b6001600160a01b038316612dd05760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610e1b565b6001600160a01b038216612e315760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610e1b565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316612ef65760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610e1b565b6001600160a01b038216612f585760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610e1b565b60008111612fba5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610e1b565b816001600160a01b0316836001600160a01b0316141561302c5760405162461bcd60e51b815260206004820152602760248201527f5472616e7366657220746f20616e642066726f6d20616464726573736573207460448201526668652073616d6560c81b6064820152608401610e1b565b6020546002141561309d5760405162461bcd60e51b815260206004820152603560248201527f496e76616c6964207265656e7472616e63792066726f6d20746f6b656e302f746044820152746f6b656e312062616c616e63654f6620636865636b60581b6064820152608401610e1b565b600080546001600160a01b03908116919085168214806130ce5750816001600160a01b0316846001600160a01b0316145b806130f157506001600160a01b03851660009081526009602052604090205460ff165b8061311457506001600160a01b03841660009081526009602052604090205460ff165b90506000613123601e54421190565b9050601054841115806131335750815b8061313c575080155b6131985760405162461bcd60e51b815260206004820152602760248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152661e105b5bdd5b9d60ca1b6064820152608401610e1b565b6023546001600160a01b031681806131ad5750825b806131e75750806001600160a01b0316876001600160a01b0316141580156131e75750806001600160a01b0316866001600160a01b031614155b61322c5760405162461bcd60e51b8152602060048201526016602482015275151c98591a5b99c81a5cc81b9bdd08195b98589b195960521b6044820152606401610e1b565b600061323a60215460021490565b15905082801561324c5750601f544211155b8015613256575083155b801561325f5750805b1561326f5761326f8789886145d8565b3060009081526005602052604081205460135490915081101560008580156132945750835b80156132a2575060225460ff165b80156132bf5750846001600160a01b03168a6001600160a01b0316145b905080156133535781156132db5760135492506132db836147ed565b602254610100900460ff1680156132f3575060165447115b801561330e5750601d5460185460175461330c91613570565b115b156133535747601c5411156133225747601c555b601c5415613353576000613337601c54614855565b90506133428161420f565b506000601c81905560178190556018555b851561341b57846001600160a01b03168a6001600160a01b031614156133cf57601854613380908a613570565b601855601a54613390908a613570565b601a556015548911156133ca5760145447908111156133ae57506014545b6133c56133bc826064612d25565b601c5490613570565b601c55505b61340a565b846001600160a01b03168b6001600160a01b0316141561340a576017546133f6908a613570565b601755601954613406908a613570565b6019555b601b54613417908a613570565b601b555b6001600160a01b038b1660009081526008602052604090205460019060ff168061345d57506001600160a01b038b1660009081526008602052604090205460ff165b15613466575060005b878061347c57506001546001600160a01b031633145b1561348e5761348961489a565b61349d565b841561349d5761349d8b614900565b6134a98c8c8c84614ab3565b505050505050505050505050565b600081848411156134db5760405162461bcd60e51b8152600401610e1b9190615010565b5060006134e88486615437565b95945050505050565b60008261350057506000610cd2565b600061350c838561534f565b90508261351985836154dd565b14612d675760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610e1b565b60008061357d838561547f565b905083811015612d675760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610e1b565b6001600160a01b038116600081815260086020908152604091829020805460ff1916600117905590519182527f7168e8adb718597b3ac83e2dfe415bea8ebaabb57fe933ffac2e0ed93b80718e9101610e6d565b604080516002808252606082018352600092602083019080368337019050509050838160008151811061365857613658615421565b60200260200101906001600160a01b031690816001600160a01b031681525050602260039054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156136c657600080fd5b505afa1580156136da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136fe9190615404565b8160018151811061371157613711615421565b6001600160a01b03928316602091820292909201015260225460405163095ea7b360e01b8152630100000090910482166004820152602481018490529085169063095ea7b390604401602060405180830381600087803b15801561377457600080fd5b505af1158015613788573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137ac9190615515565b5060225460405163791ac94760e01b815263010000009091046001600160a01b03169063791ac947906137ec908590600090869089904290600401615576565b600060405180830381600087803b15801561380657600080fd5b505af115801561381a573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a7828260405161384f9291906155b2565b60405180910390a150505050565b604080516002808252606082018352600092602083019080368337019050509050602260039054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156138cc57600080fd5b505afa1580156138e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139049190615404565b8160008151811061391757613917615421565b60200260200101906001600160a01b031690816001600160a01b031681525050838160018151811061394b5761394b615421565b6001600160a01b039283166020918202929092010152602254630100000090041663b6f9de9583600084876139824261012c613570565b6040518663ffffffff1660e01b81526004016139a194939291906155cb565b6000604051808303818588803b1580156139ba57600080fd5b505af11580156139ce573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a9624828260405161384f9291906155b2565b60408051600380825260808201909252600091602082016060803683370190505090508481600081518110613a3b57613a3b615421565b60200260200101906001600160a01b031690816001600160a01b031681525050602260039054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613aa957600080fd5b505afa158015613abd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ae19190615404565b81600181518110613af457613af4615421565b60200260200101906001600160a01b031690816001600160a01b0316815250508381600281518110613b2857613b28615421565b6001600160a01b03928316602091820292909201015260225460405163095ea7b360e01b8152630100000090910482166004820152602481018490529086169063095ea7b390604401602060405180830381600087803b158015613b8b57600080fd5b505af1158015613b9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bc39190615515565b50602254630100000090046001600160a01b0316635c11d7958360008487613bec426078613570565b6040518663ffffffff1660e01b8152600401613c0c959493929190615576565b600060405180830381600087803b158015613c2657600080fd5b505af1158015613c3a573d6000803e3d6000fd5b505050507f7ec0e62e5eb75d92620f9df4e706e28dac160965ba772960cde791c4890384478282604051613c6f9291906155b2565b60405180910390a15050505050565b6001600160a01b03811660009081526009602052604090205460ff1615613ca25750565b6001600160a01b0381166000818152600960209081526040808320805460ff19166001908117909155600a805491820181559093527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a890920180546001600160a01b0319168417905590519182527fa4156168c286809bc7d80fb9dd33a0f1f71f9cfd58c0fae72c11b2fab3a3e761910160405180910390a1611625816135cf565b6001600160a01b038116600081815260086020908152604091829020805460ff1916905590519182527fead11242b7eb5b3a03a27edc0039f1305d251bf91b3d1e94c3861c3d6e4ac1289101610e6d565b6040805160a0810182526026546001600160701b038082168352600160701b8204166020830152600160e01b900463ffffffff16918101919091526027546001600160a01b0390811660608301526028541660808201819052321415614008576000613e09846001600160a01b0316614adb565b90506001600160a01b038116301415613e3157613e2e846001600160a01b0316614b12565b90505b6001600160a01b038116613e455750505050565b6040516370a0823160e01b81526001600160a01b038581166004830152600091908316906370a082319060240160206040518083038186803b158015613e8a57600080fd5b505afa158015613e9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ec2919061536e565b905082600001516001600160701b0316846001600160701b0316118015613efe575082602001516001600160701b0316816001600160701b0316115b15613f5c5760405162461bcd60e51b815260206004820152602860248201527f4c69717569646974792063616e20626520616464656420627920746865206f776044820152676e6572206f6e6c7960c01b6064820152608401610e1b565b82600001516001600160701b0316846001600160701b0316108015613f96575082602001516001600160701b0316816001600160701b0316105b156140055760225462010000900460ff16156140055760405162461bcd60e51b815260206004820152602860248201527f4c69717569646974792063616e6e6f742062652072656d6f766564207768696c60448201526719481b1bd8dad95960c21b6064820152608401610e1b565b50505b505050565b60408051600280825260608201835260009283929190602083019080368337019050509050602260039054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561408057600080fd5b505afa158015614094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140b89190615404565b816000815181106140cb576140cb615421565b60200260200101906001600160a01b031690816001600160a01b03168152505084816001815181106140ff576140ff615421565b6001600160a01b039283166020918202929092010152602254600091630100000090910416637ff36ab5858385896141394261012c613570565b6040518663ffffffff1660e01b815260040161415894939291906155cb565b6000604051808303818588803b15801561417157600080fd5b505af1158015614185573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526141ae9190810190615600565b90507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a962484836040516141e19291906155b2565b60405180910390a1806001815181106141fc576141fc615421565b6020026020010151925050509392505050565b8015611625576024805460405163c0e89b5760e01b81523060048201529182018390526001600160a01b03169063c0e89b5790604401600060405180830381600087803b15801561425f57600080fd5b505af1158015614273573d6000803e3d6000fd5b505060248054604051633bd5d17360e01b8152600481018690526001600160a01b039091169350633bd5d173925001600060405180830381600087803b1580156142bc57600080fd5b505af11580156142d0573d6000803e3d6000fd5b505050507f8229f1003fbf3f8330019fe361ce2a589cf490e3f2991f80a1dd1602898eebaa81604051610e6d91815260200190565b428410156143495760405162461bcd60e51b8152602060048201526011602482015270115d995c949a5cd94e8811561412549151607a1b6044820152606401610e1b565b6001600160a01b038716600090815260256020526040812080547f0000000000000000000000000000000000000000000000000000000000000000917f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918b918b918b91876143b783615464565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810187905260e0016040516020818303038152906040528051906020012060405160200161443092919061190160f01b81526002810192909252602282015260420190565b604051602081830303815290604052805190602001209050601b8460ff1610156144665761445f601b856156be565b93506144be565b601e8460ff1611156144be576040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052605c016040516020818303038152906040528051906020012090505b6040805160008082526020820180845284905260ff871692820192909252606081018590526080810184905260019060a0016020604051602081039080840390855afa158015614512573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906145485750886001600160a01b0316816001600160a01b0316145b6145945760405162461bcd60e51b815260206004820152601b60248201527f45766572526973653a20494e56414c49445f5349474e415455524500000000006044820152606401610e1b565b61459f898989612d6e565b505050505050505050565b600081836145cb5760405162461bcd60e51b8152600401610e1b9190615010565b5060006134e884866154dd565b6023546001600160a01b03908116906000908416821415614652576001600160a01b03851660009081526007602052604090205443148061462757503260009081526007602052604090205443145b6001600160a01b038616600090815260076020526040808220439081905532835291205590506146c7565b816001600160a01b0316856001600160a01b031614156146c7576001600160a01b0384166000908152600760205260409020544314806146a057503260009081526007602052604090205443145b6001600160a01b038516600090815260076020526040808220439081905532835291205590505b80156147615760405162461bcd60e51b815260206004820152605c60248201527f4d756c7469706c652074726164657320696e2073616d6520626c6f636b20667260448201527f6f6d2073616d6520736f7572636520617265206e6f7420616c6c6f776564206460648201527f7572696e672074726164696e6720737461727420636f6f6c646f776e00000000608482015260a401610e1b565b6147696126d1565b8311156140055760405162461bcd60e51b815260206004820152604660248201527f4d6178207472616e73616374696f6e20697320302e303525206f6620746f746160448201527f6c20737570706c7920647572696e672074726164696e6720737461727420636f60648201526537b63237bbb760d11b608482015260a401610e1b565b600260215414156147fd57600080fd5b60026021554761480e308084613623565b600061481a4783614b49565b600254600e5460125492935061484b926001600160a01b03909216916148469190610ec59086906134f1565b614b8b565b5050600160215550565b60006002602154141561486757600080fd5b60026021556000821561488f5760035461488c9030906001600160a01b03168561400d565b90505b600160215592915050565b6026544363ffffffff908116600160e01b9092041614156148fe576040805160a08101825260008082526020820181905291810182905260608101829052608001819052602655602780546001600160a01b03199081169091556028805490911690555b565b6002602054141561491057600080fd5b60026020556000614936826001600160a01b031660009081526005602052604090205490565b9050600061494c836001600160a01b0316614adb565b90506001600160a01b03811630141561497457614971836001600160a01b0316614b12565b90505b60006001600160a01b03821661498c57506000614a08565b6040516370a0823160e01b81526001600160a01b0385811660048301528316906370a082319060240160206040518083038186803b1580156149cd57600080fd5b505afa1580156149e1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a05919061536e565b90505b6040805160a0810182526001600160701b039485168082529290941660208086018290524363ffffffff169286018390526001600160a01b039690961660608601819052326080909601869052602680546001600160e01b031916909417600160701b909202919091176001600160e01b0316600160e01b90920291909117909155602780546001600160a01b03199081169092179055602880549091169092179091555060019055565b80614ac057614ac0614bc1565b614acb848484614bd7565b806123cc576123cc600f54600e55565b6040805160048152602481019091526020810180516001600160e01b031663d21220a760e01b179052600090610cd2908390614e22565b6040805160048152602481019091526020810180516001600160e01b0316630dfe168160e01b179052600090610cd2908390614e22565b6000612d6783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506134b7565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015614008573d6000803e3d6000fd5b600e54614bca57565b600e8054600f5560009055565b600080614be383614ed5565b6001600160a01b038716600090815260056020526040812054929450909250614c0c8286614b49565b6001600160a01b03808916600090815260056020526040808220849055918916815290812054919250614c3f8287613570565b6001600160a01b0389166000908152600560205260409020819055905081158015614c6a5750600081115b15614cc357600d546000614c7f826001613570565b600d81905560408051848152602081018390529192507f29dbf52f1b5bddb8f65ec96f0076b34fa16b800654ea7ed5eec0224a3aef989e910160405180910390a150505b600084118015614cd1575082155b15614d2a57600d546000614ce6826001614b49565b600d81905560408051848152602081018390529192507fcb954675aa33bcbae534f2608dbb8882f530e636989798e66a81ba5d04b5f304910160405180910390a150505b614d3385614efc565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef88604051614d7891815260200190565b60405180910390a36003546001600160a01b0389811691161415614dce576040518681527fe958c86d09c7f3f54dfbf230d4bdaac7d411ead5c94c9df118c366c67a6862609060200160405180910390a161459f565b6003546001600160a01b038a81169116141561459f576040518781527f1027e95115b9619b843286ee167b4722741601c4a1778845c70fb2aabb567f649060200160405180910390a1505050505050505050565b6000614e2d83614f8c565b614e3957506000610cd2565b600080846001600160a01b031684604051614e5491906156e3565b600060405180830381855afa9150503d8060008114614e8f576040519150601f19603f3d011682016040523d82523d6000602084013e614e94565b606091505b5091509150818015614ea857506020815110155b15614eca5780806020019051810190614ec19190615404565b92505050610cd2565b506000949350505050565b6000806000614ee384614fc8565b90506000614ef18583614b49565b959194509092505050565b3060009081526005602052604081205490614f178284613570565b306000908152600560205260409020819055905081158015614f395750600081115b1561400857600d546000614f4e826001613570565b600d81905560408051848152602081018390529192507f29dbf52f1b5bddb8f65ec96f0076b34fa16b800654ea7ed5eec0224a3aef989e9101613c6f565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590614fc057508115155b949350505050565b6000610cd26064610ec5600e54856134f190919063ffffffff16565b60005b83811015614fff578181015183820152602001614fe7565b838111156123cc5750506000910152565b602081526000825180602084015261502f816040850160208701614fe4565b601f01601f19169190910160400192915050565b6001600160a01b038116811461162557600080fd5b6000806040838503121561506b57600080fd5b823561507681615043565b946020939093013593505050565b60008060006060848603121561509957600080fd5b83356150a481615043565b925060208401356150b481615043565b929592945050506040919091013590565b801515811461162557600080fd5b6000602082840312156150e557600080fd5b8135612d67816150c5565b6000806040838503121561510357600080fd5b50508035926020909101359150565b60006020828403121561512457600080fd5b8135612d6781615043565b60006020828403121561514157600080fd5b5035919050565b600080600080600060a0868803121561516057600080fd5b853561516b81615043565b9450602086013561517b81615043565b94979496505050506040830135926060810135926080909101359150565b600080600080600080600060e0888a0312156151b457600080fd5b87356151bf81615043565b965060208801356151cf81615043565b95506040880135945060608801359350608088013560ff811681146151f357600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561522357600080fd5b823561522e81615043565b9150602083013561523e81615043565b809150509250929050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561529a57816000190482111561528057615280615249565b8085161561528d57918102915b93841c9390800290615264565b509250929050565b6000826152b157506001610cd2565b816152be57506000610cd2565b81600181146152d457600281146152de576152fa565b6001915050610cd2565b60ff8411156152ef576152ef615249565b50506001821b610cd2565b5060208310610133831016604e8410600b841016171561531d575081810a610cd2565b615327838361525f565b806000190482111561533b5761533b615249565b029392505050565b6000612d6783836152a2565b600081600019048311821515161561536957615369615249565b500290565b60006020828403121561538057600080fd5b5051919050565b60208082526028908201527f4f776e61626c653a2063616c6c6572206973206e6f742074686520627579626160408201526731b59037bbb732b960c11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561541657600080fd5b8151612d6781615043565b634e487b7160e01b600052603260045260246000fd5b60008282101561544957615449615249565b500390565b634e487b7160e01b600052603160045260246000fd5b600060001982141561547857615478615249565b5060010190565b6000821982111561549257615492615249565b500190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6000826154fa57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561552757600080fd5b8151612d67816150c5565b600081518084526020808501945080840160005b8381101561556b5781516001600160a01b031687529582019590820190600101615546565b509495945050505050565b85815284602082015260a06040820152600061559560a0830186615532565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201526000614fc06040830184615532565b8481526080602082015260006155e46080830186615532565b6001600160a01b03949094166040830152506060015292915050565b6000602080838503121561561357600080fd5b825167ffffffffffffffff8082111561562b57600080fd5b818501915085601f83011261563f57600080fd5b815181811115615651576156516154ff565b8060051b604051601f19603f83011681018181108582111715615676576156766154ff565b60405291825284820192508381018501918883111561569457600080fd5b938501935b828510156156b257845184529385019392850192615699565b98975050505050505050565b600060ff821660ff84168060ff038211156156db576156db615249565b019392505050565b600082516156f5818460208701614fe4565b919091019291505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220161ad41a3905b0de17f7196a5502ac4483c0579ded4c05685938810f669ee3cd64736f6c634300080800334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65720000000000000000000000001490eaa0de0b2d4f9fe0e354a7d99d6c6532be840000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

Deployed Bytecode

0x6080604052600436106103e45760003560e01c806370a0823111610206578063bf322d3211610117578063dd62ed3e116100a5578063ec28438a11610077578063ec28438a14610c21578063f0f165af14610c41578063f2fde38b14610c61578063f4e0d9ac14610c81578063ff7d2e8214610ca157005b8063dd62ed3e14610b88578063e0223bab14610bce578063e7c52d4414610bec578063ea2f0b3714610c0157005b8063ce71bcd7116100e9578063ce71bcd714610af3578063d6e03cd414610b08578063d7b4be2414610b28578063d96d54d814610b48578063d98daa4314610b6857005b8063bf322d3214610a7d578063c30fccd914610a9d578063c49b9a8014610abd578063ca5f084f14610add57005b8063a073d37f11610194578063aed262b111610166578063aed262b1146109fd578063b51d404214610a1d578063b9e5a03b14610a3d578063bb2f719914610a53578063bdc653ef14610a6857005b8063a073d37f14610988578063a457c2d71461099d578063a725a93f146109bd578063a9059cbb146109dd57005b80638da5cb5b116101d85780638da5cb5b146108e75780638ee88c531461090557806390fe60441461092557806395d89b411461094557806398118cb41461097257005b806370a08231146108705780637ecebe00146108905780638188f71c146108bd5780638c0b5e22146108d257005b80633d988cec11610300578063567a78c71161028e5780636053a0e3116102605780636053a0e3146107ef57806366adeb8c1461080e57806369ef7893146108235780636b25faf9146108435780636b54acd91461085b57005b8063567a78c71461077957806357976fb4146107995780635f7e3821146107b95780635f81a57c146107d957005b806343d91bf1116102d257806343d91bf1146106c657806349bd5a5e146106e65780634a74bb02146107065780634f27ec3e146107205780635342acb41461074057005b80633d988cec1461065057806341cb87fc1461067057806341e70fa614610690578063437823ec146106a657005b806329370cc61161037d57806330c2c13b1161034f57806330c2c13b146105ab578063313ce567146105cb5780633644e515146105e7578063395093511461061b5780633a234fc11461063b57005b806329370cc61461051757806329d9ec5e146105375780632ce04ce31461055757806330adf81f1461057757005b80631694505e116103b65780631694505e1461048e57806318160ddd146104cd57806323b872dd146104e2578063246d9fe81461050257005b8063064a59d0146103ed57806306fdde0314610415578063095ea7b31461044f5780630a96478a1461046f57005b366103eb57005b005b3480156103f957600080fd5b50601e5442115b60405190151581526020015b60405180910390f35b34801561042157600080fd5b50604080518082019091526008815267457665725269736560c01b60208201525b60405161040c9190615010565b34801561045b57600080fd5b5061040061046a366004615058565b610cc1565b34801561047b57600080fd5b50600a545b60405190815260200161040c565b34801561049a57600080fd5b506022546104b590630100000090046001600160a01b031681565b6040516001600160a01b03909116815260200161040c565b3480156104d957600080fd5b50610480610cd8565b3480156104ee57600080fd5b506104006104fd366004615084565b610cfa565b34801561050e57600080fd5b50610480610d74565b34801561052357600080fd5b506103eb6105323660046150d3565b610df1565b34801561054357600080fd5b506103eb6105523660046150f0565b610e78565b34801561056357600080fd5b506004546104b5906001600160a01b031681565b34801561058357600080fd5b506104807f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b3480156105b757600080fd5b506103eb6105c6366004615112565b610f10565b3480156105d757600080fd5b506040516012815260200161040c565b3480156105f357600080fd5b506104807fa4c7b00ef0bf3efe2e6311e4fc083e21c772a7665bd4a8a3b99c89611ca78d0781565b34801561062757600080fd5b50610400610636366004615058565b611294565b34801561064757600080fd5b50600c54610480565b34801561065c57600080fd5b506104b561066b36600461512f565b6112ca565b34801561067c57600080fd5b506103eb61068b366004615112565b6112f4565b34801561069c57600080fd5b50610480601a5481565b3480156106b257600080fd5b506103eb6106c1366004615112565b611589565b3480156106d257600080fd5b506103eb6106e1366004615148565b611628565b3480156106f257600080fd5b506023546104b5906001600160a01b031681565b34801561071257600080fd5b506022546104009060ff1681565b34801561072c57600080fd5b506103eb61073b36600461512f565b6118cd565b34801561074c57600080fd5b5061040061075b366004615112565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561078557600080fd5b506103eb610794366004615112565b6119b5565b3480156107a557600080fd5b506022546104009062010000900460ff1681565b3480156107c557600080fd5b506002546104b5906001600160a01b031681565b3480156107e557600080fd5b50610480601b5481565b3480156107fb57600080fd5b5060225461040090610100900460ff1681565b34801561081a57600080fd5b506103eb611b71565b34801561082f57600080fd5b506103eb61083e366004615112565b611bc7565b34801561084f57600080fd5b50601f54421115610400565b34801561086757600080fd5b506103eb611dec565b34801561087c57600080fd5b5061048061088b366004615112565b611e4d565b34801561089c57600080fd5b506104806108ab366004615112565b60256020526000908152604090205481565b3480156108c957600080fd5b50600d54610480565b3480156108de57600080fd5b50610480611eb3565b3480156108f357600080fd5b506000546001600160a01b03166104b5565b34801561091157600080fd5b506103eb61092036600461512f565b611eff565b34801561093157600080fd5b506103eb6109403660046150f0565b611fc9565b34801561095157600080fd5b506040805180820190915260048152635249534560e01b6020820152610442565b34801561097e57600080fd5b50610480600e5481565b34801561099457600080fd5b50601354610480565b3480156109a957600080fd5b506104006109b8366004615058565b612217565b3480156109c957600080fd5b506103eb6109d8366004615112565b612266565b3480156109e957600080fd5b506104006109f8366004615058565b612312565b348015610a0957600080fd5b506103eb610a183660046150f0565b61231f565b348015610a2957600080fd5b506103eb610a383660046150f0565b6123d2565b348015610a4957600080fd5b5061048060195481565b348015610a5f57600080fd5b506103eb612449565b348015610a7457600080fd5b50601454610480565b348015610a8957600080fd5b506104b5610a9836600461512f565b6124af565b348015610aa957600080fd5b506103eb610ab8366004615112565b6124bf565b348015610ac957600080fd5b506103eb610ad83660046150d3565b612666565b348015610ae957600080fd5b5061048060125481565b348015610aff57600080fd5b506104806126d1565b348015610b1457600080fd5b50610400610b23366004615199565b6126f4565b348015610b3457600080fd5b506003546104b5906001600160a01b031681565b348015610b5457600080fd5b506103eb610b63366004615112565b61275f565b348015610b7457600080fd5b506103eb610b8336600461512f565b61285f565b348015610b9457600080fd5b50610480610ba3366004615210565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b348015610bda57600080fd5b506001546001600160a01b03166104b5565b348015610bf857600080fd5b506104806128c7565b348015610c0d57600080fd5b506103eb610c1c366004615112565b61290c565b348015610c2d57600080fd5b506103eb610c3c36600461512f565b6129a7565b348015610c4d57600080fd5b506103eb610c5c36600461512f565b612a0f565b348015610c6d57600080fd5b506103eb610c7c366004615112565b612a77565b348015610c8d57600080fd5b506103eb610c9c366004615112565b612b22565b348015610cad57600080fd5b506103eb610cbc366004615112565b612c30565b6000610cce338484612d6e565b5060015b92915050565b6000610ce66012600a615343565b610cf5906410acc4794461534f565b905090565b6000610d07848484612e92565b610d6a8433610d6585604051806060016040528060288152602001615700602891396001600160a01b038a16600090815260066020526040812090335b6001600160a01b0316815260208101919091526040016000205491906134b7565b612d6e565b5060019392505050565b6024546040805163048db3fd60e31b815290516000926001600160a01b03169163246d9fe8916004808301926020929190829003018186803b158015610db957600080fd5b505afa158015610dcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf5919061536e565b6001546001600160a01b03163314610e245760405162461bcd60e51b8152600401610e1b90615387565b60405180910390fd5b602280548215156101000261ff00199091161790556040517f3794234fa370c9f3b948dda3e3040530785b2ef1eb27dda3ffde478f4e2643c090610e6d90831515815260200190565b60405180910390a150565b6001546001600160a01b03163314610ea25760405162461bcd60e51b8152600401610e1b90615387565b601454610ecb610eb383600a615343565b610ec585670de0b6b3a76400006134f1565b90612d25565b60148190556040805183815260208101929092527ff6d009afa11079b7b679b7589d0a18b287e11234d83e6eb4042a6fc3d4f8e85b91015b60405180910390a1505050565b6000546001600160a01b03163314610f3a5760405162461bcd60e51b8152600401610e1b906153cf565b6001600160a01b038116301415610fae5760405162461bcd60e51b815260206004820152603260248201527f63616e6e6f742072656d6f7665207468697320636f6e74726163742066726f6d60448201527120617574686f72697a656420746f6b656e7360701b6064820152608401610e1b565b602260039054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610ffc57600080fd5b505afa158015611010573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110349190615404565b6001600160a01b0316816001600160a01b031614156110bb5760405162461bcd60e51b815260206004820152603b60248201527f63616e6e6f742072656d6f7665207468652057455448207479706520636f6e7460448201527f726163742066726f6d20617574686f72697a656420746f6b656e7300000000006064820152608401610e1b565b6001600160a01b0381166000908152600b602052604090205460ff166111335760405162461bcd60e51b815260206004820152602760248201527f746f6b656e41646472657373206973206e6f7420616e20617574686f72697a6560448201526632103a37b5b2b760c91b6064820152608401610e1b565b6001600160a01b0381166000908152600b60205260408120805460ff191690555b600c5481101561125a57816001600160a01b0316600c828154811061117b5761117b615421565b6000918252602090912001546001600160a01b0316141561124857600c80546111a690600190615437565b815481106111b6576111b6615421565b600091825260209091200154600c80546001600160a01b0390921691839081106111e2576111e2615421565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600c8054806112215761122161544e565b600082815260209020810160001990810180546001600160a01b031916905501905561125a565b8061125281615464565b915050611154565b506040516001600160a01b03821681527fcd95bc912b4e5dedb4c1e8c1054dd088420422db8284dcd4178ca3b2e262038890602001610e6d565b3360008181526006602090815260408083206001600160a01b03871684529091528120549091610cce918590610d659086613570565b600a81815481106112da57600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b0316331461131e5760405162461bcd60e51b8152600401610e1b906153cf565b6001600160a01b0381166113895760405162461bcd60e51b815260206004820152602c60248201527f726f75746572416464726573732073686f756c64206e6f74206265207468652060448201526b7a65726f206164647265737360a01b6064820152608401610e1b565b6000602260039054906101000a90046001600160a01b031690506000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156113e157600080fd5b505afa1580156113f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114199190615404565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561146157600080fd5b505afa158015611475573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114999190615404565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b1580156114df57600080fd5b505afa1580156114f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115179190615404565b602380546001600160a01b0319166001600160a01b03928316179055602280546301000000600160b81b03191663010000008484160217905560408051848316815291851660208301527f1b40f7040327d783cc3cffdd488e8233012f50d648b53c5218f73ef4a5b714059101610f03565b6000546001600160a01b031633146115b35760405162461bcd60e51b8152600401610e1b906153cf565b6001600160a01b03811660009081526008602052604090205460ff161561161c5760405162461bcd60e51b815260206004820181905260248201527f4163636f756e74206973206e6f74206578636c7564656420666f7220666565736044820152606401610e1b565b611625816135cf565b50565b6001546001600160a01b031633146116525760405162461bcd60e51b8152600401610e1b90615387565b6001600160a01b0385166000908152600b602052604090205460ff166116c65760405162461bcd60e51b8152602060048201526024808201527f66726f6d546f6b656e206973206e6f7420616e20617574686f72697a6564207460448201526337b5b2b760e11b6064820152608401610e1b565b6001600160a01b0384166000908152600b602052604090205460ff166117395760405162461bcd60e51b815260206004820152602260248201527f746f546f6b656e206973206e6f7420616e20617574686f72697a656420746f6b60448201526132b760f11b6064820152608401610e1b565b600061175e61174984600a615343565b610ec561175785600a615343565b87906134f1565b9050602260039054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156117ae57600080fd5b505afa1580156117c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e69190615404565b6001600160a01b0316856001600160a01b0316141561180f5761180a863083613623565b6118c5565b602260039054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561185d57600080fd5b505afa158015611871573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118959190615404565b6001600160a01b0316866001600160a01b031614156118b95761180a85308361385d565b6118c586863084613a04565b505050505050565b6000546001600160a01b031633146118f75760405162461bcd60e51b8152600401610e1b906153cf565b600e5481111561196f5760405162461bcd60e51b815260206004820152603e60248201527f427573696e65737320446576656c6f706d656e742064697669736f722073686f60448201527f756c64206265206c657373207468616e206c69717569646974792066656500006064820152608401610e1b565b601280549082905560408051828152602081018490527f61d33f750b58b2dd826e84c405ba34ae015788522fb94e7c971fb89eb1727bc091015b60405180910390a15050565b6000546001600160a01b031633146119df5760405162461bcd60e51b8152600401610e1b906153cf565b6001600160a01b038116611a4c5760405162461bcd60e51b815260206004820152602e60248201527f636f6e7472616374416464726573732073686f756c64206e6f7420626520746860448201526d65207a65726f206164647265737360901b6064820152608401610e1b565b6001600160a01b038116301415611acb5760405162461bcd60e51b815260206004820152603b60248201527f457665725269736520746f6b656e2073686f756c64206e6f742062652061646460448201527f656420617320616e2045636f73797374656d20636f6e747261637400000000006064820152608401610e1b565b6001600160a01b03811660009081526009602052604090205460ff1615611b685760405162461bcd60e51b815260206004820152604560248201527f636f6e74726163744164647265737320697320616c726561647920696e636c7560448201527f64656420617320616e2045766572526973652045636f73797374656d20636f6e6064820152641d1c9858dd60da1b608482015260a401610e1b565b61162581613c7e565b6000546001600160a01b03163314611b9b5760405162461bcd60e51b8152600401610e1b906153cf565b60405133904780156108fc02916000818181858888f19350505050158015611625573d6000803e3d6000fd5b6000546001600160a01b03163314611bf15760405162461bcd60e51b8152600401610e1b906153cf565b6001600160a01b03811660009081526009602052604090205460ff16611c7f5760405162461bcd60e51b815260206004820152603e60248201527f636f6e747261637441646472657373206973206e6f7420696e636c756465642060448201527f61732045766572526973652045636f73797374656d20636f6e747261637400006064820152608401610e1b565b6001600160a01b0381166000908152600960205260408120805460ff191690555b600a54811015611da657816001600160a01b0316600a8281548110611cc757611cc7615421565b6000918252602090912001546001600160a01b03161415611d9457600a8054611cf290600190615437565b81548110611d0257611d02615421565b600091825260209091200154600a80546001600160a01b039092169183908110611d2e57611d2e615421565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600a805480611d6d57611d6d61544e565b600082815260209020810160001990810180546001600160a01b0319169055019055611da6565b80611d9e81615464565b915050611ca0565b506040516001600160a01b03821681527fd5cf137fae5e29474768fa6da67bb8364d5c03e6d1138a35cff110303d38e68d9060200160405180910390a161162581613d44565b6000546001600160a01b03163314611e165760405162461bcd60e51b8152600401610e1b906153cf565b6022805462ff0000191690556040517f175e049bb68bcee8f7b1c836f5d07f408d5f8ae38c23e4dca3f68888334529a790600090a1565b6001600160a01b038116600090815260056020526040812054602154600214158015611e8b57506026544363ffffffff908116600160e01b90920416145b8015611ea457506027546001600160a01b038481169116145b15610cd257610cd28382613d95565b6000611ec0601e54421190565b8015611ece5750601f544211155b15611ef8576000611edd6126d1565b90506010548110611ef057601054611ef2565b805b91505090565b5060105490565b6000546001600160a01b03163314611f295760405162461bcd60e51b8152600401610e1b906153cf565b600a811115611f8b5760405162461bcd60e51b815260206004820152602860248201527f6c6971756964697479466565526174652073686f756c64206265206c657373206044820152677468616e2031302560c01b6064820152608401610e1b565b600e80549082905560408051828152602081018490527f2596ea4192286cc20062cf773414aef3b23a5b57b4bdc47f888e9d9059d838c491016119a9565b6000546001600160a01b03163314611ff35760405162461bcd60e51b8152600401610e1b906153cf565b600a821061205a5760405162461bcd60e51b815260206004820152602e60248201527f7472616465537461727444656c61792073686f756c64206265206c657373207460448201526d68616e203130206d696e7574657360901b6064820152608401610e1b565b607881106120c55760405162461bcd60e51b815260206004820152603260248201527f74726164655374617274436f6f6c446f776e2073686f756c64206265206c657360448201527173207468616e20313230206d696e7574657360701b6064820152608401610e1b565b8082106121315760405162461bcd60e51b815260206004820152603460248201527f7472616465537461727444656c6179206d757374206265206c6573732074686160448201527337103a3930b232a9ba30b93a21b7b7b62237bbb760611b6064820152608401610e1b565b601e546000191480156121475750601f54600019145b6121935760405162461bcd60e51b815260206004820152601b60248201527f54726164696e672068617320616c7265616479207374617274656400000000006044820152606401610e1b565b6006600e819055600f556011546010556121ad6001610df1565b6121b76001612666565b6121c282603c61534f565b6121cc904261547f565b601e556121da81603c61534f565b601e546121e7919061547f565b601f556040517f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c790600090a15050565b6000610cce3384610d6585604051806060016040528060258152602001615728602591393360009081526006602090815260408083206001600160a01b038d16845290915290205491906134b7565b6000546001600160a01b031633146122905760405162461bcd60e51b8152600401610e1b906153cf565b6001600160a01b0381166122b65760405162461bcd60e51b8152600401610e1b90615497565b6001546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000610cce338484612e92565b6001546001600160a01b031633146123495760405162461bcd60e51b8152600401610e1b90615387565b600082118015612357575060015b6123935760405162461bcd60e51b815260206004820152600d60248201526c125b9d985b1a5908125b9c1d5d609a1b6044820152606401610e1b565b60006123a3610eb383600a615343565b6003549091506000906123c19030906001600160a01b03168461400d565b90506123cc8161420f565b50505050565b6001546001600160a01b031633146123fc5760405162461bcd60e51b8152600401610e1b90615387565b60165461240d610eb383600a615343565b60168190556040805183815260208101929092527f364183e369117c179345d1999f4cb03bd7d74226bacee97755da5df8e069f5b19101610f03565b6000546001600160a01b031633146124735760405162461bcd60e51b8152600401610e1b906153cf565b6022805462ff00001916620100001790556040517f8f4e75b2b71b51d3107f168f33d4f291c4ef089a69b1075bcbf4476c69e81d0690600090a1565b600c81815481106112da57600080fd5b6000546001600160a01b031633146124e95760405162461bcd60e51b8152600401610e1b906153cf565b6001600160a01b0381166125535760405162461bcd60e51b815260206004820152602b60248201527f746f6b656e416464726573732073686f756c64206e6f7420626520746865207a60448201526a65726f206164647265737360a81b6064820152608401610e1b565b6001600160a01b0381166000908152600b602052604090205460ff16156125d05760405162461bcd60e51b815260206004820152602b60248201527f746f6b656e4164647265737320697320616c726561647920616e20617574686f60448201526a3934bd32b2103a37b5b2b760a91b6064820152608401610e1b565b6001600160a01b0381166000818152600b60209081526040808320805460ff19166001908117909155600c805491820181559093527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c790920180546001600160a01b0319168417905590519182527f3d8bc8d3643383e535cf1332154e6a0eb63b44cd5aed5582a88dab55793e0cbc9101610e6d565b6000546001600160a01b031633146126905760405162461bcd60e51b8152600401610e1b906153cf565b6022805460ff19168215159081179091556040519081527f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990602001610e6d565b6000610cf56107d06126e56012600a615343565b610ec5906410acc4794461534f565b600061270588338888888888614305565b612710888888612e92565b6127518833610d6589604051806060016040528060288152602001615700602891396001600160a01b038e1660009081526006602052604081209033610d44565b506001979650505050505050565b6000546001600160a01b031633146127895760405162461bcd60e51b8152600401610e1b906153cf565b6001600160a01b0381166128055760405162461bcd60e51b815260206004820152603a60248201527f5f627573696e657373446576656c6f706d656e74416464726573732073686f7560448201527f6c64206e6f7420626520746865207a65726f20616464726573730000000000006064820152608401610e1b565b600280546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f8a3c262f9b6b936f841c67b93e30a43a2aff5ea1b29ed9038cfb8cb6f4e82f4b91016119a9565b6001546001600160a01b031633146128895760405162461bcd60e51b8152600401610e1b90615387565b601580549082905560408051828152602081018490527f06f3c27e71f7455c0b87bef6c8c68d6ee266e593dbdeba36a44dc1ac1855cf3f91016119a9565b602454604080516339f14b5160e21b815290516000926001600160a01b03169163e7c52d44916004808301926020929190829003018186803b158015610db957600080fd5b6000546001600160a01b031633146129365760405162461bcd60e51b8152600401610e1b906153cf565b6001600160a01b03811660009081526008602052604090205460ff1661299e5760405162461bcd60e51b815260206004820181905260248201527f4163636f756e74206973206e6f7420696e636c7564656420666f7220666565736044820152606401610e1b565b61162581613d44565b6000546001600160a01b031633146129d15760405162461bcd60e51b8152600401610e1b906153cf565b601080549082905560408051828152602081018490527fadcf01123294f8514884e924e20eb4f3032288087368896a17c71f09668247c891016119a9565b6000546001600160a01b03163314612a395760405162461bcd60e51b8152600401610e1b906153cf565b601380549082905560408051828152602081018490527fd2f58a5c369e86bc74f3b5be6f9a34224ebb43d603f7acee04b07ef21c7d14bf91016119a9565b6000546001600160a01b03163314612aa15760405162461bcd60e51b8152600401610e1b906153cf565b6001600160a01b038116612ac75760405162461bcd60e51b8152600401610e1b90615497565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314612b4c5760405162461bcd60e51b8152600401610e1b906153cf565b6001600160a01b038116612bb85760405162461bcd60e51b815260206004820152602d60248201527f5f7374616b696e67416464726573732073686f756c64206e6f7420626520746f60448201526c207a65726f206164647265737360981b6064820152608401610e1b565b600380546001600160a01b038381166001600160a01b03198084168217909455602480549094168117909355604080519190921680825260208201939093527f03fbfa1263b46c684780f3c24be11a2e189a59bedf0e316a7eae861cc769eb4f91015b60405180910390a1612c2c82613c7e565b5050565b6000546001600160a01b03163314612c5a5760405162461bcd60e51b8152600401610e1b906153cf565b6001600160a01b038116612ccb5760405162461bcd60e51b815260206004820152603260248201527f5f657665724d696772617465416464726573732073686f756c64206e6f7420626044820152716520746865207a65726f206164647265737360701b6064820152608401610e1b565b600480546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f322e4b9bc06d4314ec72e9343d238223587c4a986a760408cf287fdc05aa5b959101612c1b565b6000612d6783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506145aa565b9392505050565b6001600160a01b038316612dd05760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610e1b565b6001600160a01b038216612e315760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610e1b565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316612ef65760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610e1b565b6001600160a01b038216612f585760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610e1b565b60008111612fba5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610e1b565b816001600160a01b0316836001600160a01b0316141561302c5760405162461bcd60e51b815260206004820152602760248201527f5472616e7366657220746f20616e642066726f6d20616464726573736573207460448201526668652073616d6560c81b6064820152608401610e1b565b6020546002141561309d5760405162461bcd60e51b815260206004820152603560248201527f496e76616c6964207265656e7472616e63792066726f6d20746f6b656e302f746044820152746f6b656e312062616c616e63654f6620636865636b60581b6064820152608401610e1b565b600080546001600160a01b03908116919085168214806130ce5750816001600160a01b0316846001600160a01b0316145b806130f157506001600160a01b03851660009081526009602052604090205460ff165b8061311457506001600160a01b03841660009081526009602052604090205460ff165b90506000613123601e54421190565b9050601054841115806131335750815b8061313c575080155b6131985760405162461bcd60e51b815260206004820152602760248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152661e105b5bdd5b9d60ca1b6064820152608401610e1b565b6023546001600160a01b031681806131ad5750825b806131e75750806001600160a01b0316876001600160a01b0316141580156131e75750806001600160a01b0316866001600160a01b031614155b61322c5760405162461bcd60e51b8152602060048201526016602482015275151c98591a5b99c81a5cc81b9bdd08195b98589b195960521b6044820152606401610e1b565b600061323a60215460021490565b15905082801561324c5750601f544211155b8015613256575083155b801561325f5750805b1561326f5761326f8789886145d8565b3060009081526005602052604081205460135490915081101560008580156132945750835b80156132a2575060225460ff165b80156132bf5750846001600160a01b03168a6001600160a01b0316145b905080156133535781156132db5760135492506132db836147ed565b602254610100900460ff1680156132f3575060165447115b801561330e5750601d5460185460175461330c91613570565b115b156133535747601c5411156133225747601c555b601c5415613353576000613337601c54614855565b90506133428161420f565b506000601c81905560178190556018555b851561341b57846001600160a01b03168a6001600160a01b031614156133cf57601854613380908a613570565b601855601a54613390908a613570565b601a556015548911156133ca5760145447908111156133ae57506014545b6133c56133bc826064612d25565b601c5490613570565b601c55505b61340a565b846001600160a01b03168b6001600160a01b0316141561340a576017546133f6908a613570565b601755601954613406908a613570565b6019555b601b54613417908a613570565b601b555b6001600160a01b038b1660009081526008602052604090205460019060ff168061345d57506001600160a01b038b1660009081526008602052604090205460ff165b15613466575060005b878061347c57506001546001600160a01b031633145b1561348e5761348961489a565b61349d565b841561349d5761349d8b614900565b6134a98c8c8c84614ab3565b505050505050505050505050565b600081848411156134db5760405162461bcd60e51b8152600401610e1b9190615010565b5060006134e88486615437565b95945050505050565b60008261350057506000610cd2565b600061350c838561534f565b90508261351985836154dd565b14612d675760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610e1b565b60008061357d838561547f565b905083811015612d675760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610e1b565b6001600160a01b038116600081815260086020908152604091829020805460ff1916600117905590519182527f7168e8adb718597b3ac83e2dfe415bea8ebaabb57fe933ffac2e0ed93b80718e9101610e6d565b604080516002808252606082018352600092602083019080368337019050509050838160008151811061365857613658615421565b60200260200101906001600160a01b031690816001600160a01b031681525050602260039054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156136c657600080fd5b505afa1580156136da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136fe9190615404565b8160018151811061371157613711615421565b6001600160a01b03928316602091820292909201015260225460405163095ea7b360e01b8152630100000090910482166004820152602481018490529085169063095ea7b390604401602060405180830381600087803b15801561377457600080fd5b505af1158015613788573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137ac9190615515565b5060225460405163791ac94760e01b815263010000009091046001600160a01b03169063791ac947906137ec908590600090869089904290600401615576565b600060405180830381600087803b15801561380657600080fd5b505af115801561381a573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a7828260405161384f9291906155b2565b60405180910390a150505050565b604080516002808252606082018352600092602083019080368337019050509050602260039054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156138cc57600080fd5b505afa1580156138e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139049190615404565b8160008151811061391757613917615421565b60200260200101906001600160a01b031690816001600160a01b031681525050838160018151811061394b5761394b615421565b6001600160a01b039283166020918202929092010152602254630100000090041663b6f9de9583600084876139824261012c613570565b6040518663ffffffff1660e01b81526004016139a194939291906155cb565b6000604051808303818588803b1580156139ba57600080fd5b505af11580156139ce573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a9624828260405161384f9291906155b2565b60408051600380825260808201909252600091602082016060803683370190505090508481600081518110613a3b57613a3b615421565b60200260200101906001600160a01b031690816001600160a01b031681525050602260039054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613aa957600080fd5b505afa158015613abd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ae19190615404565b81600181518110613af457613af4615421565b60200260200101906001600160a01b031690816001600160a01b0316815250508381600281518110613b2857613b28615421565b6001600160a01b03928316602091820292909201015260225460405163095ea7b360e01b8152630100000090910482166004820152602481018490529086169063095ea7b390604401602060405180830381600087803b158015613b8b57600080fd5b505af1158015613b9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bc39190615515565b50602254630100000090046001600160a01b0316635c11d7958360008487613bec426078613570565b6040518663ffffffff1660e01b8152600401613c0c959493929190615576565b600060405180830381600087803b158015613c2657600080fd5b505af1158015613c3a573d6000803e3d6000fd5b505050507f7ec0e62e5eb75d92620f9df4e706e28dac160965ba772960cde791c4890384478282604051613c6f9291906155b2565b60405180910390a15050505050565b6001600160a01b03811660009081526009602052604090205460ff1615613ca25750565b6001600160a01b0381166000818152600960209081526040808320805460ff19166001908117909155600a805491820181559093527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a890920180546001600160a01b0319168417905590519182527fa4156168c286809bc7d80fb9dd33a0f1f71f9cfd58c0fae72c11b2fab3a3e761910160405180910390a1611625816135cf565b6001600160a01b038116600081815260086020908152604091829020805460ff1916905590519182527fead11242b7eb5b3a03a27edc0039f1305d251bf91b3d1e94c3861c3d6e4ac1289101610e6d565b6040805160a0810182526026546001600160701b038082168352600160701b8204166020830152600160e01b900463ffffffff16918101919091526027546001600160a01b0390811660608301526028541660808201819052321415614008576000613e09846001600160a01b0316614adb565b90506001600160a01b038116301415613e3157613e2e846001600160a01b0316614b12565b90505b6001600160a01b038116613e455750505050565b6040516370a0823160e01b81526001600160a01b038581166004830152600091908316906370a082319060240160206040518083038186803b158015613e8a57600080fd5b505afa158015613e9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ec2919061536e565b905082600001516001600160701b0316846001600160701b0316118015613efe575082602001516001600160701b0316816001600160701b0316115b15613f5c5760405162461bcd60e51b815260206004820152602860248201527f4c69717569646974792063616e20626520616464656420627920746865206f776044820152676e6572206f6e6c7960c01b6064820152608401610e1b565b82600001516001600160701b0316846001600160701b0316108015613f96575082602001516001600160701b0316816001600160701b0316105b156140055760225462010000900460ff16156140055760405162461bcd60e51b815260206004820152602860248201527f4c69717569646974792063616e6e6f742062652072656d6f766564207768696c60448201526719481b1bd8dad95960c21b6064820152608401610e1b565b50505b505050565b60408051600280825260608201835260009283929190602083019080368337019050509050602260039054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561408057600080fd5b505afa158015614094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140b89190615404565b816000815181106140cb576140cb615421565b60200260200101906001600160a01b031690816001600160a01b03168152505084816001815181106140ff576140ff615421565b6001600160a01b039283166020918202929092010152602254600091630100000090910416637ff36ab5858385896141394261012c613570565b6040518663ffffffff1660e01b815260040161415894939291906155cb565b6000604051808303818588803b15801561417157600080fd5b505af1158015614185573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526141ae9190810190615600565b90507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a962484836040516141e19291906155b2565b60405180910390a1806001815181106141fc576141fc615421565b6020026020010151925050509392505050565b8015611625576024805460405163c0e89b5760e01b81523060048201529182018390526001600160a01b03169063c0e89b5790604401600060405180830381600087803b15801561425f57600080fd5b505af1158015614273573d6000803e3d6000fd5b505060248054604051633bd5d17360e01b8152600481018690526001600160a01b039091169350633bd5d173925001600060405180830381600087803b1580156142bc57600080fd5b505af11580156142d0573d6000803e3d6000fd5b505050507f8229f1003fbf3f8330019fe361ce2a589cf490e3f2991f80a1dd1602898eebaa81604051610e6d91815260200190565b428410156143495760405162461bcd60e51b8152602060048201526011602482015270115d995c949a5cd94e8811561412549151607a1b6044820152606401610e1b565b6001600160a01b038716600090815260256020526040812080547fa4c7b00ef0bf3efe2e6311e4fc083e21c772a7665bd4a8a3b99c89611ca78d07917f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918b918b918b91876143b783615464565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810187905260e0016040516020818303038152906040528051906020012060405160200161443092919061190160f01b81526002810192909252602282015260420190565b604051602081830303815290604052805190602001209050601b8460ff1610156144665761445f601b856156be565b93506144be565b601e8460ff1611156144be576040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052605c016040516020818303038152906040528051906020012090505b6040805160008082526020820180845284905260ff871692820192909252606081018590526080810184905260019060a0016020604051602081039080840390855afa158015614512573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906145485750886001600160a01b0316816001600160a01b0316145b6145945760405162461bcd60e51b815260206004820152601b60248201527f45766572526973653a20494e56414c49445f5349474e415455524500000000006044820152606401610e1b565b61459f898989612d6e565b505050505050505050565b600081836145cb5760405162461bcd60e51b8152600401610e1b9190615010565b5060006134e884866154dd565b6023546001600160a01b03908116906000908416821415614652576001600160a01b03851660009081526007602052604090205443148061462757503260009081526007602052604090205443145b6001600160a01b038616600090815260076020526040808220439081905532835291205590506146c7565b816001600160a01b0316856001600160a01b031614156146c7576001600160a01b0384166000908152600760205260409020544314806146a057503260009081526007602052604090205443145b6001600160a01b038516600090815260076020526040808220439081905532835291205590505b80156147615760405162461bcd60e51b815260206004820152605c60248201527f4d756c7469706c652074726164657320696e2073616d6520626c6f636b20667260448201527f6f6d2073616d6520736f7572636520617265206e6f7420616c6c6f776564206460648201527f7572696e672074726164696e6720737461727420636f6f6c646f776e00000000608482015260a401610e1b565b6147696126d1565b8311156140055760405162461bcd60e51b815260206004820152604660248201527f4d6178207472616e73616374696f6e20697320302e303525206f6620746f746160448201527f6c20737570706c7920647572696e672074726164696e6720737461727420636f60648201526537b63237bbb760d11b608482015260a401610e1b565b600260215414156147fd57600080fd5b60026021554761480e308084613623565b600061481a4783614b49565b600254600e5460125492935061484b926001600160a01b03909216916148469190610ec59086906134f1565b614b8b565b5050600160215550565b60006002602154141561486757600080fd5b60026021556000821561488f5760035461488c9030906001600160a01b03168561400d565b90505b600160215592915050565b6026544363ffffffff908116600160e01b9092041614156148fe576040805160a08101825260008082526020820181905291810182905260608101829052608001819052602655602780546001600160a01b03199081169091556028805490911690555b565b6002602054141561491057600080fd5b60026020556000614936826001600160a01b031660009081526005602052604090205490565b9050600061494c836001600160a01b0316614adb565b90506001600160a01b03811630141561497457614971836001600160a01b0316614b12565b90505b60006001600160a01b03821661498c57506000614a08565b6040516370a0823160e01b81526001600160a01b0385811660048301528316906370a082319060240160206040518083038186803b1580156149cd57600080fd5b505afa1580156149e1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a05919061536e565b90505b6040805160a0810182526001600160701b039485168082529290941660208086018290524363ffffffff169286018390526001600160a01b039690961660608601819052326080909601869052602680546001600160e01b031916909417600160701b909202919091176001600160e01b0316600160e01b90920291909117909155602780546001600160a01b03199081169092179055602880549091169092179091555060019055565b80614ac057614ac0614bc1565b614acb848484614bd7565b806123cc576123cc600f54600e55565b6040805160048152602481019091526020810180516001600160e01b031663d21220a760e01b179052600090610cd2908390614e22565b6040805160048152602481019091526020810180516001600160e01b0316630dfe168160e01b179052600090610cd2908390614e22565b6000612d6783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506134b7565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015614008573d6000803e3d6000fd5b600e54614bca57565b600e8054600f5560009055565b600080614be383614ed5565b6001600160a01b038716600090815260056020526040812054929450909250614c0c8286614b49565b6001600160a01b03808916600090815260056020526040808220849055918916815290812054919250614c3f8287613570565b6001600160a01b0389166000908152600560205260409020819055905081158015614c6a5750600081115b15614cc357600d546000614c7f826001613570565b600d81905560408051848152602081018390529192507f29dbf52f1b5bddb8f65ec96f0076b34fa16b800654ea7ed5eec0224a3aef989e910160405180910390a150505b600084118015614cd1575082155b15614d2a57600d546000614ce6826001614b49565b600d81905560408051848152602081018390529192507fcb954675aa33bcbae534f2608dbb8882f530e636989798e66a81ba5d04b5f304910160405180910390a150505b614d3385614efc565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef88604051614d7891815260200190565b60405180910390a36003546001600160a01b0389811691161415614dce576040518681527fe958c86d09c7f3f54dfbf230d4bdaac7d411ead5c94c9df118c366c67a6862609060200160405180910390a161459f565b6003546001600160a01b038a81169116141561459f576040518781527f1027e95115b9619b843286ee167b4722741601c4a1778845c70fb2aabb567f649060200160405180910390a1505050505050505050565b6000614e2d83614f8c565b614e3957506000610cd2565b600080846001600160a01b031684604051614e5491906156e3565b600060405180830381855afa9150503d8060008114614e8f576040519150601f19603f3d011682016040523d82523d6000602084013e614e94565b606091505b5091509150818015614ea857506020815110155b15614eca5780806020019051810190614ec19190615404565b92505050610cd2565b506000949350505050565b6000806000614ee384614fc8565b90506000614ef18583614b49565b959194509092505050565b3060009081526005602052604081205490614f178284613570565b306000908152600560205260409020819055905081158015614f395750600081115b1561400857600d546000614f4e826001613570565b600d81905560408051848152602081018390529192507f29dbf52f1b5bddb8f65ec96f0076b34fa16b800654ea7ed5eec0224a3aef989e9101613c6f565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590614fc057508115155b949350505050565b6000610cd26064610ec5600e54856134f190919063ffffffff16565b60005b83811015614fff578181015183820152602001614fe7565b838111156123cc5750506000910152565b602081526000825180602084015261502f816040850160208701614fe4565b601f01601f19169190910160400192915050565b6001600160a01b038116811461162557600080fd5b6000806040838503121561506b57600080fd5b823561507681615043565b946020939093013593505050565b60008060006060848603121561509957600080fd5b83356150a481615043565b925060208401356150b481615043565b929592945050506040919091013590565b801515811461162557600080fd5b6000602082840312156150e557600080fd5b8135612d67816150c5565b6000806040838503121561510357600080fd5b50508035926020909101359150565b60006020828403121561512457600080fd5b8135612d6781615043565b60006020828403121561514157600080fd5b5035919050565b600080600080600060a0868803121561516057600080fd5b853561516b81615043565b9450602086013561517b81615043565b94979496505050506040830135926060810135926080909101359150565b600080600080600080600060e0888a0312156151b457600080fd5b87356151bf81615043565b965060208801356151cf81615043565b95506040880135945060608801359350608088013560ff811681146151f357600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561522357600080fd5b823561522e81615043565b9150602083013561523e81615043565b809150509250929050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561529a57816000190482111561528057615280615249565b8085161561528d57918102915b93841c9390800290615264565b509250929050565b6000826152b157506001610cd2565b816152be57506000610cd2565b81600181146152d457600281146152de576152fa565b6001915050610cd2565b60ff8411156152ef576152ef615249565b50506001821b610cd2565b5060208310610133831016604e8410600b841016171561531d575081810a610cd2565b615327838361525f565b806000190482111561533b5761533b615249565b029392505050565b6000612d6783836152a2565b600081600019048311821515161561536957615369615249565b500290565b60006020828403121561538057600080fd5b5051919050565b60208082526028908201527f4f776e61626c653a2063616c6c6572206973206e6f742074686520627579626160408201526731b59037bbb732b960c11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561541657600080fd5b8151612d6781615043565b634e487b7160e01b600052603260045260246000fd5b60008282101561544957615449615249565b500390565b634e487b7160e01b600052603160045260246000fd5b600060001982141561547857615478615249565b5060010190565b6000821982111561549257615492615249565b500190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6000826154fa57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561552757600080fd5b8151612d67816150c5565b600081518084526020808501945080840160005b8381101561556b5781516001600160a01b031687529582019590820190600101615546565b509495945050505050565b85815284602082015260a06040820152600061559560a0830186615532565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201526000614fc06040830184615532565b8481526080602082015260006155e46080830186615532565b6001600160a01b03949094166040830152506060015292915050565b6000602080838503121561561357600080fd5b825167ffffffffffffffff8082111561562b57600080fd5b818501915085601f83011261563f57600080fd5b815181811115615651576156516154ff565b8060051b604051601f19603f83011681018181108582111715615676576156766154ff565b60405291825284820192508381018501918883111561569457600080fd5b938501935b828510156156b257845184529385019392850192615699565b98975050505050505050565b600060ff821660ff84168060ff038211156156db576156db615249565b019392505050565b600082516156f5818460208701614fe4565b919091019291505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220161ad41a3905b0de17f7196a5502ac4483c0579ded4c05685938810f669ee3cd64736f6c63430008080033

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

0000000000000000000000001490eaa0de0b2d4f9fe0e354a7d99d6c6532be840000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

-----Decoded View---------------
Arg [0] : _stakingAddress (address): 0x1490EaA0De0b2D4F9fE0E354A7D99d6C6532be84
Arg [1] : routerAddress (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000001490eaa0de0b2d4f9fe0e354a7d99d6c6532be84
Arg [1] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d


Deployed Bytecode Sourcemap

17679:44715:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43121:176;;;;;;;;;;-1:-1:-1;43259:12:0;;43274:15;-1:-1:-1;43121:176:0;;;179:14:1;;172:22;154:41;;142:2;127:18;43121:176:0;;;;;;;;41335:85;;;;;;;;;;-1:-1:-1;41407:5:0;;;;;;;;;;;;-1:-1:-1;;;41407:5:0;;;;41335:85;;;;;;;:::i;27588:195::-;;;;;;;;;;-1:-1:-1;27588:195:0;;;;;:::i;:::-;;:::i;40966:122::-;;;;;;;;;;-1:-1:-1;41052:21:0;:28;40966:122;;;1459:25:1;;;1447:2;1432:18;40966:122:0;1313:177:1;21066:41:0;;;;;;;;;;-1:-1:-1;21066:41:0;;;;;;;-1:-1:-1;;;;;21066:41:0;;;;;;-1:-1:-1;;;;;1685:32:1;;;1667:51;;1655:2;1640:18;21066:41:0;1495:229:1;41230:97:0;;;;;;;;;;;;;:::i;27791:448::-;;;;;;;;;;-1:-1:-1;27791:448:0;;;;;:::i;:::-;;:::i;40207:128::-;;;;;;;;;;;;;:::i;34212:157::-;;;;;;;;;;-1:-1:-1;34212:157:0;;;;;:::i;:::-;;:::i;33107:356::-;;;;;;;;;;-1:-1:-1;33107:356:0;;;;;:::i;:::-;;:::i;18157:33::-;;;;;;;;;;-1:-1:-1;18157:33:0;;;;-1:-1:-1;;;;;18157:33:0;;;21334:117;;;;;;;;;;-1:-1:-1;21334:117:0;21385:66;21334:117;;42072:862;;;;;;;;;;-1:-1:-1;42072:862:0;;;;;:::i;:::-;;:::i;41525:90::-;;;;;;;;;;-1:-1:-1;41525:90:0;;18887:2;3596:36:1;;3584:2;3569:18;41525:90:0;3454:184:1;21181:41:0;;;;;;;;;;;;;;;28855:302;;;;;;;;;;-1:-1:-1;28855:302:0;;;;;:::i;:::-;;:::i;41096:126::-;;;;;;;;;;-1:-1:-1;41184:23:0;:30;41096:126;;18511:38;;;;;;;;;;-1:-1:-1;18511:38:0;;;;;:::i;:::-;;:::i;37172:618::-;;;;;;;;;;-1:-1:-1;37172:618:0;;;;;:::i;:::-;;:::i;20072:34::-;;;;;;;;;;;;;;;;31314:226;;;;;;;;;;-1:-1:-1;31314:226:0;;;;;:::i;:::-;;:::i;30095:956::-;;;;;;;;;;-1:-1:-1;30095:956:0;;;;;:::i;:::-;;:::i;21114:28::-;;;;;;;;;;-1:-1:-1;21114:28:0;;;;-1:-1:-1;;;;;21114:28:0;;;20933:41;;;;;;;;;;-1:-1:-1;20933:41:0;;;;;;;;32312:460;;;;;;;;;;-1:-1:-1;32312:460:0;;;;;:::i;:::-;;:::i;40832:126::-;;;;;;;;;;-1:-1:-1;40832:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;40923:27:0;40899:4;40923:27;;;:18;:27;;;;;;;;;40832:126;37798:539;;;;;;;;;;-1:-1:-1;37798:539:0;;;;;:::i;:::-;;:::i;21022:35::-;;;;;;;;;;-1:-1:-1;21022:35:0;;;;;;;;;;;17970:112;;;;;;;;;;-1:-1:-1;17970:112:0;;;;-1:-1:-1;;;;;17970:112:0;;;20113:30;;;;;;;;;;;;;;;;20981:34;;;;;;;;;;-1:-1:-1;20981:34:0;;;;;;;;;;;27262:109;;;;;;;;;;;;;:::i;38345:768::-;;;;;;;;;;-1:-1:-1;38345:768:0;;;;;:::i;:::-;;:::i;43305:200::-;;;;;;;;;;-1:-1:-1;43458:20:0;;43482:15;-1:-1:-1;43458:39:0;43305:200;;31183:123;;;;;;;;;;;;;:::i;39121:587::-;;;;;;;;;;-1:-1:-1;39121:587:0;;;;;:::i;:::-;;:::i;21458:41::-;;;;;;;;;;-1:-1:-1;21458:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;40491:85;;;;;;;;;;-1:-1:-1;40560:8:0;;40491:85;;39716:289;;;;;;;;;;;;;:::i;17492:79::-;;;;;;;;;;-1:-1:-1;17530:7:0;17557:6;-1:-1:-1;;;;;17557:6:0;17492:79;;31777:318;;;;;;;;;;-1:-1:-1;31777:318:0;;;;;:::i;:::-;;:::i;34377:1233::-;;;;;;;;;;-1:-1:-1;34377:1233:0;;;;;:::i;:::-;;:::i;41428:89::-;;;;;;;;;;-1:-1:-1;41502:7:0;;;;;;;;;;;;-1:-1:-1;;;41502:7:0;;;;41428:89;;19334:31;;;;;;;;;;;;;;;;40584:122;;;;;;;;;;-1:-1:-1;40675:23:0;;40584:122;;29165:402;;;;;;;;;;-1:-1:-1;29165:402:0;;;;;:::i;:::-;;:::i;17146:338::-;;;;;;;;;;-1:-1:-1;17146:338:0;;;;;:::i;:::-;;:::i;27379:201::-;;;;;;;;;;-1:-1:-1;27379:201:0;;;;;:::i;:::-;;:::i;29575:512::-;;;;;;;;;;-1:-1:-1;29575:512:0;;;;;:::i;:::-;;:::i;33835:369::-;;;;;;;;;;-1:-1:-1;33835:369:0;;;;;:::i;:::-;;:::i;20032:33::-;;;;;;;;;;;;;;;;31059:116;;;;;;;;;;;;;:::i;40714:110::-;;;;;;;;;;-1:-1:-1;40799:17:0;;40714:110;;18620:40;;;;;;;;;;-1:-1:-1;18620:40:0;;;;;:::i;:::-;;:::i;41623:441::-;;;;;;;;;;-1:-1:-1;41623:441:0;;;;;:::i;:::-;;:::i;42942:171::-;;;;;;;;;;-1:-1:-1;42942:171:0;;;;;:::i;:::-;;:::i;19634:45::-;;;;;;;;;;;;;;;;43513:104;;;;;;;;;;;;;:::i;28247:600::-;;;;;;;;;;-1:-1:-1;28247:600:0;;;;;:::i;:::-;;:::i;18121:29::-;;;;;;;;;;-1:-1:-1;18121:29:0;;;;-1:-1:-1;;;;;18121:29:0;;;35618:551;;;;;;;;;;-1:-1:-1;35618:551:0;;;;;:::i;:::-;;:::i;33471:356::-;;;;;;;;;;-1:-1:-1;33471:356:0;;;;;:::i;:::-;;:::i;40013:186::-;;;;;;;;;;-1:-1:-1;40013:186:0;;;;;:::i;:::-;-1:-1:-1;;;;;40164:18:0;;;40132:7;40164:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;40013:186;17579:93;;;;;;;;;;-1:-1:-1;17651:13:0;;-1:-1:-1;;;;;17651:13:0;17579:93;;40343:140;;;;;;;;;;;;;:::i;31548:221::-;;;;;;;;;;-1:-1:-1;31548:221:0;;;;;:::i;:::-;;:::i;32103:201::-;;;;;;;;;;-1:-1:-1;32103:201:0;;;;;:::i;:::-;;:::i;32780:319::-;;;;;;;;;;-1:-1:-1;32780:319:0;;;;;:::i;:::-;;:::i;16890:248::-;;;;;;;;;;-1:-1:-1;16890:248:0;;;;;:::i;:::-;;:::i;36681:483::-;;;;;;;;;;-1:-1:-1;36681:483:0;;;;;:::i;:::-;;:::i;36177:496::-;;;;;;;;;;-1:-1:-1;36177:496:0;;;;;:::i;:::-;;:::i;27588:195::-;27692:4;27714:39;15532:10;27737:7;27746:6;27714:8;:39::i;:::-;-1:-1:-1;27771:4:0;27588:195;;;;;:::o;41230:97::-;41285:7;19109:13;18887:2;19109;:13;:::i;:::-;19091:31;;:15;:31;:::i;:::-;41305:14;;41230:97;:::o;27791:448::-;27925:4;27942:36;27952:6;27960:9;27971:6;27942:9;:36::i;:::-;27989:220;28012:6;15532:10;28060:138;28116:6;28060:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28060:19:0;;;;;;:11;:19;;;;;;15532:10;28080:12;-1:-1:-1;;;;;28060:33:0;;;;;;;;;;;;-1:-1:-1;28060:33:0;;;:138;:37;:138::i;:::-;27989:8;:220::i;:::-;-1:-1:-1;28227:4:0;27791:448;;;;;:::o;40207:128::-;40294:10;;:33;;;-1:-1:-1;;;40294:33:0;;;;40262:7;;-1:-1:-1;;;;;40294:10:0;;:31;;:33;;;;;;;;;;;;;;:10;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;34212:157::-;16206:13;;-1:-1:-1;;;;;16206:13:0;15532:10;16206:29;16184:119;;;;-1:-1:-1;;;16184:119:0;;;;;;;:::i;:::-;;;;;;;;;34289:14:::1;:25:::0;;;::::1;;;;-1:-1:-1::0;;34289:25:0;;::::1;;::::0;;34330:31:::1;::::0;::::1;::::0;::::1;::::0;34306:8;179:14:1;172:22;154:41;;142:2;127:18;;14:187;34330:31:0::1;;;;;;;;34212:157:::0;:::o;33107:356::-;16206:13;;-1:-1:-1;;;;;16206:13:0;15532:10;16206:29;16184:119;;;;-1:-1:-1;;;16184:119:0;;;;;;;:::i;:::-;33262:17:::1;::::0;33310:75:::1;33367:17;33371:13:::0;33367:2:::1;:17;:::i;:::-;33310:38;:12:::0;33341:6:::1;33310:30;:38::i;:::-;:56:::0;::::1;:75::i;:::-;33290:17;:95:::0;;;33401:54:::1;::::0;;8329:25:1;;;8385:2;8370:18;;8363:34;;;;33401:54:0::1;::::0;8302:18:1;33401:54:0::1;;;;;;;;33231:232;33107:356:::0;;:::o;42072:862::-;16058:6;;-1:-1:-1;;;;;16058:6:0;15532:10;16058:22;16050:67;;;;-1:-1:-1;;;16050:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42165:29:0;::::1;42189:4;42165:29;;42157:92;;;::::0;-1:-1:-1;;;42157:92:0;;8971:2:1;42157:92:0::1;::::0;::::1;8953:21:1::0;9010:2;8990:18;;;8983:30;9049:34;9029:18;;;9022:62;-1:-1:-1;;;9100:18:1;;;9093:48;9158:19;;42157:92:0::1;8769:414:1::0;42157:92:0::1;42284:15;;;;;;;;;-1:-1:-1::0;;;;;42284:15:0::1;-1:-1:-1::0;;;;;42284:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;42268:38:0::1;:12;-1:-1:-1::0;;;;;42268:38:0::1;;;42260:110;;;::::0;-1:-1:-1;;;42260:110:0;;9646:2:1;42260:110:0::1;::::0;::::1;9628:21:1::0;9685:2;9665:18;;;9658:30;9724:34;9704:18;;;9697:62;9795:29;9775:18;;;9768:57;9842:19;;42260:110:0::1;9444:423:1::0;42260:110:0::1;-1:-1:-1::0;;;;;42389:36:0;::::1;;::::0;;;:22:::1;:36;::::0;;;;;::::1;;42381:88;;;::::0;-1:-1:-1;;;42381:88:0;;10074:2:1;42381:88:0::1;::::0;::::1;10056:21:1::0;10113:2;10093:18;;;10086:30;10152:34;10132:18;;;10125:62;-1:-1:-1;;;10203:18:1;;;10196:37;10250:19;;42381:88:0::1;9872:403:1::0;42381:88:0::1;-1:-1:-1::0;;;;;42482:36:0;::::1;42521:5;42482:36:::0;;;:22:::1;:36;::::0;;;;:44;;-1:-1:-1;;42482:44:0::1;::::0;;42539:330:::1;42563:23;:30:::0;42559:34;::::1;42539:330;;;42649:12;-1:-1:-1::0;;;;;42619:42:0::1;:23;42643:1;42619:26;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;42619:26:0::1;:42;42615:243;;;42711:23;42735:30:::0;;:34:::1;::::0;42768:1:::1;::::0;42735:34:::1;:::i;:::-;42711:59;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;42682:23:::1;:26:::0;;-1:-1:-1;;;;;42711:59:0;;::::1;::::0;42706:1;;42682:26;::::1;;;;;:::i;:::-;;;;;;;;;:88;;;;;-1:-1:-1::0;;;;;42682:88:0::1;;;;;-1:-1:-1::0;;;;;42682:88:0::1;;;;;;42789:23;:29;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;42789:29:0;;;;;-1:-1:-1;;;;;;42789:29:0::1;::::0;;;;;42837:5:::1;;42615:243;42595:3:::0;::::1;::::0;::::1;:::i;:::-;;;;42539:330;;;-1:-1:-1::0;42886:40:0::1;::::0;-1:-1:-1;;;;;1685:32:1;;1667:51;;42886:40:0::1;::::0;1655:2:1;1640:18;42886:40:0::1;1495:229:1::0;28855:302:0;15532:10;28972:4;29066:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;29066:34:0;;;;;;;;;;28972:4;;28994:133;;29044:7;;29066:50;;29105:10;29066:38;:50::i;18511:38::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18511:38:0;;-1:-1:-1;18511:38:0;:::o;37172:618::-;16058:6;;-1:-1:-1;;;;;16058:6:0;15532:10;16058:22;16050:67;;;;-1:-1:-1;;;16050:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37273:27:0;::::1;37251:121;;;::::0;-1:-1:-1;;;37251:121:0;;11016:2:1;37251:121:0::1;::::0;::::1;10998:21:1::0;11055:2;11035:18;;;11028:30;11094:34;11074:18;;;11067:62;-1:-1:-1;;;11145:18:1;;;11138:42;11197:19;;37251:121:0::1;10814:408:1::0;37251:121:0::1;37385:19;37415:15;;;;;;;;;-1:-1:-1::0;;;;;37415:15:0::1;37385:46;;37442:35;37499:13;37442:71;;37559:16;-1:-1:-1::0;;;;;37559:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;37541:53:0::1;;37617:4;37637:16;-1:-1:-1::0;;;;;37637:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37541:130;::::0;-1:-1:-1;;;;;;37541:130:0::1;::::0;;;;;;-1:-1:-1;;;;;11457:15:1;;;37541:130:0::1;::::0;::::1;11439:34:1::0;11509:15;;11489:18;;;11482:43;11374:18;;37541:130:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37525:13;:146:::0;;-1:-1:-1;;;;;;37525:146:0::1;-1:-1:-1::0;;;;;37525:146:0;;::::1;;::::0;;37684:15:::1;:34:::0;;-1:-1:-1;;;;;;37684:34:0::1;::::0;;;::::1;;;::::0;;37734:48:::1;::::0;;11457:15:1;;;11439:34;;11509:15;;;11504:2;11489:18;;11482:43;37734:48:0::1;::::0;11374:18:1;37734:48:0::1;11227:304:1::0;31314:226:0;16058:6;;-1:-1:-1;;;;;16058:6:0;15532:10;16058:22;16050:67;;;;-1:-1:-1;;;16050:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31408:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;::::1;;31407:28;31385:110;;;::::0;-1:-1:-1;;;31385:110:0;;11738:2:1;31385:110:0::1;::::0;::::1;11720:21:1::0;;;11757:18;;;11750:30;11816:34;11796:18;;;11789:62;11868:18;;31385:110:0::1;11536:356:1::0;31385:110:0::1;31508:24;31524:7;31508:15;:24::i;:::-;31314:226:::0;:::o;30095:956::-;16206:13;;-1:-1:-1;;;;;16206:13:0;15532:10;16206:29;16184:119;;;;-1:-1:-1;;;16184:119:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30314:33:0;::::1;;::::0;;;:22:::1;:33;::::0;;;;;::::1;;30306:82;;;::::0;-1:-1:-1;;;30306:82:0;;12099:2:1;30306:82:0::1;::::0;::::1;12081:21:1::0;12138:2;12118:18;;;12111:30;12177:34;12157:18;;;12150:62;-1:-1:-1;;;12228:18:1;;;12221:34;12272:19;;30306:82:0::1;11897:400:1::0;30306:82:0::1;-1:-1:-1::0;;;;;30407:31:0;::::1;;::::0;;;:22:::1;:31;::::0;;;;;::::1;;30399:78;;;::::0;-1:-1:-1;;;30399:78:0;;12504:2:1;30399:78:0::1;::::0;::::1;12486:21:1::0;12543:2;12523:18;;;12516:30;12582:34;12562:18;;;12555:62;-1:-1:-1;;;12633:18:1;;;12626:32;12675:19;;30399:78:0::1;12302:398:1::0;30399:78:0::1;30490:20;30513:84;30579:17;30583:13:::0;30579:2:::1;:17;:::i;:::-;30513:47;30538:21;30542:17:::0;30538:2:::1;:21;:::i;:::-;30513:6:::0;;:24:::1;:47::i;:84::-;30490:107;;30625:15;;;;;;;;;-1:-1:-1::0;;;;;30625:15:0::1;-1:-1:-1::0;;;;;30625:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30614:33:0::1;:7;-1:-1:-1::0;;;;;30614:33:0::1;;30610:434;;;30664:56;30681:9;30700:4;30707:12;30664:16;:56::i;:::-;30610:434;;;30755:15;;;;;;;;;-1:-1:-1::0;;;;;30755:15:0::1;-1:-1:-1::0;;;;;30755:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30742:35:0::1;:9;-1:-1:-1::0;;;;;30742:35:0::1;;30738:306;;;30794:54;30811:7;30828:4;30835:12;30794:16;:54::i;30738:306::-;30881:151;30919:9;30947:7;30981:4;31005:12;30881:19;:151::i;:::-;30295:756;30095:956:::0;;;;;:::o;32312:460::-;16058:6;;-1:-1:-1;;;;;16058:6:0;15532:10;16058:22;16050:67;;;;-1:-1:-1;;;16050:67:0;;;;;;;:::i;:::-;32431:12:::1;;32420:7;:23;;32398:135;;;::::0;-1:-1:-1;;;32398:135:0;;12907:2:1;32398:135:0::1;::::0;::::1;12889:21:1::0;12946:2;12926:18;;;12919:30;12985:34;12965:18;;;12958:62;13056:32;13036:18;;;13029:60;13106:19;;32398:135:0::1;12705:426:1::0;32398:135:0::1;32566:26;::::0;;32603:36;;;;32655:109:::1;::::0;;8329:25:1;;;8385:2;8370:18;;8363:34;;;32655:109:0::1;::::0;8302:18:1;32655:109:0::1;;;;;;;;32387:385;32312:460:::0;:::o;37798:539::-;16058:6;;-1:-1:-1;;;;;16058:6:0;15532:10;16058:22;16050:67;;;;-1:-1:-1;;;16050:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37899:29:0;::::1;37891:88;;;::::0;-1:-1:-1;;;37891:88:0;;13338:2:1;37891:88:0::1;::::0;::::1;13320:21:1::0;13377:2;13357:18;;;13350:30;13416:34;13396:18;;;13389:62;-1:-1:-1;;;13467:18:1;;;13460:44;13521:19;;37891:88:0::1;13136:410:1::0;37891:88:0::1;-1:-1:-1::0;;;;;37998:32:0;::::1;38025:4;37998:32;;37990:104;;;::::0;-1:-1:-1;;;37990:104:0;;13753:2:1;37990:104:0::1;::::0;::::1;13735:21:1::0;13792:2;13772:18;;;13765:30;13831:34;13811:18;;;13804:62;13902:29;13882:18;;;13875:57;13949:19;;37990:104:0::1;13551:423:1::0;37990:104:0::1;-1:-1:-1::0;;;;;38128:45:0;::::1;;::::0;;;:28:::1;:45;::::0;;;;;::::1;;38127:46;38105:165;;;::::0;-1:-1:-1;;;38105:165:0;;14181:2:1;38105:165:0::1;::::0;::::1;14163:21:1::0;14220:2;14200:18;;;14193:30;14259:34;14239:18;;;14232:62;14330:34;14310:18;;;14303:62;-1:-1:-1;;;14381:19:1;;;14374:36;14427:19;;38105:165:0::1;13979:473:1::0;38105:165:0::1;38283:46;38313:15;38283:29;:46::i;27262:109::-:0;16058:6;;-1:-1:-1;;;;;16058:6:0;15532:10;16058:22;16050:67;;;;-1:-1:-1;;;16050:67:0;;;;;;;:::i;:::-;27319:44:::1;::::0;15532:10;;27341:21:::1;27319:44:::0;::::1;;;::::0;::::1;::::0;;;27341:21;15532:10;27319:44;::::1;;;;;;;;;;;;;::::0;::::1;;;;38345:768:::0;16058:6;;-1:-1:-1;;;;;16058:6:0;15532:10;16058:22;16050:67;;;;-1:-1:-1;;;16050:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38463:45:0;::::1;;::::0;;;:28:::1;:45;::::0;;;;;::::1;;38441:157;;;::::0;-1:-1:-1;;;38441:157:0;;14659:2:1;38441:157:0::1;::::0;::::1;14641:21:1::0;14698:2;14678:18;;;14671:30;14737:34;14717:18;;;14710:62;14808:32;14788:18;;;14781:60;14858:19;;38441:157:0::1;14457:426:1::0;38441:157:0::1;-1:-1:-1::0;;;;;38611:45:0;::::1;38659:5;38611:45:::0;;;:28:::1;:45;::::0;;;;:53;;-1:-1:-1;;38611:53:0::1;::::0;;38677:321:::1;38701:21;:28:::0;38697:32;::::1;38677:321;;;38783:15;-1:-1:-1::0;;;;;38755:43:0::1;:21;38777:1;38755:24;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;38755:24:0::1;:43;38751:236;;;38846:21;38868:28:::0;;:32:::1;::::0;38899:1:::1;::::0;38868:32:::1;:::i;:::-;38846:55;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;38819:21:::1;:24:::0;;-1:-1:-1;;;;;38846:55:0;;::::1;::::0;38841:1;;38819:24;::::1;;;;;:::i;:::-;;;;;;;;;:82;;;;;-1:-1:-1::0;;;;;38819:82:0::1;;;;;-1:-1:-1::0;;;;;38819:82:0::1;;;;;;38920:21;:27;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;38920:27:0;;;;;-1:-1:-1;;;;;;38920:27:0::1;::::0;;;;;38966:5:::1;;38751:236;38731:3:::0;::::1;::::0;::::1;:::i;:::-;;;;38677:321;;;-1:-1:-1::0;39015:49:0::1;::::0;-1:-1:-1;;;;;1685:32:1;;1667:51;;39015:49:0::1;::::0;1655:2:1;1640:18;39015:49:0::1;;;;;;;39075:30;39089:15;39075:13;:30::i;31183:123::-:0;16058:6;;-1:-1:-1;;;;;16058:6:0;15532:10;16058:22;16050:67;;;;-1:-1:-1;;;16050:67:0;;;;;;;:::i;:::-;31240:15:::1;:23:::0;;-1:-1:-1;;31240:23:0::1;::::0;;31279:19:::1;::::0;::::1;::::0;31258:5:::1;::::0;31279:19:::1;31183:123::o:0;39121:587::-;-1:-1:-1;;;;;60923:16:0;;39225:7;60923:16;;;:7;:16;;;;;;60173:17;;20809:1;60173:26;39317:19;:84;;;;-1:-1:-1;39353:12:0;:24;39388:12;39353:48;;;;-1:-1:-1;;;39353:24:0;;;;:48;39317:84;:127;;;;-1:-1:-1;39429:15:0;;-1:-1:-1;;;;;39418:26:0;;;39429:15;;39418:26;39317:127;39299:374;;;39610:51;39634:7;39651:8;39610:23;:51::i;39716:289::-;39762:7;39786:18;43259:12;;43274:15;-1:-1:-1;43259:30:0;43121:176;39786:18;:46;;;;-1:-1:-1;43458:20:0;;43482:15;-1:-1:-1;43458:39:0;39808:24;39782:184;;;39849:14;39866:21;:19;:21::i;:::-;39849:38;;39918:12;;39909:6;:21;:45;;39942:12;;39909:45;;;39933:6;39909:45;39902:52;;;39716:289;:::o;39782:184::-;-1:-1:-1;39985:12:0;;;39716:289::o;31777:318::-;16058:6;;-1:-1:-1;;;;;16058:6:0;15532:10;16058:22;16050:67;;;;-1:-1:-1;;;16050:67:0;;;;;;;:::i;:::-;31893:2:::1;31873:16;:22;;31865:75;;;::::0;-1:-1:-1;;;31865:75:0;;15090:2:1;31865:75:0::1;::::0;::::1;15072:21:1::0;15129:2;15109:18;;;15102:30;15168:34;15148:18;;;15141:62;-1:-1:-1;;;15219:18:1;;;15212:38;15267:19;;31865:75:0::1;14888:404:1::0;31865:75:0::1;31973:12;::::0;;31996:31;;;;32043:44:::1;::::0;;8329:25:1;;;8385:2;8370:18;;8363:34;;;32043:44:0::1;::::0;8302:18:1;32043:44:0::1;8155:248:1::0;34377:1233:0;16058:6;;-1:-1:-1;;;;;16058:6:0;15532:10;16058:22;16050:67;;;;-1:-1:-1;;;16050:67:0;;;;;;;:::i;:::-;34516:2:::1;34497:16;:21;34489:80;;;::::0;-1:-1:-1;;;34489:80:0;;15499:2:1;34489:80:0::1;::::0;::::1;15481:21:1::0;15538:2;15518:18;;;15511:30;15577:34;15557:18;;;15550:62;-1:-1:-1;;;15628:18:1;;;15621:44;15682:19;;34489:80:0::1;15297:410:1::0;34489:80:0::1;34610:3;34588:19;:25;34580:88;;;::::0;-1:-1:-1;;;34580:88:0;;15914:2:1;34580:88:0::1;::::0;::::1;15896:21:1::0;15953:2;15933:18;;;15926:30;15992:34;15972:18;;;15965:62;-1:-1:-1;;;16043:18:1;;;16036:48;16101:19;;34580:88:0::1;15712:414:1::0;34580:88:0::1;34706:19;34687:16;:38;34679:103;;;::::0;-1:-1:-1;;;34679:103:0;;16333:2:1;34679:103:0::1;::::0;::::1;16315:21:1::0;16372:2;16352:18;;;16345:30;16411:34;16391:18;;;16384:62;-1:-1:-1;;;16462:18:1;;;16455:50;16522:19;;34679:103:0::1;16131:416:1::0;34679:103:0::1;34837:12;::::0;-1:-1:-1;;34837:19:0::1;:50:::0;::::1;;;-1:-1:-1::0;34860:20:0::1;::::0;-1:-1:-1;;34860:27:0::1;34837:50;34829:90;;;::::0;-1:-1:-1;;;34829:90:0;;16754:2:1;34829:90:0::1;::::0;::::1;16736:21:1::0;16793:2;16773:18;;;16766:30;16832:29;16812:18;;;16805:57;16879:18;;34829:90:0::1;16552:351:1::0;34829:90:0::1;19533:1;34961:12;:38:::0;;;35010:21:::1;:36:::0;35072:22:::1;::::0;35057:12:::1;:37:::0;35107:23:::1;-1:-1:-1::0;35107:17:0::1;:23::i;:::-;35141:30;35166:4;35141:24;:30::i;:::-;35331:28;:16:::0;35350:9:::1;35331:28;:::i;:::-;35313:46;::::0;:15:::1;:46;:::i;:::-;35298:12;:61:::0;35408:31:::1;:19:::0;35430:9:::1;35408:31;:::i;:::-;35393:12;;:46;;;;:::i;:::-;35370:20;:69:::0;35586:16:::1;::::0;::::1;::::0;;;::::1;34377:1233:::0;;:::o;29165:402::-;29287:4;29309:228;15532:10;29359:7;29381:145;29438:15;29381:145;;;;;;;;;;;;;;;;;15532:10;29381:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;29381:34:0;;;;;;;;;;;;:38;:145::i;17146:338::-;16058:6;;-1:-1:-1;;;;;16058:6:0;15532:10;16058:22;16050:67;;;;-1:-1:-1;;;16050:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17290:22:0;::::1;17268:110;;;;-1:-1:-1::0;;;17268:110:0::1;;;;;;;:::i;:::-;17417:13;::::0;17396:45:::1;::::0;-1:-1:-1;;;;;17396:45:0;;::::1;::::0;17417:13:::1;::::0;17396:45:::1;::::0;17417:13:::1;::::0;17396:45:::1;17452:13;:24:::0;;-1:-1:-1;;;;;;17452:24:0::1;-1:-1:-1::0;;;;;17452:24:0;;;::::1;::::0;;;::::1;::::0;;17146:338::o;27379:201::-;27486:4;27508:42;15532:10;27532:9;27543:6;27508:9;:42::i;29575:512::-;16206:13;;-1:-1:-1;;;;;16206:13:0;15532:10;16206:29;16184:119;;;;-1:-1:-1;;;16184:119:0;;;;;;;:::i;:::-;29714:1:::1;29705:6;:10;:32;;;;-1:-1:-1::0;29719:18:0;29705:32:::1;29697:58;;;::::0;-1:-1:-1;;;29697:58:0;;17650:2:1;29697:58:0::1;::::0;::::1;17632:21:1::0;17689:2;17669:18;;;17662:30;-1:-1:-1;;;17708:18:1;;;17701:43;17761:18;;29697:58:0::1;17448:337:1::0;29697:58:0::1;29768:13;29784:41;29807:17;29811:13:::0;29807:2:::1;:17;:::i;29784:41::-;29927:14;::::0;29768:57;;-1:-1:-1;29838:22:0::1;::::0;29863:109:::1;::::0;29907:4:::1;::::0;-1:-1:-1;;;;;29927:14:0::1;29768:57:::0;29863:21:::1;:109::i;:::-;29838:134;;30039:40;30064:14;30039:24;:40::i;:::-;29686:401;;29575:512:::0;;:::o;33835:369::-;16206:13;;-1:-1:-1;;;;;16206:13:0;15532:10;16206:29;16184:119;;;;-1:-1:-1;;;16184:119:0;;;;;;;:::i;:::-;33989:22:::1;::::0;34047:69:::1;34098:17;34102:13:::0;34098:2:::1;:17;:::i;34047:69::-;34022:22;:94:::0;;;34132:64:::1;::::0;;8329:25:1;;;8385:2;8370:18;;8363:34;;;;34132:64:0::1;::::0;8302:18:1;34132:64:0::1;8155:248:1::0;31059:116:0;16058:6;;-1:-1:-1;;;;;16058:6:0;15532:10;16058:22;16050:67;;;;-1:-1:-1;;;16050:67:0;;;;;;;:::i;:::-;31112:15:::1;:22:::0;;-1:-1:-1;;31112:22:0::1;::::0;::::1;::::0;;31150:17:::1;::::0;::::1;::::0;31112:22;;31150:17:::1;31059:116::o:0;18620:40::-;;;;;;;;;;;;41623:441;16058:6;;-1:-1:-1;;;;;16058:6:0;15532:10;16058:22;16050:67;;;;-1:-1:-1;;;16050:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41713:26:0;::::1;41705:82;;;::::0;-1:-1:-1;;;41705:82:0;;17992:2:1;41705:82:0::1;::::0;::::1;17974:21:1::0;18031:2;18011:18;;;18004:30;18070:34;18050:18;;;18043:62;-1:-1:-1;;;18121:18:1;;;18114:41;18172:19;;41705:82:0::1;17790:407:1::0;41705:82:0::1;-1:-1:-1::0;;;;;41807:36:0;::::1;;::::0;;;:22:::1;:36;::::0;;;;;::::1;;41806:37;41798:93;;;::::0;-1:-1:-1;;;41798:93:0;;18404:2:1;41798:93:0::1;::::0;::::1;18386:21:1::0;18443:2;18423:18;;;18416:30;18482:34;18462:18;;;18455:62;-1:-1:-1;;;18533:18:1;;;18526:41;18584:19;;41798:93:0::1;18202:407:1::0;41798:93:0::1;-1:-1:-1::0;;;;;41904:36:0;::::1;;::::0;;;:22:::1;:36;::::0;;;;;;;:43;;-1:-1:-1;;41904:43:0::1;41943:4;41904:43:::0;;::::1;::::0;;;41958:23:::1;:42:::0;;;;::::1;::::0;;;;;;;;::::1;::::0;;-1:-1:-1;;;;;;41958:42:0::1;::::0;::::1;::::0;;42018:38;;1667:51:1;;;42018:38:0::1;::::0;1640:18:1;42018:38:0::1;1495:229:1::0;42942:171:0;16058:6;;-1:-1:-1;;;;;16058:6:0;15532:10;16058:22;16050:67;;;;-1:-1:-1;;;16050:67:0;;;;;;;:::i;:::-;43019:21:::1;:32:::0;;-1:-1:-1;;43019:32:0::1;::::0;::::1;;::::0;;::::1;::::0;;;43067:38:::1;::::0;154:41:1;;;43067:38:0::1;::::0;142:2:1;127:18;43067:38:0::1;14:187:1::0;43513:104:0;43565:7;43592:17;43604:4;19109:13;18887:2;19109;:13;:::i;:::-;19091:31;;:15;:31;:::i;28247:600::-;28467:4;28484:55;28491:6;15532:10;28513:6;28521:8;28531:1;28534;28537;28484:6;:55::i;:::-;28550:36;28560:6;28568:9;28579:6;28550:9;:36::i;:::-;28597:220;28620:6;15532:10;28668:138;28724:6;28668:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28668:19:0;;;;;;:11;:19;;;;;;15532:10;28688:12;15436:115;28597:220;-1:-1:-1;28835:4:0;28247:600;;;;;;;;;:::o;35618:551::-;16058:6;;-1:-1:-1;;;;;16058:6:0;15532:10;16058:22;16050:67;;;;-1:-1:-1;;;16050:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35769:41:0;::::1;35747:149;;;::::0;-1:-1:-1;;;35747:149:0;;18816:2:1;35747:149:0::1;::::0;::::1;18798:21:1::0;18855:2;18835:18;;;18828:30;18894:34;18874:18;;;18867:62;18965:28;18945:18;;;18938:56;19011:19;;35747:149:0::1;18614:422:1::0;35747:149:0::1;35931:26;::::0;;-1:-1:-1;;;;;35968:65:0;;::::1;-1:-1:-1::0;;;;;;35968:65:0;::::1;::::0;::::1;::::0;;;36049:112:::1;::::0;;35931:26;;;::::1;11439:34:1::0;;;11504:2;11489:18;;11482:43;;;;36049:112:0::1;::::0;11374:18:1;36049:112:0::1;11227:304:1::0;33471:356:0;16206:13;;-1:-1:-1;;;;;16206:13:0;15532:10;16206:29;16184:119;;;;-1:-1:-1;;;16184:119:0;;;;;;;:::i;:::-;33617:24:::1;::::0;;33652:46;;;;33714:105:::1;::::0;;8329:25:1;;;8385:2;8370:18;;8363:34;;;33714:105:0::1;::::0;8302:18:1;33714:105:0::1;8155:248:1::0;40343:140:0;40436:10;;:39;;;-1:-1:-1;;;40436:39:0;;;;40404:7;;-1:-1:-1;;;;;40436:10:0;;:37;;:39;;;;;;;;;;;;;;:10;:39;;;;;;;;;;31548:221;16058:6;;-1:-1:-1;;;;;16058:6:0;15532:10;16058:22;16050:67;;;;-1:-1:-1;;;16050:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31639:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;::::1;;31617:109;;;::::0;-1:-1:-1;;;31617:109:0;;19243:2:1;31617:109:0::1;::::0;::::1;19225:21:1::0;;;19262:18;;;19255:30;19321:34;19301:18;;;19294:62;19373:18;;31617:109:0::1;19041:356:1::0;31617:109:0::1;31739:22;31753:7;31739:13;:22::i;32103:201::-:0;16058:6;;-1:-1:-1;;;;;16058:6:0;15532:10;16058:22;16050:67;;;;-1:-1:-1;;;16050:67:0;;;;;;;:::i;:::-;32195:12:::1;::::0;;32218:23;;;;32257:39:::1;::::0;;8329:25:1;;;8385:2;8370:18;;8363:34;;;32257:39:0::1;::::0;8302:18:1;32257:39:0::1;8155:248:1::0;32780:319:0;16058:6;;-1:-1:-1;;;;;16058:6:0;15532:10;16058:22;16050:67;;;;-1:-1:-1;;;16050:67:0;;;;;;;:::i;:::-;32929:23:::1;::::0;;32963:50;;;;33029:62:::1;::::0;;8329:25:1;;;8385:2;8370:18;;8363:34;;;33029:62:0::1;::::0;8302:18:1;33029:62:0::1;8155:248:1::0;16890::0;16058:6;;-1:-1:-1;;;;;16058:6:0;15532:10;16058:22;16050:67;;;;-1:-1:-1;;;16050:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16981:22:0;::::1;16973:73;;;;-1:-1:-1::0;;;16973:73:0::1;;;;;;;:::i;:::-;17085:6;::::0;;17064:38:::1;::::0;-1:-1:-1;;;;;17064:38:0;;::::1;::::0;17085:6;::::1;::::0;17064:38:::1;::::0;::::1;17113:6;:17:::0;;-1:-1:-1;;;;;;17113:17:0::1;-1:-1:-1::0;;;;;17113:17:0;;;::::1;::::0;;;::::1;::::0;;16890:248::o;36681:483::-;16058:6;;-1:-1:-1;;;;;16058:6:0;15532:10;16058:22;16050:67;;;;-1:-1:-1;;;16050:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36785:29:0;::::1;36763:124;;;::::0;-1:-1:-1;;;36763:124:0;;19604:2:1;36763:124:0::1;::::0;::::1;19586:21:1::0;19643:2;19623:18;;;19616:30;19682:34;19662:18;;;19655:62;-1:-1:-1;;;19733:18:1;;;19726:43;19786:19;;36763:124:0::1;19402:409:1::0;36763:124:0::1;36922:14;::::0;;-1:-1:-1;;;;;36947:32:0;;::::1;-1:-1:-1::0;;;;;;36947:32:0;;::::1;::::0;::::1;::::0;;;36990:10:::1;:40:::0;;;;::::1;::::0;::::1;::::0;;;37046:51:::1;::::0;;36922:14;;;::::1;11439:34:1::0;;;11504:2;11489:18;;11482:43;;;;37046:51:0::1;::::0;11374:18:1;37046:51:0::1;;;;;;;;37110:46;37140:15;37110:29;:46::i;:::-;36752:412;36681:483:::0;:::o;36177:496::-;16058:6;;-1:-1:-1;;;;;16058:6:0;15532:10;16058:22;16050:67;;;;-1:-1:-1;;;16050:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36312:33:0;::::1;36290:133;;;::::0;-1:-1:-1;;;36290:133:0;;20018:2:1;36290:133:0::1;::::0;::::1;20000:21:1::0;20057:2;20037:18;;;20030:30;20096:34;20076:18;;;20069:62;-1:-1:-1;;;20147:18:1;;;20140:48;20205:19;;36290:133:0::1;19816:414:1::0;36290:133:0::1;36458:18;::::0;;-1:-1:-1;;;;;36487:40:0;;::::1;-1:-1:-1::0;;;;;;36487:40:0;::::1;::::0;::::1;::::0;;;36543:59:::1;::::0;;36458:18;;;::::1;11439:34:1::0;;;11504:2;11489:18;;11482:43;;;;36543:59:0::1;::::0;11374:18:1;36543:59:0::1;11227:304:1::0;12921:132:0;12979:7;13006:39;13010:1;13013;13006:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;12999:46;12921:132;-1:-1:-1;;;12921:132:0:o;43625:371::-;-1:-1:-1;;;;;43752:19:0;;43744:68;;;;-1:-1:-1;;;43744:68:0;;20437:2:1;43744:68:0;;;20419:21:1;20476:2;20456:18;;;20449:30;20515:34;20495:18;;;20488:62;-1:-1:-1;;;20566:18:1;;;20559:34;20610:19;;43744:68:0;20235:400:1;43744:68:0;-1:-1:-1;;;;;43831:21:0;;43823:68;;;;-1:-1:-1;;;43823:68:0;;20842:2:1;43823:68:0;;;20824:21:1;20881:2;20861:18;;;20854:30;20920:34;20900:18;;;20893:62;-1:-1:-1;;;20971:18:1;;;20964:32;21013:19;;43823:68:0;20640:398:1;43823:68:0;-1:-1:-1;;;;;43904:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;43956:32;;1459:25:1;;;43956:32:0;;1432:18:1;43956:32:0;;;;;;;43625:371;;;:::o;44004:4726::-;-1:-1:-1;;;;;44126:18:0;;44118:68;;;;-1:-1:-1;;;44118:68:0;;21245:2:1;44118:68:0;;;21227:21:1;21284:2;21264:18;;;21257:30;21323:34;21303:18;;;21296:62;-1:-1:-1;;;21374:18:1;;;21367:35;21419:19;;44118:68:0;21043:401:1;44118:68:0;-1:-1:-1;;;;;44205:16:0;;44197:64;;;;-1:-1:-1;;;44197:64:0;;21651:2:1;44197:64:0;;;21633:21:1;21690:2;21670:18;;;21663:30;21729:34;21709:18;;;21702:62;-1:-1:-1;;;21780:18:1;;;21773:33;21823:19;;44197:64:0;21449:399:1;44197:64:0;44289:1;44280:6;:10;44272:64;;;;-1:-1:-1;;;44272:64:0;;22055:2:1;44272:64:0;;;22037:21:1;22094:2;22074:18;;;22067:30;22133:34;22113:18;;;22106:62;-1:-1:-1;;;22184:18:1;;;22177:39;22233:19;;44272:64:0;21853:405:1;44272:64:0;44363:2;-1:-1:-1;;;;;44355:10:0;:4;-1:-1:-1;;;;;44355:10:0;;;44347:62;;;;-1:-1:-1;;;44347:62:0;;22465:2:1;44347:62:0;;;22447:21:1;22504:2;22484:18;;;22477:30;22543:34;22523:18;;;22516:62;-1:-1:-1;;;22594:18:1;;;22587:37;22641:19;;44347:62:0;22263:403:1;44347:62:0;60285:15;;20809:1;60285:24;44428:15;44420:81;;;;-1:-1:-1;;;44420:81:0;;22873:2:1;44420:81:0;;;22855:21:1;22912:2;22892:18;;;22885:30;22951:34;22931:18;;;22924:62;-1:-1:-1;;;23002:18:1;;;22995:51;23063:19;;44420:81:0;22671:417:1;44420:81:0;44514:14;17557:6;;-1:-1:-1;;;;;17557:6:0;;;;44514:14;44573;;;;;:30;;;44597:6;-1:-1:-1;;;;;44591:12:0;:2;-1:-1:-1;;;;;44591:12:0;;44573:30;:82;;;-1:-1:-1;;;;;;44621:34:0;;;;;;:28;:34;;;;;;;;44573:82;:118;;;-1:-1:-1;;;;;;44659:32:0;;;;;;:28;:32;;;;;;;;44573:118;44549:142;;44712:22;44737:18;43259:12;;43274:15;-1:-1:-1;43259:30:0;43121:176;44737:18;44712:43;;44786:12;;44776:6;:22;;:42;;;;44802:16;44776:42;:64;;;;44823:17;44822:18;44776:64;44768:129;;;;-1:-1:-1;;;44768:129:0;;23295:2:1;44768:129:0;;;23277:21:1;23334:2;23314:18;;;23307:30;23373:34;23353:18;;;23346:62;-1:-1:-1;;;23424:18:1;;;23417:37;23471:19;;44768:129:0;23093:403:1;44768:129:0;44934:13;;-1:-1:-1;;;;;44934:13:0;44966:17;;:37;;;44987:16;44966:37;:71;;;;45016:5;-1:-1:-1;;;;;45008:13:0;:4;-1:-1:-1;;;;;45008:13:0;;;:28;;;;;45031:5;-1:-1:-1;;;;;45025:11:0;:2;-1:-1:-1;;;;;45025:11:0;;;45008:28;44958:119;;;;-1:-1:-1;;;44958:119:0;;23703:2:1;44958:119:0;;;23685:21:1;23742:2;23722:18;;;23715:30;-1:-1:-1;;;23761:18:1;;;23754:52;23823:18;;44958:119:0;23501:346:1;44958:119:0;45090:24;45118:18;60173:17;;20809:1;60173:26;;60099:108;45118:18;45117:19;45090:46;;45151:17;:45;;;;-1:-1:-1;43458:20:0;;43482:15;-1:-1:-1;43458:39:0;45172:24;45151:66;;;;;45201:16;45200:17;45151:66;:89;;;;;45221:19;45151:89;45147:169;;;45257:47;45287:2;45291:4;45297:6;45257:29;:47::i;:::-;45378:4;45328:28;60923:16;;;:7;:16;;;;;;45463:23;;45328:56;;-1:-1:-1;45426:60:0;;;45395:28;45521:17;:53;;;;;45555:19;45521:53;:91;;;;-1:-1:-1;45591:21:0;;;;45521:91;:119;;;;;45635:5;-1:-1:-1;;;;;45629:11:0;:2;-1:-1:-1;;;;;45629:11:0;;45521:119;45499:141;;45754:14;45750:1319;;;45789:23;45785:161;;;45856:23;;45833:46;;45898:32;45909:20;45898:10;:32::i;:::-;45964:14;;;;;;;:81;;;;;46023:22;;45999:21;:46;45964:81;:150;;;;-1:-1:-1;46094:20:0;;46080:10;;46066:9;;:25;;:13;:25::i;:::-;:48;45964:150;45960:1098;;;46173:21;46153:17;;:41;46149:421;;;46529:21;46509:17;:41;46149:421;46594:17;;:21;46590:453;;46640:22;46665:32;46679:17;;46665:13;:32::i;:::-;46640:57;;46786:40;46811:14;46786:24;:40::i;:::-;-1:-1:-1;46869:1:0;46849:17;:21;;;46925:9;:13;;;46984:10;:14;46590:453;47085:17;47081:841;;;47197:5;-1:-1:-1;;;;;47191:11:0;:2;-1:-1:-1;;;;;47191:11:0;;47187:658;;;47236:10;;:22;;47251:6;47236:14;:22::i;:::-;47223:10;:35;47295:15;;:27;;47315:6;47295:19;:27::i;:::-;47277:15;:45;47354:24;;47345:33;;47341:286;;;47479:17;;47421:21;;47469:27;;47465:60;;;-1:-1:-1;47508:17:0;;47465:60;47568:39;47590:16;:7;47602:3;47590:11;:16::i;:::-;47568:17;;;:21;:39::i;:::-;47548:17;:59;-1:-1:-1;47341:286:0;47187:658;;;47708:5;-1:-1:-1;;;;;47700:13:0;:4;-1:-1:-1;;;;;47700:13:0;;47696:149;;;47746:9;;:21;;47760:6;47746:13;:21::i;:::-;47734:9;:33;47803:14;;:26;;47822:6;47803:18;:26::i;:::-;47786:14;:43;47696:149;47887:11;;:23;;47903:6;47887:15;:23::i;:::-;47873:11;:37;47081:841;-1:-1:-1;;;;;48055:24:0;;47934:12;48055:24;;;:18;:24;;;;;;47949:4;;48055:24;;;:50;;-1:-1:-1;;;;;;48083:22:0;;;;;;:18;:22;;;;;;;;48055:50;48051:98;;;-1:-1:-1;48132:5:0;48051:98;48351:16;:50;;;-1:-1:-1;17651:13:0;;-1:-1:-1;;;;;17651:13:0;15532:10;48371:30;48351:50;48347:322;;;48454:24;:22;:24::i;:::-;48347:322;;;48500:19;48496:173;;;48614:43;48654:2;48614:39;:43::i;:::-;48681:41;48696:4;48702:2;48706:6;48714:7;48681:14;:41::i;:::-;44107:4623;;;;;;;;;44004:4726;;;:::o;12429:226::-;12549:7;12585:12;12577:6;;;;12569:29;;;;-1:-1:-1;;;12569:29:0;;;;;;;;:::i;:::-;-1:-1:-1;12609:9:0;12621:5;12625:1;12621;:5;:::i;:::-;12609:17;12429:226;-1:-1:-1;;;;;12429:226:0:o;12663:250::-;12721:7;12745:6;12741:47;;-1:-1:-1;12775:1:0;12768:8;;12741:47;12800:9;12812:5;12816:1;12812;:5;:::i;:::-;12800:17;-1:-1:-1;12845:1:0;12836:5;12840:1;12800:17;12836:5;:::i;:::-;:10;12828:56;;;;-1:-1:-1;;;12828:56:0;;24276:2:1;12828:56:0;;;24258:21:1;24315:2;24295:18;;;24288:30;24354:34;24334:18;;;24327:62;-1:-1:-1;;;24405:18:1;;;24398:31;24446:19;;12828:56:0;24074:397:1;12096:181:0;12154:7;;12186:5;12190:1;12186;:5;:::i;:::-;12174:17;;12215:1;12210;:6;;12202:46;;;;-1:-1:-1;;;12202:46:0;;24678:2:1;12202:46:0;;;24660:21:1;24717:2;24697:18;;;24690:30;24756:29;24736:18;;;24729:57;24803:18;;12202:46:0;24476:351:1;58783:149:0;-1:-1:-1;;;;;58844:27:0;;;;;;:18;:27;;;;;;;;;:34;;-1:-1:-1;;58844:34:0;58874:4;58844:34;;;58894:30;;1667:51:1;;;58894:30:0;;1640:18:1;58894:30:0;1495:229:1;51017:733:0;51242:16;;;51256:1;51242:16;;;;;;;;51218:21;;51242:16;;;;;;;;;;-1:-1:-1;51242:16:0;51218:40;;51279:12;51269:4;51274:1;51269:7;;;;;;;;:::i;:::-;;;;;;:22;-1:-1:-1;;;;;51269:22:0;;;-1:-1:-1;;;;;51269:22:0;;;;;51312:15;;;;;;;;;-1:-1:-1;;;;;51312:15:0;-1:-1:-1;;;;;51312:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51302:4;51307:1;51302:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;51302:32:0;;;:7;;;;;;;;;:32;51384:15;;51347:67;;-1:-1:-1;;;51347:67:0;;51384:15;;;;;;51347:67;;;25138:51:1;25205:18;;;25198:34;;;51347:28:0;;;;;;25111:18:1;;51347:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;51453:15:0;;:236;;-1:-1:-1;;;51453:236:0;;:15;;;;-1:-1:-1;;;;;51453:15:0;;:66;;:236;;51534:11;;51560:1;;51604:4;;51623:9;;51663:15;;51453:236;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51707:35;51724:11;51737:4;51707:35;;;;;;;:::i;:::-;;;;;;;;51147:603;51017:733;;;:::o;52483:668::-;52703:16;;;52717:1;52703:16;;;;;;;;52679:21;;52703:16;;;;;;;;;;-1:-1:-1;52703:16:0;52679:40;;52740:15;;;;;;;;;-1:-1:-1;;;;;52740:15:0;-1:-1:-1;;;;;52740:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52730:4;52735:1;52730:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;52730:32:0;;;-1:-1:-1;;;;;52730:32:0;;;;;52783:12;52773:4;52778:1;52773:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;52773:22:0;;;:7;;;;;;;;;:22;52834:15;;;;;;:66;52922:6;52954:1;53001:4;53020:9;53060:24;:15;53080:3;53060:19;:24::i;:::-;52834:261;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53113:30;53130:6;53138:4;53113:30;;;;;;;:::i;53159:834::-;53424:16;;;53438:1;53424:16;;;;;;;;;53400:21;;53424:16;;;;;;;;;;-1:-1:-1;53424:16:0;53400:40;;53461:16;53451:4;53456:1;53451:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1;;;;;53451:26:0;;;-1:-1:-1;;;;;53451:26:0;;;;;53498:15;;;;;;;;;-1:-1:-1;;;;;53498:15:0;-1:-1:-1;;;;;53498:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;53488:4;53493:1;53488:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;53488:32:0;;;-1:-1:-1;;;;;53488:32:0;;;;;53541:14;53531:4;53536:1;53531:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;53531:24:0;;;:7;;;;;;;;;:24;53609:15;;53568:71;;-1:-1:-1;;;53568:71:0;;53609:15;;;;;;53568:71;;;25138:51:1;25205:18;;;25198:34;;;53568:32:0;;;;;;25111:18:1;;53568:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;53678:15:0;;;;;-1:-1:-1;;;;;53678:15:0;:69;53762:11;53788:1;53835:4;53854:9;53894:24;:15;53914:3;53894:19;:24::i;:::-;53678:251;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53947:38;53967:11;53980:4;53947:38;;;;;;;:::i;:::-;;;;;;;;53329:664;53159:834;;;;:::o;58400:375::-;-1:-1:-1;;;;;58487:45:0;;;;;;:28;:45;;;;;;;;58483:58;;;58400:375;:::o;58483:58::-;-1:-1:-1;;;;;58553:45:0;;;;;;:28;:45;;;;;;;;:52;;-1:-1:-1;;58553:52:0;58601:4;58553:52;;;;;;58616:21;:43;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;58616:43:0;;;;;58677:47;;1667:51:1;;;58677:47:0;;1640:18:1;58677:47:0;;;;;;;58735:32;58751:15;58735;:32::i;58940:146::-;-1:-1:-1;;;;;58999:27:0;;59029:5;58999:27;;;:18;:27;;;;;;;;;:35;;-1:-1:-1;;58999:35:0;;;59050:28;;1667:51:1;;;59050:28:0;;1640:18:1;59050:28:0;1495:229:1;61016:1375:0;61242:51;;;;;;;;61281:12;61242:51;-1:-1:-1;;;;;61242:51:0;;;;;-1:-1:-1;;;61242:51:0;;;;;;;-1:-1:-1;;;61242:51:0;;;;;;;;;;;;;-1:-1:-1;;;;;61242:51:0;;;;;;;;;;;;;;;;61332:9;61308:33;61304:1080;;;61430:14;61447:16;:7;-1:-1:-1;;;;;61447:14:0;;:16::i;:::-;61430:33;-1:-1:-1;;;;;;61484:23:0;;61502:4;61484:23;61480:161;;;61609:16;:7;-1:-1:-1;;;;;61609:14:0;;:16::i;:::-;61600:25;;61480:161;-1:-1:-1;;;;;61689:20:0;;61685:33;;61711:7;;61016:1375;;:::o;61685:33::-;61761;;-1:-1:-1;;;61761:33:0;;-1:-1:-1;;;;;1685:32:1;;;61761:33:0;;;1667:51:1;61734:16:0;;61761:24;;;;;;1640:18:1;;61761:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;61734:61;;61827:13;:22;;;-1:-1:-1;;;;;61816:33:0;:8;-1:-1:-1;;;;;61816:33:0;;:87;;;;;61881:13;:22;;;-1:-1:-1;;;;;61870:33:0;:8;-1:-1:-1;;;;;61870:33:0;;61816:87;61812:561;;;62002:58;;-1:-1:-1;;;62002:58:0;;27600:2:1;62002:58:0;;;27582:21:1;27639:2;27619:18;;;27612:30;27678:34;27658:18;;;27651:62;-1:-1:-1;;;27729:18:1;;;27722:38;27777:19;;62002:58:0;27398:404:1;61812:561:0;62097:13;:22;;;-1:-1:-1;;;;;62086:33:0;:8;-1:-1:-1;;;;;62086:33:0;;:87;;;;;62151:13;:22;;;-1:-1:-1;;;;;62140:33:0;:8;-1:-1:-1;;;;;62140:33:0;;62086:87;62082:291;;;62297:15;;;;;;;62296:16;62288:69;;;;-1:-1:-1;;;62288:69:0;;28009:2:1;62288:69:0;;;27991:21:1;28048:2;28028:18;;;28021:30;28087:34;28067:18;;;28060:62;-1:-1:-1;;;28138:18:1;;;28131:38;28186:19;;62288:69:0;27807:404:1;62288:69:0;61343:1041;;61304:1080;61120:1271;61016:1375;;:::o;51758:717::-;52001:16;;;52015:1;52001:16;;;;;;;;51897:7;;;;52001:16;52015:1;52001:16;;;;;;;;;;-1:-1:-1;52001:16:0;51977:40;;52038:15;;;;;;;;;-1:-1:-1;;;;;52038:15:0;-1:-1:-1;;;;;52038:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52028:4;52033:1;52028:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;52028:32:0;;;-1:-1:-1;;;;;52028:32:0;;;;;52081:12;52071:4;52076:1;52071:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;52071:22:0;;;:7;;;;;;;;;:22;52159:15;;52132:24;;52159:15;;;;;:37;52218:6;52132:24;52297:4;52316:9;52356:24;:15;52376:3;52356:19;:24::i;:::-;52159:232;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;52159:232:0;;;;;;;;;;;;:::i;:::-;52132:259;;52409:30;52426:6;52434:4;52409:30;;;;;;;:::i;:::-;;;;;;;;52457:7;52465:1;52457:10;;;;;;;;:::i;:::-;;;;;;;52450:17;;;;51758:717;;;;;:::o;54001:260::-;54074:10;;54070:184;;54101:10;;;:47;;-1:-1:-1;;;54101:47:0;;54134:4;54101:47;;;25138:51:1;25205:18;;;25198:34;;;-1:-1:-1;;;;;54101:10:0;;:24;;25111:18:1;;54101:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;54163:10:0;;;:26;;-1:-1:-1;;;54163:26:0;;;;;1459:25:1;;;-1:-1:-1;;;;;54163:10:0;;;;-1:-1:-1;54163:18:0;;-1:-1:-1;1432:18:1;54163:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54211:31;54235:6;54211:31;;;;1459:25:1;;1447:2;1432:18;;1313:177;56262:1180:0;56483:15;56471:8;:27;;56463:57;;;;-1:-1:-1;;;56463:57:0;;29528:2:1;56463:57:0;;;29510:21:1;29567:2;29547:18;;;29540:30;-1:-1:-1;;;29586:18:1;;;29579:47;29643:18;;56463:57:0;29326:341:1;56463:57:0;-1:-1:-1;;;;;56882:13:0;;56533:14;56882:13;;;:6;:13;;;;;:15;;56638:16;;21385:66;;56784:5;;56816:7;;56850:5;;56533:14;56882:15;;;:::i;:::-;;;;-1:-1:-1;56705:250:0;;;;;;29959:25:1;;;;-1:-1:-1;;;;;30058:15:1;;;30038:18;;;30031:43;30110:15;;;;30090:18;;;30083:43;30142:18;;;30135:34;30185:19;;;30178:35;30229:19;;;30222:35;;;29931:19;;56705:250:0;;;;;;;;;;;;56673:301;;;;;;56574:415;;;;;;;;-1:-1:-1;;;30526:27:1;;30578:1;30569:11;;30562:27;;;;30614:2;30605:12;;30598:28;30651:2;30642:12;;30268:392;56574:415:0;;;;;;;;;;;;;56550:450;;;;;;56533:467;;57019:2;57015:1;:6;;;57011:171;;;57038:7;57043:2;57038:7;;:::i;:::-;;;57011:171;;;57071:2;57067:1;:6;;;57063:119;;;57109:60;;31116:66:1;57109:60:0;;;31104:79:1;31199:12;;;31192:28;;;31236:12;;57109:60:0;;;;;;;;;;;;57099:71;;;;;;57090:80;;57063:119;57219:26;;;57192:24;57219:26;;;;;;;;;31486:25:1;;;31559:4;31547:17;;31527:18;;;31520:45;;;;31581:18;;;31574:34;;;31624:18;;;31617:34;;;57219:26:0;;31458:19:1;;57219:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;57219:26:0;;-1:-1:-1;;57219:26:0;;;-1:-1:-1;;;;;;;57278:30:0;;;;;;:59;;;57332:5;-1:-1:-1;;;;;57312:25:0;:16;-1:-1:-1;;;;;57312:25:0;;57278:59;57256:136;;;;-1:-1:-1;;;57256:136:0;;31864:2:1;57256:136:0;;;31846:21:1;31903:2;31883:18;;;31876:30;31942:29;31922:18;;;31915:57;31989:18;;57256:136:0;31662:351:1;57256:136:0;57403:31;57412:5;57419:7;57428:5;57403:8;:31::i;:::-;56452:990;;56262:1180;;;;;;;:::o;13061:312::-;13181:7;13216:12;13209:5;13201:28;;;;-1:-1:-1;;;13201:28:0;;;;;;;;:::i;:::-;-1:-1:-1;13240:9:0;13252:5;13256:1;13252;:5;:::i;59094:997::-;59209:13;;-1:-1:-1;;;;;59209:13:0;;;;59194:12;;59326;;;;59322:508;;;-1:-1:-1;;;;;59366:21:0;;;;;;:17;:21;;;;;;59391:12;59366:37;;:85;;-1:-1:-1;59425:9:0;59407:28;;;;:17;:28;;;;;;59439:12;59407:44;59366:85;-1:-1:-1;;;;;59466:21:0;;;;;;:17;:21;;;;;;59490:12;59466:36;;;;59535:9;59517:28;;;;:43;59355:96;-1:-1:-1;59322:508:0;;;59588:4;-1:-1:-1;;;;;59582:10:0;:2;-1:-1:-1;;;;;59582:10:0;;59578:252;;;-1:-1:-1;;;;;59620:23:0;;;;;;:17;:23;;;;;;59647:12;59620:39;;:87;;-1:-1:-1;59681:9:0;59663:28;;;;:17;:28;;;;;;59695:12;59663:44;59620:87;-1:-1:-1;;;;;59722:23:0;;;;;;:17;:23;;;;;;59748:12;59722:38;;;;59793:9;59775:28;;;;:43;59609:98;-1:-1:-1;59578:252:0;59851:8;59850:9;59842:114;;;;-1:-1:-1;;;59842:114:0;;32220:2:1;59842:114:0;;;32202:21:1;32259:2;32239:18;;;32232:30;32298:34;32278:18;;;32271:62;32369:34;32349:18;;;32342:62;32441:30;32420:19;;;32413:59;32489:19;;59842:114:0;32018:496:1;59842:114:0;59987:21;:19;:21::i;:::-;59977:6;:31;;59969:114;;;;-1:-1:-1;;;59969:114:0;;32721:2:1;59969:114:0;;;32703:21:1;32760:2;32740:18;;;32733:30;32799:34;32779:18;;;32772:62;32870:34;32850:18;;;32843:62;-1:-1:-1;;;32921:19:1;;;32914:37;32968:19;;59969:114:0;32519:474:1;50076:547:0;20809:1;23656:17;;:26;;23648:35;;;;;;20809:1;23694:17;:25;50182:21:::1;50214:68;50239:4;::::0;50261:20;50214:16:::1;:68::i;:::-;50293:26;50322:41;:21;50348:14:::0;50322:25:::1;:41::i;:::-;50459:26;::::0;50591:12:::1;::::0;50541:26:::1;::::0;50293:70;;-1:-1:-1;50424:191:0::1;::::0;-1:-1:-1;;;;;50459:26:0;;::::1;::::0;50500:104:::1;::::0;50591:12;50500:68:::1;::::0;50293:70;;50500:40:::1;:68::i;:104::-;50424:20;:191::i;:::-;-1:-1:-1::0;;20768:1:0;23876:17;:26;-1:-1:-1;50076:547:0:o;50631:378::-;50726:7;20809:1;23656:17;;:26;;23648:35;;;;;;20809:1;23694:17;:25;50751:22:::1;50788:10:::0;;50784:186:::1;;50904:14;::::0;50832:126:::1;::::0;50880:4:::1;::::0;-1:-1:-1;;;;;50904:14:0::1;50937:6:::0;50832:21:::1;:126::i;:::-;50815:143;;50784:186;20768:1:::0;23876:17;:26;50987:14;50631:378;-1:-1:-1;;50631:378:0:o;49573:495::-;49719:12;:24;49754:12;49719:48;;;;-1:-1:-1;;;49719:24:0;;;;:48;49715:346;;;49854:195;;;;;;;;-1:-1:-1;49854:195:0;;;;;;;;;;;;;;;;;;;;;;;;;;49839:12;:210;;;;-1:-1:-1;;;;;;49839:210:0;;;;;;;;;;;;;;49715:346;49573:495::o;48738:827::-;20809:1;23959:15;;:24;;23951:33;;;;;;20809:1;23995:15;:23;48847:16:::1;48874:14;48885:2:::0;-1:-1:-1;;;;;60923:16:0;60896:7;60923:16;;;:7;:16;;;;;;;60837:110;48874:14:::1;48847:42;;48900:14;48917:11;:2;-1:-1:-1::0;;;;;48917:9:0::1;;:11::i;:::-;48900:28:::0;-1:-1:-1;;;;;;48943:23:0;::::1;48961:4;48943:23;48939:144;;;49060:11;:2;-1:-1:-1::0;;;;;49060:9:0::1;;:11::i;:::-;49051:20;;48939:144;49095:16;-1:-1:-1::0;;;;;49126:20:0;::::1;49122:213;;-1:-1:-1::0;49241:1:0::1;49122:213;;;49294:28;::::0;-1:-1:-1;;;49294:28:0;;-1:-1:-1;;;;;1685:32:1;;;49294:28:0::1;::::0;::::1;1667:51:1::0;49294:24:0;::::1;::::0;::::1;::::0;1640:18:1;;49294:28:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49275:48;;49122:213;49362:195;::::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;49362:195:0;;::::1;::::0;;;;;;::::1;;::::0;;::::1;::::0;;;49479:12:::1;49362:195;;::::0;;;;;;-1:-1:-1;;;;;49362:195:0;;;::::1;::::0;;;;;;49536:9:::1;49362:195:::0;;;;;;;49347:12:::1;:210:::0;;-1:-1:-1;;;;;;49347:210:0;;;;-1:-1:-1;;;49347:210:0;;::::1;::::0;;;::::1;-1:-1:-1::0;;;;;49347:210:0::1;-1:-1:-1::0;;;49347:210:0;;::::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;;;;;;49347:210:0;;::::1;::::0;;::::1;::::0;;;;;;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;;24175:24:0;;48738:827::o;54269:289::-;54425:7;54420:28;;54434:14;:12;:14::i;:::-;54461:47;54482:6;54490:9;54501:6;54461:20;:47::i;:::-;54526:7;54521:29;;54535:15;58215:21;;58200:12;:36;58156:88;14150:115;13964:54;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13964:54:0;-1:-1:-1;;;13964:54:0;;;14203:7;;14230:27;;14236:4;;14230:5;:27::i;14027:115::-;13854:54;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13854:54:0;-1:-1:-1;;;13854:54:0;;;14080:7;;14107:27;;14113:4;;14107:5;:27::i;12285:136::-;12343:7;12370:43;12374:1;12377;12370:43;;;;;;;;;;;;;;;;;:3;:43::i;58252:140::-;58358:26;;-1:-1:-1;;;;;58358:18:0;;;:26;;;;;58377:6;;58358:26;;;;58377:6;58358:18;:26;;;;;;;;;;;;;;;;;;;57990:158;58037:12;;58033:30;;57990:158::o;58033:30::-;58099:12;;;58075:21;:36;-1:-1:-1;58124:16:0;;57990:158::o;54566:1688::-;54716:23;54754:18;54786:19;54797:7;54786:10;:19::i;:::-;-1:-1:-1;;;;;54841:15:0;;54818:20;54841:15;;;:7;:15;;;;;;54701:104;;-1:-1:-1;54701:104:0;;-1:-1:-1;54889:25:0;54841:15;54906:7;54889:16;:25::i;:::-;-1:-1:-1;;;;;54925:15:0;;;;;;;:7;:15;;;;;;:29;;;54993:18;;;;;;;;;54867:47;;-1:-1:-1;55047:36:0;54993:18;55067:15;55047:19;:36::i;:::-;-1:-1:-1;;;;;55094:18:0;;;;;;:7;:18;;;;;:35;;;55022:61;-1:-1:-1;55178:20:0;;:42;;;;;55219:1;55202:14;:18;55178:42;55174:270;;;55261:8;;55237:21;55307:20;55261:8;55325:1;55307:17;:20::i;:::-;55342:8;:23;;;55387:45;;;8329:25:1;;;8385:2;8370:18;;8363:34;;;55284:43:0;;-1:-1:-1;55387:45:0;;8302:18:1;55387:45:0;;;;;;;55222:222;;55174:270;55475:1;55460:12;:16;:36;;;;-1:-1:-1;55480:16:0;;55460:36;55456:264;;;55537:8;;55513:21;55583:20;55537:8;55601:1;55583:17;:20::i;:::-;55618:8;:23;;;55663:45;;;8329:25:1;;;8385:2;8370:18;;8363:34;;;55560:43:0;;-1:-1:-1;55663:45:0;;8302:18:1;55663:45:0;;;;;;;55498:222;;55456:264;55732:26;55747:10;55732:14;:26::i;:::-;55791:9;-1:-1:-1;;;;;55774:44:0;55783:6;-1:-1:-1;;;;;55774:44:0;;55802:15;55774:44;;;;1459:25:1;;1447:2;1432:18;;1313:177;55774:44:0;;;;;;;;55848:14;;-1:-1:-1;;;;;55835:27:0;;;55848:14;;55835:27;55831:416;;;56039:33;;1459:25:1;;;56039:33:0;;1447:2:1;1432:18;56039:33:0;;;;;;;55831:416;;;56104:14;;-1:-1:-1;;;;;56094:24:0;;;56104:14;;56094:24;56090:157;;;56210:25;;1459::1;;;56210::0;;1447:2:1;1432:18;56210:25:0;;;;;;;54690:1564;;;;;;54566:1688;;;:::o;14273:473::-;14374:7;14483:16;14494:4;14483:10;:16::i;:::-;14478:40;;-1:-1:-1;14516:1:0;14501:17;;14478:40;14533:12;14547:17;14568:4;-1:-1:-1;;;;;14568:15:0;14584:8;14568:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14532:61;;;;14610:7;:28;;;;;14636:2;14621:4;:11;:17;;14610:28;14606:95;;;14673:4;14662:27;;;;;;;;;;;;:::i;:::-;14655:34;;;;;;14606:95;-1:-1:-1;14736:1:0;;14273:473;-1:-1:-1;;;;14273:473:0:o;60325:323::-;60425:7;60447;60482:18;60503:30;60525:7;60503:21;:30::i;:::-;60482:51;-1:-1:-1;60544:23:0;60570;:7;60482:51;60570:11;:23::i;:::-;60544:49;60629:10;;-1:-1:-1;60325:323:0;;-1:-1:-1;;;60325:323:0:o;57450:532::-;57552:4;57513:20;57536:22;;;:7;:22;;;;;;;57591:28;57536:22;57608:10;57591:16;:28::i;:::-;57646:4;57630:22;;;;:7;:22;;;;;:36;;;57569:50;-1:-1:-1;57715:17:0;;:36;;;;;57750:1;57736:11;:15;57715:36;57711:264;;;57792:8;;57768:21;57838:20;57792:8;57856:1;57838:17;:20::i;:::-;57873:8;:23;;;57918:45;;;8329:25:1;;;8385:2;8370:18;;8363:34;;;57815:43:0;;-1:-1:-1;57918:45:0;;8302:18:1;57918:45:0;8155:248:1;14754:642:0;14813:4;15294:20;;15124:66;15345:23;;;;;;:42;;-1:-1:-1;15372:15:0;;;15345:42;15337:51;14754:642;-1:-1:-1;;;;14754:642:0:o;60656:173::-;60753:7;60785:36;60815:5;60785:25;60797:12;;60785:7;:11;;:25;;;;:::i;206:258:1:-;278:1;288:113;302:6;299:1;296:13;288:113;;;378:11;;;372:18;359:11;;;352:39;324:2;317:10;288:113;;;419:6;416:1;413:13;410:48;;;-1:-1:-1;;454:1:1;436:16;;429:27;206:258::o;469:383::-;618:2;607:9;600:21;581:4;650:6;644:13;693:6;688:2;677:9;673:18;666:34;709:66;768:6;763:2;752:9;748:18;743:2;735:6;731:15;709:66;:::i;:::-;836:2;815:15;-1:-1:-1;;811:29:1;796:45;;;;843:2;792:54;;469:383;-1:-1:-1;;469:383:1:o;857:131::-;-1:-1:-1;;;;;932:31:1;;922:42;;912:70;;978:1;975;968:12;993:315;1061:6;1069;1122:2;1110:9;1101:7;1097:23;1093:32;1090:52;;;1138:1;1135;1128:12;1090:52;1177:9;1164:23;1196:31;1221:5;1196:31;:::i;:::-;1246:5;1298:2;1283:18;;;;1270:32;;-1:-1:-1;;;993:315:1:o;1729:456::-;1806:6;1814;1822;1875:2;1863:9;1854:7;1850:23;1846:32;1843:52;;;1891:1;1888;1881:12;1843:52;1930:9;1917:23;1949:31;1974:5;1949:31;:::i;:::-;1999:5;-1:-1:-1;2056:2:1;2041:18;;2028:32;2069:33;2028:32;2069:33;:::i;:::-;1729:456;;2121:7;;-1:-1:-1;;;2175:2:1;2160:18;;;;2147:32;;1729:456::o;2190:118::-;2276:5;2269:13;2262:21;2255:5;2252:32;2242:60;;2298:1;2295;2288:12;2313:241;2369:6;2422:2;2410:9;2401:7;2397:23;2393:32;2390:52;;;2438:1;2435;2428:12;2390:52;2477:9;2464:23;2496:28;2518:5;2496:28;:::i;2559:248::-;2627:6;2635;2688:2;2676:9;2667:7;2663:23;2659:32;2656:52;;;2704:1;2701;2694:12;2656:52;-1:-1:-1;;2727:23:1;;;2797:2;2782:18;;;2769:32;;-1:-1:-1;2559:248:1:o;3202:247::-;3261:6;3314:2;3302:9;3293:7;3289:23;3285:32;3282:52;;;3330:1;3327;3320:12;3282:52;3369:9;3356:23;3388:31;3413:5;3388:31;:::i;3643:180::-;3702:6;3755:2;3743:9;3734:7;3730:23;3726:32;3723:52;;;3771:1;3768;3761:12;3723:52;-1:-1:-1;3794:23:1;;3643:180;-1:-1:-1;3643:180:1:o;3828:594::-;3923:6;3931;3939;3947;3955;4008:3;3996:9;3987:7;3983:23;3979:33;3976:53;;;4025:1;4022;4015:12;3976:53;4064:9;4051:23;4083:31;4108:5;4083:31;:::i;:::-;4133:5;-1:-1:-1;4190:2:1;4175:18;;4162:32;4203:33;4162:32;4203:33;:::i;:::-;3828:594;;4255:7;;-1:-1:-1;;;;4309:2:1;4294:18;;4281:32;;4360:2;4345:18;;4332:32;;4411:3;4396:19;;;4383:33;;-1:-1:-1;3828:594:1:o;4651:829::-;4762:6;4770;4778;4786;4794;4802;4810;4863:3;4851:9;4842:7;4838:23;4834:33;4831:53;;;4880:1;4877;4870:12;4831:53;4919:9;4906:23;4938:31;4963:5;4938:31;:::i;:::-;4988:5;-1:-1:-1;5045:2:1;5030:18;;5017:32;5058:33;5017:32;5058:33;:::i;:::-;5110:7;-1:-1:-1;5164:2:1;5149:18;;5136:32;;-1:-1:-1;5215:2:1;5200:18;;5187:32;;-1:-1:-1;5271:3:1;5256:19;;5243:33;5320:4;5307:18;;5295:31;;5285:59;;5340:1;5337;5330:12;5285:59;4651:829;;;;-1:-1:-1;4651:829:1;;;;5363:7;5417:3;5402:19;;5389:33;;-1:-1:-1;5469:3:1;5454:19;;;5441:33;;4651:829;-1:-1:-1;;4651:829:1:o;5485:388::-;5553:6;5561;5614:2;5602:9;5593:7;5589:23;5585:32;5582:52;;;5630:1;5627;5620:12;5582:52;5669:9;5656:23;5688:31;5713:5;5688:31;:::i;:::-;5738:5;-1:-1:-1;5795:2:1;5780:18;;5767:32;5808:33;5767:32;5808:33;:::i;:::-;5860:7;5850:17;;;5485:388;;;;;:::o;5878:127::-;5939:10;5934:3;5930:20;5927:1;5920:31;5970:4;5967:1;5960:15;5994:4;5991:1;5984:15;6010:422;6099:1;6142:5;6099:1;6156:270;6177:7;6167:8;6164:21;6156:270;;;6236:4;6232:1;6228:6;6224:17;6218:4;6215:27;6212:53;;;6245:18;;:::i;:::-;6295:7;6285:8;6281:22;6278:55;;;6315:16;;;;6278:55;6394:22;;;;6354:15;;;;6156:270;;;6160:3;6010:422;;;;;:::o;6437:806::-;6486:5;6516:8;6506:80;;-1:-1:-1;6557:1:1;6571:5;;6506:80;6605:4;6595:76;;-1:-1:-1;6642:1:1;6656:5;;6595:76;6687:4;6705:1;6700:59;;;;6773:1;6768:130;;;;6680:218;;6700:59;6730:1;6721:10;;6744:5;;;6768:130;6805:3;6795:8;6792:17;6789:43;;;6812:18;;:::i;:::-;-1:-1:-1;;6868:1:1;6854:16;;6883:5;;6680:218;;6982:2;6972:8;6969:16;6963:3;6957:4;6954:13;6950:36;6944:2;6934:8;6931:16;6926:2;6920:4;6917:12;6913:35;6910:77;6907:159;;;-1:-1:-1;7019:19:1;;;7051:5;;6907:159;7098:34;7123:8;7117:4;7098:34;:::i;:::-;7168:6;7164:1;7160:6;7156:19;7147:7;7144:32;7141:58;;;7179:18;;:::i;:::-;7217:20;;6437:806;-1:-1:-1;;;6437:806:1:o;7248:131::-;7308:5;7337:36;7364:8;7358:4;7337:36;:::i;7384:168::-;7424:7;7490:1;7486;7482:6;7478:14;7475:1;7472:21;7467:1;7460:9;7453:17;7449:45;7446:71;;;7497:18;;:::i;:::-;-1:-1:-1;7537:9:1;;7384:168::o;7557:184::-;7627:6;7680:2;7668:9;7659:7;7655:23;7651:32;7648:52;;;7696:1;7693;7686:12;7648:52;-1:-1:-1;7719:16:1;;7557:184;-1:-1:-1;7557:184:1:o;7746:404::-;7948:2;7930:21;;;7987:2;7967:18;;;7960:30;8026:34;8021:2;8006:18;;7999:62;-1:-1:-1;;;8092:2:1;8077:18;;8070:38;8140:3;8125:19;;7746:404::o;8408:356::-;8610:2;8592:21;;;8629:18;;;8622:30;8688:34;8683:2;8668:18;;8661:62;8755:2;8740:18;;8408:356::o;9188:251::-;9258:6;9311:2;9299:9;9290:7;9286:23;9282:32;9279:52;;;9327:1;9324;9317:12;9279:52;9359:9;9353:16;9378:31;9403:5;9378:31;:::i;10280:127::-;10341:10;10336:3;10332:20;10329:1;10322:31;10372:4;10369:1;10362:15;10396:4;10393:1;10386:15;10412:125;10452:4;10480:1;10477;10474:8;10471:34;;;10485:18;;:::i;:::-;-1:-1:-1;10522:9:1;;10412:125::o;10542:127::-;10603:10;10598:3;10594:20;10591:1;10584:31;10634:4;10631:1;10624:15;10658:4;10655:1;10648:15;10674:135;10713:3;-1:-1:-1;;10734:17:1;;10731:43;;;10754:18;;:::i;:::-;-1:-1:-1;10801:1:1;10790:13;;10674:135::o;16908:128::-;16948:3;16979:1;16975:6;16972:1;16969:13;16966:39;;;16985:18;;:::i;:::-;-1:-1:-1;17021:9:1;;16908:128::o;17041:402::-;17243:2;17225:21;;;17282:2;17262:18;;;17255:30;17321:34;17316:2;17301:18;;17294:62;-1:-1:-1;;;17387:2:1;17372:18;;17365:36;17433:3;17418:19;;17041:402::o;23852:217::-;23892:1;23918;23908:132;;23962:10;23957:3;23953:20;23950:1;23943:31;23997:4;23994:1;23987:15;24025:4;24022:1;24015:15;23908:132;-1:-1:-1;24054:9:1;;23852:217::o;24832:127::-;24893:10;24888:3;24884:20;24881:1;24874:31;24924:4;24921:1;24914:15;24948:4;24945:1;24938:15;25243:245;25310:6;25363:2;25351:9;25342:7;25338:23;25334:32;25331:52;;;25379:1;25376;25369:12;25331:52;25411:9;25405:16;25430:28;25452:5;25430:28;:::i;25493:461::-;25546:3;25584:5;25578:12;25611:6;25606:3;25599:19;25637:4;25666:2;25661:3;25657:12;25650:19;;25703:2;25696:5;25692:14;25724:1;25734:195;25748:6;25745:1;25742:13;25734:195;;;25813:13;;-1:-1:-1;;;;;25809:39:1;25797:52;;25869:12;;;;25904:15;;;;25845:1;25763:9;25734:195;;;-1:-1:-1;25945:3:1;;25493:461;-1:-1:-1;;;;;25493:461:1:o;25959:582::-;26258:6;26247:9;26240:25;26301:6;26296:2;26285:9;26281:18;26274:34;26344:3;26339:2;26328:9;26324:18;26317:31;26221:4;26365:57;26417:3;26406:9;26402:19;26394:6;26365:57;:::i;:::-;-1:-1:-1;;;;;26458:32:1;;;;26453:2;26438:18;;26431:60;-1:-1:-1;26522:3:1;26507:19;26500:35;26357:65;25959:582;-1:-1:-1;;;25959:582:1:o;26546:332::-;26753:6;26742:9;26735:25;26796:2;26791;26780:9;26776:18;26769:30;26716:4;26816:56;26868:2;26857:9;26853:18;26845:6;26816:56;:::i;26883:510::-;27154:6;27143:9;27136:25;27197:3;27192:2;27181:9;27177:18;27170:31;27117:4;27218:57;27270:3;27259:9;27255:19;27247:6;27218:57;:::i;:::-;-1:-1:-1;;;;;27311:32:1;;;;27306:2;27291:18;;27284:60;-1:-1:-1;27375:2:1;27360:18;27353:34;27210:65;26883:510;-1:-1:-1;;26883:510:1:o;28216:1105::-;28311:6;28342:2;28385;28373:9;28364:7;28360:23;28356:32;28353:52;;;28401:1;28398;28391:12;28353:52;28434:9;28428:16;28463:18;28504:2;28496:6;28493:14;28490:34;;;28520:1;28517;28510:12;28490:34;28558:6;28547:9;28543:22;28533:32;;28603:7;28596:4;28592:2;28588:13;28584:27;28574:55;;28625:1;28622;28615:12;28574:55;28654:2;28648:9;28676:2;28672;28669:10;28666:36;;;28682:18;;:::i;:::-;28728:2;28725:1;28721:10;28760:2;28754:9;28823:2;28819:7;28814:2;28810;28806:11;28802:25;28794:6;28790:38;28878:6;28866:10;28863:22;28858:2;28846:10;28843:18;28840:46;28837:72;;;28889:18;;:::i;:::-;28925:2;28918:22;28975:18;;;29009:15;;;;-1:-1:-1;29051:11:1;;;29047:20;;;29079:19;;;29076:39;;;29111:1;29108;29101:12;29076:39;29135:11;;;;29155:135;29171:6;29166:3;29163:15;29155:135;;;29237:10;;29225:23;;29188:12;;;;29268;;;;29155:135;;;29309:6;28216:1105;-1:-1:-1;;;;;;;;28216:1105:1:o;30665:204::-;30703:3;30739:4;30736:1;30732:12;30771:4;30768:1;30764:12;30806:3;30800:4;30796:14;30791:3;30788:23;30785:49;;;30814:18;;:::i;:::-;30850:13;;30665:204;-1:-1:-1;;;30665:204:1:o;32998:274::-;33127:3;33165:6;33159:13;33181:53;33227:6;33222:3;33215:4;33207:6;33203:17;33181:53;:::i;:::-;33250:16;;;;;32998:274;-1:-1:-1;;32998:274:1:o

Swarm Source

ipfs://161ad41a3905b0de17f7196a5502ac4483c0579ded4c05685938810f669ee3cd
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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