ETH Price: $2,456.17 (-1.27%)

Token

 

Overview

Max Total Supply

232

Holders

211

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
0xAcCD0aD375867C121ef4AE99003f582b8c084Cf3
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:
WTPUniques

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 10000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-01-19
*/

/**
 *Submitted for verification at Etherscan.io on 2021-12-10
*/

// SPDX-License-Identifier: MIT
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) {
        return msg.data;
    }
}

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _setOwner(_msgSender());
    }

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

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

    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

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

library Address {

    function isContract(address account) internal view returns (bool) {

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

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

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

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

interface IERC165 {

    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

abstract contract ERC165 is IERC165 {
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

interface IERC1155Receiver is IERC165 {

    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}

interface IERC1155 is IERC165 {

    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );

    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    event URI(string value, uint256 indexed id);

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

    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
        external
        view
        returns (uint256[] memory);

    function setApprovalForAll(address operator, bool approved) external;

    function isApprovedForAll(address account, address operator) external view returns (bool);

    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;

    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}

interface IERC1155MetadataURI is IERC1155 {

    function uri(uint256 id) external view returns (string memory);
}

contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
    using Address for address;

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

    mapping(address => mapping(address => bool)) private _operatorApprovals;

    string private _uri;

    constructor(string memory uri_) {
        _setURI(uri_);
    }

    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC1155).interfaceId ||
            interfaceId == type(IERC1155MetadataURI).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    function uri(uint256) public view virtual override returns (string memory) {
        return _uri;
    }

    function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {
        require(account != address(0), "ERC1155: balance query for the zero address");
        return _balances[id][account];
    }

    function balanceOfBatch(address[] memory accounts, uint256[] memory ids)
        public
        view
        virtual
        override
        returns (uint256[] memory)
    {
        require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch");

        uint256[] memory batchBalances = new uint256[](accounts.length);

        for (uint256 i = 0; i < accounts.length; ++i) {
            batchBalances[i] = balanceOf(accounts[i], ids[i]);
        }

        return batchBalances;
    }

    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

    function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[account][operator];
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not an owner nor approved"
        );
        _safeTransferFrom(from, to, id, amount, data);
    }

    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: transfer caller is not an owner nor approved"
        );
        _safeBatchTransferFrom(from, to, ids, amounts, data);
    }

    function _safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }
        _balances[id][to] += amount;

        emit TransferSingle(operator, from, to, id, amount);

        _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);
    }

    function _safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; ++i) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
            _balances[id][to] += amount;
        }

        emit TransferBatch(operator, from, to, ids, amounts);

        _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);
    }

    function _setURI(string memory newuri) internal virtual {
        _uri = newuri;
    }

    function _mint(
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, _asSingletonArray(id), _asSingletonArray(amount), data);

        _balances[id][to] += amount;
        emit TransferSingle(operator, address(0), to, id, amount);

        _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data);
    }

    function _mintBatch(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; i++) {
            _balances[ids[i]][to] += amounts[i];
        }

        emit TransferBatch(operator, address(0), to, ids, amounts);

        _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);
    }

    function _burn(
        address from,
        uint256 id,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, address(0), _asSingletonArray(id), _asSingletonArray(amount), "");

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }

        emit TransferSingle(operator, from, address(0), id, amount);
    }

    function _burnBatch(
        address from,
        uint256[] memory ids,
        uint256[] memory amounts
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, address(0), ids, amounts, "");

        for (uint256 i = 0; i < ids.length; i++) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
        }

        emit TransferBatch(operator, from, address(0), ids, amounts);
    }

    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC1155: setting approval status for self");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    function _doSafeTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {
                if (response != IERC1155Receiver.onERC1155Received.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _doSafeBatchTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (
                bytes4 response
            ) {
                if (response != IERC1155Receiver.onERC1155BatchReceived.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {
        uint256[] memory array = new uint256[](1);
        array[0] = element;

        return array;
    }
}

contract WTPUniques is ERC1155, Ownable {

    uint constant MAX_WTPUniques = 100;
    struct WTPUnique{
        uint common_price;
        uint holders_price;
        uint max_supply;
        uint total_supply;
        string uri;
        bool active;
    }
    mapping (uint => WTPUnique) private wtpuniques;

    WTP public constant WTPCONTRACT = WTP(0x901C0be93A24a3c5e2A6C8b542Cc196B468A7669);

    constructor() ERC1155("") {
        
    }

    function addWTPUnique(uint _id, uint _common_price, uint _holders_price, uint _max_supply, string memory _uri) public onlyOwner {
        require(_id < MAX_WTPUniques, "Quantity limit reached");
        require(getMaxSupply(_id) == 0, "Token is already exist");
        wtpuniques[_id].common_price = _common_price;
        wtpuniques[_id].holders_price = _holders_price;
        wtpuniques[_id].max_supply = _max_supply;
        wtpuniques[_id].uri = _uri;
    }

    function active(uint _id, bool _active) public onlyOwner {
        require(getMaxSupply(_id) != 0, "Token does not exist");
        wtpuniques[_id].active = _active;
    }

    function getPrice(uint _id, address _to) public view returns(uint256){
        require(getMaxSupply(_id) != 0, "Token does not exist");
        uint256 _price;
        if (WTPCONTRACT.balanceOf(_to) != 0){
            _price = wtpuniques[_id].holders_price;
        } else {
            _price = wtpuniques[_id].common_price;
        }
        return _price;
    }

    function getMaxSupply(uint _id) public view returns(uint256){
        return wtpuniques[_id].max_supply;
    }

    function getTotalSupply(uint _id) public view returns(uint256){
        require(getMaxSupply(_id) != 0, "Token does not exist");
        return wtpuniques[_id].total_supply;
    }

    function isActive(uint _id) public view returns(bool){
        require(getMaxSupply(_id) != 0, "Token does not exist");
        return wtpuniques[_id].active;
    }

    function mint(address _to, uint _count, uint _id) public payable {
        require(getTotalSupply(_id) + _count <= getMaxSupply(_id), "Total supply limit reached or token does not exist");
        if (msg.sender != owner()){
            require(isActive(_id), "Sale has not started");
            require(balanceOf(_to, _id) == 0, "Address already hold this token");
            require(_count == 1, "Max 1 token");
            require(msg.value == getPrice(_id, _to) * _count, "the Value is lower then the Price");
        }
        _mint(_to, _id, _count, "");
        wtpuniques[_id].total_supply += _count;
    }

    function uri(uint256 _id) public view virtual override returns (string memory) {
        return wtpuniques[_id].uri;
    }

    function withdrawAll() public payable onlyOwner {
        require(payable(msg.sender).send(address(this).balance));
    }

}

interface WTP{
    function balanceOf(address owner) external view returns (uint256 balance);
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","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":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[],"name":"WTPCONTRACT","outputs":[{"internalType":"contract WTP","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"bool","name":"_active","type":"bool"}],"name":"active","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_common_price","type":"uint256"},{"internalType":"uint256","name":"_holders_price","type":"uint256"},{"internalType":"uint256","name":"_max_supply","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"}],"name":"addWTPUnique","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"getMaxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"address","name":"_to","type":"address"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"getTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"isActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_count","type":"uint256"},{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","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":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"}]

