ETH Price: $2,479.75 (+1.38%)

Token

LickAndRorty (LICKnRORY)
 

Overview

Max Total Supply

1,000,000,000,000,000 LICKnRORY

Holders

292

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
699,554,785,446.808989032 LICKnRORY

Value
$0.00
0x41bC25E8fC547564e7C1A7fFDff6278bF6Eb5cc5
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:
LICKnRORY

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-06-28
*/

/**
 *Submitted for verification at Etherscan.io on 2021-06-18
*/

/**
 *Submitted for verification at Etherscan.io on 2021-06-15
*/

// SPDX-License-Identifier: Unlicensed
pragma solidity ^0.8.0;

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

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

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

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}  

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

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

contract LICKnRORY is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
    mapping (address => uint) private cooldown;

    address[] private _excluded;
    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 1e15 * 1e9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    string private constant _name = "LickAndRorty";
    string private constant _symbol = 'LICKnRORY';
    uint8 private constant _decimals = 9;
    uint256 private _taxFee = 4;
    uint256 private _teamFee = 20;
    uint256 private _previousTaxFee = _taxFee;
    uint256 private _previousteamFee = _teamFee;
    address payable private _marketingWalletAddress;
    IUniswapV2Router02 private uniswapV2Router;
    address private uniswapV2Pair;
    bool private tradingOpen;
    bool private inSwap = false;
    bool private swapEnabled = false;
    bool private cooldownEnabled = false;
    uint256 private _maxTxAmount = _tTotal;

    event MaxTxAmountUpdated(uint _maxTxAmount);

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

    constructor ()  {
        _marketingWalletAddress = payable(0xCAd34174C299c9C0915fDD924C8b3b174aD21B83);
        _rOwned[_msgSender()] = _rTotal;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_marketingWalletAddress] = true;
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

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

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

    function decimals() public pure returns (uint8) {
        return _decimals;
    }

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

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

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

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

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

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

    function setCooldownEnabled(bool onoff) external onlyOwner() {
        cooldownEnabled = onoff;
    }

    function tokenFromReflection(uint256 rAmount) private view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }

    function removeAllFee() private {
        if(_taxFee == 0 && _teamFee == 0) return;
        _previousTaxFee = _taxFee;
        _previousteamFee = _teamFee;
        _taxFee = 0;
        _teamFee = 0;
    }
    
    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _teamFee = _previousteamFee;
    }

    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");
        
        if (from != owner() && to != owner()) {
            if (cooldownEnabled) {
                if (from != address(this) && to != address(this) && from != address(uniswapV2Router) && to != address(uniswapV2Router)) {
                    require(_msgSender() == address(uniswapV2Router) || _msgSender() == uniswapV2Pair,"ERR: Uniswap only");
                }
            }
            require(amount <= _maxTxAmount);

            if (from == uniswapV2Pair && to != address(uniswapV2Router) && ! _isExcludedFromFee[to] && cooldownEnabled) {
                require(cooldown[to] < block.timestamp);
                cooldown[to] = block.timestamp + (30 seconds);
            }
            uint256 contractTokenBalance = balanceOf(address(this));
            if (!inSwap && from != uniswapV2Pair && swapEnabled) {
                swapTokensForEth(contractTokenBalance);
                uint256 contractETHBalance = address(this).balance;
                if(contractETHBalance > 0) {
                    sendETHToFee(address(this).balance);
                }
            }
        }
        bool takeFee = true;

        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }
		
        _tokenTransfer(from,to,amount,takeFee);
    }

    function swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }
        
    function sendETHToFee(uint256 amount) private {
        _marketingWalletAddress.transfer(amount.div(2));
    }
    
    function manualswap() external {
        require(_msgSender() == _marketingWalletAddress);
        uint256 contractBalance = balanceOf(address(this));
        swapTokensForEth(contractBalance);
    }
    
    function manualsend() external {
        require(_msgSender() == _marketingWalletAddress);
        uint256 contractETHBalance = address(this).balance;
        sendETHToFee(contractETHBalance);
    }
        
    function openTrading() external onlyOwner() {
        require(!tradingOpen,"trading is already open");
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Router = _uniswapV2Router;
        _approve(address(this), address(uniswapV2Router), _tTotal);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router.addLiquidityETH{value: address(this).balance}(address(this),balanceOf(address(this)),0,0,owner(),block.timestamp);
        swapEnabled = true;
        cooldownEnabled = true;
        _maxTxAmount = 5e12 * 1e9;
        tradingOpen = true;
        IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max);
    }
        
    function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee) private {
        if(!takeFee)
            removeAllFee();
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
        if(!takeFee)
            restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tTeam) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); 
        _takeTeam(tTeam); 
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tTeam) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);    
        _takeTeam(tTeam);           
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tTeam) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); 
        _takeTeam(tTeam);   
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tTeam) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
        _takeTeam(tTeam);         
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _takeTeam(uint256 tTeam) private {
        uint256 currentRate =  _getRate();
        uint256 rTeam = tTeam.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rTeam);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tTeam);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    receive() external payable {}

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tTeam) = _getTValues(tAmount, _taxFee, _teamFee);
        uint256 currentRate =  _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tTeam, currentRate);
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tTeam);
    }

    function _getTValues(uint256 tAmount, uint256 taxFee, uint256 TeamFee) private pure returns (uint256, uint256, uint256) {
        uint256 tFee = tAmount.mul(taxFee).div(100);
        uint256 tTeam = tAmount.mul(TeamFee).div(100);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tTeam);
        return (tTransferAmount, tFee, tTeam);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tTeam, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rTeam = tTeam.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rTeam);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
        
    function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() {
        require(maxTxPercent > 0, "Amount must be greater than 0");
        _maxTxAmount = _tTotal.mul(maxTxPercent).div(10**2);
        emit MaxTxAmountUpdated(_maxTxAmount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"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":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"MaxTxAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"manualsend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualswap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setCooldownEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405269d3c21bcecceda10000006000196200001e919062000471565b6000196200002d91906200042c565b6008556004600a556014600b55600a54600c55600b54600d556000601060156101000a81548160ff0219169083151502179055506000601060166101000a81548160ff0219169083151502179055506000601060176101000a81548160ff02191690831515021790555069d3c21bcecceda1000000601155348015620000b257600080fd5b506000620000c5620003cd60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35073cad34174c299c9c0915fdd924c8b3b174ad21b83600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060085460016000620001cf620003cd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016004600062000223620003d560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160046000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000356620003cd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef69d3c21bcecceda1000000604051620003bf91906200040f565b60405180910390a362000507565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620004098162000467565b82525050565b6000602082019050620004266000830184620003fe565b92915050565b6000620004398262000467565b9150620004468362000467565b9250828210156200045c576200045b620004a9565b5b828203905092915050565b6000819050919050565b60006200047e8262000467565b91506200048b8362000467565b9250826200049e576200049d620004d8565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b61404280620005176000396000f3fe6080604052600436106101025760003560e01c8063715018a611610095578063c3c8cd8011610064578063c3c8cd8014610330578063c9567bf914610347578063d543dbeb1461035e578063dd62ed3e14610387578063f2fde38b146103c457610109565b8063715018a6146102865780638da5cb5b1461029d57806395d89b41146102c8578063a9059cbb146102f357610109565b8063313ce567116100d1578063313ce567146101de5780635932ead1146102095780636fc3eaec1461023257806370a082311461024957610109565b806306fdde031461010e578063095ea7b31461013957806318160ddd1461017657806323b872dd146101a157610109565b3661010957005b600080fd5b34801561011a57600080fd5b506101236103ed565b6040516101309190613ad1565b60405180910390f35b34801561014557600080fd5b50610160600480360381019061015b919061340f565b61042a565b60405161016d9190613ab6565b60405180910390f35b34801561018257600080fd5b5061018b610448565b6040516101989190613c53565b60405180910390f35b3480156101ad57600080fd5b506101c860048036038101906101c391906133c0565b61045a565b6040516101d59190613ab6565b60405180910390f35b3480156101ea57600080fd5b506101f3610533565b6040516102009190613cc8565b60405180910390f35b34801561021557600080fd5b50610230600480360381019061022b919061344b565b61053c565b005b34801561023e57600080fd5b506102476105d5565b005b34801561025557600080fd5b50610270600480360381019061026b9190613332565b610647565b60405161027d9190613c53565b60405180910390f35b34801561029257600080fd5b5061029b610732565b005b3480156102a957600080fd5b506102b261086c565b6040516102bf91906139e8565b60405180910390f35b3480156102d457600080fd5b506102dd610895565b6040516102ea9190613ad1565b60405180910390f35b3480156102ff57600080fd5b5061031a6004803603810190610315919061340f565b6108d2565b6040516103279190613ab6565b60405180910390f35b34801561033c57600080fd5b506103456108f0565b005b34801561035357600080fd5b5061035c61096a565b005b34801561036a57600080fd5b506103856004803603810190610380919061349d565b610eb0565b005b34801561039357600080fd5b506103ae60048036038101906103a99190613384565b610fe1565b6040516103bb9190613c53565b60405180910390f35b3480156103d057600080fd5b506103eb60048036038101906103e69190613332565b611068565b005b60606040518060400160405280600c81526020017f4c69636b416e64526f7274790000000000000000000000000000000000000000815250905090565b600061043e610437611211565b8484611219565b6001905092915050565b600069d3c21bcecceda1000000905090565b60006104678484846113e4565b61052884610473611211565b61052385604051806060016040528060288152602001613fe560289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006104d9611211565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611af69092919063ffffffff16565b611219565b600190509392505050565b60006009905090565b610544611211565b73ffffffffffffffffffffffffffffffffffffffff1661056261086c565b73ffffffffffffffffffffffffffffffffffffffff16146105b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105af90613b93565b60405180910390fd5b80601060176101000a81548160ff02191690831515021790555050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610616611211565b73ffffffffffffffffffffffffffffffffffffffff161461063657600080fd5b600047905061064481611b4b565b50565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156106e257600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061072d565b61072a600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bca565b90505b919050565b61073a611211565b73ffffffffffffffffffffffffffffffffffffffff1661075861086c565b73ffffffffffffffffffffffffffffffffffffffff16146107ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a590613b93565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600981526020017f4c49434b6e524f52590000000000000000000000000000000000000000000000815250905090565b60006108e66108df611211565b84846113e4565b6001905092915050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610931611211565b73ffffffffffffffffffffffffffffffffffffffff161461095157600080fd5b600061095c30610647565b905061096781611c38565b50565b610972611211565b73ffffffffffffffffffffffffffffffffffffffff1661099061086c565b73ffffffffffffffffffffffffffffffffffffffff16146109e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109dd90613b93565b60405180910390fd5b601060149054906101000a900460ff1615610a36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2d90613c13565b60405180910390fd5b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905080600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610ac730600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1669d3c21bcecceda1000000611219565b8073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610b0d57600080fd5b505afa158015610b21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b45919061335b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610ba757600080fd5b505afa158015610bbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bdf919061335b565b6040518363ffffffff1660e01b8152600401610bfc929190613a03565b602060405180830381600087803b158015610c1657600080fd5b505af1158015610c2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4e919061335b565b601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730610cd730610647565b600080610ce261086c565b426040518863ffffffff1660e01b8152600401610d0496959493929190613a55565b6060604051808303818588803b158015610d1d57600080fd5b505af1158015610d31573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610d5691906134c6565b5050506001601060166101000a81548160ff0219169083151502179055506001601060176101000a81548160ff02191690831515021790555069010f0cf064dd592000006011819055506001601060146101000a81548160ff021916908315150217905550601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401610e5a929190613a2c565b602060405180830381600087803b158015610e7457600080fd5b505af1158015610e88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eac9190613474565b5050565b610eb8611211565b73ffffffffffffffffffffffffffffffffffffffff16610ed661086c565b73ffffffffffffffffffffffffffffffffffffffff1614610f2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2390613b93565b60405180910390fd5b60008111610f6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6690613b73565b60405180910390fd5b610f9f6064610f918369d3c21bcecceda1000000611f3290919063ffffffff16565b611f4890919063ffffffff16565b6011819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf601154604051610fd69190613c53565b60405180910390a150565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611070611211565b73ffffffffffffffffffffffffffffffffffffffff1661108e61086c565b73ffffffffffffffffffffffffffffffffffffffff16146110e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110db90613b93565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611154576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114b90613b33565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611289576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128090613bf3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f090613b53565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516113d79190613c53565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611454576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144b90613bd3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bb90613af3565b60405180910390fd5b60008111611507576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fe90613bb3565b60405180910390fd5b61150f61086c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561157d575061154d61086c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611a3357601060179054906101000a900460ff16156117b0573073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156115ff57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156116595750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156116b35750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156117af57600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166116f9611211565b73ffffffffffffffffffffffffffffffffffffffff16148061176f5750601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611757611211565b73ffffffffffffffffffffffffffffffffffffffff16145b6117ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a590613c33565b60405180910390fd5b5b5b6011548111156117bf57600080fd5b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561186a5750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156118c05750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156118d85750601060179054906101000a900460ff165b156119795742600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541061192857600080fd5b601e426119359190613d38565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600061198430610647565b9050601060159054906101000a900460ff161580156119f15750601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015611a095750601060169054906101000a900460ff165b15611a3157611a1781611c38565b60004790506000811115611a2f57611a2e47611b4b565b5b505b505b600060019050600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611ada5750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611ae457600090505b611af084848484611f5e565b50505050565b6000838311158290611b3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b359190613ad1565b60405180910390fd5b5082840390509392505050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc611b9b600284611f4890919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015611bc6573d6000803e3d6000fd5b5050565b6000600854821115611c11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0890613b13565b60405180910390fd5b6000611c1b6121b5565b9050611c308184611f4890919063ffffffff16565b915050919050565b6001601060156101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115611c96577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611cc45781602001602082028036833780820191505090505b5090503081600081518110611d02577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611da457600080fd5b505afa158015611db8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ddc919061335b565b81600181518110611e16577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611e7d30600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611219565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401611ee1959493929190613c6e565b600060405180830381600087803b158015611efb57600080fd5b505af1158015611f0f573d6000803e3d6000fd5b50505050506000601060156101000a81548160ff02191690831515021790555050565b60008183611f409190613dbf565b905092915050565b60008183611f569190613d8e565b905092915050565b80611f6c57611f6b6121e0565b5b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561200f5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156120245761201f848484612223565b6121a1565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156120c75750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156120dc576120d7848484612483565b6121a0565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561217e5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156121935761218e8484846126e3565b61219f565b61219e8484846129d8565b5b5b5b806121af576121ae612ba3565b5b50505050565b60008060006121c2612bb7565b915091506121d98183611f4890919063ffffffff16565b9250505090565b6000600a541480156121f457506000600b54145b156121fe57612221565b600a54600c81905550600b54600d819055506000600a819055506000600b819055505b565b60008060008060008061223587612f22565b95509550955095509550955061229387600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f8a90919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061232886600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f8a90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506123bd85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fa090919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061240981612fb6565b612413848361315b565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516124709190613c53565b60405180910390a3505050505050505050565b60008060008060008061249587612f22565b9550955095509550955095506124f386600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f8a90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061258883600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fa090919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061261d85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fa090919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061266981612fb6565b612673848361315b565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516126d09190613c53565b60405180910390a3505050505050505050565b6000806000806000806126f587612f22565b95509550955095509550955061275387600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f8a90919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506127e886600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f8a90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061287d83600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fa090919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061291285600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fa090919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061295e81612fb6565b612968848361315b565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516129c59190613c53565b60405180910390a3505050505050505050565b6000806000806000806129ea87612f22565b955095509550955095509550612a4886600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f8a90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612add85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fa090919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612b2981612fb6565b612b33848361315b565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612b909190613c53565b60405180910390a3505050505050505050565b600c54600a81905550600d54600b81905550565b60008060006008549050600069d3c21bcecceda1000000905060005b600780549050811015612ed557826001600060078481548110612c1f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180612d335750816002600060078481548110612ccb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612d525760085469d3c21bcecceda100000094509450505050612f1e565b612e086001600060078481548110612d93577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612f8a90919063ffffffff16565b9250612ec06002600060078481548110612e4b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612f8a90919063ffffffff16565b91508080612ecd90613ee7565b915050612bd3565b50612ef569d3c21bcecceda1000000600854611f4890919063ffffffff16565b821015612f155760085469d3c21bcecceda1000000935093505050612f1e565b81819350935050505b9091565b6000806000806000806000806000612f3f8a600a54600b54613195565b9250925092506000612f4f6121b5565b90506000806000612f628e87878761322b565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b60008183612f989190613e19565b905092915050565b60008183612fae9190613d38565b905092915050565b6000612fc06121b5565b90506000612fd78284611f3290919063ffffffff16565b905061302b81600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fa090919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156131565761311283600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fa090919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61317082600854612f8a90919063ffffffff16565b60088190555061318b81600954612fa090919063ffffffff16565b6009819055505050565b6000806000806131c160646131b3888a611f3290919063ffffffff16565b611f4890919063ffffffff16565b905060006131eb60646131dd888b611f3290919063ffffffff16565b611f4890919063ffffffff16565b9050600061321482613206858c612f8a90919063ffffffff16565b612f8a90919063ffffffff16565b905080838395509550955050505093509350939050565b6000806000806132448589611f3290919063ffffffff16565b9050600061325b8689611f3290919063ffffffff16565b905060006132728789611f3290919063ffffffff16565b9050600061329b8261328d8587612f8a90919063ffffffff16565b612f8a90919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000813590506132c381613f9f565b92915050565b6000815190506132d881613f9f565b92915050565b6000813590506132ed81613fb6565b92915050565b60008151905061330281613fb6565b92915050565b60008135905061331781613fcd565b92915050565b60008151905061332c81613fcd565b92915050565b60006020828403121561334457600080fd5b6000613352848285016132b4565b91505092915050565b60006020828403121561336d57600080fd5b600061337b848285016132c9565b91505092915050565b6000806040838503121561339757600080fd5b60006133a5858286016132b4565b92505060206133b6858286016132b4565b9150509250929050565b6000806000606084860312156133d557600080fd5b60006133e3868287016132b4565b93505060206133f4868287016132b4565b925050604061340586828701613308565b9150509250925092565b6000806040838503121561342257600080fd5b6000613430858286016132b4565b925050602061344185828601613308565b9150509250929050565b60006020828403121561345d57600080fd5b600061346b848285016132de565b91505092915050565b60006020828403121561348657600080fd5b6000613494848285016132f3565b91505092915050565b6000602082840312156134af57600080fd5b60006134bd84828501613308565b91505092915050565b6000806000606084860312156134db57600080fd5b60006134e98682870161331d565b93505060206134fa8682870161331d565b925050604061350b8682870161331d565b9150509250925092565b6000613521838361352d565b60208301905092915050565b61353681613e4d565b82525050565b61354581613e4d565b82525050565b600061355682613cf3565b6135608185613d16565b935061356b83613ce3565b8060005b8381101561359c5781516135838882613515565b975061358e83613d09565b92505060018101905061356f565b5085935050505092915050565b6135b281613e5f565b82525050565b6135c181613ea2565b82525050565b60006135d282613cfe565b6135dc8185613d27565b93506135ec818560208601613eb4565b6135f581613f8e565b840191505092915050565b600061360d602383613d27565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613673602a83613d27565b91507f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008301527f65666c656374696f6e73000000000000000000000000000000000000000000006020830152604082019050919050565b60006136d9602683613d27565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061373f602283613d27565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006137a5601d83613d27565b91507f416d6f756e74206d7573742062652067726561746572207468616e20300000006000830152602082019050919050565b60006137e5602083613d27565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613825602983613d27565b91507f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008301527f7468616e207a65726f00000000000000000000000000000000000000000000006020830152604082019050919050565b600061388b602583613d27565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006138f1602483613d27565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613957601783613d27565b91507f74726164696e6720697320616c7265616479206f70656e0000000000000000006000830152602082019050919050565b6000613997601183613d27565b91507f4552523a20556e6973776170206f6e6c790000000000000000000000000000006000830152602082019050919050565b6139d381613e8b565b82525050565b6139e281613e95565b82525050565b60006020820190506139fd600083018461353c565b92915050565b6000604082019050613a18600083018561353c565b613a25602083018461353c565b9392505050565b6000604082019050613a41600083018561353c565b613a4e60208301846139ca565b9392505050565b600060c082019050613a6a600083018961353c565b613a7760208301886139ca565b613a8460408301876135b8565b613a9160608301866135b8565b613a9e608083018561353c565b613aab60a08301846139ca565b979650505050505050565b6000602082019050613acb60008301846135a9565b92915050565b60006020820190508181036000830152613aeb81846135c7565b905092915050565b60006020820190508181036000830152613b0c81613600565b9050919050565b60006020820190508181036000830152613b2c81613666565b9050919050565b60006020820190508181036000830152613b4c816136cc565b9050919050565b60006020820190508181036000830152613b6c81613732565b9050919050565b60006020820190508181036000830152613b8c81613798565b9050919050565b60006020820190508181036000830152613bac816137d8565b9050919050565b60006020820190508181036000830152613bcc81613818565b9050919050565b60006020820190508181036000830152613bec8161387e565b9050919050565b60006020820190508181036000830152613c0c816138e4565b9050919050565b60006020820190508181036000830152613c2c8161394a565b9050919050565b60006020820190508181036000830152613c4c8161398a565b9050919050565b6000602082019050613c6860008301846139ca565b92915050565b600060a082019050613c8360008301886139ca565b613c9060208301876135b8565b8181036040830152613ca2818661354b565b9050613cb1606083018561353c565b613cbe60808301846139ca565b9695505050505050565b6000602082019050613cdd60008301846139d9565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000613d4382613e8b565b9150613d4e83613e8b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613d8357613d82613f30565b5b828201905092915050565b6000613d9982613e8b565b9150613da483613e8b565b925082613db457613db3613f5f565b5b828204905092915050565b6000613dca82613e8b565b9150613dd583613e8b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e0e57613e0d613f30565b5b828202905092915050565b6000613e2482613e8b565b9150613e2f83613e8b565b925082821015613e4257613e41613f30565b5b828203905092915050565b6000613e5882613e6b565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000613ead82613e8b565b9050919050565b60005b83811015613ed2578082015181840152602081019050613eb7565b83811115613ee1576000848401525b50505050565b6000613ef282613e8b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613f2557613f24613f30565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000601f19601f8301169050919050565b613fa881613e4d565b8114613fb357600080fd5b50565b613fbf81613e5f565b8114613fca57600080fd5b50565b613fd681613e8b565b8114613fe157600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212203aaafbe862d65d134332553b0dc03a1eaeaf18dfe990a1d7ad771ff18f8dff6164736f6c63430008000033

Deployed Bytecode

0x6080604052600436106101025760003560e01c8063715018a611610095578063c3c8cd8011610064578063c3c8cd8014610330578063c9567bf914610347578063d543dbeb1461035e578063dd62ed3e14610387578063f2fde38b146103c457610109565b8063715018a6146102865780638da5cb5b1461029d57806395d89b41146102c8578063a9059cbb146102f357610109565b8063313ce567116100d1578063313ce567146101de5780635932ead1146102095780636fc3eaec1461023257806370a082311461024957610109565b806306fdde031461010e578063095ea7b31461013957806318160ddd1461017657806323b872dd146101a157610109565b3661010957005b600080fd5b34801561011a57600080fd5b506101236103ed565b6040516101309190613ad1565b60405180910390f35b34801561014557600080fd5b50610160600480360381019061015b919061340f565b61042a565b60405161016d9190613ab6565b60405180910390f35b34801561018257600080fd5b5061018b610448565b6040516101989190613c53565b60405180910390f35b3480156101ad57600080fd5b506101c860048036038101906101c391906133c0565b61045a565b6040516101d59190613ab6565b60405180910390f35b3480156101ea57600080fd5b506101f3610533565b6040516102009190613cc8565b60405180910390f35b34801561021557600080fd5b50610230600480360381019061022b919061344b565b61053c565b005b34801561023e57600080fd5b506102476105d5565b005b34801561025557600080fd5b50610270600480360381019061026b9190613332565b610647565b60405161027d9190613c53565b60405180910390f35b34801561029257600080fd5b5061029b610732565b005b3480156102a957600080fd5b506102b261086c565b6040516102bf91906139e8565b60405180910390f35b3480156102d457600080fd5b506102dd610895565b6040516102ea9190613ad1565b60405180910390f35b3480156102ff57600080fd5b5061031a6004803603810190610315919061340f565b6108d2565b6040516103279190613ab6565b60405180910390f35b34801561033c57600080fd5b506103456108f0565b005b34801561035357600080fd5b5061035c61096a565b005b34801561036a57600080fd5b506103856004803603810190610380919061349d565b610eb0565b005b34801561039357600080fd5b506103ae60048036038101906103a99190613384565b610fe1565b6040516103bb9190613c53565b60405180910390f35b3480156103d057600080fd5b506103eb60048036038101906103e69190613332565b611068565b005b60606040518060400160405280600c81526020017f4c69636b416e64526f7274790000000000000000000000000000000000000000815250905090565b600061043e610437611211565b8484611219565b6001905092915050565b600069d3c21bcecceda1000000905090565b60006104678484846113e4565b61052884610473611211565b61052385604051806060016040528060288152602001613fe560289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006104d9611211565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611af69092919063ffffffff16565b611219565b600190509392505050565b60006009905090565b610544611211565b73ffffffffffffffffffffffffffffffffffffffff1661056261086c565b73ffffffffffffffffffffffffffffffffffffffff16146105b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105af90613b93565b60405180910390fd5b80601060176101000a81548160ff02191690831515021790555050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610616611211565b73ffffffffffffffffffffffffffffffffffffffff161461063657600080fd5b600047905061064481611b4b565b50565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156106e257600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061072d565b61072a600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bca565b90505b919050565b61073a611211565b73ffffffffffffffffffffffffffffffffffffffff1661075861086c565b73ffffffffffffffffffffffffffffffffffffffff16146107ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a590613b93565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600981526020017f4c49434b6e524f52590000000000000000000000000000000000000000000000815250905090565b60006108e66108df611211565b84846113e4565b6001905092915050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610931611211565b73ffffffffffffffffffffffffffffffffffffffff161461095157600080fd5b600061095c30610647565b905061096781611c38565b50565b610972611211565b73ffffffffffffffffffffffffffffffffffffffff1661099061086c565b73ffffffffffffffffffffffffffffffffffffffff16146109e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109dd90613b93565b60405180910390fd5b601060149054906101000a900460ff1615610a36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2d90613c13565b60405180910390fd5b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905080600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610ac730600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1669d3c21bcecceda1000000611219565b8073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610b0d57600080fd5b505afa158015610b21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b45919061335b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610ba757600080fd5b505afa158015610bbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bdf919061335b565b6040518363ffffffff1660e01b8152600401610bfc929190613a03565b602060405180830381600087803b158015610c1657600080fd5b505af1158015610c2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4e919061335b565b601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730610cd730610647565b600080610ce261086c565b426040518863ffffffff1660e01b8152600401610d0496959493929190613a55565b6060604051808303818588803b158015610d1d57600080fd5b505af1158015610d31573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610d5691906134c6565b5050506001601060166101000a81548160ff0219169083151502179055506001601060176101000a81548160ff02191690831515021790555069010f0cf064dd592000006011819055506001601060146101000a81548160ff021916908315150217905550601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401610e5a929190613a2c565b602060405180830381600087803b158015610e7457600080fd5b505af1158015610e88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eac9190613474565b5050565b610eb8611211565b73ffffffffffffffffffffffffffffffffffffffff16610ed661086c565b73ffffffffffffffffffffffffffffffffffffffff1614610f2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2390613b93565b60405180910390fd5b60008111610f6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6690613b73565b60405180910390fd5b610f9f6064610f918369d3c21bcecceda1000000611f3290919063ffffffff16565b611f4890919063ffffffff16565b6011819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf601154604051610fd69190613c53565b60405180910390a150565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611070611211565b73ffffffffffffffffffffffffffffffffffffffff1661108e61086c565b73ffffffffffffffffffffffffffffffffffffffff16146110e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110db90613b93565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611154576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114b90613b33565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611289576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128090613bf3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f090613b53565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516113d79190613c53565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611454576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144b90613bd3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bb90613af3565b60405180910390fd5b60008111611507576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fe90613bb3565b60405180910390fd5b61150f61086c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561157d575061154d61086c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611a3357601060179054906101000a900460ff16156117b0573073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156115ff57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156116595750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156116b35750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156117af57600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166116f9611211565b73ffffffffffffffffffffffffffffffffffffffff16148061176f5750601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611757611211565b73ffffffffffffffffffffffffffffffffffffffff16145b6117ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a590613c33565b60405180910390fd5b5b5b6011548111156117bf57600080fd5b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561186a5750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156118c05750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156118d85750601060179054906101000a900460ff165b156119795742600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541061192857600080fd5b601e426119359190613d38565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600061198430610647565b9050601060159054906101000a900460ff161580156119f15750601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015611a095750601060169054906101000a900460ff165b15611a3157611a1781611c38565b60004790506000811115611a2f57611a2e47611b4b565b5b505b505b600060019050600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611ada5750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611ae457600090505b611af084848484611f5e565b50505050565b6000838311158290611b3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b359190613ad1565b60405180910390fd5b5082840390509392505050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc611b9b600284611f4890919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015611bc6573d6000803e3d6000fd5b5050565b6000600854821115611c11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0890613b13565b60405180910390fd5b6000611c1b6121b5565b9050611c308184611f4890919063ffffffff16565b915050919050565b6001601060156101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115611c96577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611cc45781602001602082028036833780820191505090505b5090503081600081518110611d02577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611da457600080fd5b505afa158015611db8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ddc919061335b565b81600181518110611e16577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611e7d30600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611219565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401611ee1959493929190613c6e565b600060405180830381600087803b158015611efb57600080fd5b505af1158015611f0f573d6000803e3d6000fd5b50505050506000601060156101000a81548160ff02191690831515021790555050565b60008183611f409190613dbf565b905092915050565b60008183611f569190613d8e565b905092915050565b80611f6c57611f6b6121e0565b5b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561200f5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156120245761201f848484612223565b6121a1565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156120c75750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156120dc576120d7848484612483565b6121a0565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561217e5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156121935761218e8484846126e3565b61219f565b61219e8484846129d8565b5b5b5b806121af576121ae612ba3565b5b50505050565b60008060006121c2612bb7565b915091506121d98183611f4890919063ffffffff16565b9250505090565b6000600a541480156121f457506000600b54145b156121fe57612221565b600a54600c81905550600b54600d819055506000600a819055506000600b819055505b565b60008060008060008061223587612f22565b95509550955095509550955061229387600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f8a90919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061232886600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f8a90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506123bd85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fa090919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061240981612fb6565b612413848361315b565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516124709190613c53565b60405180910390a3505050505050505050565b60008060008060008061249587612f22565b9550955095509550955095506124f386600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f8a90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061258883600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fa090919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061261d85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fa090919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061266981612fb6565b612673848361315b565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516126d09190613c53565b60405180910390a3505050505050505050565b6000806000806000806126f587612f22565b95509550955095509550955061275387600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f8a90919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506127e886600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f8a90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061287d83600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fa090919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061291285600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fa090919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061295e81612fb6565b612968848361315b565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516129c59190613c53565b60405180910390a3505050505050505050565b6000806000806000806129ea87612f22565b955095509550955095509550612a4886600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f8a90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612add85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fa090919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612b2981612fb6565b612b33848361315b565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612b909190613c53565b60405180910390a3505050505050505050565b600c54600a81905550600d54600b81905550565b60008060006008549050600069d3c21bcecceda1000000905060005b600780549050811015612ed557826001600060078481548110612c1f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180612d335750816002600060078481548110612ccb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612d525760085469d3c21bcecceda100000094509450505050612f1e565b612e086001600060078481548110612d93577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612f8a90919063ffffffff16565b9250612ec06002600060078481548110612e4b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612f8a90919063ffffffff16565b91508080612ecd90613ee7565b915050612bd3565b50612ef569d3c21bcecceda1000000600854611f4890919063ffffffff16565b821015612f155760085469d3c21bcecceda1000000935093505050612f1e565b81819350935050505b9091565b6000806000806000806000806000612f3f8a600a54600b54613195565b9250925092506000612f4f6121b5565b90506000806000612f628e87878761322b565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b60008183612f989190613e19565b905092915050565b60008183612fae9190613d38565b905092915050565b6000612fc06121b5565b90506000612fd78284611f3290919063ffffffff16565b905061302b81600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fa090919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156131565761311283600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fa090919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61317082600854612f8a90919063ffffffff16565b60088190555061318b81600954612fa090919063ffffffff16565b6009819055505050565b6000806000806131c160646131b3888a611f3290919063ffffffff16565b611f4890919063ffffffff16565b905060006131eb60646131dd888b611f3290919063ffffffff16565b611f4890919063ffffffff16565b9050600061321482613206858c612f8a90919063ffffffff16565b612f8a90919063ffffffff16565b905080838395509550955050505093509350939050565b6000806000806132448589611f3290919063ffffffff16565b9050600061325b8689611f3290919063ffffffff16565b905060006132728789611f3290919063ffffffff16565b9050600061329b8261328d8587612f8a90919063ffffffff16565b612f8a90919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000813590506132c381613f9f565b92915050565b6000815190506132d881613f9f565b92915050565b6000813590506132ed81613fb6565b92915050565b60008151905061330281613fb6565b92915050565b60008135905061331781613fcd565b92915050565b60008151905061332c81613fcd565b92915050565b60006020828403121561334457600080fd5b6000613352848285016132b4565b91505092915050565b60006020828403121561336d57600080fd5b600061337b848285016132c9565b91505092915050565b6000806040838503121561339757600080fd5b60006133a5858286016132b4565b92505060206133b6858286016132b4565b9150509250929050565b6000806000606084860312156133d557600080fd5b60006133e3868287016132b4565b93505060206133f4868287016132b4565b925050604061340586828701613308565b9150509250925092565b6000806040838503121561342257600080fd5b6000613430858286016132b4565b925050602061344185828601613308565b9150509250929050565b60006020828403121561345d57600080fd5b600061346b848285016132de565b91505092915050565b60006020828403121561348657600080fd5b6000613494848285016132f3565b91505092915050565b6000602082840312156134af57600080fd5b60006134bd84828501613308565b91505092915050565b6000806000606084860312156134db57600080fd5b60006134e98682870161331d565b93505060206134fa8682870161331d565b925050604061350b8682870161331d565b9150509250925092565b6000613521838361352d565b60208301905092915050565b61353681613e4d565b82525050565b61354581613e4d565b82525050565b600061355682613cf3565b6135608185613d16565b935061356b83613ce3565b8060005b8381101561359c5781516135838882613515565b975061358e83613d09565b92505060018101905061356f565b5085935050505092915050565b6135b281613e5f565b82525050565b6135c181613ea2565b82525050565b60006135d282613cfe565b6135dc8185613d27565b93506135ec818560208601613eb4565b6135f581613f8e565b840191505092915050565b600061360d602383613d27565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613673602a83613d27565b91507f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008301527f65666c656374696f6e73000000000000000000000000000000000000000000006020830152604082019050919050565b60006136d9602683613d27565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061373f602283613d27565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006137a5601d83613d27565b91507f416d6f756e74206d7573742062652067726561746572207468616e20300000006000830152602082019050919050565b60006137e5602083613d27565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613825602983613d27565b91507f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008301527f7468616e207a65726f00000000000000000000000000000000000000000000006020830152604082019050919050565b600061388b602583613d27565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006138f1602483613d27565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613957601783613d27565b91507f74726164696e6720697320616c7265616479206f70656e0000000000000000006000830152602082019050919050565b6000613997601183613d27565b91507f4552523a20556e6973776170206f6e6c790000000000000000000000000000006000830152602082019050919050565b6139d381613e8b565b82525050565b6139e281613e95565b82525050565b60006020820190506139fd600083018461353c565b92915050565b6000604082019050613a18600083018561353c565b613a25602083018461353c565b9392505050565b6000604082019050613a41600083018561353c565b613a4e60208301846139ca565b9392505050565b600060c082019050613a6a600083018961353c565b613a7760208301886139ca565b613a8460408301876135b8565b613a9160608301866135b8565b613a9e608083018561353c565b613aab60a08301846139ca565b979650505050505050565b6000602082019050613acb60008301846135a9565b92915050565b60006020820190508181036000830152613aeb81846135c7565b905092915050565b60006020820190508181036000830152613b0c81613600565b9050919050565b60006020820190508181036000830152613b2c81613666565b9050919050565b60006020820190508181036000830152613b4c816136cc565b9050919050565b60006020820190508181036000830152613b6c81613732565b9050919050565b60006020820190508181036000830152613b8c81613798565b9050919050565b60006020820190508181036000830152613bac816137d8565b9050919050565b60006020820190508181036000830152613bcc81613818565b9050919050565b60006020820190508181036000830152613bec8161387e565b9050919050565b60006020820190508181036000830152613c0c816138e4565b9050919050565b60006020820190508181036000830152613c2c8161394a565b9050919050565b60006020820190508181036000830152613c4c8161398a565b9050919050565b6000602082019050613c6860008301846139ca565b92915050565b600060a082019050613c8360008301886139ca565b613c9060208301876135b8565b8181036040830152613ca2818661354b565b9050613cb1606083018561353c565b613cbe60808301846139ca565b9695505050505050565b6000602082019050613cdd60008301846139d9565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000613d4382613e8b565b9150613d4e83613e8b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613d8357613d82613f30565b5b828201905092915050565b6000613d9982613e8b565b9150613da483613e8b565b925082613db457613db3613f5f565b5b828204905092915050565b6000613dca82613e8b565b9150613dd583613e8b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e0e57613e0d613f30565b5b828202905092915050565b6000613e2482613e8b565b9150613e2f83613e8b565b925082821015613e4257613e41613f30565b5b828203905092915050565b6000613e5882613e6b565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000613ead82613e8b565b9050919050565b60005b83811015613ed2578082015181840152602081019050613eb7565b83811115613ee1576000848401525b50505050565b6000613ef282613e8b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613f2557613f24613f30565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000601f19601f8301169050919050565b613fa881613e4d565b8114613fb357600080fd5b50565b613fbf81613e5f565b8114613fca57600080fd5b50565b613fd681613e8b565b8114613fe157600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212203aaafbe862d65d134332553b0dc03a1eaeaf18dfe990a1d7ad771ff18f8dff6164736f6c63430008000033

Deployed Bytecode Sourcemap

18247:13578:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20109:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21021:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20386:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21190:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20295:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21511:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25029:202;;;;;;;;;;;;;:::i;:::-;;20489:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16929:148;;;;;;;;;;;;;:::i;:::-;;16278:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20200;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20695:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24814:203;;;;;;;;;;;;;:::i;:::-;;25247:807;;;;;;;;;;;;;:::i;:::-;;31567:255;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20870:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17232:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20109:83;20146:13;20179:5;;;;;;;;;;;;;;;;;20172:12;;20109:83;:::o;21021:161::-;21096:4;21113:39;21122:12;:10;:12::i;:::-;21136:7;21145:6;21113:8;:39::i;:::-;21170:4;21163:11;;21021:161;;;;:::o;20386:95::-;20439:7;18826:10;20459:14;;20386:95;:::o;21190:313::-;21288:4;21305:36;21315:6;21323:9;21334:6;21305:9;:36::i;:::-;21352:121;21361:6;21369:12;:10;:12::i;:::-;21383:89;21421:6;21383:89;;;;;;;;;;;;;;;;;:11;:19;21395:6;21383:19;;;;;;;;;;;;;;;:33;21403:12;:10;:12::i;:::-;21383:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;21352:8;:121::i;:::-;21491:4;21484:11;;21190:313;;;;;:::o;20295:83::-;20336:5;19072:1;20354:16;;20295:83;:::o;21511:103::-;16509:12;:10;:12::i;:::-;16498:23;;:7;:5;:7::i;:::-;:23;;;16490:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21601:5:::1;21583:15;;:23;;;;;;;;;;;;;;;;;;21511:103:::0;:::o;25029:202::-;25095:23;;;;;;;;;;;25079:39;;:12;:10;:12::i;:::-;:39;;;25071:48;;;;;;25130:26;25159:21;25130:50;;25191:32;25204:18;25191:12;:32::i;:::-;25029:202;:::o;20489:198::-;20555:7;20579:11;:20;20591:7;20579:20;;;;;;;;;;;;;;;;;;;;;;;;;20575:49;;;20608:7;:16;20616:7;20608:16;;;;;;;;;;;;;;;;20601:23;;;;20575:49;20642:37;20662:7;:16;20670:7;20662:16;;;;;;;;;;;;;;;;20642:19;:37::i;:::-;20635:44;;20489:198;;;;:::o;16929:148::-;16509:12;:10;:12::i;:::-;16498:23;;:7;:5;:7::i;:::-;:23;;;16490:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17036:1:::1;16999:40;;17020:6;::::0;::::1;;;;;;;;16999:40;;;;;;;;;;;;17067:1;17050:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;16929:148::o:0;16278:87::-;16324:7;16351:6;;;;;;;;;;;16344:13;;16278:87;:::o;20200:::-;20239:13;20272:7;;;;;;;;;;;;;;;;;20265:14;;20200:87;:::o;20695:167::-;20773:4;20790:42;20800:12;:10;:12::i;:::-;20814:9;20825:6;20790:9;:42::i;:::-;20850:4;20843:11;;20695:167;;;;:::o;24814:203::-;24880:23;;;;;;;;;;;24864:39;;:12;:10;:12::i;:::-;:39;;;24856:48;;;;;;24915:23;24941:24;24959:4;24941:9;:24::i;:::-;24915:50;;24976:33;24993:15;24976:16;:33::i;:::-;24814:203;:::o;25247:807::-;16509:12;:10;:12::i;:::-;16498:23;;:7;:5;:7::i;:::-;:23;;;16490:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25311:11:::1;;;;;;;;;;;25310:12;25302:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;25360:35;25417:42;25360:100;;25489:16;25471:15;;:34;;;;;;;;;;;;;;;;;;25516:58;25533:4;25548:15;;;;;;;;;;;18826:10;25516:8;:58::i;:::-;25619:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25601:56;;;25666:4;25673:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25601:96;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25585:13;;:112;;;;;;;;;;;;;;;;;;25708:15;;;;;;;;;;;:31;;;25747:21;25778:4;25784:24;25802:4;25784:9;:24::i;:::-;25809:1;25811::::0;25813:7:::1;:5;:7::i;:::-;25821:15;25708:129;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;25862:4;25848:11;;:18;;;;;;;;;;;;;;;;;;25895:4;25877:15;;:22;;;;;;;;;;;;;;;;;;25925:10;25910:12;:25;;;;25960:4;25946:11;;:18;;;;;;;;;;;;;;;;;;25982:13;;;;;;;;;;;25975:29;;;26013:15;;;;;;;;;;;26031:14;25975:71;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16569:1;25247:807::o:0;31567:255::-;16509:12;:10;:12::i;:::-;16498:23;;:7;:5;:7::i;:::-;:23;;;16490:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31669:1:::1;31654:12;:16;31646:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;31730:36;31760:5;31730:25;31742:12;18826:10;31730:11;;:25;;;;:::i;:::-;:29;;:36;;;;:::i;:::-;31715:12;:51;;;;31782:32;31801:12;;31782:32;;;;;;:::i;:::-;;;;;;;;31567:255:::0;:::o;20870:143::-;20951:7;20978:11;:18;20990:5;20978:18;;;;;;;;;;;;;;;:27;20997:7;20978:27;;;;;;;;;;;;;;;;20971:34;;20870:143;;;;:::o;17232:244::-;16509:12;:10;:12::i;:::-;16498:23;;:7;:5;:7::i;:::-;:23;;;16490:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17341:1:::1;17321:22;;:8;:22;;;;17313:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;17431:8;17402:38;;17423:6;::::0;::::1;;;;;;;;17402:38;;;;;;;;;;;;17460:8;17451:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;17232:244:::0;:::o;242:98::-;295:7;322:10;315:17;;242:98;:::o;22229:335::-;22339:1;22322:19;;:5;:19;;;;22314:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22420:1;22401:21;;:7;:21;;;;22393:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22502:6;22472:11;:18;22484:5;22472:18;;;;;;;;;;;;;;;:27;22491:7;22472:27;;;;;;;;;;;;;;;:36;;;;22540:7;22524:32;;22533:5;22524:32;;;22549:6;22524:32;;;;;;:::i;:::-;;;;;;;;22229:335;;;:::o;22572:1611::-;22676:1;22660:18;;:4;:18;;;;22652:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22753:1;22739:16;;:2;:16;;;;22731:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;22823:1;22814:6;:10;22806:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;22903:7;:5;:7::i;:::-;22895:15;;:4;:15;;;;:32;;;;;22920:7;:5;:7::i;:::-;22914:13;;:2;:13;;;;22895:32;22891:1094;;;22948:15;;;;;;;;;;;22944:320;;;23004:4;22988:21;;:4;:21;;;;:44;;;;;23027:4;23013:19;;:2;:19;;;;22988:44;:80;;;;;23052:15;;;;;;;;;;;23036:32;;:4;:32;;;;22988:80;:114;;;;;23086:15;;;;;;;;;;;23072:30;;:2;:30;;;;22988:114;22984:265;;;23159:15;;;;;;;;;;;23135:40;;:12;:10;:12::i;:::-;:40;;;:73;;;;23195:13;;;;;;;;;;;23179:29;;:12;:10;:12::i;:::-;:29;;;23135:73;23127:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;22984:265;22944:320;23296:12;;23286:6;:22;;23278:31;;;;;;23338:13;;;;;;;;;;;23330:21;;:4;:21;;;:55;;;;;23369:15;;;;;;;;;;;23355:30;;:2;:30;;;;23330:55;:83;;;;;23391:18;:22;23410:2;23391:22;;;;;;;;;;;;;;;;;;;;;;;;;23389:24;23330:83;:102;;;;;23417:15;;;;;;;;;;;23330:102;23326:246;;;23476:15;23461:8;:12;23470:2;23461:12;;;;;;;;;;;;;;;;:30;23453:39;;;;;;23545:10;23526:15;:30;;;;:::i;:::-;23511:8;:12;23520:2;23511:12;;;;;;;;;;;;;;;:45;;;;23326:246;23586:28;23617:24;23635:4;23617:9;:24::i;:::-;23586:55;;23661:6;;;;;;;;;;;23660:7;:32;;;;;23679:13;;;;;;;;;;;23671:21;;:4;:21;;;;23660:32;:47;;;;;23696:11;;;;;;;;;;;23660:47;23656:318;;;23728:38;23745:20;23728:16;:38::i;:::-;23785:26;23814:21;23785:50;;23878:1;23857:18;:22;23854:105;;;23904:35;23917:21;23904:12;:35::i;:::-;23854:105;23656:318;;22891:1094;;23995:12;24010:4;23995:19;;24030:18;:24;24049:4;24030:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;24058:18;:22;24077:2;24058:22;;;;;;;;;;;;;;;;;;;;;;;;;24030:50;24027:96;;;24106:5;24096:15;;24027:96;24137:38;24152:4;24157:2;24160:6;24167:7;24137:14;:38::i;:::-;22572:1611;;;;:::o;5897:206::-;5983:7;6041:1;6036;:6;;6044:12;6028:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;6083:1;6079;:5;6072:12;;5897:206;;;;;:::o;24690:112::-;24747:23;;;;;;;;;;;:32;;:47;24780:13;24791:1;24780:6;:10;;:13;;;;:::i;:::-;24747:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24690:112;:::o;21622:254::-;21689:7;21728;;21717;:18;;21709:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21793:19;21816:10;:8;:10::i;:::-;21793:33;;21844:24;21856:11;21844:7;:11;;:24;;;;:::i;:::-;21837:31;;;21622:254;;;:::o;24191:483::-;19674:4;19665:6;;:13;;;;;;;;;;;;;;;;;;24269:21:::1;24307:1;24293:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24269:40;;24338:4;24320;24325:1;24320:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;::::0;::::1;24364:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24354:4;24359:1;24354:7;;;;;;;;;;;;;;;;;;;;;:32;;;;;;;;;::::0;::::1;24397:62;24414:4;24429:15;;;;;;;;;;;24447:11;24397:8;:62::i;:::-;24470:15;;;;;;;;;;;:66;;;24551:11;24577:1;24593:4;24620;24640:15;24470:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;19689:1;19710:5:::0;19701:6;;:14;;;;;;;;;;;;;;;;;;24191:483;:::o;4356:98::-;4414:7;4445:1;4441;:5;;;;:::i;:::-;4434:12;;4356:98;;;;:::o;4755:::-;4813:7;4844:1;4840;:5;;;;:::i;:::-;4833:12;;4755:98;;;;:::o;26070:685::-;26182:7;26178:40;;26204:14;:12;:14::i;:::-;26178:40;26233:11;:19;26245:6;26233:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;26257:11;:22;26269:9;26257:22;;;;;;;;;;;;;;;;;;;;;;;;;26256:23;26233:46;26229:467;;;26296:48;26318:6;26326:9;26337:6;26296:21;:48::i;:::-;26229:467;;;26367:11;:19;26379:6;26367:19;;;;;;;;;;;;;;;;;;;;;;;;;26366:20;:46;;;;;26390:11;:22;26402:9;26390:22;;;;;;;;;;;;;;;;;;;;;;;;;26366:46;26362:334;;;26429:46;26449:6;26457:9;26468:6;26429:19;:46::i;:::-;26362:334;;;26497:11;:19;26509:6;26497:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;26520:11;:22;26532:9;26520:22;;;;;;;;;;;;;;;;;;;;;;;;;26497:45;26493:203;;;26559:48;26581:6;26589:9;26600:6;26559:21;:48::i;:::-;26493:203;;;26640:44;26658:6;26666:9;26677:6;26640:17;:44::i;:::-;26493:203;26362:334;26229:467;26710:7;26706:41;;26732:15;:13;:15::i;:::-;26706:41;26070:685;;;;:::o;30819:163::-;30860:7;30881:15;30898;30917:19;:17;:19::i;:::-;30880:56;;;;30954:20;30966:7;30954;:11;;:20;;;;:::i;:::-;30947:27;;;;30819:163;:::o;21884:210::-;21941:1;21930:7;;:12;:29;;;;;21958:1;21946:8;;:13;21930:29;21927:41;;;21961:7;;21927:41;21996:7;;21978:15;:25;;;;22033:8;;22014:16;:27;;;;22062:1;22052:7;:11;;;;22085:1;22074:8;:12;;;;21884:210;:::o;27843:552::-;27946:15;27963:23;27988:12;28002:23;28027:12;28041:13;28058:19;28069:7;28058:10;:19::i;:::-;27945:132;;;;;;;;;;;;28106:28;28126:7;28106;:15;28114:6;28106:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;28088:7;:15;28096:6;28088:15;;;;;;;;;;;;;;;:46;;;;28163:28;28183:7;28163;:15;28171:6;28163:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;28145:7;:15;28153:6;28145:15;;;;;;;;;;;;;;;:46;;;;28223:39;28246:15;28223:7;:18;28231:9;28223:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;28202:7;:18;28210:9;28202:18;;;;;;;;;;;;;;;:60;;;;28274:16;28284:5;28274:9;:16::i;:::-;28304:23;28316:4;28322;28304:11;:23::i;:::-;28360:9;28343:44;;28352:6;28343:44;;;28371:15;28343:44;;;;;;:::i;:::-;;;;;;;;27843:552;;;;;;;;;:::o;27260:575::-;27361:15;27378:23;27403:12;27417:23;27442:12;27456:13;27473:19;27484:7;27473:10;:19::i;:::-;27360:132;;;;;;;;;;;;27521:28;27541:7;27521;:15;27529:6;27521:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;27503:7;:15;27511:6;27503:15;;;;;;;;;;;;;;;:46;;;;27581:39;27604:15;27581:7;:18;27589:9;27581:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;27560:7;:18;27568:9;27560:18;;;;;;;;;;;;;;;:60;;;;27652:39;27675:15;27652:7;:18;27660:9;27652:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;27631:7;:18;27639:9;27631:18;;;;;;;;;;;;;;;:60;;;;27706:16;27716:5;27706:9;:16::i;:::-;27744:23;27756:4;27762;27744:11;:23::i;:::-;27800:9;27783:44;;27792:6;27783:44;;;27811:15;27783:44;;;;;;:::i;:::-;;;;;;;;27260:575;;;;;;;;;:::o;28403:631::-;28506:15;28523:23;28548:12;28562:23;28587:12;28601:13;28618:19;28629:7;28618:10;:19::i;:::-;28505:132;;;;;;;;;;;;28666:28;28686:7;28666;:15;28674:6;28666:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;28648:7;:15;28656:6;28648:15;;;;;;;;;;;;;;;:46;;;;28723:28;28743:7;28723;:15;28731:6;28723:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;28705:7;:15;28713:6;28705:15;;;;;;;;;;;;;;;:46;;;;28783:39;28806:15;28783:7;:18;28791:9;28783:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;28762:7;:18;28770:9;28762:18;;;;;;;;;;;;;;;:60;;;;28854:39;28877:15;28854:7;:18;28862:9;28854:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;28833:7;:18;28841:9;28833:18;;;;;;;;;;;;;;;:60;;;;28907:16;28917:5;28907:9;:16::i;:::-;28943:23;28955:4;28961;28943:11;:23::i;:::-;28999:9;28982:44;;28991:6;28982:44;;;29010:15;28982:44;;;;;;:::i;:::-;;;;;;;;28403:631;;;;;;;;;:::o;26763:489::-;26862:15;26879:23;26904:12;26918:23;26943:12;26957:13;26974:19;26985:7;26974:10;:19::i;:::-;26861:132;;;;;;;;;;;;27022:28;27042:7;27022;:15;27030:6;27022:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;27004:7;:15;27012:6;27004:15;;;;;;;;;;;;;;;:46;;;;27082:39;27105:15;27082:7;:18;27090:9;27082:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;27061:7;:18;27069:9;27061:18;;;;;;;;;;;;;;;:60;;;;27133:16;27143:5;27133:9;:16::i;:::-;27161:23;27173:4;27179;27161:11;:23::i;:::-;27217:9;27200:44;;27209:6;27200:44;;;27228:15;27200:44;;;;;;:::i;:::-;;;;;;;;26763:489;;;;;;;;;:::o;22106:115::-;22160:15;;22150:7;:25;;;;22197:16;;22186:8;:27;;;;22106:115::o;30990:561::-;31040:7;31049;31069:15;31087:7;;31069:25;;31105:15;18826:10;31105:25;;31152:9;31147:289;31171:9;:16;;;;31167:1;:20;31147:289;;;31237:7;31213;:21;31221:9;31231:1;31221:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31213:21;;;;;;;;;;;;;;;;:31;:66;;;;31272:7;31248;:21;31256:9;31266:1;31256:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31248:21;;;;;;;;;;;;;;;;:31;31213:66;31209:97;;;31289:7;;18826:10;31281:25;;;;;;;;;31209:97;31331:34;31343:7;:21;31351:9;31361:1;31351:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31343:21;;;;;;;;;;;;;;;;31331:7;:11;;:34;;;;:::i;:::-;31321:44;;31390:34;31402:7;:21;31410:9;31420:1;31410:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31402:21;;;;;;;;;;;;;;;;31390:7;:11;;:34;;;;:::i;:::-;31380:44;;31189:3;;;;;:::i;:::-;;;;31147:289;;;;31460:20;18826:10;31460:7;;:11;;:20;;;;:::i;:::-;31450:7;:30;31446:61;;;31490:7;;18826:10;31482:25;;;;;;;;31446:61;31526:7;31535;31518:25;;;;;;30990:561;;;:::o;29567:468::-;29626:7;29635;29644;29653;29662;29671;29692:23;29717:12;29731:13;29748:39;29760:7;29769;;29778:8;;29748:11;:39::i;:::-;29691:96;;;;;;29798:19;29821:10;:8;:10::i;:::-;29798:33;;29843:15;29860:23;29885:12;29901:46;29913:7;29922:4;29928:5;29935:11;29901;:46::i;:::-;29842:105;;;;;;29966:7;29975:15;29992:4;29998:15;30015:4;30021:5;29958:69;;;;;;;;;;;;;;;;;;;29567:468;;;;;;;:::o;3999:98::-;4057:7;4088:1;4084;:5;;;;:::i;:::-;4077:12;;3999:98;;;;:::o;3618:::-;3676:7;3707:1;3703;:5;;;;:::i;:::-;3696:12;;3618:98;;;;:::o;29042:325::-;29095:19;29118:10;:8;:10::i;:::-;29095:33;;29139:13;29155:22;29165:11;29155:5;:9;;:22;;;;:::i;:::-;29139:38;;29213:33;29240:5;29213:7;:22;29229:4;29213:22;;;;;;;;;;;;;;;;:26;;:33;;;;:::i;:::-;29188:7;:22;29204:4;29188:22;;;;;;;;;;;;;;;:58;;;;29260:11;:26;29280:4;29260:26;;;;;;;;;;;;;;;;;;;;;;;;;29257:102;;;29326:33;29353:5;29326:7;:22;29342:4;29326:22;;;;;;;;;;;;;;;;:26;;:33;;;;:::i;:::-;29301:7;:22;29317:4;29301:22;;;;;;;;;;;;;;;:58;;;;29257:102;29042:325;;;:::o;29375:147::-;29453:17;29465:4;29453:7;;:11;;:17;;;;:::i;:::-;29443:7;:27;;;;29494:20;29509:4;29494:10;;:14;;:20;;;;:::i;:::-;29481:10;:33;;;;29375:147;;:::o;30043:351::-;30136:7;30145;30154;30174:12;30189:28;30213:3;30189:19;30201:6;30189:7;:11;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;30174:43;;30228:13;30244:29;30269:3;30244:20;30256:7;30244;:11;;:20;;;;:::i;:::-;:24;;:29;;;;:::i;:::-;30228:45;;30284:23;30310:28;30332:5;30310:17;30322:4;30310:7;:11;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;30284:54;;30357:15;30374:4;30380:5;30349:37;;;;;;;;;30043:351;;;;;;;:::o;30402:409::-;30512:7;30521;30530;30550:15;30568:24;30580:11;30568:7;:11;;:24;;;;:::i;:::-;30550:42;;30603:12;30618:21;30627:11;30618:4;:8;;:21;;;;:::i;:::-;30603:36;;30650:13;30666:22;30676:11;30666:5;:9;;:22;;;;:::i;:::-;30650:38;;30699:23;30725:28;30747:5;30725:17;30737:4;30725:7;:11;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;30699:54;;30772:7;30781:15;30798:4;30764:39;;;;;;;;;;30402:409;;;;;;;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;301:133::-;;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;350:84;;;;:::o;440:137::-;;525:6;519:13;510:22;;541:30;565:5;541:30;:::i;:::-;500:77;;;;:::o;583:139::-;;667:6;654:20;645:29;;683:33;710:5;683:33;:::i;:::-;635:87;;;;:::o;728:143::-;;816:6;810:13;801:22;;832:33;859:5;832:33;:::i;:::-;791:80;;;;:::o;877:262::-;;985:2;973:9;964:7;960:23;956:32;953:2;;;1001:1;998;991:12;953:2;1044:1;1069:53;1114:7;1105:6;1094:9;1090:22;1069:53;:::i;:::-;1059:63;;1015:117;943:196;;;;:::o;1145:284::-;;1264:2;1252:9;1243:7;1239:23;1235:32;1232:2;;;1280:1;1277;1270:12;1232:2;1323:1;1348:64;1404:7;1395:6;1384:9;1380:22;1348:64;:::i;:::-;1338:74;;1294:128;1222:207;;;;:::o;1435:407::-;;;1560:2;1548:9;1539:7;1535:23;1531:32;1528:2;;;1576:1;1573;1566:12;1528:2;1619:1;1644:53;1689:7;1680:6;1669:9;1665:22;1644:53;:::i;:::-;1634:63;;1590:117;1746:2;1772:53;1817:7;1808:6;1797:9;1793:22;1772:53;:::i;:::-;1762:63;;1717:118;1518:324;;;;;:::o;1848:552::-;;;;1990:2;1978:9;1969:7;1965:23;1961:32;1958:2;;;2006:1;2003;1996:12;1958:2;2049:1;2074:53;2119:7;2110:6;2099:9;2095:22;2074:53;:::i;:::-;2064:63;;2020:117;2176:2;2202:53;2247:7;2238:6;2227:9;2223:22;2202:53;:::i;:::-;2192:63;;2147:118;2304:2;2330:53;2375:7;2366:6;2355:9;2351:22;2330:53;:::i;:::-;2320:63;;2275:118;1948:452;;;;;:::o;2406:407::-;;;2531:2;2519:9;2510:7;2506:23;2502:32;2499:2;;;2547:1;2544;2537:12;2499:2;2590:1;2615:53;2660:7;2651:6;2640:9;2636:22;2615:53;:::i;:::-;2605:63;;2561:117;2717:2;2743:53;2788:7;2779:6;2768:9;2764:22;2743:53;:::i;:::-;2733:63;;2688:118;2489:324;;;;;:::o;2819:256::-;;2924:2;2912:9;2903:7;2899:23;2895:32;2892:2;;;2940:1;2937;2930:12;2892:2;2983:1;3008:50;3050:7;3041:6;3030:9;3026:22;3008:50;:::i;:::-;2998:60;;2954:114;2882:193;;;;:::o;3081:278::-;;3197:2;3185:9;3176:7;3172:23;3168:32;3165:2;;;3213:1;3210;3203:12;3165:2;3256:1;3281:61;3334:7;3325:6;3314:9;3310:22;3281:61;:::i;:::-;3271:71;;3227:125;3155:204;;;;:::o;3365:262::-;;3473:2;3461:9;3452:7;3448:23;3444:32;3441:2;;;3489:1;3486;3479:12;3441:2;3532:1;3557:53;3602:7;3593:6;3582:9;3578:22;3557:53;:::i;:::-;3547:63;;3503:117;3431:196;;;;:::o;3633:596::-;;;;3786:2;3774:9;3765:7;3761:23;3757:32;3754:2;;;3802:1;3799;3792:12;3754:2;3845:1;3870:64;3926:7;3917:6;3906:9;3902:22;3870:64;:::i;:::-;3860:74;;3816:128;3983:2;4009:64;4065:7;4056:6;4045:9;4041:22;4009:64;:::i;:::-;3999:74;;3954:129;4122:2;4148:64;4204:7;4195:6;4184:9;4180:22;4148:64;:::i;:::-;4138:74;;4093:129;3744:485;;;;;:::o;4235:179::-;;4325:46;4367:3;4359:6;4325:46;:::i;:::-;4403:4;4398:3;4394:14;4380:28;;4315:99;;;;:::o;4420:108::-;4497:24;4515:5;4497:24;:::i;:::-;4492:3;4485:37;4475:53;;:::o;4534:118::-;4621:24;4639:5;4621:24;:::i;:::-;4616:3;4609:37;4599:53;;:::o;4688:732::-;;4836:54;4884:5;4836:54;:::i;:::-;4906:86;4985:6;4980:3;4906:86;:::i;:::-;4899:93;;5016:56;5066:5;5016:56;:::i;:::-;5095:7;5126:1;5111:284;5136:6;5133:1;5130:13;5111:284;;;5212:6;5206:13;5239:63;5298:3;5283:13;5239:63;:::i;:::-;5232:70;;5325:60;5378:6;5325:60;:::i;:::-;5315:70;;5171:224;5158:1;5155;5151:9;5146:14;;5111:284;;;5115:14;5411:3;5404:10;;4812:608;;;;;;;:::o;5426:109::-;5507:21;5522:5;5507:21;:::i;:::-;5502:3;5495:34;5485:50;;:::o;5541:147::-;5636:45;5675:5;5636:45;:::i;:::-;5631:3;5624:58;5614:74;;:::o;5694:364::-;;5810:39;5843:5;5810:39;:::i;:::-;5865:71;5929:6;5924:3;5865:71;:::i;:::-;5858:78;;5945:52;5990:6;5985:3;5978:4;5971:5;5967:16;5945:52;:::i;:::-;6022:29;6044:6;6022:29;:::i;:::-;6017:3;6013:39;6006:46;;5786:272;;;;;:::o;6064:367::-;;6227:67;6291:2;6286:3;6227:67;:::i;:::-;6220:74;;6324:34;6320:1;6315:3;6311:11;6304:55;6390:5;6385:2;6380:3;6376:12;6369:27;6422:2;6417:3;6413:12;6406:19;;6210:221;;;:::o;6437:374::-;;6600:67;6664:2;6659:3;6600:67;:::i;:::-;6593:74;;6697:34;6693:1;6688:3;6684:11;6677:55;6763:12;6758:2;6753:3;6749:12;6742:34;6802:2;6797:3;6793:12;6786:19;;6583:228;;;:::o;6817:370::-;;6980:67;7044:2;7039:3;6980:67;:::i;:::-;6973:74;;7077:34;7073:1;7068:3;7064:11;7057:55;7143:8;7138:2;7133:3;7129:12;7122:30;7178:2;7173:3;7169:12;7162:19;;6963:224;;;:::o;7193:366::-;;7356:67;7420:2;7415:3;7356:67;:::i;:::-;7349:74;;7453:34;7449:1;7444:3;7440:11;7433:55;7519:4;7514:2;7509:3;7505:12;7498:26;7550:2;7545:3;7541:12;7534:19;;7339:220;;;:::o;7565:327::-;;7728:67;7792:2;7787:3;7728:67;:::i;:::-;7721:74;;7825:31;7821:1;7816:3;7812:11;7805:52;7883:2;7878:3;7874:12;7867:19;;7711:181;;;:::o;7898:330::-;;8061:67;8125:2;8120:3;8061:67;:::i;:::-;8054:74;;8158:34;8154:1;8149:3;8145:11;8138:55;8219:2;8214:3;8210:12;8203:19;;8044:184;;;:::o;8234:373::-;;8397:67;8461:2;8456:3;8397:67;:::i;:::-;8390:74;;8494:34;8490:1;8485:3;8481:11;8474:55;8560:11;8555:2;8550:3;8546:12;8539:33;8598:2;8593:3;8589:12;8582:19;;8380:227;;;:::o;8613:369::-;;8776:67;8840:2;8835:3;8776:67;:::i;:::-;8769:74;;8873:34;8869:1;8864:3;8860:11;8853:55;8939:7;8934:2;8929:3;8925:12;8918:29;8973:2;8968:3;8964:12;8957:19;;8759:223;;;:::o;8988:368::-;;9151:67;9215:2;9210:3;9151:67;:::i;:::-;9144:74;;9248:34;9244:1;9239:3;9235:11;9228:55;9314:6;9309:2;9304:3;9300:12;9293:28;9347:2;9342:3;9338:12;9331:19;;9134:222;;;:::o;9362:321::-;;9525:67;9589:2;9584:3;9525:67;:::i;:::-;9518:74;;9622:25;9618:1;9613:3;9609:11;9602:46;9674:2;9669:3;9665:12;9658:19;;9508:175;;;:::o;9689:315::-;;9852:67;9916:2;9911:3;9852:67;:::i;:::-;9845:74;;9949:19;9945:1;9940:3;9936:11;9929:40;9995:2;9990:3;9986:12;9979:19;;9835:169;;;:::o;10010:118::-;10097:24;10115:5;10097:24;:::i;:::-;10092:3;10085:37;10075:53;;:::o;10134:112::-;10217:22;10233:5;10217:22;:::i;:::-;10212:3;10205:35;10195:51;;:::o;10252:222::-;;10383:2;10372:9;10368:18;10360:26;;10396:71;10464:1;10453:9;10449:17;10440:6;10396:71;:::i;:::-;10350:124;;;;:::o;10480:332::-;;10639:2;10628:9;10624:18;10616:26;;10652:71;10720:1;10709:9;10705:17;10696:6;10652:71;:::i;:::-;10733:72;10801:2;10790:9;10786:18;10777:6;10733:72;:::i;:::-;10606:206;;;;;:::o;10818:332::-;;10977:2;10966:9;10962:18;10954:26;;10990:71;11058:1;11047:9;11043:17;11034:6;10990:71;:::i;:::-;11071:72;11139:2;11128:9;11124:18;11115:6;11071:72;:::i;:::-;10944:206;;;;;:::o;11156:807::-;;11443:3;11432:9;11428:19;11420:27;;11457:71;11525:1;11514:9;11510:17;11501:6;11457:71;:::i;:::-;11538:72;11606:2;11595:9;11591:18;11582:6;11538:72;:::i;:::-;11620:80;11696:2;11685:9;11681:18;11672:6;11620:80;:::i;:::-;11710;11786:2;11775:9;11771:18;11762:6;11710:80;:::i;:::-;11800:73;11868:3;11857:9;11853:19;11844:6;11800:73;:::i;:::-;11883;11951:3;11940:9;11936:19;11927:6;11883:73;:::i;:::-;11410:553;;;;;;;;;:::o;11969:210::-;;12094:2;12083:9;12079:18;12071:26;;12107:65;12169:1;12158:9;12154:17;12145:6;12107:65;:::i;:::-;12061:118;;;;:::o;12185:313::-;;12336:2;12325:9;12321:18;12313:26;;12385:9;12379:4;12375:20;12371:1;12360:9;12356:17;12349:47;12413:78;12486:4;12477:6;12413:78;:::i;:::-;12405:86;;12303:195;;;;:::o;12504:419::-;;12708:2;12697:9;12693:18;12685:26;;12757:9;12751:4;12747:20;12743:1;12732:9;12728:17;12721:47;12785:131;12911:4;12785:131;:::i;:::-;12777:139;;12675:248;;;:::o;12929:419::-;;13133:2;13122:9;13118:18;13110:26;;13182:9;13176:4;13172:20;13168:1;13157:9;13153:17;13146:47;13210:131;13336:4;13210:131;:::i;:::-;13202:139;;13100:248;;;:::o;13354:419::-;;13558:2;13547:9;13543:18;13535:26;;13607:9;13601:4;13597:20;13593:1;13582:9;13578:17;13571:47;13635:131;13761:4;13635:131;:::i;:::-;13627:139;;13525:248;;;:::o;13779:419::-;;13983:2;13972:9;13968:18;13960:26;;14032:9;14026:4;14022:20;14018:1;14007:9;14003:17;13996:47;14060:131;14186:4;14060:131;:::i;:::-;14052:139;;13950:248;;;:::o;14204:419::-;;14408:2;14397:9;14393:18;14385:26;;14457:9;14451:4;14447:20;14443:1;14432:9;14428:17;14421:47;14485:131;14611:4;14485:131;:::i;:::-;14477:139;;14375:248;;;:::o;14629:419::-;;14833:2;14822:9;14818:18;14810:26;;14882:9;14876:4;14872:20;14868:1;14857:9;14853:17;14846:47;14910:131;15036:4;14910:131;:::i;:::-;14902:139;;14800:248;;;:::o;15054:419::-;;15258:2;15247:9;15243:18;15235:26;;15307:9;15301:4;15297:20;15293:1;15282:9;15278:17;15271:47;15335:131;15461:4;15335:131;:::i;:::-;15327:139;;15225:248;;;:::o;15479:419::-;;15683:2;15672:9;15668:18;15660:26;;15732:9;15726:4;15722:20;15718:1;15707:9;15703:17;15696:47;15760:131;15886:4;15760:131;:::i;:::-;15752:139;;15650:248;;;:::o;15904:419::-;;16108:2;16097:9;16093:18;16085:26;;16157:9;16151:4;16147:20;16143:1;16132:9;16128:17;16121:47;16185:131;16311:4;16185:131;:::i;:::-;16177:139;;16075:248;;;:::o;16329:419::-;;16533:2;16522:9;16518:18;16510:26;;16582:9;16576:4;16572:20;16568:1;16557:9;16553:17;16546:47;16610:131;16736:4;16610:131;:::i;:::-;16602:139;;16500:248;;;:::o;16754:419::-;;16958:2;16947:9;16943:18;16935:26;;17007:9;17001:4;16997:20;16993:1;16982:9;16978:17;16971:47;17035:131;17161:4;17035:131;:::i;:::-;17027:139;;16925:248;;;:::o;17179:222::-;;17310:2;17299:9;17295:18;17287:26;;17323:71;17391:1;17380:9;17376:17;17367:6;17323:71;:::i;:::-;17277:124;;;;:::o;17407:831::-;;17708:3;17697:9;17693:19;17685:27;;17722:71;17790:1;17779:9;17775:17;17766:6;17722:71;:::i;:::-;17803:80;17879:2;17868:9;17864:18;17855:6;17803:80;:::i;:::-;17930:9;17924:4;17920:20;17915:2;17904:9;17900:18;17893:48;17958:108;18061:4;18052:6;17958:108;:::i;:::-;17950:116;;18076:72;18144:2;18133:9;18129:18;18120:6;18076:72;:::i;:::-;18158:73;18226:3;18215:9;18211:19;18202:6;18158:73;:::i;:::-;17675:563;;;;;;;;:::o;18244:214::-;;18371:2;18360:9;18356:18;18348:26;;18384:67;18448:1;18437:9;18433:17;18424:6;18384:67;:::i;:::-;18338:120;;;;:::o;18464:132::-;;18554:3;18546:11;;18584:4;18579:3;18575:14;18567:22;;18536:60;;;:::o;18602:114::-;;18703:5;18697:12;18687:22;;18676:40;;;:::o;18722:99::-;;18808:5;18802:12;18792:22;;18781:40;;;:::o;18827:113::-;;18929:4;18924:3;18920:14;18912:22;;18902:38;;;:::o;18946:184::-;;19079:6;19074:3;19067:19;19119:4;19114:3;19110:14;19095:29;;19057:73;;;;:::o;19136:169::-;;19254:6;19249:3;19242:19;19294:4;19289:3;19285:14;19270:29;;19232:73;;;;:::o;19311:305::-;;19370:20;19388:1;19370:20;:::i;:::-;19365:25;;19404:20;19422:1;19404:20;:::i;:::-;19399:25;;19558:1;19490:66;19486:74;19483:1;19480:81;19477:2;;;19564:18;;:::i;:::-;19477:2;19608:1;19605;19601:9;19594:16;;19355:261;;;;:::o;19622:185::-;;19679:20;19697:1;19679:20;:::i;:::-;19674:25;;19713:20;19731:1;19713:20;:::i;:::-;19708:25;;19752:1;19742:2;;19757:18;;:::i;:::-;19742:2;19799:1;19796;19792:9;19787:14;;19664:143;;;;:::o;19813:348::-;;19876:20;19894:1;19876:20;:::i;:::-;19871:25;;19910:20;19928:1;19910:20;:::i;:::-;19905:25;;20098:1;20030:66;20026:74;20023:1;20020:81;20015:1;20008:9;20001:17;19997:105;19994:2;;;20105:18;;:::i;:::-;19994:2;20153:1;20150;20146:9;20135:20;;19861:300;;;;:::o;20167:191::-;;20227:20;20245:1;20227:20;:::i;:::-;20222:25;;20261:20;20279:1;20261:20;:::i;:::-;20256:25;;20300:1;20297;20294:8;20291:2;;;20305:18;;:::i;:::-;20291:2;20350:1;20347;20343:9;20335:17;;20212:146;;;;:::o;20364:96::-;;20430:24;20448:5;20430:24;:::i;:::-;20419:35;;20409:51;;;:::o;20466:90::-;;20543:5;20536:13;20529:21;20518:32;;20508:48;;;:::o;20562:126::-;;20639:42;20632:5;20628:54;20617:65;;20607:81;;;:::o;20694:77::-;;20760:5;20749:16;;20739:32;;;:::o;20777:86::-;;20852:4;20845:5;20841:16;20830:27;;20820:43;;;:::o;20869:121::-;;20960:24;20978:5;20960:24;:::i;:::-;20947:37;;20937:53;;;:::o;20996:307::-;21064:1;21074:113;21088:6;21085:1;21082:13;21074:113;;;21173:1;21168:3;21164:11;21158:18;21154:1;21149:3;21145:11;21138:39;21110:2;21107:1;21103:10;21098:15;;21074:113;;;21205:6;21202:1;21199:13;21196:2;;;21285:1;21276:6;21271:3;21267:16;21260:27;21196:2;21045:258;;;;:::o;21309:233::-;;21371:24;21389:5;21371:24;:::i;:::-;21362:33;;21417:66;21410:5;21407:77;21404:2;;;21487:18;;:::i;:::-;21404:2;21534:1;21527:5;21523:13;21516:20;;21352:190;;;:::o;21548:180::-;21596:77;21593:1;21586:88;21693:4;21690:1;21683:15;21717:4;21714:1;21707:15;21734:180;21782:77;21779:1;21772:88;21879:4;21876:1;21869:15;21903:4;21900:1;21893:15;21920:102;;22012:2;22008:7;22003:2;21996:5;21992:14;21988:28;21978:38;;21968:54;;;:::o;22028:122::-;22101:24;22119:5;22101:24;:::i;:::-;22094:5;22091:35;22081:2;;22140:1;22137;22130:12;22081:2;22071:79;:::o;22156:116::-;22226:21;22241:5;22226:21;:::i;:::-;22219:5;22216:32;22206:2;;22262:1;22259;22252:12;22206:2;22196:76;:::o;22278:122::-;22351:24;22369:5;22351:24;:::i;:::-;22344:5;22341:35;22331:2;;22390:1;22387;22380:12;22331:2;22321:79;:::o

Swarm Source

ipfs://3aaafbe862d65d134332553b0dc03a1eaeaf18dfe990a1d7ad771ff18f8dff61
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.