false
true
0

Contract Address Details

0x645c33E6ecC5e5FD67Bcc248cAd29B1950E469C6

Token
BOBO (BOBO)
Creator
0xa09e1c–072893 at 0x3f2519–edb42d
Balance
0 PLS ( )
Tokens
Fetching tokens...
Transactions
3,434 Transactions
Transfers
0 Transfers
Gas Used
0
Last Balance Update
26358967
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
Contract name:
BOBO




Optimization enabled
false
Compiler version
v0.8.0+commit.c7dfd78e




EVM Version
default




Verified at
2023-11-09T21:32:23.383178Z

Constructor Arguments

0x000000000000000000000000c488f08e3307b06fdcaeb648cf3ee39ecadea3d7

Arg [0] (address) : 0xc488f08e3307b06fdcaeb648cf3ee39ecadea3d7

              

Contract source code

/**
 *  SPDX-License-Identifier: MIT
*/

pragma solidity 0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}


/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}



/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}


// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
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. 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;
        }
    }
}

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
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() {
        _setOwner(_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 {
        _setOwner(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");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

contract BOBO is Context, IERC20, IERC20Metadata,Ownable {
    
    using SafeMath for uint256;
    
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;
    
    string private _name = "BOBO";
    string private _symbol = "BOBO";
    
    uint256 public tax = 69;
    uint256 public burn = 42;
    address public taxAddress;
    
    mapping(address => bool) private _isExcludedFromFee;


    constructor(address _broom) {
        uint256 supply = 420690000000000 * 10**18; 
        uint256 airdrop = (supply * 20) /100 ;
        uint256 team1 = (supply * 2) /100 ;
        uint256 team2 = (supply * 145) / 10000;
        uint256 _owner = (supply * 345) / 10000;
         _mint(0x3E3274f265cd588678dA22CC21102C63aa51248b,airdrop );
         _mint(0x2Cb7c17f40bAe3e04904a7F68884c9d3b0dD8eEE,team1 );
         _mint(0x1e26A83372067466e6b4e898f05FE209D4417339,team2 );
         _mint(_broom,_owner );
        _mint(msg.sender,supply-airdrop-team1-team2-_owner);
        taxAddress = payable(_broom);
        _isExcludedFromFee[owner()] = true;
    }
    
    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }

    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }
    
    function setTaxAddress(address _taxAddress) public onlyOwner {
        taxAddress = _taxAddress;
    }
    
    function setTax(uint256 _taxFee) public onlyOwner{
        tax = _taxFee;
    }
    
    function isExcludedFromFee(address account) public view returns (bool) {
        return _isExcludedFromFee[account];
    }
    
    function name() public view virtual override returns (string memory) {
        return _name;
    }


    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }


    function decimals() public view virtual override returns (uint8) {
        return 18;
    }


    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }


    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }


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

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


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


    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

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


    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance.sub(subtractedValue));
        }

        return true;
    }


     event Amount1(uint256);
     event Amount2(uint256);

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");

        unchecked {
            _balances[sender] = senderBalance.sub(amount);
        }
        
        if(tax>0 && !_isExcludedFromFee[sender] ){
            uint256 taxFee = amount.mul(tax).div(10000);
            _balances[taxAddress] = _balances[taxAddress].add(taxFee);
            emit Transfer(sender, taxAddress, taxFee);
            amount = amount.sub(taxFee);
        }

        if(burn > 0 && !_isExcludedFromFee[sender]){
            uint256 burnFee = amount.mul(burn).div(10000);
            _totalSupply -= burnFee;
            emit Transfer(sender, address(0), burnFee);
            amount = amount.sub(burnFee);
        }
        
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }


    function _mint(address account, uint256 amount) internal {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }


    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        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);
    }

}
        

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"address","name":"_broom","internalType":"address"}]},{"type":"event","name":"Amount1","inputs":[{"type":"uint256","name":"","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Amount2","inputs":[{"type":"uint256","name":"","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"spender","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"previousOwner","internalType":"address","indexed":true},{"type":"address","name":"newOwner","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"owner","internalType":"address"},{"type":"address","name":"spender","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approve","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"burn","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"decreaseAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"subtractedValue","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"excludeFromFee","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"includeInFee","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"increaseAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"addedValue","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isExcludedFromFee","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"renounceOwnership","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setTax","inputs":[{"type":"uint256","name":"_taxFee","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setTaxAddress","inputs":[{"type":"address","name":"_taxAddress","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"tax","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"taxAddress","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transfer","inputs":[{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"sender","internalType":"address"},{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"newOwner","internalType":"address"}]}]
              

Contract Creation Code

0x60806040526040518060400160405280600481526020017f424f424f000000000000000000000000000000000000000000000000000000008152506004908051906020019062000051929190620005bf565b506040518060400160405280600481526020017f424f424f00000000000000000000000000000000000000000000000000000000815250600590805190602001906200009f929190620005bf565b506045600655602a600755348015620000b757600080fd5b5060405162002aa438038062002aa48339818101604052810190620000dd919062000686565b620000fd620000f16200031560201b60201c565b6200031d60201b60201c565b60006d14bddab3e51a57cff87a50000000905060006064601483620001239190620007ea565b6200012f9190620007b2565b905060006064600284620001449190620007ea565b620001509190620007b2565b90506000612710609185620001669190620007ea565b620001729190620007b2565b9050600061271061015986620001899190620007ea565b620001959190620007b2565b9050620001bd733e3274f265cd588678da22cc21102c63aa51248b85620003e160201b60201c565b620001e3732cb7c17f40bae3e04904a7f68884c9d3b0dd8eee84620003e160201b60201c565b62000209731e26a83372067466e6b4e898f05fe209d441733983620003e160201b60201c565b6200021b8682620003e160201b60201c565b6200026133828486888a6200023191906200084b565b6200023d91906200084b565b6200024991906200084b565b6200025591906200084b565b620003e160201b60201c565b85600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160096000620002b86200057e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505050505050620009a1565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000454576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200044b9062000705565b60405180910390fd5b6200047081600354620005a760201b62000e5b1790919060201c565b600381905550620004cf81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620005a760201b62000e5b1790919060201c565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000572919062000727565b60405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008183620005b7919062000755565b905092915050565b828054620005cd90620008c4565b90600052602060002090601f016020900481019282620005f157600085556200063d565b82601f106200060c57805160ff19168380011785556200063d565b828001600101855582156200063d579182015b828111156200063c5782518255916020019190600101906200061f565b5b5090506200064c919062000650565b5090565b5b808211156200066b57600081600090555060010162000651565b5090565b600081519050620006808162000987565b92915050565b6000602082840312156200069957600080fd5b6000620006a9848285016200066f565b91505092915050565b6000620006c1601f8362000744565b91507f45524332303a206d696e7420746f20746865207a65726f2061646472657373006000830152602082019050919050565b620006ff81620008ba565b82525050565b600060208201905081810360008301526200072081620006b2565b9050919050565b60006020820190506200073e6000830184620006f4565b92915050565b600082825260208201905092915050565b60006200076282620008ba565b91506200076f83620008ba565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620007a757620007a6620008fa565b5b828201905092915050565b6000620007bf82620008ba565b9150620007cc83620008ba565b925082620007df57620007de62000929565b5b828204905092915050565b6000620007f782620008ba565b91506200080483620008ba565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000840576200083f620008fa565b5b828202905092915050565b60006200085882620008ba565b91506200086583620008ba565b9250828210156200087b576200087a620008fa565b5b828203905092915050565b600062000893826200089a565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006002820490506001821680620008dd57607f821691505b60208210811415620008f457620008f362000958565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b620009928162000886565b81146200099e57600080fd5b50565b6120f380620009b16000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c8063715018a6116100b8578063a457c2d71161007c578063a457c2d714610367578063a9059cbb14610397578063b7bda68f146103c7578063dd62ed3e146103e5578063ea2f0b3714610415578063f2fde38b1461043157610142565b8063715018a6146102e75780638da5cb5b146102f157806395d89b411461030f57806399c8d5561461032d578063a1883d261461034b57610142565b8063313ce5671161010a578063313ce567146101ff578063395093511461021d578063437823ec1461024d57806344df8e70146102695780635342acb41461028757806370a08231146102b757610142565b806306fdde0314610147578063095ea7b31461016557806318160ddd1461019557806323b872dd146101b35780632e5bb6ff146101e3575b600080fd5b61014f61044d565b60405161015c9190611c8e565b60405180910390f35b61017f600480360381019061017a919061180e565b6104df565b60405161018c9190611c73565b60405180910390f35b61019d6104fd565b6040516101aa9190611dd0565b60405180910390f35b6101cd60048036038101906101c891906117bf565b610507565b6040516101da9190611c73565b60405180910390f35b6101fd60048036038101906101f8919061184a565b6105ff565b005b610207610685565b6040516102149190611deb565b60405180910390f35b6102376004803603810190610232919061180e565b61068e565b6040516102449190611c73565b60405180910390f35b6102676004803603810190610262919061175a565b610741565b005b610271610818565b60405161027e9190611dd0565b60405180910390f35b6102a1600480360381019061029c919061175a565b61081e565b6040516102ae9190611c73565b60405180910390f35b6102d160048036038101906102cc919061175a565b610874565b6040516102de9190611dd0565b60405180910390f35b6102ef6108bd565b005b6102f9610945565b6040516103069190611c58565b60405180910390f35b61031761096e565b6040516103249190611c8e565b60405180910390f35b610335610a00565b6040516103429190611dd0565b60405180910390f35b6103656004803603810190610360919061175a565b610a06565b005b610381600480360381019061037c919061180e565b610ac6565b60405161038e9190611c73565b60405180910390f35b6103b160048036038101906103ac919061180e565b610bc1565b6040516103be9190611c73565b60405180910390f35b6103cf610bdf565b6040516103dc9190611c58565b60405180910390f35b6103ff60048036038101906103fa9190611783565b610c05565b60405161040c9190611dd0565b60405180910390f35b61042f600480360381019061042a919061175a565b610c8c565b005b61044b6004803603810190610446919061175a565b610d63565b005b60606004805461045c90611fbf565b80601f016020809104026020016040519081016040528092919081815260200182805461048890611fbf565b80156104d55780601f106104aa576101008083540402835291602001916104d5565b820191906000526020600020905b8154815290600101906020018083116104b857829003601f168201915b5050505050905090565b60006104f36104ec610e71565b8484610e79565b6001905092915050565b6000600354905090565b6000610514848484611044565b6000600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061055f610e71565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156105df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105d690611d30565b60405180910390fd5b6105f3856105eb610e71565b858403610e79565b60019150509392505050565b610607610e71565b73ffffffffffffffffffffffffffffffffffffffff16610625610945565b73ffffffffffffffffffffffffffffffffffffffff161461067b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067290611d50565b60405180910390fd5b8060068190555050565b60006012905090565b600061073761069b610e71565b8461073285600260006106ac610e71565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e5b90919063ffffffff16565b610e79565b6001905092915050565b610749610e71565b73ffffffffffffffffffffffffffffffffffffffff16610767610945565b73ffffffffffffffffffffffffffffffffffffffff16146107bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b490611d50565b60405180910390fd5b6001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60075481565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6108c5610e71565b73ffffffffffffffffffffffffffffffffffffffff166108e3610945565b73ffffffffffffffffffffffffffffffffffffffff1614610939576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093090611d50565b60405180910390fd5b610943600061162a565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606005805461097d90611fbf565b80601f01602080910402602001604051908101604052809291908181526020018280546109a990611fbf565b80156109f65780601f106109cb576101008083540402835291602001916109f6565b820191906000526020600020905b8154815290600101906020018083116109d957829003601f168201915b5050505050905090565b60065481565b610a0e610e71565b73ffffffffffffffffffffffffffffffffffffffff16610a2c610945565b73ffffffffffffffffffffffffffffffffffffffff1614610a82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7990611d50565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060026000610ad5610e71565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610b92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8990611db0565b60405180910390fd5b610bb6610b9d610e71565b85610bb186856116ee90919063ffffffff16565b610e79565b600191505092915050565b6000610bd5610bce610e71565b8484611044565b6001905092915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610c94610e71565b73ffffffffffffffffffffffffffffffffffffffff16610cb2610945565b73ffffffffffffffffffffffffffffffffffffffff1614610d08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cff90611d50565b60405180910390fd5b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610d6b610e71565b73ffffffffffffffffffffffffffffffffffffffff16610d89610945565b73ffffffffffffffffffffffffffffffffffffffff1614610ddf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd690611d50565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4690611cd0565b60405180910390fd5b610e588161162a565b50565b60008183610e699190611e22565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee090611d90565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5090611cf0565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516110379190611dd0565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156110b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ab90611d70565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611124576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111b90611cb0565b60405180910390fd5b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156111ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a290611d10565b60405180910390fd5b6111be82826116ee90919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600060065411801561125d5750600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561140657600061128d61271061127f6006548661170490919063ffffffff16565b61171a90919063ffffffff16565b90506113038160016000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e5b90919063ffffffff16565b60016000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516113e79190611dd0565b60405180910390a361140281846116ee90919063ffffffff16565b9250505b60006007541180156114625750600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561152a5760006114926127106114846007548661170490919063ffffffff16565b61171a90919063ffffffff16565b905080600360008282546114a69190611f03565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161150b9190611dd0565b60405180910390a361152681846116ee90919063ffffffff16565b9250505b61157c82600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e5b90919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161161c9190611dd0565b60405180910390a350505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081836116fc9190611f03565b905092915050565b600081836117129190611ea9565b905092915050565b600081836117289190611e78565b905092915050565b60008135905061173f8161208f565b92915050565b600081359050611754816120a6565b92915050565b60006020828403121561176c57600080fd5b600061177a84828501611730565b91505092915050565b6000806040838503121561179657600080fd5b60006117a485828601611730565b92505060206117b585828601611730565b9150509250929050565b6000806000606084860312156117d457600080fd5b60006117e286828701611730565b93505060206117f386828701611730565b925050604061180486828701611745565b9150509250925092565b6000806040838503121561182157600080fd5b600061182f85828601611730565b925050602061184085828601611745565b9150509250929050565b60006020828403121561185c57600080fd5b600061186a84828501611745565b91505092915050565b61187c81611f37565b82525050565b61188b81611f49565b82525050565b600061189c82611e06565b6118a68185611e11565b93506118b6818560208601611f8c565b6118bf8161207e565b840191505092915050565b60006118d7602383611e11565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061193d602683611e11565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006119a3602283611e11565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611a09602683611e11565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206260008301527f616c616e636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611a6f602883611e11565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206160008301527f6c6c6f77616e63650000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611ad5602083611e11565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000611b15602583611e11565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611b7b602483611e11565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611be1602583611e11565b91507f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008301527f207a65726f0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b611c4381611f75565b82525050565b611c5281611f7f565b82525050565b6000602082019050611c6d6000830184611873565b92915050565b6000602082019050611c886000830184611882565b92915050565b60006020820190508181036000830152611ca88184611891565b905092915050565b60006020820190508181036000830152611cc9816118ca565b9050919050565b60006020820190508181036000830152611ce981611930565b9050919050565b60006020820190508181036000830152611d0981611996565b9050919050565b60006020820190508181036000830152611d29816119fc565b9050919050565b60006020820190508181036000830152611d4981611a62565b9050919050565b60006020820190508181036000830152611d6981611ac8565b9050919050565b60006020820190508181036000830152611d8981611b08565b9050919050565b60006020820190508181036000830152611da981611b6e565b9050919050565b60006020820190508181036000830152611dc981611bd4565b9050919050565b6000602082019050611de56000830184611c3a565b92915050565b6000602082019050611e006000830184611c49565b92915050565b600081519050919050565b600082825260208201905092915050565b6000611e2d82611f75565b9150611e3883611f75565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611e6d57611e6c611ff1565b5b828201905092915050565b6000611e8382611f75565b9150611e8e83611f75565b925082611e9e57611e9d612020565b5b828204905092915050565b6000611eb482611f75565b9150611ebf83611f75565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611ef857611ef7611ff1565b5b828202905092915050565b6000611f0e82611f75565b9150611f1983611f75565b925082821015611f2c57611f2b611ff1565b5b828203905092915050565b6000611f4282611f55565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015611faa578082015181840152602081019050611f8f565b83811115611fb9576000848401525b50505050565b60006002820490506001821680611fd757607f821691505b60208210811415611feb57611fea61204f565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b61209881611f37565b81146120a357600080fd5b50565b6120af81611f75565b81146120ba57600080fd5b5056fea264697066735822122092eeeeb2b072f1394eff53e78b43052439d873f2984ab4561d868139a9f683e264736f6c63430008000033000000000000000000000000c488f08e3307b06fdcaeb648cf3ee39ecadea3d7

Deployed ByteCode

0x608060405234801561001057600080fd5b50600436106101425760003560e01c8063715018a6116100b8578063a457c2d71161007c578063a457c2d714610367578063a9059cbb14610397578063b7bda68f146103c7578063dd62ed3e146103e5578063ea2f0b3714610415578063f2fde38b1461043157610142565b8063715018a6146102e75780638da5cb5b146102f157806395d89b411461030f57806399c8d5561461032d578063a1883d261461034b57610142565b8063313ce5671161010a578063313ce567146101ff578063395093511461021d578063437823ec1461024d57806344df8e70146102695780635342acb41461028757806370a08231146102b757610142565b806306fdde0314610147578063095ea7b31461016557806318160ddd1461019557806323b872dd146101b35780632e5bb6ff146101e3575b600080fd5b61014f61044d565b60405161015c9190611c8e565b60405180910390f35b61017f600480360381019061017a919061180e565b6104df565b60405161018c9190611c73565b60405180910390f35b61019d6104fd565b6040516101aa9190611dd0565b60405180910390f35b6101cd60048036038101906101c891906117bf565b610507565b6040516101da9190611c73565b60405180910390f35b6101fd60048036038101906101f8919061184a565b6105ff565b005b610207610685565b6040516102149190611deb565b60405180910390f35b6102376004803603810190610232919061180e565b61068e565b6040516102449190611c73565b60405180910390f35b6102676004803603810190610262919061175a565b610741565b005b610271610818565b60405161027e9190611dd0565b60405180910390f35b6102a1600480360381019061029c919061175a565b61081e565b6040516102ae9190611c73565b60405180910390f35b6102d160048036038101906102cc919061175a565b610874565b6040516102de9190611dd0565b60405180910390f35b6102ef6108bd565b005b6102f9610945565b6040516103069190611c58565b60405180910390f35b61031761096e565b6040516103249190611c8e565b60405180910390f35b610335610a00565b6040516103429190611dd0565b60405180910390f35b6103656004803603810190610360919061175a565b610a06565b005b610381600480360381019061037c919061180e565b610ac6565b60405161038e9190611c73565b60405180910390f35b6103b160048036038101906103ac919061180e565b610bc1565b6040516103be9190611c73565b60405180910390f35b6103cf610bdf565b6040516103dc9190611c58565b60405180910390f35b6103ff60048036038101906103fa9190611783565b610c05565b60405161040c9190611dd0565b60405180910390f35b61042f600480360381019061042a919061175a565b610c8c565b005b61044b6004803603810190610446919061175a565b610d63565b005b60606004805461045c90611fbf565b80601f016020809104026020016040519081016040528092919081815260200182805461048890611fbf565b80156104d55780601f106104aa576101008083540402835291602001916104d5565b820191906000526020600020905b8154815290600101906020018083116104b857829003601f168201915b5050505050905090565b60006104f36104ec610e71565b8484610e79565b6001905092915050565b6000600354905090565b6000610514848484611044565b6000600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061055f610e71565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156105df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105d690611d30565b60405180910390fd5b6105f3856105eb610e71565b858403610e79565b60019150509392505050565b610607610e71565b73ffffffffffffffffffffffffffffffffffffffff16610625610945565b73ffffffffffffffffffffffffffffffffffffffff161461067b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067290611d50565b60405180910390fd5b8060068190555050565b60006012905090565b600061073761069b610e71565b8461073285600260006106ac610e71565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e5b90919063ffffffff16565b610e79565b6001905092915050565b610749610e71565b73ffffffffffffffffffffffffffffffffffffffff16610767610945565b73ffffffffffffffffffffffffffffffffffffffff16146107bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b490611d50565b60405180910390fd5b6001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60075481565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6108c5610e71565b73ffffffffffffffffffffffffffffffffffffffff166108e3610945565b73ffffffffffffffffffffffffffffffffffffffff1614610939576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093090611d50565b60405180910390fd5b610943600061162a565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606005805461097d90611fbf565b80601f01602080910402602001604051908101604052809291908181526020018280546109a990611fbf565b80156109f65780601f106109cb576101008083540402835291602001916109f6565b820191906000526020600020905b8154815290600101906020018083116109d957829003601f168201915b5050505050905090565b60065481565b610a0e610e71565b73ffffffffffffffffffffffffffffffffffffffff16610a2c610945565b73ffffffffffffffffffffffffffffffffffffffff1614610a82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7990611d50565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060026000610ad5610e71565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610b92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8990611db0565b60405180910390fd5b610bb6610b9d610e71565b85610bb186856116ee90919063ffffffff16565b610e79565b600191505092915050565b6000610bd5610bce610e71565b8484611044565b6001905092915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610c94610e71565b73ffffffffffffffffffffffffffffffffffffffff16610cb2610945565b73ffffffffffffffffffffffffffffffffffffffff1614610d08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cff90611d50565b60405180910390fd5b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610d6b610e71565b73ffffffffffffffffffffffffffffffffffffffff16610d89610945565b73ffffffffffffffffffffffffffffffffffffffff1614610ddf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd690611d50565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4690611cd0565b60405180910390fd5b610e588161162a565b50565b60008183610e699190611e22565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee090611d90565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5090611cf0565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516110379190611dd0565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156110b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ab90611d70565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611124576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111b90611cb0565b60405180910390fd5b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156111ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a290611d10565b60405180910390fd5b6111be82826116ee90919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600060065411801561125d5750600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561140657600061128d61271061127f6006548661170490919063ffffffff16565b61171a90919063ffffffff16565b90506113038160016000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e5b90919063ffffffff16565b60016000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516113e79190611dd0565b60405180910390a361140281846116ee90919063ffffffff16565b9250505b60006007541180156114625750600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561152a5760006114926127106114846007548661170490919063ffffffff16565b61171a90919063ffffffff16565b905080600360008282546114a69190611f03565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161150b9190611dd0565b60405180910390a361152681846116ee90919063ffffffff16565b9250505b61157c82600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e5b90919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161161c9190611dd0565b60405180910390a350505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081836116fc9190611f03565b905092915050565b600081836117129190611ea9565b905092915050565b600081836117289190611e78565b905092915050565b60008135905061173f8161208f565b92915050565b600081359050611754816120a6565b92915050565b60006020828403121561176c57600080fd5b600061177a84828501611730565b91505092915050565b6000806040838503121561179657600080fd5b60006117a485828601611730565b92505060206117b585828601611730565b9150509250929050565b6000806000606084860312156117d457600080fd5b60006117e286828701611730565b93505060206117f386828701611730565b925050604061180486828701611745565b9150509250925092565b6000806040838503121561182157600080fd5b600061182f85828601611730565b925050602061184085828601611745565b9150509250929050565b60006020828403121561185c57600080fd5b600061186a84828501611745565b91505092915050565b61187c81611f37565b82525050565b61188b81611f49565b82525050565b600061189c82611e06565b6118a68185611e11565b93506118b6818560208601611f8c565b6118bf8161207e565b840191505092915050565b60006118d7602383611e11565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061193d602683611e11565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006119a3602283611e11565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611a09602683611e11565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206260008301527f616c616e636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611a6f602883611e11565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206160008301527f6c6c6f77616e63650000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611ad5602083611e11565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000611b15602583611e11565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611b7b602483611e11565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611be1602583611e11565b91507f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008301527f207a65726f0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b611c4381611f75565b82525050565b611c5281611f7f565b82525050565b6000602082019050611c6d6000830184611873565b92915050565b6000602082019050611c886000830184611882565b92915050565b60006020820190508181036000830152611ca88184611891565b905092915050565b60006020820190508181036000830152611cc9816118ca565b9050919050565b60006020820190508181036000830152611ce981611930565b9050919050565b60006020820190508181036000830152611d0981611996565b9050919050565b60006020820190508181036000830152611d29816119fc565b9050919050565b60006020820190508181036000830152611d4981611a62565b9050919050565b60006020820190508181036000830152611d6981611ac8565b9050919050565b60006020820190508181036000830152611d8981611b08565b9050919050565b60006020820190508181036000830152611da981611b6e565b9050919050565b60006020820190508181036000830152611dc981611bd4565b9050919050565b6000602082019050611de56000830184611c3a565b92915050565b6000602082019050611e006000830184611c49565b92915050565b600081519050919050565b600082825260208201905092915050565b6000611e2d82611f75565b9150611e3883611f75565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611e6d57611e6c611ff1565b5b828201905092915050565b6000611e8382611f75565b9150611e8e83611f75565b925082611e9e57611e9d612020565b5b828204905092915050565b6000611eb482611f75565b9150611ebf83611f75565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611ef857611ef7611ff1565b5b828202905092915050565b6000611f0e82611f75565b9150611f1983611f75565b925082821015611f2c57611f2b611ff1565b5b828203905092915050565b6000611f4282611f55565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015611faa578082015181840152602081019050611f8f565b83811115611fb9576000848401525b50505050565b60006002820490506001821680611fd757607f821691505b60208210811415611feb57611fea61204f565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b61209881611f37565b81146120a357600080fd5b50565b6120af81611f75565b81146120ba57600080fd5b5056fea264697066735822122092eeeeb2b072f1394eff53e78b43052439d873f2984ab4561d868139a9f683e264736f6c63430008000033