60806040523480156200001157600080fd5b506040805160208101909152600081526200002c816200003e565b50620000383362000057565b6200018c565b805162000053906002906020840190620000a9565b5050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620000b7906200014f565b90600052602060002090601f016020900481019282620000db576000855562000126565b82601f10620000f657805160ff191683800117855562000126565b8280016001018555821562000126579182015b828111156200012657825182559160200191906001019062000109565b506200013492915062000138565b5090565b5b8082111562000134576000815560010162000139565b600181811c908216806200016457607f821691505b602082108114156200018657634e487b7160e01b600052602260045260246000fd5b50919050565b6128f4806200019c6000396000f3fe60806040526004361061015e5760003560e01c806382afd23b116100c0578063b1a9a3ae11610074578063e985e9c511610059578063e985e9c5146103d6578063f242432a1461042c578063f2fde38b1461044c57600080fd5b8063b1a9a3ae1461038e578063daa2a435146103b657600080fd5b80638da5cb5b116100a55780638da5cb5b1461030257806392ab723e1461034e578063a22cb4651461036e57600080fd5b806382afd23b146102da578063853828b6146102fa57600080fd5b80632b57cfbb116101175780634e1273f4116100fc5780634e1273f4146102685780635e495d7414610295578063715018a6146102c557600080fd5b80632b57cfbb146102285780632eb2c2d61461024857600080fd5b80630e89341c116101485780630e89341c146101c6578063156e29f6146101f357806320a81d9b1461020857600080fd5b8062fdd58e1461016357806301ffc9a714610196575b600080fd5b34801561016f57600080fd5b5061018361017e3660046121ee565b61046c565b6040519081526020015b60405180910390f35b3480156101a257600080fd5b506101b66101b136600461231c565b61052f565b604051901515815260200161018d565b3480156101d257600080fd5b506101e66101e1366004612356565b610614565b60405161018d91906125db565b610206610201366004612218565b6106bc565b005b34801561021457600080fd5b506102066102233660046123ce565b610940565b34801561023457600080fd5b50610183610243366004612388565b610a94565b34801561025457600080fd5b506102066102633660046120b5565b610bdb565b34801561027457600080fd5b5061028861028336600461224b565b610c8a565b60405161018d919061259a565b3480156102a157600080fd5b506101836102b0366004612356565b60009081526004602052604090206002015490565b3480156102d157600080fd5b50610206610dc8565b3480156102e657600080fd5b506101b66102f5366004612356565b610e3b565b610206610eb2565b34801561030e57600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161018d565b34801561035a57600080fd5b50610183610369366004612356565b610f3d565b34801561037a57600080fd5b506102066103893660046121c4565b610fb1565b34801561039a57600080fd5b5061032973901c0be93a24a3c5e2a6c8b542cc196b468a766981565b3480156103c257600080fd5b506102066103d13660046123ab565b610fc0565b3480156103e257600080fd5b506101b66103f1366004612082565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205460ff1690565b34801561043857600080fd5b5061020661044736600461215f565b6110c6565b34801561045857600080fd5b50610206610467366004612067565b61116e565b600073ffffffffffffffffffffffffffffffffffffffff83166104fc5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201527f65726f206164647265737300000000000000000000000000000000000000000060648201526084015b60405180910390fd5b5060009081526020818152604080832073ffffffffffffffffffffffffffffffffffffffff949094168352929052205490565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fd9b67a260000000000000000000000000000000000000000000000000000000014806105c257507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e89341c00000000000000000000000000000000000000000000000000000000145b8061060e57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b606060046000838152602001908152602001600020600401805461063790612667565b80601f016020809104026020016040519081016040528092919081815260200182805461066390612667565b80156106b05780601f10610685576101008083540402835291602001916106b0565b820191906000526020600020905b81548152906001019060200180831161069357829003601f168201915b50505050509050919050565b600081815260046020526040902060020154826106d883610f3d565b6106e29190612612565b11156107565760405162461bcd60e51b815260206004820152603260248201527f546f74616c20737570706c79206c696d69742072656163686564206f7220746f60448201527f6b656e20646f6573206e6f74206578697374000000000000000000000000000060648201526084016104f3565b60035473ffffffffffffffffffffffffffffffffffffffff1633146108fa5761077e81610e3b565b6107ca5760405162461bcd60e51b815260206004820152601460248201527f53616c6520686173206e6f74207374617274656400000000000000000000000060448201526064016104f3565b6107d4838261046c565b156108215760405162461bcd60e51b815260206004820152601f60248201527f4164647265737320616c726561647920686f6c64207468697320746f6b656e0060448201526064016104f3565b816001146108715760405162461bcd60e51b815260206004820152600b60248201527f4d6178203120746f6b656e00000000000000000000000000000000000000000060448201526064016104f3565b8161087c8285610a94565b610886919061262a565b34146108fa5760405162461bcd60e51b815260206004820152602160248201527f7468652056616c7565206973206c6f776572207468656e20746865205072696360448201527f650000000000000000000000000000000000000000000000000000000000000060648201526084016104f3565b6109158382846040518060200160405280600081525061126a565b60008181526004602052604081206003018054849290610936908490612612565b9091555050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633146109a75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104f3565b606485106109f75760405162461bcd60e51b815260206004820152601660248201527f5175616e74697479206c696d697420726561636865640000000000000000000060448201526064016104f3565b60008581526004602052604090206002015415610a565760405162461bcd60e51b815260206004820152601660248201527f546f6b656e20697320616c72656164792065786973740000000000000000000060448201526064016104f3565b600085815260046020818152604090922086815560018101869055600281018590558351610a8c93919092019190840190611e82565b505050505050565b600082815260046020526040812060020154610af25760405162461bcd60e51b815260206004820152601460248201527f546f6b656e20646f6573206e6f7420657869737400000000000000000000000060448201526064016104f3565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316600482015260009073901c0be93a24a3c5e2a6c8b542cc196b468a7669906370a082319060240160206040518083038186803b158015610b6e57600080fd5b505afa158015610b82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba6919061236f565b15610bc35750600083815260046020526040902060010154610bd4565b506000838152600460205260409020545b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8516331480610c045750610c0485336103f1565b610c765760405162461bcd60e51b815260206004820152603560248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f742060448201527f616e206f776e6572206e6f7220617070726f766564000000000000000000000060648201526084016104f3565b610c8385858585856113b7565b5050505050565b60608151835114610d035760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e67746860448201527f206d69736d61746368000000000000000000000000000000000000000000000060648201526084016104f3565b6000835167ffffffffffffffff811115610d1f57610d1f61279d565b604051908082528060200260200182016040528015610d48578160200160208202803683370190505b50905060005b8451811015610dc057610d93858281518110610d6c57610d6c61276e565b6020026020010151858381518110610d8657610d8661276e565b602002602001015161046c565b828281518110610da557610da561276e565b6020908102919091010152610db981612706565b9050610d4e565b509392505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314610e2f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104f3565b610e39600061169b565b565b600081815260046020526040812060020154610e995760405162461bcd60e51b815260206004820152601460248201527f546f6b656e20646f6573206e6f7420657869737400000000000000000000000060448201526064016104f3565b5060009081526004602052604090206005015460ff1690565b60035473ffffffffffffffffffffffffffffffffffffffff163314610f195760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104f3565b60405133904780156108fc02916000818181858888f19350505050610e3957600080fd5b600081815260046020526040812060020154610f9b5760405162461bcd60e51b815260206004820152601460248201527f546f6b656e20646f6573206e6f7420657869737400000000000000000000000060448201526064016104f3565b5060009081526004602052604090206003015490565b610fbc338383611712565b5050565b60035473ffffffffffffffffffffffffffffffffffffffff1633146110275760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104f3565b6000828152600460205260409020600201546110855760405162461bcd60e51b815260206004820152601460248201527f546f6b656e20646f6573206e6f7420657869737400000000000000000000000060448201526064016104f3565b60009182526004602052604090912060050180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b73ffffffffffffffffffffffffffffffffffffffff85163314806110ef57506110ef85336103f1565b6111615760405162461bcd60e51b815260206004820152602c60248201527f455243313135353a2063616c6c6572206973206e6f7420616e206f776e65722060448201527f6e6f7220617070726f766564000000000000000000000000000000000000000060648201526084016104f3565b610c83858585858561184c565b60035473ffffffffffffffffffffffffffffffffffffffff1633146111d55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104f3565b73ffffffffffffffffffffffffffffffffffffffff811661125e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016104f3565b6112678161169b565b50565b73ffffffffffffffffffffffffffffffffffffffff84166112f35760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016104f3565b3361130d8160008761130488611a49565b610c8388611a49565b60008481526020818152604080832073ffffffffffffffffffffffffffffffffffffffff891684529091528120805485929061134a908490612612565b9091555050604080518581526020810185905273ffffffffffffffffffffffffffffffffffffffff80881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610c8381600087878787611a94565b815183511461142e5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060448201527f6d69736d6174636800000000000000000000000000000000000000000000000060648201526084016104f3565b73ffffffffffffffffffffffffffffffffffffffff84166114b75760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016104f3565b3360005b845181101561160e5760008582815181106114d8576114d861276e565b6020026020010151905060008583815181106114f6576114f661276e565b6020908102919091018101516000848152808352604080822073ffffffffffffffffffffffffffffffffffffffff8e1683529093529190912054909150818110156115a95760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201527f72207472616e736665720000000000000000000000000000000000000000000060648201526084016104f3565b60008381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8e8116855292528083208585039055908b168252812080548492906115f3908490612612565b925050819055505050508061160790612706565b90506114bb565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516116859291906125ad565b60405180910390a4610a8c818787878787611ce0565b6003805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156117b45760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c2073746174757360448201527f20666f722073656c66000000000000000000000000000000000000000000000060648201526084016104f3565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff84166118d55760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016104f3565b336118e581878761130488611a49565b60008481526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8a168452909152902054838110156119895760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201527f72207472616e736665720000000000000000000000000000000000000000000060648201526084016104f3565b60008581526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8b81168552925280832087850390559088168252812080548692906119d3908490612612565b9091555050604080518681526020810186905273ffffffffffffffffffffffffffffffffffffffff808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611a40828888888888611a94565b50505050505050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611a8357611a8361276e565b602090810291909101015292915050565b73ffffffffffffffffffffffffffffffffffffffff84163b15610a8c576040517ff23a6e6100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063f23a6e6190611b0b908990899088908890889060040161254a565b602060405180830381600087803b158015611b2557600080fd5b505af1925050508015611b73575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611b7091810190612339565b60015b611c2957611b7f6127cc565b806308c379a01415611bb95750611b946127e8565b80611b9f5750611bbb565b8060405162461bcd60e51b81526004016104f391906125db565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e204552433131353560448201527f526563656976657220696d706c656d656e74657200000000000000000000000060648201526084016104f3565b7fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e610000000000000000000000000000000000000000000000000000000014611a405760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a6563746560448201527f6420746f6b656e7300000000000000000000000000000000000000000000000060648201526084016104f3565b73ffffffffffffffffffffffffffffffffffffffff84163b15610a8c576040517fbc197c8100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063bc197c8190611d5790899089908890889088906004016124df565b602060405180830381600087803b158015611d7157600080fd5b505af1925050508015611dbf575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611dbc91810190612339565b60015b611dcb57611b7f6127cc565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fbc197c810000000000000000000000000000000000000000000000000000000014611a405760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a6563746560448201527f6420746f6b656e7300000000000000000000000000000000000000000000000060648201526084016104f3565b828054611e8e90612667565b90600052602060002090601f016020900481019282611eb05760008555611ef6565b82601f10611ec957805160ff1916838001178555611ef6565b82800160010185558215611ef6579182015b82811115611ef6578251825591602001919060010190611edb565b50611f02929150611f06565b5090565b5b80821115611f025760008155600101611f07565b600067ffffffffffffffff831115611f3557611f3561279d565b604051611f6a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f87011601826126bb565b809150838152848484011115611f7f57600080fd5b83836020830137600060208583010152509392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611fbb57600080fd5b919050565b600082601f830112611fd157600080fd5b81356020611fde826125ee565b604051611feb82826126bb565b8381528281019150858301600585901b8701840188101561200b57600080fd5b60005b8581101561202a5781358452928401929084019060010161200e565b5090979650505050505050565b80358015158114611fbb57600080fd5b600082601f83011261205857600080fd5b610bd483833560208501611f1b565b60006020828403121561207957600080fd5b610bd482611f97565b6000806040838503121561209557600080fd5b61209e83611f97565b91506120ac60208401611f97565b90509250929050565b600080600080600060a086880312156120cd57600080fd5b6120d686611f97565b94506120e460208701611f97565b9350604086013567ffffffffffffffff8082111561210157600080fd5b61210d89838a01611fc0565b9450606088013591508082111561212357600080fd5b61212f89838a01611fc0565b9350608088013591508082111561214557600080fd5b5061215288828901612047565b9150509295509295909350565b600080600080600060a0868803121561217757600080fd5b61218086611f97565b945061218e60208701611f97565b93506040860135925060608601359150608086013567ffffffffffffffff8111156121b857600080fd5b61215288828901612047565b600080604083850312156121d757600080fd5b6121e083611f97565b91506120ac60208401612037565b6000806040838503121561220157600080fd5b61220a83611f97565b946020939093013593505050565b60008060006060848603121561222d57600080fd5b61223684611f97565b95602085013595506040909401359392505050565b6000806040838503121561225e57600080fd5b823567ffffffffffffffff8082111561227657600080fd5b818501915085601f83011261228a57600080fd5b81356020612297826125ee565b6040516122a482826126bb565b8381528281019150858301600585901b870184018b10156122c457600080fd5b600096505b848710156122ee576122da81611f97565b8352600196909601959183019183016122c9565b509650508601359250508082111561230557600080fd5b5061231285828601611fc0565b9150509250929050565b60006020828403121561232e57600080fd5b8135610bd481612890565b60006020828403121561234b57600080fd5b8151610bd481612890565b60006020828403121561236857600080fd5b5035919050565b60006020828403121561238157600080fd5b5051919050565b6000806040838503121561239b57600080fd5b823591506120ac60208401611f97565b600080604083850312156123be57600080fd5b823591506120ac60208401612037565b600080600080600060a086880312156123e657600080fd5b85359450602086013593506040860135925060608601359150608086013567ffffffffffffffff81111561241957600080fd5b8601601f8101881361242a57600080fd5b61215288823560208401611f1b565b600081518084526020808501945080840160005b838110156124695781518752958201959082019060010161244d565b509495945050505050565b6000815180845260005b8181101561249a5760208185018101518683018201520161247e565b818111156124ac576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525060a0604083015261251860a0830186612439565b828103606084015261252a8186612439565b9050828103608084015261253e8185612474565b98975050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525084604083015283606083015260a0608083015261258f60a0830184612474565b979650505050505050565b602081526000610bd46020830184612439565b6040815260006125c06040830185612439565b82810360208401526125d28185612439565b95945050505050565b602081526000610bd46020830184612474565b600067ffffffffffffffff8211156126085761260861279d565b5060051b60200190565b600082198211156126255761262561273f565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156126625761266261273f565b500290565b600181811c9082168061267b57607f821691505b602082108114156126b5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116810181811067ffffffffffffffff821117156126ff576126ff61279d565b6040525050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156127385761273861273f565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156127e55760046000803e5060005160e01c5b90565b600060443d10156127f65790565b6040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc803d016004833e81513d67ffffffffffffffff816024840111818411171561284457505050505090565b828501915081518181111561285c5750505050505090565b843d87010160208285010111156128765750505050505090565b612885602082860101876126bb565b509095945050505050565b7fffffffff000000000000000000000000000000000000000000000000000000008116811461126757600080fdfea2646970667358221220b83e55c8043eb5a050692ccc90c3762a093013782114766c0377c91b3e8b768f64736f6c63430008070033

Deployed Bytecode

0x60806040526004361061015e5760003560e01c806382afd23b116100c0578063b1a9a3ae11610074578063e985e9c511610059578063e985e9c5146103d6578063f242432a1461042c578063f2fde38b1461044c57600080fd5b8063b1a9a3ae1461038e578063daa2a435146103b657600080fd5b80638da5cb5b116100a55780638da5cb5b1461030257806392ab723e1461034e578063a22cb4651461036e57600080fd5b806382afd23b146102da578063853828b6146102fa57600080fd5b80632b57cfbb116101175780634e1273f4116100fc5780634e1273f4146102685780635e495d7414610295578063715018a6146102c557600080fd5b80632b57cfbb146102285780632eb2c2d61461024857600080fd5b80630e89341c116101485780630e89341c146101c6578063156e29f6146101f357806320a81d9b1461020857600080fd5b8062fdd58e1461016357806301ffc9a714610196575b600080fd5b34801561016f57600080fd5b5061018361017e3660046121ee565b61046c565b6040519081526020015b60405180910390f35b3480156101a257600080fd5b506101b66101b136600461231c565b61052f565b604051901515815260200161018d565b3480156101d257600080fd5b506101e66101e1366004612356565b610614565b60405161018d91906125db565b610206610201366004612218565b6106bc565b005b34801561021457600080fd5b506102066102233660046123ce565b610940565b34801561023457600080fd5b50610183610243366004612388565b610a94565b34801561025457600080fd5b506102066102633660046120b5565b610bdb565b34801561027457600080fd5b5061028861028336600461224b565b610c8a565b60405161018d919061259a565b3480156102a157600080fd5b506101836102b0366004612356565b60009081526004602052604090206002015490565b3480156102d157600080fd5b50610206610dc8565b3480156102e657600080fd5b506101b66102f5366004612356565b610e3b565b610206610eb2565b34801561030e57600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161018d565b34801561035a57600080fd5b50610183610369366004612356565b610f3d565b34801561037a57600080fd5b506102066103893660046121c4565b610fb1565b34801561039a57600080fd5b5061032973901c0be93a24a3c5e2a6c8b542cc196b468a766981565b3480156103c257600080fd5b506102066103d13660046123ab565b610fc0565b3480156103e257600080fd5b506101b66103f1366004612082565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205460ff1690565b34801561043857600080fd5b5061020661044736600461215f565b6110c6565b34801561045857600080fd5b50610206610467366004612067565b61116e565b600073ffffffffffffffffffffffffffffffffffffffff83166104fc5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201527f65726f206164647265737300000000000000000000000000000000000000000060648201526084015b60405180910390fd5b5060009081526020818152604080832073ffffffffffffffffffffffffffffffffffffffff949094168352929052205490565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fd9b67a260000000000000000000000000000000000000000000000000000000014806105c257507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e89341c00000000000000000000000000000000000000000000000000000000145b8061060e57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b606060046000838152602001908152602001600020600401805461063790612667565b80601f016020809104026020016040519081016040528092919081815260200182805461066390612667565b80156106b05780601f10610685576101008083540402835291602001916106b0565b820191906000526020600020905b81548152906001019060200180831161069357829003601f168201915b50505050509050919050565b600081815260046020526040902060020154826106d883610f3d565b6106e29190612612565b11156107565760405162461bcd60e51b815260206004820152603260248201527f546f74616c20737570706c79206c696d69742072656163686564206f7220746f60448201527f6b656e20646f6573206e6f74206578697374000000000000000000000000000060648201526084016104f3565b60035473ffffffffffffffffffffffffffffffffffffffff1633146108fa5761077e81610e3b565b6107ca5760405162461bcd60e51b815260206004820152601460248201527f53616c6520686173206e6f74207374617274656400000000000000000000000060448201526064016104f3565b6107d4838261046c565b156108215760405162461bcd60e51b815260206004820152601f60248201527f4164647265737320616c726561647920686f6c64207468697320746f6b656e0060448201526064016104f3565b816001146108715760405162461bcd60e51b815260206004820152600b60248201527f4d6178203120746f6b656e00000000000000000000000000000000000000000060448201526064016104f3565b8161087c8285610a94565b610886919061262a565b34146108fa5760405162461bcd60e51b815260206004820152602160248201527f7468652056616c7565206973206c6f776572207468656e20746865205072696360448201527f650000000000000000000000000000000000000000000000000000000000000060648201526084016104f3565b6109158382846040518060200160405280600081525061126a565b60008181526004602052604081206003018054849290610936908490612612565b9091555050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633146109a75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104f3565b606485106109f75760405162461bcd60e51b815260206004820152601660248201527f5175616e74697479206c696d697420726561636865640000000000000000000060448201526064016104f3565b60008581526004602052604090206002015415610a565760405162461bcd60e51b815260206004820152601660248201527f546f6b656e20697320616c72656164792065786973740000000000000000000060448201526064016104f3565b600085815260046020818152604090922086815560018101869055600281018590558351610a8c93919092019190840190611e82565b505050505050565b600082815260046020526040812060020154610af25760405162461bcd60e51b815260206004820152601460248201527f546f6b656e20646f6573206e6f7420657869737400000000000000000000000060448201526064016104f3565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316600482015260009073901c0be93a24a3c5e2a6c8b542cc196b468a7669906370a082319060240160206040518083038186803b158015610b6e57600080fd5b505afa158015610b82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba6919061236f565b15610bc35750600083815260046020526040902060010154610bd4565b506000838152600460205260409020545b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8516331480610c045750610c0485336103f1565b610c765760405162461bcd60e51b815260206004820152603560248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f742060448201527f616e206f776e6572206e6f7220617070726f766564000000000000000000000060648201526084016104f3565b610c8385858585856113b7565b5050505050565b60608151835114610d035760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e67746860448201527f206d69736d61746368000000000000000000000000000000000000000000000060648201526084016104f3565b6000835167ffffffffffffffff811115610d1f57610d1f61279d565b604051908082528060200260200182016040528015610d48578160200160208202803683370190505b50905060005b8451811015610dc057610d93858281518110610d6c57610d6c61276e565b6020026020010151858381518110610d8657610d8661276e565b602002602001015161046c565b828281518110610da557610da561276e565b6020908102919091010152610db981612706565b9050610d4e565b509392505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314610e2f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104f3565b610e39600061169b565b565b600081815260046020526040812060020154610e995760405162461bcd60e51b815260206004820152601460248201527f546f6b656e20646f6573206e6f7420657869737400000000000000000000000060448201526064016104f3565b5060009081526004602052604090206005015460ff1690565b60035473ffffffffffffffffffffffffffffffffffffffff163314610f195760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104f3565b60405133904780156108fc02916000818181858888f19350505050610e3957600080fd5b600081815260046020526040812060020154610f9b5760405162461bcd60e51b815260206004820152601460248201527f546f6b656e20646f6573206e6f7420657869737400000000000000000000000060448201526064016104f3565b5060009081526004602052604090206003015490565b610fbc338383611712565b5050565b60035473ffffffffffffffffffffffffffffffffffffffff1633146110275760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104f3565b6000828152600460205260409020600201546110855760405162461bcd60e51b815260206004820152601460248201527f546f6b656e20646f6573206e6f7420657869737400000000000000000000000060448201526064016104f3565b60009182526004602052604090912060050180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b73ffffffffffffffffffffffffffffffffffffffff85163314806110ef57506110ef85336103f1565b6111615760405162461bcd60e51b815260206004820152602c60248201527f455243313135353a2063616c6c6572206973206e6f7420616e206f776e65722060448201527f6e6f7220617070726f766564000000000000000000000000000000000000000060648201526084016104f3565b610c83858585858561184c565b60035473ffffffffffffffffffffffffffffffffffffffff1633146111d55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104f3565b73ffffffffffffffffffffffffffffffffffffffff811661125e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016104f3565b6112678161169b565b50565b73ffffffffffffffffffffffffffffffffffffffff84166112f35760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016104f3565b3361130d8160008761130488611a49565b610c8388611a49565b60008481526020818152604080832073ffffffffffffffffffffffffffffffffffffffff891684529091528120805485929061134a908490612612565b9091555050604080518581526020810185905273ffffffffffffffffffffffffffffffffffffffff80881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610c8381600087878787611a94565b815183511461142e5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060448201527f6d69736d6174636800000000000000000000000000000000000000000000000060648201526084016104f3565b73ffffffffffffffffffffffffffffffffffffffff84166114b75760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016104f3565b3360005b845181101561160e5760008582815181106114d8576114d861276e565b6020026020010151905060008583815181106114f6576114f661276e565b6020908102919091018101516000848152808352604080822073ffffffffffffffffffffffffffffffffffffffff8e1683529093529190912054909150818110156115a95760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201527f72207472616e736665720000000000000000000000000000000000000000000060648201526084016104f3565b60008381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8e8116855292528083208585039055908b168252812080548492906115f3908490612612565b925050819055505050508061160790612706565b90506114bb565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516116859291906125ad565b60405180910390a4610a8c818787878787611ce0565b6003805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156117b45760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c2073746174757360448201527f20666f722073656c66000000000000000000000000000000000000000000000060648201526084016104f3565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff84166118d55760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016104f3565b336118e581878761130488611a49565b60008481526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8a168452909152902054838110156119895760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201527f72207472616e736665720000000000000000000000000000000000000000000060648201526084016104f3565b60008581526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8b81168552925280832087850390559088168252812080548692906119d3908490612612565b9091555050604080518681526020810186905273ffffffffffffffffffffffffffffffffffffffff808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611a40828888888888611a94565b50505050505050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611a8357611a8361276e565b602090810291909101015292915050565b73ffffffffffffffffffffffffffffffffffffffff84163b15610a8c576040517ff23a6e6100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063f23a6e6190611b0b908990899088908890889060040161254a565b602060405180830381600087803b158015611b2557600080fd5b505af1925050508015611b73575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611b7091810190612339565b60015b611c2957611b7f6127cc565b806308c379a01415611bb95750611b946127e8565b80611b9f5750611bbb565b8060405162461bcd60e51b81526004016104f391906125db565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e204552433131353560448201527f526563656976657220696d706c656d656e74657200000000000000000000000060648201526084016104f3565b7fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e610000000000000000000000000000000000000000000000000000000014611a405760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a6563746560448201527f6420746f6b656e7300000000000000000000000000000000000000000000000060648201526084016104f3565b73ffffffffffffffffffffffffffffffffffffffff84163b15610a8c576040517fbc197c8100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063bc197c8190611d5790899089908890889088906004016124df565b602060405180830381600087803b158015611d7157600080fd5b505af1925050508015611dbf575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611dbc91810190612339565b60015b611dcb57611b7f6127cc565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fbc197c810000000000000000000000000000000000000000000000000000000014611a405760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a6563746560448201527f6420746f6b656e7300000000000000000000000000000000000000000000000060648201526084016104f3565b828054611e8e90612667565b90600052602060002090601f016020900481019282611eb05760008555611ef6565b82601f10611ec957805160ff1916838001178555611ef6565b82800160010185558215611ef6579182015b82811115611ef6578251825591602001919060010190611edb565b50611f02929150611f06565b5090565b5b80821115611f025760008155600101611f07565b600067ffffffffffffffff831115611f3557611f3561279d565b604051611f6a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f87011601826126bb565b809150838152848484011115611f7f57600080fd5b83836020830137600060208583010152509392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611fbb57600080fd5b919050565b600082601f830112611fd157600080fd5b81356020611fde826125ee565b604051611feb82826126bb565b8381528281019150858301600585901b8701840188101561200b57600080fd5b60005b8581101561202a5781358452928401929084019060010161200e565b5090979650505050505050565b80358015158114611fbb57600080fd5b600082601f83011261205857600080fd5b610bd483833560208501611f1b565b60006020828403121561207957600080fd5b610bd482611f97565b6000806040838503121561209557600080fd5b61209e83611f97565b91506120ac60208401611f97565b90509250929050565b600080600080600060a086880312156120cd57600080fd5b6120d686611f97565b94506120e460208701611f97565b9350604086013567ffffffffffffffff8082111561210157600080fd5b61210d89838a01611fc0565b9450606088013591508082111561212357600080fd5b61212f89838a01611fc0565b9350608088013591508082111561214557600080fd5b5061215288828901612047565b9150509295509295909350565b600080600080600060a0868803121561217757600080fd5b61218086611f97565b945061218e60208701611f97565b93506040860135925060608601359150608086013567ffffffffffffffff8111156121b857600080fd5b61215288828901612047565b600080604083850312156121d757600080fd5b6121e083611f97565b91506120ac60208401612037565b6000806040838503121561220157600080fd5b61220a83611f97565b946020939093013593505050565b60008060006060848603121561222d57600080fd5b61223684611f97565b95602085013595506040909401359392505050565b6000806040838503121561225e57600080fd5b823567ffffffffffffffff8082111561227657600080fd5b818501915085601f83011261228a57600080fd5b81356020612297826125ee565b6040516122a482826126bb565b8381528281019150858301600585901b870184018b10156122c457600080fd5b600096505b848710156122ee576122da81611f97565b8352600196909601959183019183016122c9565b509650508601359250508082111561230557600080fd5b5061231285828601611fc0565b9150509250929050565b60006020828403121561232e57600080fd5b8135610bd481612890565b60006020828403121561234b57600080fd5b8151610bd481612890565b60006020828403121561236857600080fd5b5035919050565b60006020828403121561238157600080fd5b5051919050565b6000806040838503121561239b57600080fd5b823591506120ac60208401611f97565b600080604083850312156123be57600080fd5b823591506120ac60208401612037565b600080600080600060a086880312156123e657600080fd5b85359450602086013593506040860135925060608601359150608086013567ffffffffffffffff81111561241957600080fd5b8601601f8101881361242a57600080fd5b61215288823560208401611f1b565b600081518084526020808501945080840160005b838110156124695781518752958201959082019060010161244d565b509495945050505050565b6000815180845260005b8181101561249a5760208185018101518683018201520161247e565b818111156124ac576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525060a0604083015261251860a0830186612439565b828103606084015261252a8186612439565b9050828103608084015261253e8185612474565b98975050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525084604083015283606083015260a0608083015261258f60a0830184612474565b979650505050505050565b602081526000610bd46020830184612439565b6040815260006125c06040830185612439565b82810360208401526125d28185612439565b95945050505050565b602081526000610bd46020830184612474565b600067ffffffffffffffff8211156126085761260861279d565b5060051b60200190565b600082198211156126255761262561273f565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156126625761266261273f565b500290565b600181811c9082168061267b57607f821691505b602082108114156126b5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116810181811067ffffffffffffffff821117156126ff576126ff61279d565b6040525050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156127385761273861273f565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156127e55760046000803e5060005160e01c5b90565b600060443d10156127f65790565b6040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc803d016004833e81513d67ffffffffffffffff816024840111818411171561284457505050505090565b828501915081518181111561285c5750505050505090565b843d87010160208285010111156128765750505050505090565b612885602082860101876126bb565b509095945050505050565b7fffffffff000000000000000000000000000000000000000000000000000000008116811461126757600080fdfea2646970667358221220b83e55c8043eb5a050692ccc90c3762a093013782114766c0377c91b3e8b768f64736f6c63430008070033

Deployed Bytecode Sourcemap

17026:2891:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7824:231;;;;;;;;;;-1:-1:-1;7824:231:0;;;;;:::i;:::-;;:::i;:::-;;;20483:25:1;;;20471:2;20456:18;7824:231:0;;;;;;;;7393:310;;;;;;;;;;-1:-1:-1;7393:310:0;;;;;:::i;:::-;;:::i;:::-;;;11629:14:1;;11622:22;11604:41;;11592:2;11577:18;7393:310:0;11464:187:1;19657:124:0;;;;;;;;;;-1:-1:-1;19657:124:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;19023:626::-;;;;;;:::i;:::-;;:::i;:::-;;17497:470;;;;;;;;;;-1:-1:-1;17497:470:0;;;;;:::i;:::-;;:::i;18157:373::-;;;;;;;;;;-1:-1:-1;18157:373:0;;;;;:::i;:::-;;:::i;9346:445::-;;;;;;;;;;-1:-1:-1;9346:445:0;;;;;:::i;:::-;;:::i;8063:524::-;;;;;;;;;;-1:-1:-1;8063:524:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;18538:112::-;;;;;;;;;;-1:-1:-1;18538:112:0;;;;;:::i;:::-;18590:7;18616:15;;;:10;:15;;;;;:26;;;;18538:112;832:94;;;;;;;;;;;;;:::i;18848:167::-;;;;;;;;;;-1:-1:-1;18848:167:0;;;;;:::i;:::-;;:::i;19789:123::-;;;:::i;609:87::-;;;;;;;;;;-1:-1:-1;682:6:0;;;;609:87;;;9231:42:1;9219:55;;;9201:74;;9189:2;9174:18;609:87:0;9055:226:1;18658:182:0;;;;;;;;;;-1:-1:-1;18658:182:0;;;;;:::i;:::-;;:::i;8595:155::-;;;;;;;;;;-1:-1:-1;8595:155:0;;;;;:::i;:::-;;:::i;17355:81::-;;;;;;;;;;;;17393:42;17355:81;;17975:174;;;;;;;;;;-1:-1:-1;17975:174:0;;;;;:::i;:::-;;:::i;8758:168::-;;;;;;;;;;-1:-1:-1;8758:168:0;;;;;:::i;:::-;8881:27;;;;8857:4;8881:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;8758:168;8934:404;;;;;;;;;;-1:-1:-1;8934:404:0;;;;;:::i;:::-;;:::i;934:192::-;;;;;;;;;;-1:-1:-1;934:192:0;;;;;:::i;:::-;;:::i;7824:231::-;7910:7;7938:21;;;7930:77;;;;-1:-1:-1;;;7930:77:0;;13506:2:1;7930:77:0;;;13488:21:1;13545:2;13525:18;;;13518:30;13584:34;13564:18;;;13557:62;13655:13;13635:18;;;13628:41;13686:19;;7930:77:0;;;;;;;;;-1:-1:-1;8025:9:0;:13;;;;;;;;;;;:22;;;;;;;;;;;;;7824:231::o;7393:310::-;7495:4;7532:41;;;7547:26;7532:41;;:110;;-1:-1:-1;7590:52:0;;;7605:37;7590:52;7532:110;:163;;;-1:-1:-1;5134:25:0;5119:40;;;;7659:36;7512:183;7393:310;-1:-1:-1;;7393:310:0:o;19657:124::-;19721:13;19754:10;:15;19765:3;19754:15;;;;;;;;;;;:19;;19747:26;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19657:124;;;:::o;19023:626::-;18590:7;18616:15;;;:10;:15;;;;;:26;;;19129:6;19107:19;19122:3;19107:14;:19::i;:::-;:28;;;;:::i;:::-;:49;;19099:112;;;;-1:-1:-1;;;19099:112:0;;18140:2:1;19099:112:0;;;18122:21:1;18179:2;18159:18;;;18152:30;18218:34;18198:18;;;18191:62;18289:20;18269:18;;;18262:48;18327:19;;19099:112:0;17938:414:1;19099:112:0;682:6;;;;19226:10;:21;19222:333;;19271:13;19280:3;19271:8;:13::i;:::-;19263:46;;;;-1:-1:-1;;;19263:46:0;;19788:2:1;19263:46:0;;;19770:21:1;19827:2;19807:18;;;19800:30;19866:22;19846:18;;;19839:50;19906:18;;19263:46:0;19586:344:1;19263:46:0;19332:19;19342:3;19347;19332:9;:19::i;:::-;:24;19324:68;;;;-1:-1:-1;;;19324:68:0;;14325:2:1;19324:68:0;;;14307:21:1;14364:2;14344:18;;;14337:30;14403:33;14383:18;;;14376:61;14454:18;;19324:68:0;14123:355:1;19324:68:0;19415:6;19425:1;19415:11;19407:35;;;;-1:-1:-1;;;19407:35:0;;16253:2:1;19407:35:0;;;16235:21:1;16292:2;16272:18;;;16265:30;16331:13;16311:18;;;16304:41;16362:18;;19407:35:0;16051:335:1;19407:35:0;19499:6;19478:18;19487:3;19492;19478:8;:18::i;:::-;:27;;;;:::i;:::-;19465:9;:40;19457:86;;;;-1:-1:-1;;;19457:86:0;;15440:2:1;19457:86:0;;;15422:21:1;15479:2;15459:18;;;15452:30;15518:34;15498:18;;;15491:62;15589:3;15569:18;;;15562:31;15610:19;;19457:86:0;15238:397:1;19457:86:0;19565:27;19571:3;19576;19581:6;19565:27;;;;;;;;;;;;:5;:27::i;:::-;19603:15;;;;:10;:15;;;;;:28;;:38;;19635:6;;19603:15;:38;;19635:6;;19603:38;:::i;:::-;;;;-1:-1:-1;;;;;19023:626:0:o;17497:470::-;682:6;;744:23;682:6;244:10;744:23;736:68;;;;-1:-1:-1;;;736:68:0;;16944:2:1;736:68:0;;;16926:21:1;;;16963:18;;;16956:30;17022:34;17002:18;;;16995:62;17074:18;;736:68:0;16742:356:1;736:68:0;17106:3:::1;17644;:20;17636:55;;;::::0;-1:-1:-1;;;17636:55:0;;16593:2:1;17636:55:0::1;::::0;::::1;16575:21:1::0;16632:2;16612:18;;;16605:30;16671:24;16651:18;;;16644:52;16713:18;;17636:55:0::1;16391:346:1::0;17636:55:0::1;18590:7:::0;18616:15;;;:10;:15;;;;;:26;;;17710:22;17702:57:::1;;;::::0;-1:-1:-1;;;17702:57:0;;13155:2:1;17702:57:0::1;::::0;::::1;13137:21:1::0;13194:2;13174:18;;;13167:30;13233:24;13213:18;;;13206:52;13275:18;;17702:57:0::1;12953:346:1::0;17702:57:0::1;17770:15;::::0;;;:10:::1;:15;::::0;;;;;;;:44;;;17825:29:::1;::::0;::::1;:46:::0;;;17882:26:::1;::::0;::::1;:40:::0;;;17933:26;;::::1;::::0;:19;;;::::1;::::0;:26;;::::1;::::0;::::1;:::i;:::-;;17497:470:::0;;;;;:::o;18157:373::-;18218:7;18616:15;;;:10;:15;;;;;:26;;;18237:55;;;;-1:-1:-1;;;18237:55:0;;14685:2:1;18237:55:0;;;14667:21:1;14724:2;14704:18;;;14697:30;14763:22;14743:18;;;14736:50;14803:18;;18237:55:0;14483:344:1;18237:55:0;18332:26;;;;;9231:42:1;9219:55;;18332:26:0;;;9201:74:1;18303:14:0;;17393:42;;18332:21;;9174:18:1;;18332:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:31;18328:171;;-1:-1:-1;18388:15:0;;;;:10;:15;;;;;:29;;;18328:171;;;-1:-1:-1;18459:15:0;;;;:10;:15;;;;;:28;18328:171;18516:6;18157:373;-1:-1:-1;;;18157:373:0:o;9346:445::-;9579:20;;;244:10;9579:20;;:60;;-1:-1:-1;9603:36:0;9620:4;244:10;8758:168;:::i;9603:36::-;9557:163;;;;-1:-1:-1;;;9557:163:0;;17718:2:1;9557:163:0;;;17700:21:1;17757:2;17737:18;;;17730:30;17796:34;17776:18;;;17769:62;17867:23;17847:18;;;17840:51;17908:19;;9557:163:0;17516:417:1;9557:163:0;9731:52;9754:4;9760:2;9764:3;9769:7;9778:4;9731:22;:52::i;:::-;9346:445;;;;;:::o;8063:524::-;8219:16;8280:3;:10;8261:8;:15;:29;8253:83;;;;-1:-1:-1;;;8253:83:0;;18969:2:1;8253:83:0;;;18951:21:1;19008:2;18988:18;;;18981:30;19047:34;19027:18;;;19020:62;19118:11;19098:18;;;19091:39;19147:19;;8253:83:0;18767:405:1;8253:83:0;8349:30;8396:8;:15;8382:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8382:30:0;;8349:63;;8430:9;8425:122;8449:8;:15;8445:1;:19;8425:122;;;8505:30;8515:8;8524:1;8515:11;;;;;;;;:::i;:::-;;;;;;;8528:3;8532:1;8528:6;;;;;;;;:::i;:::-;;;;;;;8505:9;:30::i;:::-;8486:13;8500:1;8486:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;8466:3;;;:::i;:::-;;;8425:122;;;-1:-1:-1;8566:13:0;8063:524;-1:-1:-1;;;8063:524:0:o;832:94::-;682:6;;744:23;682:6;244:10;744:23;736:68;;;;-1:-1:-1;;;736:68:0;;16944:2:1;736:68:0;;;16926:21:1;;;16963:18;;;16956:30;17022:34;17002:18;;;16995:62;17074:18;;736:68:0;16742:356:1;736:68:0;897:21:::1;915:1;897:9;:21::i;:::-;832:94::o:0;18848:167::-;18896:4;18616:15;;;:10;:15;;;;;:26;;;18912:55;;;;-1:-1:-1;;;18912:55:0;;14685:2:1;18912:55:0;;;14667:21:1;14724:2;14704:18;;;14697:30;14763:22;14743:18;;;14736:50;14803:18;;18912:55:0;14483:344:1;18912:55:0;-1:-1:-1;18985:15:0;;;;:10;:15;;;;;:22;;;;;;18848:167::o;19789:123::-;682:6;;744:23;682:6;244:10;744:23;736:68;;;;-1:-1:-1;;;736:68:0;;16944:2:1;736:68:0;;;16926:21:1;;;16963:18;;;16956:30;17022:34;17002:18;;;16995:62;17074:18;;736:68:0;16742:356:1;736:68:0;19856:47:::1;::::0;19864:10:::1;::::0;19881:21:::1;19856:47:::0;::::1;;;::::0;::::1;::::0;;;19881:21;19864:10;19856:47;::::1;;;;;;19848:56;;;::::0;::::1;18658:182:::0;18712:7;18616:15;;;:10;:15;;;;;:26;;;18731:55;;;;-1:-1:-1;;;18731:55:0;;14685:2:1;18731:55:0;;;14667:21:1;14724:2;14704:18;;;14697:30;14763:22;14743:18;;;14736:50;14803:18;;18731:55:0;14483:344:1;18731:55:0;-1:-1:-1;18804:15:0;;;;:10;:15;;;;;:28;;;;18658:182::o;8595:155::-;8690:52;244:10;8723:8;8733;8690:18;:52::i;:::-;8595:155;;:::o;17975:174::-;682:6;;744:23;682:6;244:10;744:23;736:68;;;;-1:-1:-1;;;736:68:0;;16944:2:1;736:68:0;;;16926:21:1;;;16963:18;;;16956:30;17022:34;17002:18;;;16995:62;17074:18;;736:68:0;16742:356:1;736:68:0;18590:7;18616:15;;;:10;:15;;;;;:26;;;18043:55:::1;;;::::0;-1:-1:-1;;;18043:55:0;;14685:2:1;18043:55:0::1;::::0;::::1;14667:21:1::0;14724:2;14704:18;;;14697:30;14763:22;14743:18;;;14736:50;14803:18;;18043:55:0::1;14483:344:1::0;18043:55:0::1;18109:15;::::0;;;:10:::1;:15;::::0;;;;;:22:::1;;:32:::0;;;::::1;::::0;::::1;;::::0;;;::::1;::::0;;17975:174::o;8934:404::-;9142:20;;;244:10;9142:20;;:60;;-1:-1:-1;9166:36:0;9183:4;244:10;8758:168;:::i;9166:36::-;9120:154;;;;-1:-1:-1;;;9120:154:0;;17305:2:1;9120:154:0;;;17287:21:1;17344:2;17324:18;;;17317:30;17383:34;17363:18;;;17356:62;17454:14;17434:18;;;17427:42;17486:19;;9120:154:0;17103:408:1;9120:154:0;9285:45;9303:4;9309:2;9313;9317:6;9325:4;9285:17;:45::i;934:192::-;682:6;;744:23;682:6;244:10;744:23;736:68;;;;-1:-1:-1;;;736:68:0;;16944:2:1;736:68:0;;;16926:21:1;;;16963:18;;;16956:30;17022:34;17002:18;;;16995:62;17074:18;;736:68:0;16742:356:1;736:68:0;1023:22:::1;::::0;::::1;1015:73;;;::::0;-1:-1:-1;;;1015:73:0;;13918:2:1;1015:73:0::1;::::0;::::1;13900:21:1::0;13957:2;13937:18;;;13930:30;13996:34;13976:18;;;13969:62;14067:8;14047:18;;;14040:36;14093:19;;1015:73:0::1;13716:402:1::0;1015:73:0::1;1099:19;1109:8;1099:9;:19::i;:::-;934:192:::0;:::o;11805:569::-;11958:16;;;11950:62;;;;-1:-1:-1;;;11950:62:0;;20137:2:1;11950:62:0;;;20119:21:1;20176:2;20156:18;;;20149:30;20215:34;20195:18;;;20188:62;20286:3;20266:18;;;20259:31;20307:19;;11950:62:0;19935:397:1;11950:62:0;244:10;12069:102;244:10;12025:16;12112:2;12116:21;12134:2;12116:17;:21::i;:::-;12139:25;12157:6;12139:17;:25::i;12069:102::-;12184:9;:13;;;;;;;;;;;:17;;;;;;;;;;:27;;12205:6;;12184:9;:27;;12205:6;;12184:27;:::i;:::-;;;;-1:-1:-1;;12227:52:0;;;20693:25:1;;;20749:2;20734:18;;20727:34;;;12227:52:0;;;;;12260:1;;12227:52;;;;;;20666:18:1;12227:52:0;;;;;;;12292:74;12323:8;12341:1;12345:2;12349;12353:6;12361:4;12292:30;:74::i;10627:1074::-;10854:7;:14;10840:3;:10;:28;10832:81;;;;-1:-1:-1;;;10832:81:0;;19379:2:1;10832:81:0;;;19361:21:1;19418:2;19398:18;;;19391:30;19457:34;19437:18;;;19430:62;19528:10;19508:18;;;19501:38;19556:19;;10832:81:0;19177:404:1;10832:81:0;10932:16;;;10924:66;;;;-1:-1:-1;;;10924:66:0;;15034:2:1;10924:66:0;;;15016:21:1;15073:2;15053:18;;;15046:30;15112:34;15092:18;;;15085:62;15183:7;15163:18;;;15156:35;15208:19;;10924:66:0;14832:401:1;10924:66:0;244:10;11003:16;11120:421;11144:3;:10;11140:1;:14;11120:421;;;11176:10;11189:3;11193:1;11189:6;;;;;;;;:::i;:::-;;;;;;;11176:19;;11210:14;11227:7;11235:1;11227:10;;;;;;;;:::i;:::-;;;;;;;;;;;;11254:19;11276:13;;;;;;;;;;:19;;;;;;;;;;;;;11227:10;;-1:-1:-1;11318:21:0;;;;11310:76;;;;-1:-1:-1;;;11310:76:0;;15842:2:1;11310:76:0;;;15824:21:1;15881:2;15861:18;;;15854:30;15920:34;15900:18;;;15893:62;15991:12;15971:18;;;15964:40;16021:19;;11310:76:0;15640:406:1;11310:76:0;11430:9;:13;;;;;;;;;;;:19;;;;;;;;;;;11452:20;;;11430:42;;11502:17;;;;;;;:27;;11452:20;;11430:9;11502:27;;11452:20;;11502:27;:::i;:::-;;;;;;;;11161:380;;;11156:3;;;;:::i;:::-;;;11120:421;;;;11588:2;11558:47;;11582:4;11558:47;;11572:8;11558:47;;;11592:3;11597:7;11558:47;;;;;;;:::i;:::-;;;;;;;;11618:75;11654:8;11664:4;11670:2;11674:3;11679:7;11688:4;11618:35;:75::i;1134:173::-;1209:6;;;;1226:17;;;;;;;;;;;1259:40;;1209:6;;;1226:17;1209:6;;1259:40;;1190:16;;1259:40;1179:128;1134:173;:::o;14680:331::-;14835:8;14826:17;;:5;:17;;;;14818:71;;;;-1:-1:-1;;;14818:71:0;;18559:2:1;14818:71:0;;;18541:21:1;18598:2;18578:18;;;18571:30;18637:34;18617:18;;;18610:62;18708:11;18688:18;;;18681:39;18737:19;;14818:71:0;18357:405:1;14818:71:0;14900:25;;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;;;;;;;;;;;;14962:41;;11604::1;;;14962::0;;11577:18:1;14962:41:0;;;;;;;14680:331;;;:::o;9799:820::-;9987:16;;;9979:66;;;;-1:-1:-1;;;9979:66:0;;15034:2:1;9979:66:0;;;15016:21:1;15073:2;15053:18;;;15046:30;15112:34;15092:18;;;15085:62;15183:7;15163:18;;;15156:35;15208:19;;9979:66:0;14832:401:1;9979:66:0;244:10;10102:96;244:10;10133:4;10139:2;10143:21;10161:2;10143:17;:21::i;10102:96::-;10211:19;10233:13;;;;;;;;;;;:19;;;;;;;;;;;10271:21;;;;10263:76;;;;-1:-1:-1;;;10263:76:0;;15842:2:1;10263:76:0;;;15824:21:1;15881:2;15861:18;;;15854:30;15920:34;15900:18;;;15893:62;15991:12;15971:18;;;15964:40;16021:19;;10263:76:0;15640:406:1;10263:76:0;10375:9;:13;;;;;;;;;;;:19;;;;;;;;;;;10397:20;;;10375:42;;10439:17;;;;;;;:27;;10397:20;;10375:9;10439:27;;10397:20;;10439:27;:::i;:::-;;;;-1:-1:-1;;10484:46:0;;;20693:25:1;;;20749:2;20734:18;;20727:34;;;10484:46:0;;;;;;;;;;;;;;;20666:18:1;10484:46:0;;;;;;;10543:68;10574:8;10584:4;10590:2;10594;10598:6;10606:4;10543:30;:68::i;:::-;9968:651;;9799:820;;;;;:::o;16821:198::-;16941:16;;;16955:1;16941:16;;;;;;;;;16887;;16916:22;;16941:16;;;;;;;;;;;;-1:-1:-1;16941:16:0;16916:41;;16979:7;16968:5;16974:1;16968:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;17006:5;16821:198;-1:-1:-1;;16821:198:0:o;15248:744::-;15463:13;;;1473:20;1521:8;15459:526;;15499:72;;;;;:38;;;;;;:72;;15538:8;;15548:4;;15554:2;;15558:6;;15566:4;;15499:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15499:72:0;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;15495:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;15847:6;15840:14;;-1:-1:-1;;;15840:14:0;;;;;;;;:::i;15495:479::-;;;15896:62;;-1:-1:-1;;;15896:62:0;;12325:2:1;15896:62:0;;;12307:21:1;12364:2;12344:18;;;12337:30;12403:34;12383:18;;;12376:62;12474:22;12454:18;;;12447:50;12514:19;;15896:62:0;12123:416:1;15495:479:0;15621:55;;;15633:43;15621:55;15617:154;;15701:50;;-1:-1:-1;;;15701:50:0;;12746:2:1;15701:50:0;;;12728:21:1;12785:2;12765:18;;;12758:30;12824:34;12804:18;;;12797:62;12895:10;12875:18;;;12868:38;12923:19;;15701:50:0;12544:404:1;16000:813:0;16240:13;;;1473:20;1521:8;16236:570;;16276:79;;;;;:43;;;;;;:79;;16320:8;;16330:4;;16336:3;;16341:7;;16350:4;;16276:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16276:79:0;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;16272:523;;;;:::i;:::-;16437:60;;;16449:48;16437:60;16433:159;;16522:50;;-1:-1:-1;;;16522:50:0;;12746:2:1;16522:50:0;;;12728:21:1;12785:2;12765:18;;;12758:30;12824:34;12804:18;;;12797:62;12895:10;12875:18;;;12868:38;12923:19;;16522:50:0;12544:404:1;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:527:1;78:5;112:18;104:6;101:30;98:56;;;134:18;;:::i;:::-;183:2;177:9;195:128;317:4;248:66;243:2;235:6;231:15;227:88;223:99;215:6;195:128;:::i;:::-;341:6;332:15;;371:6;363;356:22;411:3;402:6;397:3;393:16;390:25;387:45;;;428:1;425;418:12;387:45;478:6;473:3;466:4;458:6;454:17;441:44;533:1;526:4;517:6;509;505:19;501:30;494:41;;14:527;;;;;:::o;546:196::-;614:20;;674:42;663:54;;653:65;;643:93;;732:1;729;722:12;643:93;546:196;;;:::o;747:735::-;801:5;854:3;847:4;839:6;835:17;831:27;821:55;;872:1;869;862:12;821:55;908:6;895:20;934:4;957:43;997:2;957:43;:::i;:::-;1029:2;1023:9;1041:31;1069:2;1061:6;1041:31;:::i;:::-;1107:18;;;1141:15;;;;-1:-1:-1;1176:15:1;;;1226:1;1222:10;;;1210:23;;1206:32;;1203:41;-1:-1:-1;1200:61:1;;;1257:1;1254;1247:12;1200:61;1279:1;1289:163;1303:2;1300:1;1297:9;1289:163;;;1360:17;;1348:30;;1398:12;;;;1430;;;;1321:1;1314:9;1289:163;;;-1:-1:-1;1470:6:1;;747:735;-1:-1:-1;;;;;;;747:735:1:o;1487:160::-;1552:20;;1608:13;;1601:21;1591:32;;1581:60;;1637:1;1634;1627:12;1652:220;1694:5;1747:3;1740:4;1732:6;1728:17;1724:27;1714:55;;1765:1;1762;1755:12;1714:55;1787:79;1862:3;1853:6;1840:20;1833:4;1825:6;1821:17;1787:79;:::i;1877:186::-;1936:6;1989:2;1977:9;1968:7;1964:23;1960:32;1957:52;;;2005:1;2002;1995:12;1957:52;2028:29;2047:9;2028:29;:::i;2068:260::-;2136:6;2144;2197:2;2185:9;2176:7;2172:23;2168:32;2165:52;;;2213:1;2210;2203:12;2165:52;2236:29;2255:9;2236:29;:::i;:::-;2226:39;;2284:38;2318:2;2307:9;2303:18;2284:38;:::i;:::-;2274:48;;2068:260;;;;;:::o;2333:943::-;2487:6;2495;2503;2511;2519;2572:3;2560:9;2551:7;2547:23;2543:33;2540:53;;;2589:1;2586;2579:12;2540:53;2612:29;2631:9;2612:29;:::i;:::-;2602:39;;2660:38;2694:2;2683:9;2679:18;2660:38;:::i;:::-;2650:48;;2749:2;2738:9;2734:18;2721:32;2772:18;2813:2;2805:6;2802:14;2799:34;;;2829:1;2826;2819:12;2799:34;2852:61;2905:7;2896:6;2885:9;2881:22;2852:61;:::i;:::-;2842:71;;2966:2;2955:9;2951:18;2938:32;2922:48;;2995:2;2985:8;2982:16;2979:36;;;3011:1;3008;3001:12;2979:36;3034:63;3089:7;3078:8;3067:9;3063:24;3034:63;:::i;:::-;3024:73;;3150:3;3139:9;3135:19;3122:33;3106:49;;3180:2;3170:8;3167:16;3164:36;;;3196:1;3193;3186:12;3164:36;;3219:51;3262:7;3251:8;3240:9;3236:24;3219:51;:::i;:::-;3209:61;;;2333:943;;;;;;;;:::o;3281:606::-;3385:6;3393;3401;3409;3417;3470:3;3458:9;3449:7;3445:23;3441:33;3438:53;;;3487:1;3484;3477:12;3438:53;3510:29;3529:9;3510:29;:::i;:::-;3500:39;;3558:38;3592:2;3581:9;3577:18;3558:38;:::i;:::-;3548:48;;3643:2;3632:9;3628:18;3615:32;3605:42;;3694:2;3683:9;3679:18;3666:32;3656:42;;3749:3;3738:9;3734:19;3721:33;3777:18;3769:6;3766:30;3763:50;;;3809:1;3806;3799:12;3763:50;3832:49;3873:7;3864:6;3853:9;3849:22;3832:49;:::i;3892:254::-;3957:6;3965;4018:2;4006:9;3997:7;3993:23;3989:32;3986:52;;;4034:1;4031;4024:12;3986:52;4057:29;4076:9;4057:29;:::i;:::-;4047:39;;4105:35;4136:2;4125:9;4121:18;4105:35;:::i;4151:254::-;4219:6;4227;4280:2;4268:9;4259:7;4255:23;4251:32;4248:52;;;4296:1;4293;4286:12;4248:52;4319:29;4338:9;4319:29;:::i;:::-;4309:39;4395:2;4380:18;;;;4367:32;;-1:-1:-1;;;4151:254:1:o;4410:322::-;4487:6;4495;4503;4556:2;4544:9;4535:7;4531:23;4527:32;4524:52;;;4572:1;4569;4562:12;4524:52;4595:29;4614:9;4595:29;:::i;:::-;4585:39;4671:2;4656:18;;4643:32;;-1:-1:-1;4722:2:1;4707:18;;;4694:32;;4410:322;-1:-1:-1;;;4410:322:1:o;4737:1219::-;4855:6;4863;4916:2;4904:9;4895:7;4891:23;4887:32;4884:52;;;4932:1;4929;4922:12;4884:52;4972:9;4959:23;5001:18;5042:2;5034:6;5031:14;5028:34;;;5058:1;5055;5048:12;5028:34;5096:6;5085:9;5081:22;5071:32;;5141:7;5134:4;5130:2;5126:13;5122:27;5112:55;;5163:1;5160;5153:12;5112:55;5199:2;5186:16;5221:4;5244:43;5284:2;5244:43;:::i;:::-;5316:2;5310:9;5328:31;5356:2;5348:6;5328:31;:::i;:::-;5394:18;;;5428:15;;;;-1:-1:-1;5463:11:1;;;5505:1;5501:10;;;5493:19;;5489:28;;5486:41;-1:-1:-1;5483:61:1;;;5540:1;5537;5530:12;5483:61;5562:1;5553:10;;5572:169;5586:2;5583:1;5580:9;5572:169;;;5643:23;5662:3;5643:23;:::i;:::-;5631:36;;5604:1;5597:9;;;;;5687:12;;;;5719;;5572:169;;;-1:-1:-1;5760:6:1;-1:-1:-1;;5804:18:1;;5791:32;;-1:-1:-1;;5835:16:1;;;5832:36;;;5864:1;5861;5854:12;5832:36;;5887:63;5942:7;5931:8;5920:9;5916:24;5887:63;:::i;:::-;5877:73;;;4737:1219;;;;;:::o;5961:245::-;6019:6;6072:2;6060:9;6051:7;6047:23;6043:32;6040:52;;;6088:1;6085;6078:12;6040:52;6127:9;6114:23;6146:30;6170:5;6146:30;:::i;6211:249::-;6280:6;6333:2;6321:9;6312:7;6308:23;6304:32;6301:52;;;6349:1;6346;6339:12;6301:52;6381:9;6375:16;6400:30;6424:5;6400:30;:::i;6465:180::-;6524:6;6577:2;6565:9;6556:7;6552:23;6548:32;6545:52;;;6593:1;6590;6583:12;6545:52;-1:-1:-1;6616:23:1;;6465:180;-1:-1:-1;6465:180:1:o;6650:184::-;6720:6;6773:2;6761:9;6752:7;6748:23;6744:32;6741:52;;;6789:1;6786;6779:12;6741:52;-1:-1:-1;6812:16:1;;6650:184;-1:-1:-1;6650:184:1:o;6839:254::-;6907:6;6915;6968:2;6956:9;6947:7;6943:23;6939:32;6936:52;;;6984:1;6981;6974:12;6936:52;7020:9;7007:23;6997:33;;7049:38;7083:2;7072:9;7068:18;7049:38;:::i;7098:248::-;7163:6;7171;7224:2;7212:9;7203:7;7199:23;7195:32;7192:52;;;7240:1;7237;7230:12;7192:52;7276:9;7263:23;7253:33;;7305:35;7336:2;7325:9;7321:18;7305:35;:::i;7351:724::-;7456:6;7464;7472;7480;7488;7541:3;7529:9;7520:7;7516:23;7512:33;7509:53;;;7558:1;7555;7548:12;7509:53;7594:9;7581:23;7571:33;;7651:2;7640:9;7636:18;7623:32;7613:42;;7702:2;7691:9;7687:18;7674:32;7664:42;;7753:2;7742:9;7738:18;7725:32;7715:42;;7808:3;7797:9;7793:19;7780:33;7836:18;7828:6;7825:30;7822:50;;;7868:1;7865;7858:12;7822:50;7891:22;;7944:4;7936:13;;7932:27;-1:-1:-1;7922:55:1;;7973:1;7970;7963:12;7922:55;7996:73;8061:7;8056:2;8043:16;8038:2;8034;8030:11;7996:73;:::i;8080:435::-;8133:3;8171:5;8165:12;8198:6;8193:3;8186:19;8224:4;8253:2;8248:3;8244:12;8237:19;;8290:2;8283:5;8279:14;8311:1;8321:169;8335:6;8332:1;8329:13;8321:169;;;8396:13;;8384:26;;8430:12;;;;8465:15;;;;8357:1;8350:9;8321:169;;;-1:-1:-1;8506:3:1;;8080:435;-1:-1:-1;;;;;8080:435:1:o;8520:530::-;8561:3;8599:5;8593:12;8626:6;8621:3;8614:19;8651:1;8661:162;8675:6;8672:1;8669:13;8661:162;;;8737:4;8793:13;;;8789:22;;8783:29;8765:11;;;8761:20;;8754:59;8690:12;8661:162;;;8841:6;8838:1;8835:13;8832:87;;;8907:1;8900:4;8891:6;8886:3;8882:16;8878:27;8871:38;8832:87;-1:-1:-1;8964:2:1;8952:15;8969:66;8948:88;8939:98;;;;9039:4;8935:109;;8520:530;-1:-1:-1;;8520:530:1:o;9286:849::-;9608:4;9637:42;9718:2;9710:6;9706:15;9695:9;9688:34;9770:2;9762:6;9758:15;9753:2;9742:9;9738:18;9731:43;;9810:3;9805:2;9794:9;9790:18;9783:31;9837:57;9889:3;9878:9;9874:19;9866:6;9837:57;:::i;:::-;9942:9;9934:6;9930:22;9925:2;9914:9;9910:18;9903:50;9976:44;10013:6;10005;9976:44;:::i;:::-;9962:58;;10069:9;10061:6;10057:22;10051:3;10040:9;10036:19;10029:51;10097:32;10122:6;10114;10097:32;:::i;:::-;10089:40;9286:849;-1:-1:-1;;;;;;;;9286:849:1:o;10140:583::-;10362:4;10391:42;10472:2;10464:6;10460:15;10449:9;10442:34;10524:2;10516:6;10512:15;10507:2;10496:9;10492:18;10485:43;;10564:6;10559:2;10548:9;10544:18;10537:34;10607:6;10602:2;10591:9;10587:18;10580:34;10651:3;10645;10634:9;10630:19;10623:32;10672:45;10712:3;10701:9;10697:19;10689:6;10672:45;:::i;:::-;10664:53;10140:583;-1:-1:-1;;;;;;;10140:583:1:o;10728:261::-;10907:2;10896:9;10889:21;10870:4;10927:56;10979:2;10968:9;10964:18;10956:6;10927:56;:::i;10994:465::-;11251:2;11240:9;11233:21;11214:4;11277:56;11329:2;11318:9;11314:18;11306:6;11277:56;:::i;:::-;11381:9;11373:6;11369:22;11364:2;11353:9;11349:18;11342:50;11409:44;11446:6;11438;11409:44;:::i;:::-;11401:52;10994:465;-1:-1:-1;;;;;10994:465:1:o;11899:219::-;12048:2;12037:9;12030:21;12011:4;12068:44;12108:2;12097:9;12093:18;12085:6;12068:44;:::i;20772:183::-;20832:4;20865:18;20857:6;20854:30;20851:56;;;20887:18;;:::i;:::-;-1:-1:-1;20932:1:1;20928:14;20944:4;20924:25;;20772:183::o;20960:128::-;21000:3;21031:1;21027:6;21024:1;21021:13;21018:39;;;21037:18;;:::i;:::-;-1:-1:-1;21073:9:1;;20960:128::o;21093:228::-;21133:7;21259:1;21191:66;21187:74;21184:1;21181:81;21176:1;21169:9;21162:17;21158:105;21155:131;;;21266:18;;:::i;:::-;-1:-1:-1;21306:9:1;;21093:228::o;21326:437::-;21405:1;21401:12;;;;21448;;;21469:61;;21523:4;21515:6;21511:17;21501:27;;21469:61;21576:2;21568:6;21565:14;21545:18;21542:38;21539:218;;;21613:77;21610:1;21603:88;21714:4;21711:1;21704:15;21742:4;21739:1;21732:15;21539:218;;21326:437;;;:::o;21768:308::-;21874:66;21869:2;21863:4;21859:13;21855:86;21847:6;21843:99;22008:6;21996:10;21993:22;21972:18;21960:10;21957:34;21954:62;21951:88;;;22019:18;;:::i;:::-;22055:2;22048:22;-1:-1:-1;;21768:308:1:o;22081:195::-;22120:3;22151:66;22144:5;22141:77;22138:103;;;22221:18;;:::i;:::-;-1:-1:-1;22268:1:1;22257:13;;22081:195::o;22281:184::-;22333:77;22330:1;22323:88;22430:4;22427:1;22420:15;22454:4;22451:1;22444:15;22470:184;22522:77;22519:1;22512:88;22619:4;22616:1;22609:15;22643:4;22640:1;22633:15;22659:184;22711:77;22708:1;22701:88;22808:4;22805:1;22798:15;22832:4;22829:1;22822:15;22848:179;22883:3;22925:1;22907:16;22904:23;22901:120;;;22971:1;22968;22965;22950:23;-1:-1:-1;23008:1:1;23002:8;22997:3;22993:18;22901:120;22848:179;:::o;23032:731::-;23071:3;23113:4;23095:16;23092:26;23089:39;;;23032:731;:::o;23089:39::-;23155:2;23149:9;23177:66;23298:2;23280:16;23276:25;23273:1;23267:4;23252:50;23331:4;23325:11;23355:16;23390:18;23461:2;23454:4;23446:6;23442:17;23439:25;23434:2;23426:6;23423:14;23420:45;23417:58;;;23468:5;;;;;23032:731;:::o;23417:58::-;23505:6;23499:4;23495:17;23484:28;;23541:3;23535:10;23568:2;23560:6;23557:14;23554:27;;;23574:5;;;;;;23032:731;:::o;23554:27::-;23658:2;23639:16;23633:4;23629:27;23625:36;23618:4;23609:6;23604:3;23600:16;23596:27;23593:69;23590:82;;;23665:5;;;;;;23032:731;:::o;23590:82::-;23681:57;23732:4;23723:6;23715;23711:19;23707:30;23701:4;23681:57;:::i;:::-;-1:-1:-1;23754:3:1;;23032:731;-1:-1:-1;;;;;23032:731:1:o;23768:177::-;23853:66;23846:5;23842:78;23835:5;23832:89;23822:117;;23935:1;23932;23925:12

Swarm Source

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